Grundkonzepte der objektorientierten Programmierung mit Delphi - PowerPoint PPT Presentation

1 / 69
About This Presentation
Title:

Grundkonzepte der objektorientierten Programmierung mit Delphi

Description:

mit Delphi Helmut Paulus Speyer, 13.05.09 ... (VCL) der Entwicklungsumgebung zur Entwurfszeit zur Verf gung. Komponenten (VCL) Beispiele: TForm1 = class ... – PowerPoint PPT presentation

Number of Views:138
Avg rating:3.0/5.0
Slides: 70
Provided by: MPGT
Category:

less

Transcript and Presenter's Notes

Title: Grundkonzepte der objektorientierten Programmierung mit Delphi


1
Grundkonzepte der objektorientierten
Programmierung mit Delphi
Helmut Paulus Speyer, 13.05.09
2
Problem der Softwareentwicklung
Die Größe und Komplexität der Programme nimmt zu
  • Die Pflege immer aufwändiger
  • Ab einer bestimmten Größe versteht niemand mehr
    das Programm
  • Das Programm kann nicht mehr geändert werden
  • Derzeitige Lösung des Problems
  • Objektorientierte Programmierung
  • Entwurfsmuster für graphische Benutzungsoberfläche
    n
  • u. a. MVC Modell-Ansicht-Steuerung

3
Objekte und Klassen
Statt eines riesigen Programm hat man
  • Objekte
  • Programmbausteine, die bestimmte Aufgaben
    eigenständig lösen
  • Objekte kooperieren miteinander bei der Lösung
    eines komplexen Problems
  • Klassen
  • Baupläne für Objekte
  • Jedes Objekt gehört zu genau einer Klasse
  • Objekte mit gemeinsamen Eigenschaften bilden ein
    Klasse

4
MVC-Entwurfsmuster
Model/View/Controller
Grundlegendes Konzept zum Aufbau von
Benutzerschnittstellen Model das
Anwendungsobjekt View Bildschirmdarstellung des
Anwendungsobjekts Controller nimmt
Benutzereingaben entgegen und modifiziert das
Anwendungsobjekt
views
a 30 b 50 c 20
model
Tastatureingaben
controller
Kennzeichen Trennung von Benutzungsoberfläche
(GUI) und Fachkonzept (Model)
5
MVC-Uhr
  • Aufgabe
  • Eine einfache Uhr mit digitaler Anzeige soll mit
    Hilfe von geeigneten Objekten realisiert werden.
  • Anforderungen
  • Die Uhr soll dabei vorerst noch nicht selbst
    laufen.
  • Die Uhr soll als eigenständiger Baustein, der
    unabhängig von GUI-Objekten ist, entwickelt
    werden.

12 14 04
6
MVC-Architektur
View Ansicht
Model (Daten,Verarbeitung)
Informiert ?
Controller Steuerung
  • View und Controller bilden zusammen die
    Benutzungsoberfläche (GUI).

7
Trennung von GUI und Datenmodell
  • Das bedeutet
  • Das Modell kennt weder View noch Controller. In
    den Datenklassen werden keine View oder
    Controllermethoden aufgerufen!
  • View und Controller kennen das Modell und lesen
    und schreiben die Daten.
  • Zwischen den GUI-Objekten und den MODELL-Objekten
    werden Verbindungen hergestellt, um einen
    Datenaustausch zu ermöglichen.

8
Fragen und Probleme
  • Wie erreicht man die Entkopplung?
  • Wie greifen View und Controller auf die Daten zu?
  • Wie können die Views aktualisiert werden, wenn
    das Modell keinen Zugriff auf sie hat?
  • Wie erfahren die Views, dass sich die Daten des
    Modells geändert haben?

9
Realisierung in Delphi
  • Entkopplung
  • GUI- und Modellklassen in verschiedenen Units
    halten
  • View und Controller in einem Formular (z. B.
    uGUI.pas) unterbringen
  • Modell-Klasse in einer eigenen Unit (z. B.
    uModell.pas) speichern
  • Datenzugriff
  • Die GUI-Klasse erhält eine Referenz auf das
    Modell-Objekt.
  • Der Datenzugriff erfolgt mit Lese- und
    Schreibmethoden, des Modells (z. B.
    setAttribut() bzw. getAttribut()).
  • Aktualisierungsmöglichkeiten
  • Die Views fragen (evtl. permanent) das Modell ab
    (Polling).
  • Die Views werden durch Ereignisse des Modells
    über Datenänderungen informiert und aktualisieren
    sich daraufhin. (Selbstdefinierte Ereignisse)
  • Benachrichtigung mittels Beobachter-Muster
    (Observer-Pattern)

