Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll
Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009
Ü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 l Einsatz von UMLEd Stempel herstellen Handwerkszeug Erzeugen von Objekten Stempelabdruck erstellen Zugriffe auf Objekte Lesen oder Ausfüllen von Stempelfeldern l l get / set – Methoden Aufrufe objektspezifischer Operationen: Anfragen oder Aufträge ? ? ?
Klassen und Objekte Stempelfelder Ausfüllen von Stempelfeldern Lesen von Stempelfeldern objektspezifische Operation Erstellen Sie die Klasse TPerson mit UMLed
Sichtbarkeit - privat l Zugriff nur innerhalb der Klasse # protected l Zugriff nur innerhalb der Klasse und der von ihr abgeleiteten Klassen + public l Zugriff von überall her ++ published l public mit zusätzlichen internen Informationen
Klassen in Delphi Für jede Klasse eine eigene Unit anlegen l l das macht UMLed automatisch: rechte Maustaste – Delphi Export TPerson unit m. TPerson; Datei m. TPerson. pas; vorher lässt sich gegebenenfalls der Quelltext bearbeiten Speichern Sie TPerson in einen Ordner „Personen“
Rahmenprogramm Um mit einer Klasse zu arbeiten erstellen wir ein Delphiprogramm, das l l Objekte der Klasse bereitstellt („Stempelabdrücke“ erzeugt) eine Oberfläche für den Umgang mit den Objekten der Klasse bereitstellt l l Darstellung (View) der Attribute des Objekts Steuerung der Methodenaufrufe (Controller)
Programm: Oberfläche 'View' der Objektattribute Erstellen Sie mit Delphi die Oberfläche und speichern Sie das Projekt im Ordner „Personen“ Steuerung 'Controller '
Programm: Objekterzeugung Ein Objekt wird mit einer speziellen constructor. Methode erzeugt l l l 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 l 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 Klass e person: =TPerson. create; Der Konstruktor gibt einen Verweis auf das Objekt zurück, das er erstellt l Benötigt wird deshalb die Deklaration einer Referenz (Zeiger-) Variable für das Objekt: person: TPerson; l Dazu muss die Unit "m. TPerson" bekannt sein (HAT-Beziehung in UML) uses m. TPerson;
Programm: Objekterzeugung
UML: HAT-Beziehung
Datenkapselung Daten (Attribute, Felder) eines Objekts l sind von außen nur über öffentliche Zugriffsmethoden lesbar oder veränderbar Datenzugriff
Programm: Datenkapselung Ergänzen Sie Ihr Programm
Nachrichten an Objekte An ein Objekt eine Nachricht senden bedeutet, eine Methode des Objekts aufzurufen, als l Aufforderung an das Objekt etwas zu tun l wird im Objekt als Prozedur behandelt l Anfrage an das Objekt nach Information l 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 Body. Mass. Index einer Person ausgibt. l l 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 l 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 l 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') l l 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 l l TPerson TKonto l 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
Vererbung - Generalisierung TPerson
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 l function beurteilen: string; overide
Zuweisungskompatibilität Objekte der Superklasse können auf Objekte ihrer Unterklasse verweisen, aber nicht umgekehrt l L: TLehrer; SL: TSchulleiter; l L: =SL ist möglich (jeder SL ist L) 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)
Polymorphie Die 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: =SL Aulösung zur Laufzeit
statisch - dynamisch Durch die Deklaration im Quelltext erfolgt eine statische Typenbindung l L: TLehrer; SL: TSchulleiter; Typenprüfungen finden auf Basis des statischen Typs statt l 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 l 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 l SBeurteilung : = inherited beurteilen;
Kursarbeiten Zweigeteilt l l Fragen zu den Konzepten Programmierung auf Papier bzw. am Computer l Einsatz von UMLEd l Vorgabe von Programmgerüsten Hinweise zum zeitlichen Umfang Kursarbeit
KA: Artikelverwaltung
KA-NT: Reiseverwaltung
KA: Blinklicht
KA: Kinokasse
- Slides: 54