Eine Uhr, objektorientiert
Gruppe: mk, 15.1.03 -
Pflichtenheft
Es ist nach unseren Prinzipien eine Uhr zu programmieren. Die Ansicht soll freigewählt werden. Die Uhr selbst soll natürlich ein Objekt des Fachkonzepts sein. Man soll die Uhr stellen und ablesen können. In diesem ersten Stadium muss sie nicht laufen, man denke an Uhren in Museen, die den Beginn einer nächsten Vorführung anzeigen.
Die Software-Entwicklung ist fortlaufend in dieser Datei zu dokumentieren.
Prototyp
Objektorientierte Analyse
Der Prototyp spiegelt die Benutzeroberfläche, das GUI wieder. Sie repräsentiert die Views und den Controls des MVC-Konzepts.
Der Model-Teil, das Fachkonzept soll natürlich von der GUI getrennt werden.
Objekte sollen nach Zuständigkeiten ausgewählt werden, die Zuständigkeit für die Uhrdaten erhält ein Objekt oUhr, die zugehörige Klasse soll TUhr heißen.
Das Formular-Objekt fUhr1 wird für Erzeugung und Vernichtung aller anderer Objekte verantwortlich gemacht. Es steht in der Hierarchie höher, es "hat" die anderen Objekte. Mit UMLEd wurde folgendes Klassendiagramm erstellt:
Objektorientiertes Design
In dieser Phase erfolgt die Auswahl bzw. der Entwurf der benötigten Algorithmen.
Für die einfache Basis-Uhr ist hier noch nichts zu dokumentieren. Das wird bei einer Analog-Uhr eher nötig sein.
Als nächstes steht die Auswahl der zu benutzenden
Klassenbibliotheken an. Es soll wieder die
Delphi-VCL benutzt werden. Natürlich setzt diese Benutzung ein Mindestmaß an Vertrautheit voraus, was hier erwartet wird.
Beim "Zusammenschieben" der Benutzeroberfläche in der Delphi-IDE hantiert man bewusst oder unbewusst mit Objekten, deren Klassen in diversen Units bereitgehalten werden. Auch das Hauptformular fUhr1 ist ein Objekt, das bei der Erzeugung einer neuen Anwendung automatisch "da ist". Man muss sich um Erzeugung und Vernichtung dieser ganzen Objekte nicht kümmern, das Delphi-System trifft automatisch die nötigen Vorkehrungen. Teils sieht man das am automatisch erzeugten Code, teils werden im Hintergrund Objektattribute und Referenzen gesetzt ohne dass man das merkt.
Implementierung
Es folgt der Delphi-Quellcode, wobei das Fachkonzept mit der Klasse TUhr1 in der Unit "mTUhr1.pas", die Benutzeroberfläche in der Unit "uUhr1.pas" zu finden ist.
unit uUhr1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,mTUhr;
type
TfUhr1 = class(TForm)
eH: TEdit;
lDoppelpunkt: TLabel;
eMin: TEdit;
bSetzen: TButton;
bAnfragen: TButton;
lAusgabe: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure bSetzenClick(Sender: TObject);
procedure bAnfragenClick(Sender: TObject);
private
oUhr : TUhr;
public
{ Public-Deklarationen }
end;
var
fUhr1: TfUhr1;
implementation
{$R *.DFM}
procedure TfUhr1.FormCreate(Sender: TObject);
begin
oUhr := TUhr.Create;
end;
procedure TfUhr1.FormDestroy(Sender: TObject);
begin
oUhr.Free;
end;
procedure TfUhr1.bSetzenClick(Sender: TObject);
var
h,min : byte;
begin
h := StrToInt(eH.text); min := StrToInt(eMin.text);
oUhr.SetH(h); oUhr.SetMin(min);
end;
procedure TfUhr1.bAnfragenClick(Sender: TObject);
var
h,min : byte;
sh,smin : string;
begin
h := oUhr.GetH; min := oUhr.GetMin;
Str(h:2,sh); Str(min:2,smin);
if sh[1]=' ' then sh[1] := '0'; if smin[1]=' ' then smin[1] := '0';
lAusgabe.caption := sh+':'+smin;
end;
end.
|
Der folgende Quelltext wurde von UMLEd automatisch erzeugt.
UNIT mTUhr;
interface
type
TUhr = CLASS
// Attribute
private
FH : byte;
FMin : byte;
// Methoden
public
procedure SetH(h : byte);
procedure SetMin(min : byte);
function GetH : byte;
function GetMin : byte;
end;
implementation
//+---------------------------------------------------------------------
//| TUhr: Methodendefinition
//+---------------------------------------------------------------------
//-------- SetH (public) -----------------------------------------------
procedure TUhr.SetH(h : byte);
begin
FH := h;
end;
//-------- SetMin (public) ---------------------------------------------
procedure TUhr.SetMin(min : byte);
begin
FMin := min;
end;
//-------- GetH (public) -----------------------------------------------
function TUhr.GetH : byte;
begin
result := FH;
end;
//-------- GetMin (public) ---------------------------------------------
function TUhr.GetMin : byte;
begin
result := FMin;
end;
end.
|
Test
Ein erster Test ergab, dass mit dem Programm grundsätzlich Setzen und Auslesen
bestimmter Zeiten möglich ist.
Jedoch ist die Eingabe unsinniger Uhrzeiten in diesem Stadium noch möglich.