10
Modellierung der Uhr
OO-Analyse
  • Überlegungen zur Objektstruktur
  • Welche Merkmale sind charakteristisch für eine
    Uhr, also allen Uhrentypen gemeinsam?
  • Welche Funktionalitäten gehören zu den
    Basiseigenschaften einer Uhr? Bzw. Welche
    Dienste muss eine Uhr zur Verfügung stellen, um
    ihre Aufgabe zu erfüllen?
  • Lässt sich das Objekt Uhr noch zerlegen?
  • Identifikation von Objekten
  • Zähler für Sekunden und Minuten (modulo 60),
    Zähler für Stunden (modulo 24)
  • Idee Die Klasse TUhr soll Zählerobjekte modulo
    einer vorgebbaren Grenze nutzen können

Ergebnisse der Analyse
11
Modellierung der Klasse TUhr
  • OO-Analyse
  • Die Uhr besitzt drei Zählerobjekte als Stunden-,
    Minuten- und Sekundenzähler.
  • Stunden, Minuten und Sekunden können gesetzt
    werden.
  • Stunden, Minuten und Sekunden können ausgelesen
    werden.
  • Die Uhrzeit kann schrittweise erhöht werden.
  • Kurzbeschreibung
  • Das Uhrobjekt verwaltet die Zählerobjekte, d. h.
    es erzeugt und vernichtet sie.
  • Gemäß dem Geheimnisprinzip werden die
    Zählerobjekte als private bzw. protected
    deklariert, sind also dem Benutzer verborgen.
  • Der Zugriff erfolgt indirekt mit Hilfe der Set-
    und Get-Methoden.

12
TModuloZaehler
TModuloZaehler class private max
integer stand integer public
constructor create(m integer) procedure
setStand(s integer) procedure nullSetzen
procedure weiterZaehlen function getStand
integer end
constructor TModuloZaehler.create(m
integer) begin max m stand 0 end
13
TUhr
TUhr class protected min
TModuloZaehler sec TModuloZaehler
std TModuloZaehler public //Methoden
constructor create destructor
destroyoverride procedure ticke
procedure reset . end
Uhr verwaltet 3 Zählerobjekte (hat-Beziehung)
constructor TUhr.create begin std
TModuloZaehler.create(23) min
TModuloZaehler.create(59) sec
TModuloZaehler.create(59) end
Erzeugung der Zählerobjekte
14
TUhr
destructor TUhr.destroy begin std.Free
min.Free sec.Free inherited destroy
//geerbten Destruktor aufrufen end
Vernichtung der Zählerobjekte
procedure TUhr.ticke begin sec.weiterZaehlen
if sec.getStand 0 then begin
min.weiterZaehlen if min.getStand 0 then
std.weiterzaehlen end end
Die Uhr tickt.
Aktivieren der Zähler
15
Entwicklung der GUI
OO-Entwurf
Prototyp
OOD-Klassendiagramm
16
Objektverwaltung
Das Formular verwaltet die GUI-Objekte und das
Modellobjekt.
uses mTUhr TGUI class(TForm)
private Private-Deklarationen Uhr
TUhr //Referenzvariable Uhr (als Attribut des
Formulars) procedure zeitAnzeigen
//View-Methode des Formulars public
Public-Deklarationen end
Modell-Unit einbinden
Zeiger auf ein Uhrobjekt hat Beziehung
procedure TGUI.FormCreate(Sender
TObject) begin Uhr TUhr.create
//Uhrobjekt erzeugen zeitAnzeigen end
Uhrobjekt erzeugen
17
Controller / View
procedure TGUI.BSetzenClick(Sender TObject) var
h, min integer begin h
StrToInt(EdH.text) min StrToInt(EdMin.text)
Uhr.SetMin(min) Uhr.SetStd(h)
zeitAnzeigen end
Ereignisprozedur
Datenfluss Controller ? Modell
Aktualisierung der Anzeige (Polling)
procedure TGUI.zeitAnzeigen var h,min,sec
integer sh,smin,ssec string begin h
Uhr.GetH min Uhr.GetMin sec
Uhr.getSec sh InttoStr(h) min
InttoStr(min) ssec InttoStr(sec) if h lt 10
then sh '0'sh .. PZeitAnzeige.Caption
sh''smin''ssec end
Datenfluss Modell ? View
18
Aufgaben
  1. Testen Sie das Programm Uhr0 und verfolgen Sie
    den Ablauf mit Hilfe des Einzelschritt-Modus
    (Debugging).
  2. Implementieren Sie einen Timer zur automatischen
    Weiterschaltung der Uhr.
  3. Erzeugen Sie im Formular eine zweite Uhr.
  4. Ersetzen Sie die Digitalanzeige durch ein
    Analoganzeige (TZiffernblatt)
  5. Implementieren Sie ein selbstdefiniertes
    Ereignis, sodass die Uhr die GUI bei
    Zustandsänderung informieren kann.
  6. Die Uhr soll laufen lernen. Bauen Sie dazu einen
    Timer in das Uhrobjekt ein.

