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.
|