Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

54
Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009

Transcript of Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Page 1: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Bausteine zum objektorientierten Programmieren mit Delphi

Gregor Noll2009

Page 2: 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

Page 3: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

???

Page 4: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Klassen und Objekte

Erstellen Sie die Klasse TPerson mit UMLed

Stempel

Stempelfelder

Ausfüllen von Stempelfeldern

Lesen von Stempelfeldernobjektspezifische Operation

Page 5: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 6: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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“

Page 7: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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)

Page 8: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Programm: Oberfläche'View' der

Objekt-attribute

Steuerung'Controller

'

Erstellen Sie mit Delphi die Oberfläche und speichern Sie das Projekt im Ordner „Personen“

Page 9: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 10: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

UMLed: Konstruktor

Ergänzen Sie Ihre Klassendeklaration!

Page 11: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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;

Page 12: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Programm: Objekterzeugung

Page 13: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

UML: HAT-Beziehung

Page 14: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Datenkapselung

Daten (Attribute, Felder) eines Objekts sind von außen nur über öffentliche

Zugriffsmethoden lesbar oder veränderbar

Datenzugriff

Datenzugriff

Page 15: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Programm: Datenkapselung

Ergänzen Sie Ihr Programm

Page 16: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 17: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Nachricht als Anfrage

Implementieren Sie die Methode „TPerson.spricht"

Page 18: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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:

Page 19: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 20: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

BMI: Personen-Modell

Was stimmt hier nicht ?

Page 21: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

BMI - Programm

Page 22: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 23: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

BMI - mehrere Personen

Page 24: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 25: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Ampel

Page 26: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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"

Page 27: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Würfelspiel - Modell

Page 28: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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.

Page 29: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Würfelspiel - Spielobjekt

Page 30: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Automodell

(Modell nach Tobias Selinger)

Page 31: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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 !

Page 32: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Ein einfaches Konto

Nach der Erzeugung ist keine Änderung von Nummer und Inhaber mehr möglich!

Page 33: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Ein einfaches Konto

Page 34: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Person mit mehreren Konten

Eine Person soll über mehrere Bankkonten verfügen

Verwendete Klassen TPerson TKonto

wird von TPerson verwaltet

Page 35: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Person mit 3 Konten

Page 36: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Person mit 3 Konten

Page 37: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

???

Page 38: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Vererbung

Kernprinzip der OO-Softwareentwicklung

Einfaches Beispiel aus der Schulwelt

Page 39: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

TPerson

Vererbung - Generalisierung

Page 40: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Vererbung - Superklasse

Page 41: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Vererbung - GUI

Page 42: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Vererbung - Spezialisierung

Entwicklung von Unterklassen mit speziellen Attributen oder Methoden

Schulleiter beurteilt Lehrer

Page 43: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Vererbungshierarchie

Page 44: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 45: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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)

Page 46: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 47: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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

Page 48: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

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;

Page 49: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

Kursarbeiten

Zweigeteilt Fragen zu den Konzepten Programmierung auf Papier bzw. am Computer

Einsatz von UMLEdVorgabe von Programmgerüsten

Hinweise zum zeitlichen Umfang

Kursarbeit

Page 50: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.
Page 51: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

KA: Artikelverwaltung

Page 52: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

KA-NT: Reiseverwaltung

Page 53: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

KA: Blinklicht

Page 54: Bausteine zum objektorientierten Programmieren mit Delphi Gregor Noll 2009.

KA: Kinokasse