Hinweis Verwenden Sie folgende Seiten und die
Delphi-Hilfe.
19
Uhr mit Ereignis
Helmut Paulus Speyer, 13.5.09
20
Ein Ereignis für das Uhrobjekt
Das Uhrobjekt soll die Ansicht über
Datenänderungen informieren.Dazu wird ein
Ereignis implementiert, das bei Datenänderung
ausgelöst wird, also in den set-Methoden. Das
Modell erhält einen Methodenzeiger, der mit einer
Methode des Formulars verknüpft werden kann.
Die Schritte (1) (3) erfolgen im Modellobjekt,
Schritt (4) im Formular.
21
Implementation des Ereignisses
Ereignis OnChanged vom Typ TEreignis
type TEreignis procedure of object (1.)
TUhr Class .... public
OnChanged TEreignis (2.) .. end
Methode ohne Parameterliste
  1. Deklaration eines Methodenzeigertyps (hier für
    eine Prozedur ohne Parameter)
  2. Deklaration einer Referenzvariable vom Typ des
    Methodenzeigers

22
Auslösen des Ereignisses (3)
Modell
procedure TUhr.ticke begin . //GUI
informieren if assigned(OnChanged) then
OnChanged (3) end
3. Ereignis auslösen
Wirkung Das Modellobjekt ruft die mit OnChanged
verknüpfte Methode des Formulars auf. Mit Hilfe
der Funktion assigned() wird geprüft, ob der
Methodenzeiger mit einer Methode verknüpft ist.
Dieselbe Wirkung hätte die Anweisung if
OnChanged ltgt nil then OnChanged
Anmerkung Mit Hilfe von Methodenzeigern kann das
Modell GUI-Objekten eine Nachricht schicken
(Methode aufrufen), ohne dass es diese kennt. Das
Modell hat keine Referenz (Objektvariable), die
auf ein GUI-Objekt zeigt!
23
Ereignisbearbeitungsmethode
GUI-Klasse
type TGUI class(TForm) ... private
Uhr TUhr procedure zeitAnzeigen public
... end
Ereignismethode für das OnChanged-Ereignis
Verknüpfen des Methodenzeigers mit der
Ereignismethode in FormCreate
procedure TGUI.FormCreate(Sender
TObject) begin Uhr TUhr.create
//Uhrobjekt erzeugen Uhr.OnChanged
zeitAnzeigen (4) end
Methodenname (keine Parameter)
24
Uhr mit Timer
Helmut Paulus Speyer, 13.5.09
25
Uhr mit Timer
Das Uhrobjekt erhält eine private
Timerkomponente, die die Zeit im Sekundentakt
erhöht.
Hat - Beziehung
Hat - Beziehung
weiter Ereignismethode für das Timer-Ereignis
OnTimer
Das Uhrobjekt ist für die Erzeugung und
Zerstörung des Timerobjekts zuständig.
26
Implementierung
uses mTModuloZaehler, extctrls type TUhr
Class protected std integer
min integer Sec integer Timer
TTimer procedure weiter(SenderTObject)
public constructor create
destructor destroy override ...
end
wegen TTimer
Objektreferenz
Ereignismethode des Timers
Die Ereignismethode des Timers erwartet einen
Parameter Sender vom Typ TObject. Daher kann die
Methode ticke nicht mit dem Timerereignis OnTimer
verknüpft werden. Als Timerereignismethode kommt
daher die Methode weiter(Sender TObject) hinzu,
die dann ticke aufruft.
27
Erzeugung und Vernichtung des Timers
constructor TUhr.create begin Timer
TTimer.create(nil) with Timer do begin
interval 1000 enabled true
OnTimer weiter end end
Erwartet wird eine Referenz auf den Besitzer der
Komponente Objekt vom Typ TComponent oder nil.
Methodenzeiger mit der Ereignismethode verknüpfen
destructor TUhr.destroy begin Timer.free
inherited destroy end
Freigabe des Objekts
Aufruf des Destruktors der Basisklasse TObject
28
Vererbung - Spezialisierung
Helmut Paulus Speyer, 13.05.09
29
Ziel
Aufgabe Zu entwickeln ist eine Uhr, die zu einer
voreingestellten Uhrzeit ein Alarmzeichen ausgibt.
  • Wünschenswert wäre,
  • möglichst viel von der Klasse TUhr verwenden zu
    können,
  • möglichst wenig zusätzlichen Code entwickeln zu
    müssen.
  • Codewiederholungen vermeiden zu können.
  • Lösung durch Vererbung
  • Eine Klasse von Objekten kann als Spezialfall
    einer allgemeineren Klasse definiert werden.
  • Die Objekte der spezialisierten Klasse
  • verfügen über alle Merkmale und Methoden der
    allgemeinen Klasse,
  • erweitern diese aber ggf. um zusätzliche
    Eigenschaften (Attribute und Methoden),
  • können die geerbten Methoden durch Überschreiben
    neu definieren.

