37
UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Embed Size (px)

Citation preview

Page 1: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

UST GmbH

Delphi-Schulung am 23.09.2002

Autor: Jörg Altegoer

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

Page 3: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Object-Pascal

Delphi‘s Pascal-Dialekt Schlüsselwörter Datentypen Konstanten, Variablen, Typen Ablaufsteuerung Prozeduren und Funktionen Exceptions

© 2002 by UST GmbH

Page 4: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Schlüsselwörter (I)

Object-Pascal© 2002 by UST GmbH

Page 5: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Schlüsselwörter (II) - Direktiven

Object-Pascal© 2002 by UST GmbH

Page 6: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 7: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 8: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Ablaufsteuerung

if..then..else case..of for..do while..do repeat..until Abbruchanweisungen: exit, abort, halt, ...

Object-Pascal© 2002 by UST GmbH

Page 9: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 10: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 11: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 12: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 13: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 14: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 15: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 16: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 17: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 18: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 19: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 20: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 21: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 22: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 23: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 24: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 25: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Ü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

Page 26: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Objektorientierung – Spezielle Themen

Konstruktoren / Destruktoren Gültigkeit von Objektinstanzen Objekte kopieren Schnittstellen

© 2002 by UST GmbH

Objektorientiertes Programmieren

Page 27: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 28: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 29: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 30: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 31: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 32: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 33: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 34: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

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

Page 35: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Übung 1: Grafische Objekte Vorstellung des Beispielprojekts: Grafikobjekte.dpr

Übungen© 2002 by UST GmbH

Page 36: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Ü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

Page 37: UST GmbH Delphi-Schulung am 23.09.2002 Autor: Jörg Altegoer

Ü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