Step 08 - OOP Begriffsklärung

Spendenaufruf des DRK Ortsvereins Spielberg e.V.

16. April 2023

 

Hallo liebe Besucherin, hallo lieber Besucher!

In einem ganz anderen Kontext möchte ich hier nun bewerben:
Der Verein, für den ich auch einstehe, benötigt Spenden:


Bitte bei der Überweisung den Verwendungszweck beachten!

Der neuste Stand gibt es hier zu sehen!

Großzügigkeit ist keine Gabe, sondern eine Haltung des Herzens. (Mahatma Gandhi)

 

 

Objektorientierte Programmierung am Beispiel einiger Delphi-Objekte

Kommentar des Webmasters:

Dieses Tutorial hat Jan B. in Eigenregie vorbereitet, programmiert und damals in der AG vorgetragen. Vielen Dank an Jan B. für diesen Beitrag!
Bis auf einige kleine Anpassungen ist der Beitrag noch sehr original-getreu.
Ich wünsche euch viel Spaß ;)
Hier möchte ich euch in die objektorientierte Programmierung einführen. Dazu zeige ich einige Objekte und deren Eigenschaften als Beispiel.
Objektorientierte Programmierung macht einiges wesentlich einfacher. Ein Objekt verbindet mehrere Eigenschaften, Methoden und Ereignismethoden zu einem bestimmten Zweck, wo man auch von Kapselung spricht. Eigenschaften bestimmen ein Objekt genauer. Man spricht hier auch oft von Attributen, die ein Objekt hat. Im Objektinspektor ist z.b. die Eigenschaft "Name" für die Definition des Namens des Objekts zuständig, durch den auf das Objekt später im Quelltext zugegriffen werden kann. Methoden sind ebenso wichtig: Durch diese kann ein Objekt etwas tun oder auf etwas reagieren - hier beginnt der ganze Zauber in der Programmierung. Eine Methode kann z.B. bei einem Verschlüsselungsprogramm die Funktion "VerschluesseleText" sein. Von einer Ereignismethode spricht man, wenn diese direkt auf eine Aktion reagiert. Bei einem Button wird z.B. beim OnClick-Ereignis darauf reagiert, dass der Benutzer gerade auf den Button geklickt hat - was wir ja schon im Hallo-Welt Tutorial kennen gelernt haben. Methoden werden zudem Unterteilt in Prozeduren und Funktionen. Dies kann ganz einfach daran unterschieden werden, wenn wir überlegen, ob die Methode etwas berechnen und an den Absender zurückgeben soll, oder nur etwas ausführen soll. Prozeduren sind z.B. zum Anzeigen einer einfachen Nachricht hilfreich, da wir vom Benutzer hier keine Rückmeldung brauchen. Die Methode "VerschluesseleText" oben, ist eher eine Funktion, da hier als Parameter ein Text übergeben werden kann und als Resultat den verschlüsselten Text zurück gibt. Wir werden später nochmal genauer darauf eingehen.
Im folgenden werden einige VCL-Objekte und ihre Ereignisse vorgestellt.
TForm
Eigenschaft Beschreibung Beispiel
Caption Ändert den Titel des Programms. caption:='Mein Programm';
BorderStyle Die Art des Fensterrahmens. (bsNone, bsSingle, bsSizeable, ...) = (Kein Rand, Normal und nicht veränderbar, Normal und veränderbar,...) BorderStyle:=bsSingle;
Position Kann bei Delphi auch rechst unten im Eck (bei Formularansicht) auf eine feste Position geschoben werden. Position:=poScreenCenter;
AutoSize Gibt an, ob das Formular seine größe automatisch anpassen soll oder nicht. AutoSize:=false;
FormStyle Hier kann man einstellen, dass das Formular immer oben sein soll. FormStyle:=fsStayOnTop;
WindowState Startet das Programm maximiert, minimiert oder wird es ganz normal angezeigt?. WindowState:=wsMaximized;
Color Farbe des Formulars. Farben (TColor) fangen meist mit cl an. Einfach mal Cl eingeben und Strg+Leertaste drücken ;)
Dieses Feld ist in fast jeder sichtbaren Komponente vorhanden.
Color:=clSkyblue;
Name ändert den Name des Formulars. Unter diesem Namen z.B. MainForm kann man auf die einzelnen Eigenschaften des Objektes zugreifen. Dieser Name muss wie eine Variable aufgebaut sein. Dieses Feld ist bei jedem Objekt vorhanden. Es kann nicht im Quelltext verändert werden.
 