30
Vererbung - Spezialisierung
Die Basisklasse TWecker als Spezialisierung der
Klasse TUhr
ist ein - Beziehung
In der Methode ticke soll der Alarm ausgelöst
werden, falls die Alarmzeit erreicht ist ticke
wird daher in der Unterklasse erweitert. Die
Basisklasse wird nicht mehr verändert!
31
Überschreiben einer Methode
procedure TUhr.ticke begin //Zeit erhöhen
//OnChanged-Ereignis auslösen end
Das Verhalten der Uhr beim Ticken wird erweitert.
Dazu wird die ticke-Methode überschrieben.
procedure TWecker.ticke begin inherited ticke
//Methode der Basisklasse //Alarm auslösen,
falls Alarmzeit erreicht end
Zunächst die Methode der Basisklasse aufrufen, um
das Standardverhalten auszulösen. Es folgen die
speziellen Aktivitäten des Weckers.
32
Verhalten virtueller Methoden
Problem Welche Methode wird aufgerufen, wenn der
Timer, der in TUhr deklariert ist, die Methode
ticke aufruft?
  • Bei virtuellen Methoden wird erst zur Laufzeit
    entschieden, welche Methode aktiviert wird.
  • Der Typ des aktuellen Objekts bestimmt die
    Methode.

33
Polymorphismus
Das Konzept der dynamischen Bindung heißt in der
OOP Polymorphismus (Vielgestaltigkeit).
  • Merkmale
  • Bei polymorphen Objektenvariablen entscheidet
    sich erst zur Laufzeit, welcher Klasse das Objekt
    angehört.
  • Eine in einer Basisklasse als virtual deklarierte
    Methode definiert eine Schnittstelle für alle
    abgeleiteten Klassen, auch wenn diese noch nicht
    festgelegt sind.
  • Ein Programm, das virtuelle Methoden einer
    Basisklasse enthält kann sehr leicht um
    abgeleitete Klassen erweitert werden, weil
    sichergestellt ist, dass stets die richtige
    Methode aufgerufen wird.
  • Empfehlung
  • Statische Methoden einer Basisklasse sollten
    nicht überschrieben werden.
  • Wenn Überschreiben notwendig erscheint, sollte
    die Methode als virtual deklariert werden.

34
Aufgabe
  • Testen Sie das Programm Wecker und ergänzen Sie
    den fehlenden Quellcode.
  • Entwickeln Sie mit Hilfe zweier Wecker eine
    SchachuhrZwei Uhren, die sich gegenseitig an-
    und abschalten nach Prinzip
  • Wenn die Partie gestartet ist, läuft die Uhr
    desjenigen, der am Zug ist, los.
  • Nachdem der Spieler seinen Zug ausgeführt hat
    stoppt er seine Uhr, gleichzeitig startet
    automatisch die Uhr des Gegners.
  • Jeder Spieler nur eine bestimmte Zeitspanne für
    die Partie zur Verfügung, die auf der Schachuhr
    zuvor eingestellt wird.
  • Entwickeln Sie eine Weltzeituhr.
  • Eine Uhr, die die aktuelle Uhrzeit der
    verschiedenen Zeitzonen anzeigen kann.
  • Als Basiszeit dient dabei die Zeit am nullten
    Längengrad.
  • Die Basisuhrzeit wird festgelegt, die Uhrzeiten
    der anderen Zeitzonen errechnen sich durch
    Hinzufügen oder Abziehen einer ganzzahligen
    Anzahl von Stunden.

35
Vererbung - Generalisierung
Helmut Paulus Speyer, 13.5.09
36
Bankprodukte
Problem Vielfalt der Objektetypen Sie sind zwar
ähnlich, aber doch verschieden sind!
Depotkonto
Girokonto
Festgeldkonto
Sparkonto
  • Idee
  • Suche nach Gemeinsamkeiten!
  • Organisiere sie in einer Hierarchie!
  • Implementiere zuerst den gemeinsamen Kern!
  • Implementiere dann nur noch die Unterschiede!

37
Vererbung
Sparkonto
Girokonto
Festgeldkonto
Nummer Inhaber Stand
Nummer Inhaber Stand Zeitraum
Nummer Inhaber Stand Kündigungsfrist
einzahlen auszahlen
einzahlen auszahlen
einzahlen auszahlen
  • Unterschiedliches Verhalten
  • Sparkonto
  • Kündigungsfrist, kein Überziehen möglich
  • Girokonto
  • Überweisungen, Scheck, Dispositonskredit
  • Festgeldkonto
  • Einzahlen und Auszahlen eingeschränkt,
    Mindesteinlage

38
Vererbungshierarchie
Konto ist der abstrakte Oberbegriff für die drei
Formen ? Gemeinsame Basisklasse TKonto
  • Die Basisklasse enthält den gemeinsamen Kern.
  • Spezialisierte Klassen werden von der Basisklasse
    abgeleitetsie fügen spezielle Attribute und
    Operationen hinzu oder definieren bestimmte Dinge
    neu.

39
Abstrakte Methoden
  • Die Basisklasse Konto kann die Methode auszahlen
    nicht sinnvoll implementieren, weil sie zu
    allgemein ist.
  • Um einen gleichartigen Aufruf der Methode zu
    gewährleisten, muss sie dennoch in der
    Basisklasse enthalten sein. (z. B. mit leeren
    Rumpf)
  • Deklariert man die virtuelle Methode der
    Basisklasse als abstrakte Methode, so entfällt
    die Implementation.

