Beiträge durchsuchen

Object Pascal

Syntax

Über die Sprache Grundlegendes zur Syntax Über die Sprache Bei der Delphi-Sprache (auch Object Pascal genannt) handelt es sich um eine höhere, objektorientierte Programmiersprache. Die wichtigsten Dinge aus dem zugrunde liegenden Pascal sind natürlich noch enthalten, allerdings hat sich die Sprache, die mit Delphi 1 eingeführt wurde, stark weiterentwickelt. Der Begriff „Delphi Language“ wurde mit Delphi 7 im Jahr 2002 eingeführt. Grundlegendes zur Syntax Wie in vielen anderen Programmiersprachen werden mehrere Befehle durch Semikolon (;) […]

Allgemeines über Variablen und Konstanten

Was sind Variablen? Datentypen Deklaration Globale Variablen Lokale Variablen Initialisierung Zuweisungen Typumwandlung Konstanten Was sind Variablen? Variablen sind jedem bekannt, der schon einmal Mathematik-Unterricht hatte. Variablen sind einfach dafür da, irgendwelche Daten (Eingaben, Berechnungsergebnisse usw.) im Arbeitsspeicher abzulegen. Über den Variablennamen kann man direkt auf den Wert zugreifen. Heißen die Variablen in Mathe meist x oder y, sollte ein Programmierer solche Namen nicht verwenden. Sie erschweren die Lesbarkeit des Quellcodes sehr. Diese Erfahrung wird jeder […]

Datentypen

Teilbereichstypen Aufzählungstypen Strings Arbeiten mit Strings Mengentypen Arrays Dynamische Arrays Mehrdimensionale Arrays Records Variante Records Records mit Methoden Eigene Typen definieren Zeiger Jeder Variablen liegt in Object Pascal ein Typ zugrunde. Es gibt verschiedene Arten von Datentypen. Die meisten einfachen Datentypen wurden bereits im Kapitel über Variablen beschrieben worden. Doch es gibt weitere Teilbereichstypen Einen weiteren Datentyp, der eigentlich gar kein eigener Datentyp ist, gibt es noch, nämlich den Teilbereichstyp, auch Unterbereichstyp genannt. Hierüber kann […]

Schleifen

Was sind Schleifen? for-Schleife while-Schleife repeat-until-Schleife for-in-Schleife Bedingungen Schleifen abbrechen Was sind Schleifen? In einem Programmablauf kommt es mitunter vor, dass eine bestimmte Befehlsfolge mehrmals hintereinander ausgeführt werden soll. So etwas nennt man „Schleife“. Von ihnen gibt es unterschiedliche Arten: Sie unterscheiden sich darin, ob die Abbruchbedingung vor dem ersten Durchlauf geprüft werden soll oder erst danach und ob bereits feststeht, wie viele Male eine Schleife durchlaufen wird. for-Schleife Die for-Schleife hat folgenden Aufbau: for […]

Verzweigungen

if-else case-Verzweigung if-else Es gibt kaum ein Programm, bei dem immer alle Befehle hintereinander ausgeführt werden. Verzweigungen sind ein häufig eingesetztes Mittel. Es handelt sich hierbei um Fallunterscheidungen, die in der Regel mit if durchgeführt werden: if then ; oder if then else ; Eine Anweisung kann dabei wiederum aus einer neuen if-Bedingung bestehen. Beispiel: if x>0 then ... else if x

Boolesche Operatoren

Notation von logischen Bedingungen Kurzschlussverfahren Operatoren überladen Notation von logischen Bedingungen Eine logische Bedingung wie x>0 versteht jeder, der schon einmal Mathematikunterricht hatte. Allerdings kann eine Bedingung auch aus mehreren einzelnen Bedingungen bestehen: z. B. x größer als 0 und kleiner als 10. In Pascal kann man das leider nicht schreiben wie in Mathe (00 und x<10; mehrere einzelne Bedingungen müssen in Pascal jeweils von runden Klammern umgeben werden. Außerdem werden die folgenden logischen Operatoren […]

Prozeduren und Funktionen

Was sind Prozeduren und Funktionen? Aufbau einer Prozedur Aufbau einer Funktion forward- und interface-Deklarationen Parameter Wert- und Variablenparameter Konstantenparameter Ausgabeparameter Array-Parameter Default-Parameter Prozeduren und Funktionen überladen Prozeduren und Funktionen abbrechen inline-Funktionen und -Prozeduren Was sind Prozeduren und Funktionen? Prozeduren und Funktionen, auch „Unterprogramme“ oder Routinen genannt, haben die Aufgabe, öfter wiederkehrenden Programmcode sozusagen als Baustein zusammenzufassen. Dieser Baustein erhält einen eindeutigen Namen, über den er ausgeführt werden kann. Aufbau einer Prozedur Jede Prozedur besteht aus […]

Programmaufbau

Projektdatei: Anwendung Projektdatei: Library Projektdatei: Package Units Units verwenden Positionen der uses-Klausel interface und implementation initialization und finalization Namespaces Projektdatei: Anwendung Eine in Delphi erstellte Anwendung (auch Projekt genannt) besteht aus einer Projektdatei mit der Endung .dpr, die das Hauptprogramm enthält, und evtl. einer oder mehreren Units. Der Aufbau der Projektdatei sieht so aus, wenn es sich um eine Anwendung mit grafischer Benutzeroberfläche (GUI) handelt: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} […]