TEdit
Eigenschaft Beschreibung Beispiel
Text  Inhalt des Edits (String) Text:='asd';
MaxLength Maximale Text-Länge im Eingabefeld MaxLength:=25;
PasswordChar  z.B. Rauten bei Eingabe (Char) PasswordChar:='#'
 
TButton
Eigenschaft Beschreibung Beispiel
Caption Der Text des Buttons Caption:='Klick mich';
default Legt fest, ob der Button der Standardbutton ist. Wenn er eingeschaltet ist, wird der Button geklickt wenn die Enter-Taste gedrückt wird. default:=true;
Enabled true => Aktiviert; false => Deaktiviert enabled:=false;
Visible Sichtbarkeit (Boolean) Visible:=true;
Width Breite in Pixeln (Integer) Wdth:=223;
Height Höhe in Pixeln (Integer) Height:=100;
 
TLabel
Eigenschaft Beschreibung Beispiel
Font Schriftart einstellen (TFont) Font.Name:='Comic Sans MS';
WordWrap Zeilenumbruch (Boolean) Wordwrap:=true;
Autosize Automatische Größenänderung (boolean) Autosize:=false;
 

Ein weiteres Beispiel:

Lasst uns noch einmal Delphi starten und ein neues Projekt öffnen. Hier fügen wir dann im Formular ein Edit, einen Button und ein Label von der Tool-Palette ein.
Führe nun folgende Schritte aus:
  • Speichere alles ab - Unit1 -> MainUnit, Projekt -> OOPBeispiel
  • Ändere den Namen der Elemente:
    • Button: BtnWechseln;
    • Edit: EdString1;
    • Label: LblString2
    • Form1: MainForm
  • Ändere die Beschriftung der einzelnen Elemente:
    • Button: "Wechsele!"
    • Edit: (leer lassen)
    • Label: "Eingabe:"
  • Ändere die Farbe des Edits in clSkyBlue (Eigenschaft Color),
  • Das Formular sollte immer zentriert starten (Position poScreenCenter),
  • Der Maximier-Button des Formulars soll deaktiviert sein (siehe Eigenschaft BorderIcons),
  • Beim Label: Ändere die Schriftart (Font.Name) in eine, die dir gut gefällt, und ändere ebenfalls die Schrift-Größe (Font.Size),
  • Erstelle die BtnWechselnClick-Prozedur, indem du doppelt auf den Button klickst,
  • Deklariere eine Variablen "stringTausch" vom Typ String,
  • Weise den Inhalt des Edits (Text) der Variable stringTausch zu,
  • Weise den Inhalt des Labels (Caption) dem Edit zu,
  • Zu guter Letzt musst du nur noch stringTausch dem Caption-Attribut des Labels zuweisen.
Und so sollte der Code-Ausschnitt nun aussehen:
procedure TMainForm.BtnWechselnClick(Sender: TObject);
var                                       // Variablen-Deklaration
  stringTausch : String;
begin
  stringTausch := EdString1.Text;        // Eingegebenen String zwischenspeichern
  EdString1.Text := LblString2.Caption;  // Label-Text in Edit-Text schreiben
  LblString2.Caption := stringTausch;    // den zwischengespeicherten String nun in Label schreiben