procedure TKonto.auszahlen () begin end
procedure TGirokonto.auszahlen () begin
//Dispo prüfen //Kontostand berechnen
//Gebühren berechnen end
procedure TSparKonto.auszahlen () begin //ist
Konto gedeckt ? //Kontostand berechnen end
40
Abstrakte Klassen
TKonto mit der abstrakten Methode auszahlen
TKonto class ... procedure
auszahlenvirtualabstract ... end
  • Implementierung in Basisklasse entfällt
  • Muss in allen Unterklassen überschrieben werden
  • Kennzeichen abstrakter Klassen
  • Abstrakte Klassen enthalten mindestens eine
    abstrakte virtuelle Methode, die überschrieben
    werden muss.
  • Von abstrakten Klassen können keine Instanzen
    gebildet werden.
  • Abstrakte Klasse bilden eine gemeinsame
    Schnittstelle für alle Unterklassen.

41
Klassendiagramm
42
Aufgaben
  1. Testen Sie das Programm Konten und
    vervollständigen Sie die Auszahlungsmethoden.

43
Anhang 1
Helmut Paulus Speyer, 13.05.09
44
Zuweisungskompatibilität
Zuweisungskompatibilität
Konsequenz der ist ein BeziehungEiner
Objektvariablen einer Oberklasse können Objekte
aller Unterklassen zugewiesen werden. Die
Umkehrung gilt nicht.
Möglich Uhr Wecker Uhr.setStd(12) Nicht
möglich Uhr.setAlarmStd(6)
Beispiel Var uhr TUhr wecker
TWecker wecker TWecker.create(...)
Uhr ist eine Referenz auf den Teil des
Weckerobjekts, der von TUhr geerbt wird.
Typumwandlung as - Operator wecker Uhr as
TWecker (Uhr as TWecker).setAlarm(6) TWecker(Uhr
).setAlarm(6)
45
Delphis Klassenhierarchie
  • Alle Delphi-Objekte sind Nachfahren eines
    Urobjekts - Klasse TObject.
  • TObject
  • implementiert das grundlegende Verhalten, das
    allen Delphi-Objekten gemeinsam ist.(z. B.
    Standardkonstruktor, -destruktor)
  • dient als Basis für einfache Objekte (keine
    Komponenten, keine Stream- oder
    Zuweisungsfunktionen)

46
Delphis Klassenbibliothek (Auszug)
47
Anhang 2Grundkonzepte
Helmut Paulus Speyer, 13.05.09
48
Zusammenfassung OOP
OOP-Idee Vorstrukturierung komplexer Systeme
anhand natürlicher Objekte Jedes Objekt hat
Fähigkeiten und Eigenschaften Verteilung von
Aufgaben (Zuständigkeiten) Prinzipien Objekt
und Klasse Geheimnisprinzip Beziehung/Assoziation
Vererbung Eine Klassen-Deklaration besteht aus
Deklarationen von Attributen für die
verschiedenen Eigenschaftender Objekte
Konstruktoren zur Erzeugung und Initialisierung
der Objekte Methoden, d.h. Operationen
(Algorithmen) auf Objekten UML-Klassendiagramm Ze
igt die Klassen einer Anwendung und die
Beziehungen zwischen diesen Klassen. Es liefert
Informationen über den Aufbau der Anwendung.
Entwurfsprinzip Trennung von GUI und Modell
(MVC)
49
Klassen und Objekte
Klasse
ist Instanz von
Objekte
Klassen sind Baupläne von Objekten. Objekte sind
konkrete Exemplare (Instanzen) von Klassen.
50
Geheimnisprinzip
Objekte stellen Operationen/Dienste (Algorithmen)
und Informationen zur Verfügung. Die innere
Struktur bleibt dem Benutzer verborgen.
Die Operationen (Algorithmen) auf Objekten einer
Klasse heißen auch Methoden, genauer
Objekt-Methoden.
Attribute speichern den Zustand des
Objekts Methoden abheben, überweisen, einzahlen
usw.
Direkter Zugriff auf Attribute nicht möglich. Nur
indirekter Zugriff mit Hilfe von Methoden
(set-/get).
51
Modellierung der Klasse
UML-Klassendiagramm
Zugriffsrechte - privat (Zugriff nur innerhalb
des Objekts) öffentlich (Zugriff auch von
außerhalb)
Konstruktor (erzeugt ein Objekt)
Aufträge (Dienste)/Prozeduren
Anfragen /Funktionen (Lesezugriff auf die
Attribute)
52
Implementierung der Klasse
type TKonto class private KStand
double Nummer integer Besitzer
string public constructor Create (PNr
integer PBesitzer string) procedure
abheben (PBetrag double) procedure
einzahlen (PBetrag double) procedure
ueberweisen(PBetragdoublePEKonto TKonto)
function getBesitzer string function
getKontoNummer integer function
getKontoStand double end
private Zugriff von außen nicht möglich
public Zugriff von außen möglich
53
Konstruktoren
Objekte werden mit Hilfe der Konstruktoren
erzeugt
constructor TKonto.create ( PNr integer
PBesitzer string) begin Nummer PNr
Besitzer PBesitzer end
  • Der Konstruktor
  • legt den Speicherbereich des Objekts an,
  • belegt die Attribute mit Standardwerten,
  • gibt eine Referenz auf das erzeugte Objekt zurück.
  • Konstruktoren sind Klassenmethoden, d. h. sie
    sind nicht an ein Objekt gebunden.Beim Aufruf
    wird daher der Klassenname vorangestellt.
  • Konstruktoren haben eine Objektreferenz als
    Ergebnis,
  • aber keine Rückgabezuweisung (result ... ) und
    folglich auch keinen Ergebnistyp.
  • Alle Delphiklassen besitzen einen
    Standardkonstruktor Create, der ersetzt wird,
    wenn man ihn neu implementiert.

