Delphi-Schulung am Autor: Jörg Altegoer

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

Einführung in die Programmierung Zusammenfassung
10. Grundlagen imperativer Programmiersprachen
Unter- und Oberklassen: Beispiel
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung mit Java
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Wizards & Builders GmbH Einführung in die objektorientierte Programmierung Norbert Abb.
Einführung in die Programmierung
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Objektorientiertes Programmieren
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Modellierung grafischer Objekte
Modellierung grafischer Objekte
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Dynamische Datentypen
Grundlagen von Objekt-Pascal Erstellt von J. Rudolf überarbeitet von H.Brehm.
Variablenkonzept Klassisch, in Java Basistyp
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Kurzreferat über Funktionen und Prozeduren Von Alexander RothHomepage:
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Extended Pascal ( Erweitreung von Pascal) Name: Mehmet CELIK Matr :
Abstrakte Klassen und das Interface-Konzept
Objektorientierte (OO) Programmierung
Objektorientierte Programmierung §Klassen §Objekte §Attribute §Eigenschaften §Methoden §Datenkapselung §Ereignisse §Vererbung §Entwicklungszeit §Laufzeit.
Java Programme nur ein bisschen objektorientiert.
C++ FÜR cOMPUTERSPIELENTWICKLER
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Implementieren von Klassen
 Präsentation transkript:

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

Inhalt Die Schulung ist zweigeteilt: Object Pascal Kurzer Überblick über die Fähigkeiten von Delphi Objektorientiertes Programmieren Allgemeine Einführung Spezielle Themen Ü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; Typen Type 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

Exceptions Oder: Object-Pascal try Screen.Cursor := crHourGlass; ...z.B. in Datenbank schreiben Screen.Cursor := crDefault; except raise; end; Oder: try... finally <Speicher freigeben> -> wird immer ausgeführt! 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 Objektorientiertes Programmieren © 2002 by UST GmbH

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? Objektorientiertes Programmieren © 2002 by UST GmbH

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 Methoden Ereignisse 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: „Information Hiding“: 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: Nichtzugehörigkeit: 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“ Beispiel: Kreis und Rechteck 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 Protected Public Published (Delphi) 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 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 protected public published Objektorientiertes Programmieren © 2002 by UST GmbH

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 Objektorientiertes Programmieren © 2002 by UST GmbH

Konstruktoren / Destruktoren 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 erzeugen Procedure 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 Daten 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 TGraphicIntf = interface procedure Zeichnen; end; Oberklasse: TGraphicObject = class(TInterfacedObject, TGraphicIntf) public procedure Zeichnen; virtual; abstract; Konkrete Klasse: TKreis = class(TGraphicObject) procedure Zeichnen; override; 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