Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.
-
Upload
gertrude-lantz -
Category
Documents
-
view
112 -
download
3
Transcript of Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.
Bausteine zum objektorientierten Programmieren mit Delphi
Gregor Noll2009
Übersicht
Klassen und Objekte - UMLed
OOP - Rahmenprogramm
Beispiele zum OOP aus dem Unterricht
Vererbung - ein Einstiegsbeispiel
Kursarbeiten mit OOP
Ihre Erfahrungen - Ihre Beispiele
Klassen und Objekte
Modellieren und Erstellen von Klassen
Einsatz von UMLEd
Erzeugen von Objekten
Zugriffe auf Objekte get / set – Methoden Aufrufe objektspezifischer
Operationen: Anfragen oder Aufträge
Stempel herstellen
Handwerkszeug
Stempelabdruck erstellen
Lesen oder Ausfüllen von Stempelfeldern
???
Klassen und Objekte
Erstellen Sie die Klasse TPerson mit UMLed
Stempel
Stempelfelder
Ausfüllen von Stempelfeldern
Lesen von Stempelfeldernobjektspezifische Operation
Sichtbarkeit
- privatZugriff nur innerhalb der Klasse
# protectedZugriff nur innerhalb der Klasse und der von
ihr abgeleiteten Klassen
+ publicZugriff von überall her
++ published public mit zusätzlichen internen Informationen
Für jede Klasse eine eigene Unit anlegen das macht UMLed automatisch:
rechte Maustaste – Delphi Export
TPerson unit mTPerson;
Datei mTPerson.pas; vorher lässt sich gegebenenfalls der Quelltext
bearbeiten
Klassen in Delphi
Speichern Sie TPerson in einen Ordner „Personen“
Rahmenprogramm
Um mit einer Klasse zu arbeiten erstellen wir ein Delphiprogramm, das
Objekte der Klasse bereitstellt(„Stempelabdrücke“ erzeugt)
eine Oberfläche für den Umgang mit den Objekten der Klasse bereitstellt
Darstellung (View) der Attribute des Objekts Steuerung der Methodenaufrufe (Controller)
Programm: Oberfläche'View' der
Objekt-attribute
Steuerung'Controller
'
Erstellen Sie mit Delphi die Oberfläche und speichern Sie das Projekt im Ordner „Personen“
Programm: ObjekterzeugungEin Objekt wird mit einer speziellen constructor-Methode erzeugt
Es handelt sich dabei um eine Methode der Klasse Alle Objektfelder werden standarmäßig vom System automatisch
initialisiert. Anschließend werden eventuelle Anweisungen der constructor-Methode ausgeführt
Der Name des Konstruktors ist i. d. Regel create
Analog gibt es auch eine destructor-Methode zum Vernichten eines Objekts
Der Name ist i. d. Regel destroy
Wenn die Methoden in einer Klasse fehlen, wird automatisch die entsprechende Methode der Superklasse bis hin zu TObject benutzt
UMLed: Konstruktor
Ergänzen Sie Ihre Klassendeklaration!
Objekterzeugung
Aufgerufen wird der Konstruktor als eine Klassenmethode
person:=TPerson.create;
Klasse
Der Konstruktor gibt einen Verweis auf das Objekt zurück, das er erstellt
Benötigt wird deshalb die Deklaration einer Referenz (Zeiger-) Variable für das Objekt: person: TPerson;
Dazu muss die Unit "mTPerson" bekannt sein (HAT-Beziehung in UML) uses mTPerson;
Programm: Objekterzeugung
UML: HAT-Beziehung
Datenkapselung
Daten (Attribute, Felder) eines Objekts sind von außen nur über öffentliche
Zugriffsmethoden lesbar oder veränderbar
Datenzugriff
Datenzugriff
Programm: Datenkapselung
Ergänzen Sie Ihr Programm
Nachrichten an Objekte
An ein Objekt eine Nachricht senden bedeutet, eine Methode des Objekts aufzurufen, als
Aufforderung an das Objekt etwas zu tunwird im Objekt als Prozedur behandelt
Anfrage an das Objekt nach Information wird im Objekt als Funktion behandelt
Nachricht als Anfrage
Implementieren Sie die Methode „TPerson.spricht"
Nachricht als Aufforderung
Das "sprechen lassen" könnte auch als Aufforderung an die Person, etwas zu sagen, implementiert werden und z. B. als Soundausgabe realisiert werden:
BMI
Schreiben Sie ein Programm, das den BodyMassIndex einer Person ausgibt.
Entwickeln Sie mit UMLed eine Klasse TPerson, welche die notwendigen Attribute und Methoden enthält
Infos: Google-Suche mit "BMI Düsseldorf",dann "BMI-Rechner" wählen
BMI: Personen-Modell
Was stimmt hier nicht ?
BMI - Programm
BMI - mehrere Personen
Erzeugung vieler Personen(-objekte) problemlos möglich
im einfachsten Fall eine (dynamische) array-Struktur verwenden
Alle Personen haben die gleichen Attribute und Methoden
Alle Personen haben individuelle Attributwerte
BMI - mehrere Personen
Ampel
Modellierung einer Verkehrsampel
Steuerung mit internen Zuständen TZustaende = (ge,ro,gr,roge)
View der Ampel über Bilder, die je nach Zustand sichtbar oder unsichtbar sind
Schalten der Ampel mit Hilfe eines Timers
Ampel
Würfelspiel
Drei Würfel werden geworfen. Sie gewinnen, wenn mindestens zwei Würfel die gleiche Zahl zeigen.
Entwerfen Sie zur Programmierung eine Klasse "TWuerfel" und benutzen die Bilder im Verzeichnis "Bilder"
Würfelspiel - Modell
Würfelspiel - Spielobjekt
Wir können das Würfelspiel auch so modellieren, dass wir eine Klasse "TSpiel" entwerfen, welche selbst wieder eine Klasse "TWuerfel" kennt (HAT-Beziehung) und deshalb für die Erzeugung und Vernichtung von Würfeln verantwortlich ist.
Würfelspiel - Spielobjekt
Automodell
(Modell nach Tobias Selinger)
Nützliche Dialoge
showmessage('Gut gemacht!');
e := inputbox('Titel','Anfrage','Vorgabe') e nimmt die Eingabe der Box als string auf bei "Abbrechen" erhält e den Vorgabewert !
Ein einfaches Konto
Nach der Erzeugung ist keine Änderung von Nummer und Inhaber mehr möglich!
Ein einfaches Konto
Person mit mehreren Konten
Eine Person soll über mehrere Bankkonten verfügen
Verwendete Klassen TPerson TKonto
wird von TPerson verwaltet
Person mit 3 Konten
Person mit 3 Konten
Erweiterung
Kontennummern prüfen
Auflösen eines Kontos nur mit Nullstellen des Kontos
Überweisen von einem Konto auf ein anderes
Mehrere Personen mit mehreren Konten
Überweisungen zwischen Konten verschiedener Personen
???
Vererbung
Kernprinzip der OO-Softwareentwicklung
Einfaches Beispiel aus der Schulwelt
TPerson
Vererbung - Generalisierung
Vererbung - Superklasse
Vererbung - GUI
Vererbung - Spezialisierung
Entwicklung von Unterklassen mit speziellen Attributen oder Methoden
Schulleiter beurteilt Lehrer
Vererbungshierarchie
Vererbung - Überschreiben
Die Methode "beurteilen" der Klasse TSchulleiter überschreibt die virtuelle gleichnamige Methode der Superklasse
Dies geschieht explizit mit Hilfe der Deklaration
function beurteilen:string; overide
Zuweisungskompatibilität
Objekte der Superklasse können auf Objekte ihrer Unterklasse verweisen, aber nicht umgekehrt
L:TLehrer; SL:TSchulleiter;L:=SL ist möglich (jeder SL ist L)SL:=L ist nicht möglich
Es wäre sonst eine Referenz SL.xy auf eine Objektkomponente xy möglich, die für SL, aber nicht für L existiert. (z. B. haben SL ein persönliches Dienstzimmer)
PolymorphieDie Zuweisungskompatibilität und die sog. späte Bindung ( d. h. die Auflösung von Methodenadressen erst zur Laufzeit) ermöglichen es, mit einem Methodenaufruf Aktionen auszulösen, die vom aktuellen Objekt beim Aufruf abhängen
L, LE :TLehrer und SL:TSchulleiter
TLehrer.beurteilen falls L:=LE
L.beurteilen TSchulleiter.beurteilen
falls L:=SLAulösung zur Laufzeit
statisch - dynamisch
Durch die Deklaration im Quelltext erfolgt eine statische Typenbindung
L:TLehrer; SL:TSchulleiter;
Typenprüfungen finden auf Basis des statischen Typs statt
Fehlt etwa die Methode "beurteilen" in TLehrer, so erfolgt bei L.beurteilen eine Fehlermeldung des Compilers trotz einer vorherigen Zuweisung L:=SL
Die Methodensuche zur Laufzeit basiert auf dem aktuellen (dynamischen) Typ des Objektes zur Laufzeit
inherited
Das Schlüsselwort inherited erlaubt den Aufruf der überschriebenen Methode der Superklasse
Wir können dem Schulleiter auf diese Weise nach der Beurteilung des Lehrers zusätzlich die Beurteilung des Schülers in seiner Methode "beurteilen" zuweisen
SBeurteilung := inherited beurteilen;
Kursarbeiten
Zweigeteilt Fragen zu den Konzepten Programmierung auf Papier bzw. am Computer
Einsatz von UMLEdVorgabe von Programmgerüsten
Hinweise zum zeitlichen Umfang
Kursarbeit
KA: Artikelverwaltung
KA-NT: Reiseverwaltung
KA: Blinklicht
KA: Kinokasse