HSG

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

Zahlenraten, objektorientiert

Pflichtenheft

"Der erste Schritt der Systemanalyse sollte darin bestehen, zunächst ein Pflichtenheft zu erstellen, das dann als Ausgangsbasis für eine systematische Modellbildung dient. Das Pflichtenheft ist eine textuelle Beschreibung dessen, was das zu realisierende System leisten soll. .."
Heide Balzert, Lehrbuch der Objektmodellierung, S.9 [OM]

/1/ Eine ganze Zahl aus 1 .. 100 soll zufällig festgelegt (und geheim gehalten) werden.
/2/ Ein Tipp soll eingebbar sein.
/3/ Es soll als Reaktion auf den Tipp ausgegeben werde, ob der Tipp zu groß, zu klein oder richtig war.
/4/ Die Anzahl der Tipps soll mitgezählt werden.
/5/ Das Spiel soll mehrmals spielbar sein.

Prototyp

"Der Prototyp der Benutzeroberfläche ist ein ablauffähiges Programm, das alle Attribute des OOA-Modells auf die Oberfläche abbildet. Es realisiert weder Anwendungsfunktionen, noch besitzt es die Fähigkeit, Daten zu speichern. Der Prototyp besteht aus Fenstern, Dialogen, Menüs usw. Für die effektive Erstellung gibt es heute zahlreiche Werkzeuge. Der Zweck des Prototyps ist es, das erstellte OOA-Modell mit dem zukünftigen Benutzer oder einem Repräsentanten zu evaluieren. Das Ziel sollte es sein, möglichst die vollständige Benutzungsoberfläche durch diesen Prototyp auszudrücken. ..."
Heide Balzert, Lehrbuch der Objektmodellierung, S.10 [OM]

Objektorientierte Analyse (OOA)

Anwendungsfalldiagramm

"Definition:
Ein Anwendungsfalldiagramm zeigt die Beziehungen zwischen Akteuren und Anwendungsfällen.

Beschreibung:
...
Anwendungsfälle sind vor allem dazu da, die Kommunikation mit den zukünftigen Anwendern, dem Auftraggeber, der Fachabteilung o.ä. zu unterstützen. Anwendungsfälle beschreiben das externe Systemverhalten, d.h. was das System leisten soll. Wie diese entsteht, d.h. welches Systemdesign und welche Realisierung zu diesem äußeren Systemverhalten beiträgt, darüber treffen die Anwendungsfälle keine Aussage."

Bernd Oesterreich, Objektorientierte Softwareentwicklung, S.196 [OOSE]

Aktivitätsdiagramme

"Aktivitätsdiagramme dienen dazu, sich einen Überblick über den Ablauf von Aktivitäten innerhalb eines Anwendungsfalls zu verschaffen."
Mathias Lother, Uni Magdeburg
erstellt mit Dia

Klassendiagramm

"Definition:
Eine Klasse ist die Definition der Attribute, Operationen und der Semantik für eine Menge von Objekten. Alle Objekte einer Klasse entsprechen dieser Definition.

Beschreibung:
Häufig wird anstelle von Klasse auch der Begriff Typ verwendet, wobei zu beachten ist, dass Typ die allgemeinere Bezeichnung ist. Eine Klasse enthält die Beschreibung der Struktur und des Verhaltens von Objekten, die sie erzeugt oder die mit ihr erzeugt werden können. Objekte werden von Klassen produziert und sind die in einer Anwendung zur Programmlaufzeit agierenden Einheiten. Die Definition einer Klasse setzt sich aus Attributen und Operationen zusammen. Das Verhalten eines Objektes wird beschrieben durch die möglichen Nachrichten, die es verstehen kann. Zu jeder Nachricht benötigt das Objekt entsprechende Operationen. Nachricht und Operation werden häufig synonym verwendet, obwohl das nicht richtig ist. .."

Bernd Oesterreich, Objektorientierte Softwareentwicklung, S.209 [OOSE]

erstellt mit UmlEd

Objektorientiertes Design (OOD)

In Zahlenraten0 ist das Formular für die Erzeugung der beteiligten Objekte verantwortlich. Die Adressen der erzeugten Objekte werden dem Spielmanager über Set-Methoden bekannt gemacht. Das Formular kommuniziert in aktualisiereGUI zum Teil direkt mit den "Unterobjekten".

Zahlenraten0.zip

Verbesserung

Es wäre schöner, der Spielmanager würde als alleiniger Ansprechpartner gegenüber dem Formular auftreten und auch Erzeugung und Vernichtung eventueller Hilfsobjekte in Eigenregie übernehmen. Siehe dazu: Aggregation

Zahlenraten1.zip

Implementierung

Das CASE-Tool UMLEd (CASE=computer aided software engineering) erzeugt aus dem Klassendiagramm eine Delphi-Unit, die von Hand (im Folgenden rot) nachgearbeitet wird.
UNIT mTZahlenAusdenker;

interface

//uses
// Uses-Klausel ggf. anpassen

type
   TZahlenAusdenker = CLASS(tObject)

     // weitere Attribute
     private
        FZahl : integer;

     // weitere Methoden
     public
        procedure neueZahl;
        function GetZahl : integer;

   end;

implementation

//+---------------------------------------------------------------------
//|         TZahlenAusdenker: Methodendefinition
//+---------------------------------------------------------------------

//-------- neueZahl (public) -------------------------------------------
procedure TZahlenAusdenker.neueZahl;
begin
  FZahl := Random(100)+1;
end;

//-------- GetZahl (public) --------------------------------------------
function TZahlenAusdenker.GetZahl : integer;
begin
  result := FZahl;
end;

end.

Test

Es ist einer der Vorteile der objektorientierten Vorgehensweise, dass mit den Objekten abgeschlossene Programmteile entstehen, die in sogenannten Testfällen getrennt von der Gesamtlösung getestet werden können. Im Folgenden sieht man die Oberfläche und die zughörige Unit, um die Funktionalität der Klasse TZahlenAusdenker zu testen.



unit uTest_ZahlenAusdenker;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  mTZahlenAusdenker                             // 1. Unit einbinden
  ;

type
  TForm1 = class(TForm)
    bErzeuge: TButton;
    bNeueZahl: TButton;
    bGetZahl: TButton;
    lZahl: TLabel;
    bVernichte: TButton;
    procedure bErzeugeClick(Sender: TObject);
    procedure bNeueZahlClick(Sender: TObject);
    procedure bGetZahlClick(Sender: TObject);
    procedure bVernichteClick(Sender: TObject);
  private
    einZahlenAusdenker : TZahlenAusdenker;      // 2. Referenzvariable deklarieren
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bErzeugeClick(Sender: TObject);
begin
  einZahlenAusdenker := TZahlenAusdenker.Create  // 3. Erzeugung des Objekts
end;

procedure TForm1.bNeueZahlClick(Sender: TObject);
begin
  einZahlenAusdenker.neueZahl;                   // 4. Auftrag an Objekt
end;

procedure TForm1.bGetZahlClick(Sender: TObject);
var
  zahl : integer;
begin
  zahl := einZahlenAusdenker.GetZahl;            // 5. Anfrage an Objekt
  lZahl.Caption := IntToStr(zahl);
end;

procedure TForm1.bVernichteClick(Sender: TObject);
begin
  einZahlenAusdenker.Free;                       // 6. Vernichtung des Objekts
end;

end.