54
Erzeugung von Objekten
var Konto1 TKonto ... ... Konto1
TKonto.create(102, Müller)
Klassenname
55
Arbeiten mit Objekten
Der Zugriff auf Objekte erfolgt mit Hilfe der
Objektvariablen
Schema Objektvariable.Methode
56
Nachricht
Kommunikation zwischen Objekten
Konto1.ueberweisen (400, konto2)
Das Objekt Konto1 schickt dem Objekt Konto2 eine
Nachricht.
57
Assoziation
Damit Objekte miteinander kommunizieren können,
müssen Beziehungen zwischen ihnen bestehen.
58
Anhang 3Phasen der Softwareentwicklung
Helmut Paulus Speyer, 13.05.09
59
Software-Entwicklungsmodell
Entwicklungsphasen
OO-Analyse
OO-Design
OO-Programmierung
Analyse
Entwurf
Codierung
  • Modellierungskonzepte bei allen Schritten
  • Identifizieren und Definieren von abgeschlossenen
    autonomen Einheiten, die Struktur und Verhalten
    besitzen.
  • Suchen nach Gemeinsamkeiten im Sinne der
    Generalisierung / Spezialisierung.
  • Die Grenzen zwischen den Aktivitäten verschwimmen.

60
OOA - OOD - OOP
  • OOA
  • WAS soll das System tun? nicht WIE
  • Funktionalität durch Anwendungsfälle beschreiben
  • Objekte (Gegenstände) und Klassen (Begriffe)
    identifizieren
  • Verantwortlichkeiten identifizieren und den
    Klassen zuordnen
  • Zusammenarbeit zwischen den Klassen
    identifizieren (Beziehungen)
  • Hierarchien definieren (Vererbung)
  • OOD
  • WIE soll das System arbeiten?
  • Verfeinern des Objektmodells (Vererbung,
    Abstraktion) zu einem implementierbaren Modell
    (Festlegung der Schnittstellen, Besonderheiten
    der Programmiersprache)
  • Anpassung des Modells an die technische
    Plattform, Entwicklung und Anbindung der
    Benutzungsoberfläche

OOP Implementierung der Klassen und der
Interaktionen zwischen den Objekten
61
Objektorientierter Entwurf
Wesentliches Entwurfsziel ist die Trennung
Fachkonzept, Benutzungs-oberfläche (GUI) und
Datenhaltung.
Entwicklungsphasen
62
Anhang 3Kursarbeit
Helmut Paulus Speyer, 13.05.09
63
Kursarbeit 1 (Auszug)
1. Schachuhr Dabei handelt es sich eigentlich um
zwei Uhren, die sich gegenseitig an- und
abschalten. Das Ganze funktioniert nach folgendem
Prinzip Wenn die Partie gestartet ist, läuft
die Uhr desjenigen, der am Zug ist, los. Nachdem
der Spieler seinen Zug ausgeführt hat stoppt er
seine Uhr, gleichzeitig startet automatisch die
Uhr des Gegners. Dabei hat jeder Spieler nur eine
bestimmte Zeitspanne für die Partie zur
Verfügung, die auf der Schachuhr zuvor
eingestellt wird je nach Schachform (z. B.
Blitzschach oder Turnierschach) zwischen 5
Minuten und zweieinhalb Stunden. Es soll ein
Programm entwickelt werden, das eine solche
Schachuhr simuliert. Dazu wird die leicht
modifizierte Uhrenklasse TUhr aus dem Unterricht
und eine GUI-Klasse zur Analoganzeige der Zeit
zur Verfügung gestellt.
  • Analysiere das Klassendiagramm (siehe
    Dokumentation) und erläutere die verschiedenen
    Beziehungen zwischen den Klassen. Erläutere, in
    welcher Weise hier das MVC-Prinzip realisiert
    ist Nenne und begründe Vor- und Nachteile dieses
    Entwurfkonzepts.
  • Modelliere mit Hilfe der zur Verfügung gestellten
    Klassen die Schachuhr. Stelle das Ergebnis in
    einem OOD-Klassendiagramm dar. Die Abbildung
    zeigt einen Prototyp.
  • Leider hat der Programmierer noch einige wichtige
    Fähigkeiten der Uhrobjekte vergessen
  • die Uhren laufen noch nicht selbständig
  • bei Überschreiten der max. Spielzeit sollen die
    Uhren Alarm auslösen, damit das Spiel abgebrochen
    werden kann
  • Erläutere, wie du die Klasse TUhr erweiterst, um
    die gewünschte Funktionalität zu erzielen.
  • Gehe dabei insbesondere auf den
    Benachrichtigungsmechanismus ein.
  • Setze deine Überlegungen um, indem du das
    vorgebenene Delphi-Projekt erweiterst. (Arbeit am
    PC)
  • Weitere Pflichten
  • Weiß beginnt, Schwarz startet also die Uhr.
  • Die Bedenkzeit für jeden Spieler wird auf 5
    Minuten eingestellt (nicht editierbar)
  • Zeitüberschreitung wird angezeigt und damit das
    Spiel beendet.