end;
Falls es nicht gleich funktioniert, schaue genau auf die richtige Schreibweise und versuche ein Schritt nach dem Anderen. OOP wird uns noch lange verfolgen und in Step 19, nachdem wir mehr Algorithmik verstehen, beschäftigen wir uns wieder damit.
 

Weitere, in Delphi häufig verwendete Objekte:

TCheckBox
procedure TMainForm.FormLoad(Sender: TObject);
begin
  cbBeispielCheckBox.Caption := 'Check me';
  cbBeispielCheckBox.Checked := false;  // Setzt den Anfangszustand der Checkbox
end;
TRadioButton
procedure TMainForm.FormLoad(Sender: TObject);
begin
  rbBeispielRadioButton.Caption := 'Option 1';
  rbBeispielRadioButton.Checked := true;  // Setzt diese RadioButton als die ausgewählte Option
end;
TComboBox
procedure TMainForm.FormLoad(Sender: TObject);
begin
  cbBeispielComboBox.Items.Add('Option 1');
  cbBeispielComboBox.Items.Add('Option 2');
  cbBeispielComboBox.Items.Add('Option 3');
  cbBeispielComboBox.ItemIndex := 0;  // Setzt die erste Option als die ausgewählte Option
end;
TMemo
procedure TMainForm.FormLoad(Sender: TObject);
begin
  mBeispielMemo.Lines.Add('Dies ist eine Zeile.');
  mBeispielMemo.Lines.Add('Dies ist noch eine Zeile.');
  mBeispielMemo.ReadOnly := true;  // Setzt das Memo auf Nur-Lesen
end;

Die Beispiel-Quelltexte, die ich vorher gegeben habe, dienen lediglich dazu, die Verwendung und Manipulation dieser spezifischen Komponenten in der Delphi-Programmiersprache zu demonstrieren. Es ist wichtig zu betonen, dass diese Beispiele nur zu Lernzwecken dienen und nicht unbedingt die beste oder effizienteste Methode repräsentieren, diese Komponenten in einer tatsächlichen Anwendung zu verwenden.

In der objektorientierten Programmierung, und insbesondere in GUI-basierten Anwendungen, ist es oft sinnvoll, die Initialisierung und Konfiguration der Benutzeroberflächenkomponenten im Objektinspektor durchzuführen. Hier sind einige Gründe dafür:

  • Unterscheidung von Entwurf und Logik: Die Verwendung des Objektinspektors ermöglicht es Ihnen, das Design und Layout der Benutzeroberfläche getrennt von der Programmlogik zu behandeln. Dies erleichtert die Verwaltung und Wartung beider Aspekte Ihrer Anwendung.
  • Performance: Die Initialisierung der Komponenteneigenschaften im Objektinspektor kann bei der Ausführung der Anwendung effizienter sein, da es nicht notwendig ist, zusätzlichen Code in der Laufzeit auszuführen.
  • Übersichtlichkeit: Es ist einfacher, alle Eigenschafteneinstellungen an einem Ort (Objektinspektor) zu sehen und zu ändern, anstatt sie über den Code verteilt zu haben.
  • Vermeidung von Fehlern: Wenn Werte im Code initialisiert werden, besteht auch ein größeres Risiko für Programmierfehler.

Zur Verdeutlichung dieser Punkte, beachten Sie bitte, dass die Anpassung der Komponenteneigenschaften in der `FormLoad`-Methode bedeutet, dass untrennbar mit der Ausführungslogik der Anwendung verknüpft ist. Anstatt eine klare Trennung zwischen Design und Logik zu haben, mischen Sie beide, was zu einem Code führen kann, der schwerer zu pflegen und zu debuggen ist.

Also, obwohl es Situationen geben kann, in denen es sinnvoll ist, die Eigenschaften der Komponenten programmatisch zu modifizieren (zum Beispiel, wenn diese auf Benutzereingaben oder andere Dynamiken in Ihrer Anwendung reagieren müssen), ist es in der Regel eher ratsam, die Initialwerte und Konfigurationen statischer Elemente im Objektinspektor zu setzen.