Date post: | 05-Apr-2015 |
Category: |
Documents |
Upload: | ginther-schillinger |
View: | 107 times |
Download: | 0 times |
UST GmbH
Delphi-Schulung am 23.09.2002
Autor: Jörg Altegoer
Inhalt
Die Schulung ist zweigeteilt:I) Object Pascal
• Kurzer Überblick über die Fähigkeiten von Delphi
II) Objektorientiertes Programmieren• Allgemeine Einführung
• Spezielle Themen
III) Übungen• Einfache Klassenhierarchie (grafische Objekte)
• Erweiterungen des Beispiels
• Dateikopierer
© 2002 by UST GmbH
Object-Pascal
Delphi‘s Pascal-Dialekt Schlüsselwörter Datentypen Konstanten, Variablen, Typen Ablaufsteuerung Prozeduren und Funktionen Exceptions
© 2002 by UST GmbH
Schlüsselwörter (I)
Object-Pascal© 2002 by UST GmbH
Schlüsselwörter (II) - Direktiven
Object-Pascal© 2002 by UST GmbH
Datentypen Boolean (ByteBool, WordBool, LongBool) Integer, ShortInt, SmallInt, Longint, Int64 Byte, Word, LongWord, Cardinal Real48, Single, Double, Real, Extended, Comp, Currency String, PChar, weitere String-Typen Prozedurale Typen Keine neuen Operatoren wie in C Aber Datentypen, z.B.: type real = double;
Object-Pascal© 2002 by UST GmbH
Konstanten, Variablen, Typen Deklaration im Interface-Teil einer Unit oder vor begin einer
Prozedur/Funktion Konstanten
Const csDBTrue = ´Y´; csDBFalse = ´N´; TrueFalseArray : array[0..1] of string = (csDBTrue, csDBFalse);
Variablen: var i : integer; s : string;
a : array[0..10] of double;
TypenType string50 = string[50]; USTTrueFalse = (tfTrue, tfFalse); TPoint = record X, Y : integer; end;
Object-Pascal© 2002 by UST GmbH
Ablaufsteuerung
if..then..else case..of for..do while..do repeat..until Abbruchanweisungen: exit, abort, halt, ...
Object-Pascal© 2002 by UST GmbH
Prozeduren
Kopf mit Parametern Lokale Konstanten, Variablen, Typen Begin..end Beispiel:
• „Normale“ Parameter
• Const-Parameter
• Var-Parameter
• Optionale Parameter
Object-Pascal© 2002 by UST GmbH
Funktionen
„Prozeduren mit Rückgabewert“ Rückgabe mit: Result := <irgendwas>; Result muß nicht deklariert werden – gibt‘s
immer in jeder Funktion Beispiel...
Object-Pascal© 2002 by UST GmbH
Exceptionstry Screen.Cursor := crHourGlass; ...z.B. in Datenbank schreiben Screen.Cursor := crDefault;except Screen.Cursor := crDefault; raise;end;
Oder:try...finally <Speicher freigeben> -> wird immer ausgeführt! raise;end;
Object-Pascal© 2002 by UST GmbH
Objektorientierung - Einführung
Objektorientierte Sprachen Grundprinzipien Klassen – Objekte – Instanzen Kapselung, Abgeschlossenheit, Vererbung Polymorphie Gültigkeitsbereiche Virtuelle und abstrakte Methoden
© 2002 by UST GmbH
Objektorientiertes Programmieren
Objektorientierte Sprachen Delphi: Ja, vollständig objektorientiert C++: Ja, vollständig objektorientiert Visual Basic: Nur zum Teil
– Keine Vererbung– Polymorphie nur sehr eingeschränkt
PHP: Nur zum Teil– Keine Konstruktoren und Destruktoren
PowerBuilder: Ja, vollständig objektorientiert Java: Ja, vollständig objektorientiert Welche weiteren Sprachen kennst Du noch?
© 2002 by UST GmbH
Objektorientiertes Programmieren
Objektorientiertes Programmieren
Nachteil von strukturierten Typen:– Enthalten „nur“ Daten
– Können mit den enthaltenen Daten nichts „tun“
– Können nicht auf z.B. Benutzereingaben „reagieren“
– Daher: Objekte bauen...
Programmierprinzip:– Programm ist keine Ansammlung von Funktionen mehr
– Programm besteht aus einer Reihe von Objektbeschreibungen
– Programm verwendet „Instanzen“ der Objektbeschreibungen, die untereinander agieren (Aktionen ausführen und Nachrichten austauschen)
Objektorientiertes Programmieren© 2002 by UST GmbH
Objekte
Eigenschaften– Daten des Objekts
– z.B. Rechteck: x, y, Länge, Breite
Methoden– Verhalten/Fähigkeiten des Objekts
– z.B. Rechteck: zeichne Rechteck
Ereignisse– Reaktionsweisen des Objekts
– z.B. Rechteck: Meldung ausgeben bei Klick
Objektorientiertes Programmieren© 2002 by UST GmbH
Klassen – Objekte – Instanzen
Klasse (=Objekttyp):– Spezifikation von
• Eigenschaften
• Methoden
• Ereignisse
• Zugriffsrechte / Gültigkeitsbereiche
Objekt:– Allgemeiner Begriff (Zusammenfassung) für alle Instanzen einer
Klasse
Instanz:– Konkretes Objekt mit gefüllten Daten (Eigenschaften)
Objektorientiertes Programmieren© 2002 by UST GmbH
Kapselung
Bedeutet:– Zusammenfassung von Daten und Fähigkeiten zu einem Objekt.
„Information Hiding“:– Verstecken des „Eingemachten“ nach außen
– Ermöglicht wird nur der Zugriff auf die notwendigen Eigenschaften, Methoden und Ereignisse
– Beispiel Kreis: von außen kann zwar auf Eigenschaft „Fläche“ zugegriffen werden, nicht jedoch auf die zur Berechnung herangezogene Funktion.
Objektorientiertes Programmieren© 2002 by UST GmbH
Abgeschlossenheit
Vollständigkeit:– Schnittstelle der Klasse sollte möglichst vollständig sein, damit sie
sinnvoll eingesetzt werden kann.
– Gegenbeispiel Kreis: wenn zwar Radius, aber keine Fläche Benutzer muss Fläche selber berechnen)
Nichtzugehörigkeit:– Eigenschaften und Methoden, die nichts mit dem Sinn und Zweck
der Klasse zu tun haben, haben dort nichts verloren
– Beispiel Kreis: Straße und Hausnummer sinnlos.
Objektorientiertes Programmieren© 2002 by UST GmbH
Vererbung / Inheritance
Aufteilung in: Ober- und Unterklassen Unterklassen:
– „erben“ alle Eigenschaften und Methoden
– Können Methoden der Oberklasse bei Bedarf ändern
– Hinzufügen weiterer Eigenschaften und Methoden
Vorteile:– Neucodierung ähnlicher Funktionen kann unterbleiben
– Verwendung der geerbten Fähigkeiten
Inheritance:– Aufruf der geerbten Methode. Delphi: inherited
Objektorientiertes Programmieren© 2002 by UST GmbH
Vererbung - Beispiel Oberklasse: Allgemeines Grafikobjekt
– x-Koordinate– z-Koordinate– Methode: Zeichnen
Unterklassen:– Kreis:
• Radius
– Rechteck:• Länge• Breite
– Geerbt: x-/y-Koordinate, Zeichnen-Methode
Objektorientiertes Programmieren© 2002 by UST GmbH
Polymorphie
„Vielgestaltigkeit“– Verschiedene verwandte Objekte haben Funktionen mitgleichem
Namen, implementieren sie aber jeweils auf andere Art und Weise.
– Arbeitsvariablen können den Typ einer Oberklasse haben, aber auf eine Instanz einer Unterklasse verweisen.
Beispiel: Kreis und Rechteck– Beide haben Eigenschaft „Flaeche“, die sich der Methode
„GetFlaeche“ bedient
– Beiden haben Methode „GetFlaeche“, die jedoch unterschiedlich implementiert sind:
• Kreis: Pi * Radius²
• Rechteck: Länge * Breite
Objektorientiertes Programmieren© 2002 by UST GmbH
Gültigkeitsbereiche Private
– Nur innerhalb des Objekts verfügbar– Delphi auch: innerhalb derselben „Unit“ von außen
Protected– Hierauf kann von abgeleiteten Objekten zugegriffen werden
Public– Öffentliche Schnittstelle: von außen sichtbar
Published (Delphi)– Wie „Public“, es werden aber „Typinformationen“ beim
Kompilieren erzeugt– Können im Objektinspektor angezeigt werden
Objektorientiertes Programmieren© 2002 by UST GmbH
Gültigkeitsbereiche - Übersicht
Objektorientiertes Programmieren© 2002 by UST GmbH
Zugriff von Innerhalb der Klasse
Aus abgeleiteter Klasse
außerhalb der Klasse (in Unit der Klasse)
außerhalb der Klasse
Objekt-Inspektor
private Ja Nein Ja Nein Nein
protected Ja Ja Ja Nein Nein
public Ja Ja Ja Ja Nein
published Ja Ja Ja Ja Ja
Virtuelle und abstrakte Methoden Virtuelle Methoden
– Können von abgeleiteten Klassen überschrieben werden– Implementieren bereits ein bestimmtes Verhalten– Delphi-Schlüsselwort: virtual bzw. dynamic.
Abstrakte Methoden– Definieren lediglich eine Schnittstelle– Implementieren selber noch keinerlei Verhalten.– Müssen von abgeleiteten Klassen überschrieben werden, um
aufgerufen werden zu können– Delphi: Zugriff auf abstrakte Methode gibt „abstrakten Fehler“
Überschreiben von Methoden– Delphi: Schlüsselwort override
Objektorientiertes Programmieren© 2002 by UST GmbH
Überladene Methoden
Methoden mit gleichem Namen aber unterschiedlicher Schnittstelle
Delphi-Schlüsselwort: overload Beispiel:
– Kreis:procedure Init(x, y, Radius : double); overload;
– Rechteck:procedure Init(x, y, Laenge, Breite : double); overload;
Objektorientiertes Programmieren© 2002 by UST GmbH
Objektorientierung – Spezielle Themen
Konstruktoren / Destruktoren Gültigkeit von Objektinstanzen Objekte kopieren Schnittstellen
© 2002 by UST GmbH
Objektorientiertes Programmieren
Konstruktoren / Destruktoren
Konstruktoren:– Erzeugen und Initialisieren einer Instanz einer Klasse
– Erst nach Aufruf des Konstruktors kann das Objekt verwendet werden!
Destruktoren:– Vernichten einer Instanz einer Klasse und Speicherfreigabe.
– Nach Aufruf des Destruktors kann auf die Objektinstanz nicht mehr zugegriffen werden!
Objektorientiertes Programmieren© 2002 by UST GmbH
Konstruktoren Speicher für die Objektinstanz reservieren Variablen werden mit Null-Werten initialisiert Programmierer-Anweisungen ausführen Rückgabe eines Zeigers auf die Objektinstanz Jede Klasse muss über einen Konstruktor verfügen Mehrere überladene Konstruktoren möglich Delphi: constructor
Objektorientiertes Programmieren© 2002 by UST GmbH
Destruktoren Speicher für die Objektinstanz freigeben Jede Klasse muss über einen Destruktor verfügen Mehrere überladene Destruktoren möglich, aber nicht
empfehlenswert Delphi: mit inherited den ererbten Destruktor aufrufen Delphi: destructor
Objektorientiertes Programmieren© 2002 by UST GmbH
Beispiel: Objektinstanz erzeugenProcedure TuWas;
Var oKreis : TKreis;
Begin
// Kreisinstanz erzeugen
oKreis := TKreis.Create(100, 100, 50);
// Kreis zeichnen
oKreis.Zeichnen;
// Kreisinstanz freigeben
oKreis.Free;
oKreis := nil;
End;
Objektorientiertes Programmieren© 2002 by UST GmbH
Prüfung einer Instanz auf Gültigkeit
Funktion Assigned– Prüft, ob einer Objektvariablen eine Instanz zugeordnet ist– Beispiel: if Assigned(oKreis) then ...– Analog kann verwendet werden: if oKreis = nil then ...– Bei Freigabe einer Objektinstanz aber späteren Verwendung der
zugehörigen Arbeitsvariable:• Dafür sorgen, dass Variable auf nil gesetzt wird:
oKreis.Free;oKreis := nil;
• Dann gelingt Aufruf: if Assigned(oKreis) then ...• Wenn oKreis := nil fehlt, ist Assigned(oKreis) = True trotz der
freigegebenen Instanz!
Konstante nil– Reserviertes Wort für nicht zugewiesene Objektvariablen
Objektorientiertes Programmieren© 2002 by UST GmbH
Objekte kopieren
Referenz kopieren– Mit oKreis2 := oKreis1 wird nur ein Verweis auf oKreis1
angelegt, nicht jedoch eine neue Instanz mit einer Kopie der Werte.
Daten kopieren– Objekt mit einer Methode Assign ausstatten, z.B.:
procedure Assign(Dest : TKreis); begin
Dest.Radius := self.Radius;end;
– Kopieren (ergibt Instanz mit gleichen Daten):oKreis2 := TKreis.Create;oKreis1.Assign(oKreis2);
Objektorientiertes Programmieren© 2002 by UST GmbH
Schnittstellen (interface) Eine Schnittstelle ist eine Zusammenfassung von nach
außen sichtbaren Eigenschaften, Methoden und Ereignissen.
Man kann vor Deklaration einer Klasse Schnittstellen deklarieren.
Hat man angegeben, dass eine Klasse eine bestimmte Schnittstelle hat, muss sie sie auch implementieren!
Delphi:– Schlüsselwort interface
– Klassen immer ableiten von TInterfacedObject oder dessen Nachfahren.
Objektorientiertes Programmieren© 2002 by UST GmbH
Schnittstellen - Beispiel
Schnittstelle:TGraphicIntf = interface
procedure Zeichnen;
end;
Oberklasse:TGraphicObject = class(TInterfacedObject, TGraphicIntf)
public
procedure Zeichnen; virtual; abstract;
end;
Konkrete Klasse:TKreis = class(TGraphicObject)
public
procedure Zeichnen; override;
end;
Objektorientiertes Programmieren© 2002 by UST GmbH
Übung 1: Grafische Objekte Vorstellung des Beispielprojekts: Grafikobjekte.dpr
Übungen© 2002 by UST GmbH
Übung 2: Erweiterung von Beispiel 1
Ergänze Beispiel 1 um ein neues Objekt: TDreieck– Welche Eigenschaften benötigt es. Implementiere sie!
– Implementiere die Zeichnen-Methode des Dreiecks!
– Zeichne ein Dreieck mit Deiner neuen Methode!
Leite ein neues Objekt ab:– TEllipse = class(TKreis)
– Welche neuen Eigenschaften muss die Ellipse haben? Implementiere sie!
– Implementiere die zugehörige Zeichnen-Methode!
Ergänze die Objekte um Grafikeigenschaften (z.B. Zeichenfarbe, Füllfarbe, Linienbreite)!
Übungen© 2002 by UST GmbH
Übung 3: Dateikopierer Objektstruktur für Dateikopierer überlegen Objektstruktur implementieren Rahmenprogramm implementieren
___________________________________
Exkurs: Routinen zur Dateibehandlung– AssignFile, Reset, Rewrite, ReadLn, WriteLn, CloseFile
– FindFirst, FindNext, TSearchRecord
– Utility-Routinen, z.B.: FileExists, DirectoryExists, ExtractFileName, ExtractFileDir
Übungen© 2002 by UST GmbH