Klassen und Objekte

Was ist Objektorientierung? Klassen Instanzen/Objekte Methoden Self Sender Klassenmethoden Botschaftsmethoden Attribute oder Felder Klassenfelder Eigenschaften oder Properties Array-Eigenschaften Klasseneigenschaften Was ist Objektorientierung? Die objektorientierte Programmierung wurde in den 80er-Jahren entwickelt und soll die unstrukturierte Programmierung (am Anfang ein begin, dann Befehl auf Befehl und am Ende ein end, dazwischen möglichst viele Sprünge mit goto) ablösen. Die Objektorientierung ist ein sehr komplexes Gebiet und soll hier deshalb nur in einfachen Worten für das grundlegende Verständnis geschildert […]

Objekte erzeugen und freigeben

Objekte erzeugen: Der Konstruktor Eigener Konstruktor Objekte freigeben: Der Destruktor Eigener Destruktor Objekte erzeugen: Der Konstruktor Instanzen einer Klasse entstehen erst dadurch, dass sie ausdrücklich erzeugt werden. Dies geschieht mit dem Konstruktor Create. „Konstruktor“ ist ein Fremdwort und bezeichnet jemanden, der etwas konstruiert, also erzeugt. Man könnte create auch eine Methode nennen; es gibt jedoch einen großen Unterschied: Methoden können nur aufgerufen werden, wenn die Instanz bereits existiert. Der Konstruktor dagegen erzeugt die Instanz aus […]

Zugriff auf Objekte

Zugriff auf Objekte Zur Erinnerung noch einmal unsere Auto-Klasse von vorhin: type TAuto = class private FFarbe: string; FBaujahr: integer; procedure SetFarbe(Farbe: string); public property Farbe: string read FFarbe write SetFarbe; end; Diese Klasse enthält folgende Klassenkomponenten: Datenfelder (Attribute), hier: FFarbe, FBaujahr Methoden, hier: SetFarbe Eigenschaften (Property), hier: Farbe Diese Komponenten sind im Bauplan (der Klasse) vorgegeben, können jedoch in allen Instanzen dieser Klasse unterschiedliche Werte haben. Ein Zugriff auf diese Komponenten ist deshalb nur […]

Funktions- und Methodenzeiger

Funktionen und Prozeduren können selbst in Variablen gespeichert werden (bzw. ein Verweis auf sie). Somit ist es möglich, einer Funktion eine andere Funktion als Parameter zu übergeben. type TMeineFunktion = function: Integer; In diesem Fall haben die Funktionen oder Prozeduren keinen Namen, sondern bestehen aus dem Schlüsselwort function oder procedure, bei Bedarf gefolgt von Parametern in runden Klammern und einem Rückgabewert. Handelt es sich um Methoden, folgt noch „of object“: TMeineMethode = procedure of object; […]

Vererbung

Wir kommen nun zu einem wichtigen Punkt beim Arbeiten mit Klassen: der Vererbung. Bisher haben wir unsere Klassen aus dem „Nichts“ komplett neu aufgebaut. Dennoch kannten sie bereits einige vordefinierte Befehle, die wir nicht programmiert haben wie z.B. create und destroy. Das liegt daran, dass in Delphi alle Klassen automatisch Nachkommen von TObject sind. Und wie im wirklichen Leben erben die Nachkommen das Verhalten ihrer Vorfahren. Wird also ein Befehl an einer Instanz aufgerufen, der […]

Polymorphie