64
Kursarbeit 1 (Anhang)
Dokumentation der Klasse "TZiffernblatt"  
Beschreibung der Klasse Analoganzeige einer Uhr
reagiert auf das OnChanged-Ereignis des
Uhrobjekts Bezugsklasse TImage. Objektbeziehun
gen TUhr (Beziehungstyp Kennt, Kardinalität
1) Attribute myUhr TUhr Referenz auf das
Uhrobjekt, dessen Zeit angezeigt wird Protokoll
der Dienste / Methoden Konstruktor
Create(Owner TComponent) Auftrag
aktualisiereAnzeige(uhr TUhr) nachher zeigt
die aktuelle Zeit des übergebenen Uhrobjekts
an Auftrag setzeMyUhr(uhr
TUhr) nachher Attribut MyUhr ist gesetzt und
OnChanged-Ereignis mit der privaten Methode
aktualisiere Auftrag zeigeZeit(h
integer, min integer, sec integer) nachher
die übergebene Zeit wird angezeigt
Dokumentation der Klasse "TUhr" Beschreibung der
Klasse Attribute OnChanged TEreignis Wird
ausgelöst, wenn sich die Zeit geändert
hat  Protokoll der Dienste / Methoden Konstruktor
constructor create (pH integer pMin
integer) nachher Uhr erzeugt std, min
gesetzt Auftrag ticke() nachher Zeit um 1
Sekunde erhöht, OnChanged aufgerufen Auftrag
reset()
65
Kursarbeit 1 (Auszug)
  • 2. Ampelanlage
  • An einer Landstraße muss der Straßenverkehr wegen
    Bauarbeiten zeitweilig auf eine Spur
    eingeschränkt und mit einer Ampelanlage geregelt
    werden. Ein Programm soll zwei Verkehrsampeln mit
    ihren Funktionen und den Straßenverkehr an der
    Baustelle simulieren und auf dem Bildschirm
    darstellen.
  • Jede Ampel
  • zeigt die Phasen ROT-ROTGELB-GRUEN-GELB nach
    einander mit verschiedenen Zeitdauern.
  • wird von einer separaten zentralen Steuerung
    geschaltet.
  • Sensoren vor den Ampeln registrieren die Anzahl
    der haltenden Autos und lösen einen Schaltzyklus
    aus.
  • Die Anlage soll einen einspurigen Verkehr sichern
    und im Dauerbetrieb laufen
  1. Erläutere an diesem Beispiel die einzelnen Phasen
    eines objektorientierten Software-Entwurfs.
  2. Führe eine OO-Analyse durch. Stelle deine
    Ergebnisse in einem Klassendiagramm dar und
    erläutere es kurz ( Attribute, Methoden,
    Beziehungen).
  3. Beschreibe die verschiedenen Ampelzustände mit
    Hilfe eines Zustandsdiagramms und entwickle für
    einen komplette Schaltzyklus der Steueranlage ein
    Aktivitätsdiagramm.
  4. Stell dir vor, dass du Leiter einer Arbeitsgruppe
    bist, die die Software entwickeln soll. Nenne
    Teilgruppen, die du zur Lösung des Problems
    bilden würdest, und ordne jeder Teilgruppe
    Aufgaben zu.

