HSG

Aktuelle Seite: HSG/Fächer/Informatik/Material

OOP-Grundlagen

Objekt

0. Motivation

Modularisierung ist ein wichtiges Prinzip der Software-Technik. Objekte kapseln nicht nur Daten, sondern auch Methoden. Objekte bilden "Zuständigkeiten"

1. Typvereinbarung, der "Bauplan"

Nach einer ersten Idee wird die grafische Beschreibung des Objekts am Anfang stehen.



Die Grafik wurde mit violet erzeugt, das nicht auf der Eingabe von Datentypen besteht.

Diese Beschreibung wird im Laufe des Software-Entwicklungs-Prozesses so weit verfeinert, dass schließlich eine Implementierung in der gewählten Programmiersprache möglich ist.


Die Grafik wurde mit UmlEd erzeugt, das aus der grafischen Repräsentation wie folgt das Gerüst einer zugeordneten Delphi-Unit erzeugen kann.

interface

uses
// Uses-Klausel ggf. anpassen

type
   TString = CLASS

     // Attribute
     private
        FString : string;

     // Methoden
     public
        procedure SetString(s : string);
        function GetString : string;

   end;

implementation

//+---------------------------------------------------------------------
//|         TString: Methodendefinition
//+---------------------------------------------------------------------

//-------- SetString (public) ------------------------------------------
procedure TString.SetString(s : string);
begin
  //Hier Code einfügen.
end;

//-------- GetString (public) ------------------------------------------
function TString.GetString : string;
begin
  //Hier Code einfügen.
end;

Es sollen nun die (hier selbst geschriebenen) Code-Fragmente für die Typvereinbarung angegeben werden:

TString = class(TObject)                   { 1. Typvereinbarung                       }
  private
    FString : string;
  public
    procedure SetString(s : string);
    function GetString : string;
  end;
Dieser Teil steht im interface-Teil hinter type.

Im Implementation-Teil folgt die Implementierung der Methoden:
procedure TString.SetString(s : string);    { Implementierung zu 1.           }
begin
  FString := s;
end;

function TSTring.GetString : string;        { Implementierung zu 1.           }
begin
  result := FString;
end;

2. Erzeugung eines Objekts

Zur Erzeugung eines Objekts ist die Deklaration einer Referenzvariablen
  s     : TString;                 { 2. Deklaration der Referenzvariablen     }
und der Aufruf des Konstruktors nötig.
  s := TString.Create;             { 3. Erzeugung des Objekts                 }

3. Benutzung eines Objekts

Man benutzt ein Objekt, indem man ihm Botschaften schickt, Aufträge
  s.SetString(eEingabe.text);      { 4. Beschreiben des Objekts               }
oder Anfragen
  lAusgabe.caption := s.GetString; { 5. Auslesen des Objekts                  }

4. Freigabe des Speichers

Schließlich muss am Ende der Lebensdauer des Objekts der belegte Speicher wieder freigegeben werden. Dazu ruft man den Destruktor auf:
  s.free;                          { 6. Vernichtung des Objekts               }

Testprogramm

Ein Objekt sollte für sich in einem kleinen Programm getestet werden. Das folgende Programm verzichtet auf eine MVC-Trennung:
unit uGUI;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;

type
  TString = class(TObject)         { 1. Typvereinbarung                       }
  private
    FString : string;
  public
    procedure SetString(s : string);
    function GetString : string;
  end;

  TForm1 = class(TForm)
    eEingabe: TEdit;
    bSetze: TButton;
    nAusgabe: TButton;
    lAusgabe: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure bSetzeClick(Sender: TObject);
    procedure nAusgabeClick(Sender: TObject);
  private
    s : TString;                  { 2. Deklaration der Referenzvariablen     }
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.DFM}

procedure TString.SetString(s : string);    { Implementierung zu 1.           }
begin
  FString := s;
end;

function TSTring.GetString : string;        { Implementierung zu 1.           }
begin
  result := FString;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  s := TString.Create;             { 3. Erzeugung des Objekts                 }
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  s.free;                          { 6. Vernichtung des Objekts               }
end;

procedure TForm1.bSetzeClick(Sender: TObject);
begin
  s.SetString(eEingabe.text);      { 4. Beschreiben des Objekts               }
end;

procedure TForm1.nAusgabeClick(Sender: TObject);
begin
  lAusgabe.caption := s.GetString; { 5. Auslesen des Objekts                  }
end;

end.