Typecasting – is und as Durch voriges Beispiel ergibt sich allerdings ein Problem. Die Variable m ist vom Typ TMensch, verweist aber auf einen Schüler. Nach der Definition der Klasse TSchueler besitzt diese das Attribut FTaschengeld. Die Anweisung m.FTaschengeld führt jedoch zu einer Fehlermeldung, da der Compiler die Variable m nach wie vor für eine Instanz von TMensch hält. Nun wissen wir jedoch, dass m inzwischen auf einen Schüler verweist und deshalb auch das Taschengeld […]

Verbergen, überschreiben, überladen

Das Hinzufügen neuer Attribute, Eigenschaften oder Methoden in Unterklassen ist eine praktische Sache. Was passiert aber, wenn ein vermeintlich neues Element den gleichen Namen verwendet wie ein Element der Vorfahrenklasse? Elemente gleichen Namens können einander innerhalb verwandter Klassen verbergen überschreiben überladen Verbergen geerbter Elemente Das Prinzip „Verbergen“ besteht darin, in einer Nachkommenklasse den Namen eines geerbten Elements neu zu vergeben. Dies kann jede Art von Klassen-Elementen betreffen. type TBerufstaetig = class(TMensch) private FKontoNr: integer; FBankleitzahl: […]

Virtuelle, dynamische und abstrakte Methoden

Neues Beispiel: Angenommen, wir haben eine Klasse TKoerper, die mehrere Unterklassen hat, z. B. TKugel, TQuader usw. Alle Klassen haben bestimmte Methoden gemeinsam, wie das Berechnen von Volumen und Oberfläche. Allerdings muss jede der Unterklassen eine andere Berechnung durchführen, da die Formeln für Kugeln und Quader unterschiedlich sind. Und obwohl alle Unterklassen diese gleichnamigen Methode besitzen, kann sie nicht ohne Weiteres in der Oberklasse aufgeführt werden, da hier ja keine Implementierung möglich ist (jeder rechnet […]

Helferklassen

Mit .NET wurde Delphi um das Konzept der unterstützenden Klassen (class helper) erweitert. Dabei handelt es sich um eine Klasse, die eine bereits bestehende Klasse erweitert bzw. abändert, ohne sie abzuleiten. Beispiel: type TMyClassHelper = class helper for TMyClass procedure MyProc; end; ... procedure TMyClassHelper.MyProc; begin end; Damit kann man auch die Prozedur MyProc an einer TMyClass-Instanz aufrufen. Hatte diese Klasse bereits eine gleichnamige Methode, wird die Methode der unterstützenden Klasse aufgerufen, da diese Vorrang […]

Exceptions

Bei einer objektorientierten Programmiersprache dürfen Exceptions nicht fehlen. Exceptions werden ausgelöst, wenn ein Fehler auftritt. Wird die Stelle im Code von try…except oder try…finally umgeben, so wird die Programmausführung an der Stelle abgebrochen, an der der Fehler aufgetreten ist, und im except- bzw. finally-Abschnitt fortgesetzt. Exceptions sind Klassen, die Exception als gemeinsame Basisklasse haben. Im Code, der im Fehlerfall ausgeführt wird, kann geprüft werden, was für eine Exception ausgelöst wurde. Es ist auch möglich, eigene […]

Interfaces

Ein Interface wird von der Syntax her ähnlich deklariert wie eine Klasse. Es besitzt allerdings nur öffentliche (public) Methoden, die nicht implementiert werden. Klassen können von einem oder mehreren Interfaces ableiten und müssen dann die im Interface deklarierten Methoden auch implementieren. Dass eine Klasse ein bestimmtes Interface verwendet, bedeutet also, dass eine bestimmte Menge von Methoden zur Verfügung gestellt wird. Dies ist insbesondere bei verteilten Objektmodellen von Bedeutung (z.B. SOAP und CORBA). Die Namen von […]

Styleguide

Einführung Dieses Dokument hat nicht die Absicht, eine Grammatik für die Delphi-Sprache zu definieren. Es ist zum Beispiel nicht erlaubt, einen Strichpunkt vor eine else-Anweisung zu setzen; der Compiler lässt das einfach nicht zu. Deshalb werde ich diese Regel nicht in diesem Styleguide auslegen. Dieses Dokument möchte eine saubere Vorgehensweise an Stellen, an denen die Sprache einem Wahlmöglichkeit gibt, festlegen. Ich werde in der Regel nichts über Sachen sagen, die nur auf eine Art behandelt […]