66
Kursarbeit 2
  • 1. Weltzeituhr
  • Eine Weltzeituhr ist eine Uhr, die die aktuelle
    Uhrzeit der verschiedenen Zeitzonen anzeigen
    kann. Als Basiszeit dient dabei die Zeit am
    nullten Längengrad
  • Die Basisuhrzeit wird festgelegt, die Uhrzeiten
    der anderen Zeitzonen errechnen sich durch
    Hinzufügen oder Abziehen einer ganzzahligen
    Anzahl von Stunden.
  • Pflichten
  • Es soll ein Programm entwickelt werden, das wie
    im Bild drei Weltzeituhren enthält, die die
    Uhrzeit einer bestimmten Weltstadt (Zeitzone)
    anzeigen.
  • Die im Unterricht entwickelte Klasse TUhr ist zu
    dazu zu erweitern.
  • Die Uhren laufen nicht selbst, sondern werden
    synchron von außen gesteuert. Die Zeitanzeige ist
    digital.
  • Erläutere den grundsätzlichen Unterschied
    zwischen der prozeduralen und der
    objektorientierten Programmierweise. Beziehe dich
    dabei auf eines der Unterrichtsprojekte.
  • Analysiere das Klassendiagramm und erläutere die
    verschiedenen Beziehungen zwischen den
    Klassen.Erläutere insbesondere die Beziehung
    zwischen dem Uhrobjekt und der Panelkomponente!
    Wie wird diese Beziehung programmiertechnisch
    realisiert? (Anweisungen)
  • Erweitere die Klasse TUhr um geeignete
    Attribute/Methoden und ergänze evtl. den
    Quellcode schon existierender Methoden so, dass
    die oben beschriebene Funktionalität gegeben ist.
    Zur Initialisierung soll ein geeigneter
    Konstruktor entwickelt werden.
  • Begründe deine Entscheidungen kurz und stelle das
    Ergebnis in einem erweitereten UML-Klassendiagramm
    dar.
  • Implementiere eine GUI mit drei laufenden Uhren
    wie im Bild. Verwende die Unit uWUhr.pas.Zeitzone
    n Budapest 1, Detroit 6, Aukland 11

67
Kursarbeit 2
Klassendiagramm
68
Kursarbeit 2
2. Telefonbuch In Handys oder PDAs (Personal
Digital Assistant) findet man kleine
Applikationen, die als Telefonbuch oder
Merkzettel dienen. Diese stellen meist keinerlei
Datenbankfunktionalität bereit allerhöchstens
sind sie in der Lage die Einträge zu sortieren.
Man kann sie gut mit einem Karteikasten
vergleichen, der eine bestimmte Sorte
Karteikarten bereithält. Betrachte ein
vereinfachtes Telefonbuch, bei dem die Einträge
unsortiert gespeichert werden und ihre Anzahl auf
10 begrenzt sein soll.
  • Modelliere ein Telefonbuch, das mit Hilfe der
    Modellklassen TTelefonbuch und TEintrag aufgebaut
    wird. Es enthält Einträge mit den Attributen
    Nummer (interne automatisch erzeugte
    Nummerierung), Name, Telefonnummer sowie ein
    Ja/Nein-Feld für Kurzwahl (d. h. der Eintrag ist
    einer Kurzwahltaste zugeordnet).
  • Folgende Operationen sollen möglich sein
  • eine neuer Eintrag wird angelegt, dabei wird er
    automatisch nummeriert und
  • nach Angabe einer Nummer wird der zugehörige
    Eintrag als Zeichenkette ausgegeben.
  • Begründe deine Entscheidungen und stelle das
    Ergebnis in einem UML-Klassendiagramm dar.
    Erläutere die Beziehung zwischen den Klassen.
  • Implementiere die Konstruktoren beiden Klassen,
    sowie eine Methode zum Einfügen eines neuen
    Eintrags ins Telefonbuch.
  • Erzeuge ein Telefonbuch mit maximal 10 Einträgen
    und füge folgende Einträge ein.Anton, Meyer,
    0675/1234, ja, Uwe, Ochsenknecht, 084/1234,
    neinGib auch die notwendigen Variablendeklaratio
    nen an und erläutere sie.
  • Schreibe eine GUI-Methode, die das gesamte
    Telefonbuch (Einträge als Strings) in einer
    Listbox ausgibt. Verwende die Methode
    Listbox.items.add( s string) zur Ausgabe der
    Daten

69
Links und Literatur
  • E. Modrow Informatik mit Delphi, Band 1/2,
    Dümmler-Stam 1998-2000.
  • P. Damann, J. Wemßen Objektorientierte
    Programmierung mit Delphi, Band 1. Klett-Verlag
    2001.
  • U. Bänisch Praktische Informatik mit Delphi,
    Band 1/2. Cornelsen 2001.
  • Frischalowski Delphi 5.0, Band 1/2, Herdt-Verlag
    1999.
  • Pohl Schülerübungen / Klausuren in Delphi, Heft
    1/2, Verlag J. Pohl 1997-2001.
  • K. Merkerthttp//hsg.region-kaiserslautern.de/fa
    echer/inf/material/delphi/index.php
  • R. Mechlinghttp//www.gk-informatik.de/
  • K. Heidlerhttp//www.friedrich.fr.schule-bw.de/d
    elphi/delphi.htm
  • Hessischer Bildungsserverhttp//lernen.bildung.h
    essen.de/informatik/
  • Katja Weishaupt
  • http//lernen.bildung.hessen.de/informatik/materi
    al/weishaupt.pdf
  • S. Spolwig http//oszhdl.be.schule.de/gymnasium/f
    aecher/informatik/delphi/index.htm
  • Daniel Garmannhttp//projekte.gymnasium-odenthal.
    de/informatik/
  • Weitere Hinweise unter
  • http//www.delphi-source.de
  • Einsteiger-Tutorial
  • http//www.delphi-treff.de/content/tutorials/eins
    teigerkurs/
Write a Comment
User Comments (0)
About PowerShow.com