560 likes | 772 Views
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. Stempel herstellen.
E N D
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
Stempel herstellen Handwerkszeug Stempelabdruck erstellen Lesen oder Ausfüllen von Stempelfeldern ??? 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 Stempelfelder Ausfüllen von Stempelfeldern Lesen von Stempelfeldern objektspezifische Operation Erstellen Sie die Klasse TPerson mit UMLed Klassen und Objekte
Sichtbarkeit • - privat • Zugriff nur innerhalb der Klasse • # protected • Zugriff nur innerhalb der Klasse und der von ihr abgeleiteten Klassen • + public • Zugriff von überall her • ++ published • public mit zusätzlichen internen Informationen
Speichern Sie TPerson in einen Ordner „Personen“ Klassen in Delphi • 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
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)
Erstellen Sie mit Delphi die Oberfläche und speichern Sie das Projekt im Ordner „Personen“ Programm: Oberfläche 'View' der Objekt-attribute Steuerung 'Controller'
Programm: Objekterzeugung • Ein 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
Ergänzen Sie Ihre Klassendeklaration! UMLed: Konstruktor
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;
Datenkapselung • Daten (Attribute, Felder) eines Objekts • sind von außen nur über öffentliche Zugriffsmethoden lesbar oder veränderbar Datenzugriff Datenzugriff
Ergänzen Sie Ihr Programm Programm: Datenkapselung
Nachrichten an Objekte • An ein Objekt eine Nachricht senden bedeutet, eine Methode des Objekts aufzurufen, als • Aufforderung an das Objekt etwas zu tun • wird im Objekt als Prozedur behandelt • Anfrage an das Objekt nach Information • wird im Objekt als Funktion behandelt
Implementieren Sie die Methode „TPerson.spricht" Nachricht als Anfrage
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 - 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
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
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 - 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.
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!
Person mit mehreren Konten • Eine Person soll über mehrere Bankkonten verfügen • Verwendete Klassen • TPerson • TKonto • wird von TPerson verwaltet
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 - Spezialisierung • Entwicklung von Unterklassen mit speziellen Attributen oder Methoden Schulleiter beurteilt Lehrer
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öglichEs 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:=LEL.beurteilen TSchulleiter.beurteilen falls L:=SL Aulö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 UMLEd • Vorgabe von Programmgerüsten • Hinweise zum zeitlichen Umfang Kursarbeit