Datenübertragung Teil 1

zurück zur Hauptseite Datenübertragung
Gruppe: dj, 22.05.03

Aufgabenstellung

Verwendung der Netzwerkhardware
a) An einem Rechner soll die Sendeleitung ihren Zustand (z.B. durch Drücken eines Buttons) ändern,
b) und der andere Rechner soll dies bemerken (und irgendwie anzeigen).

Ressourcen

Pflichtenheft zur 1. Teilaufgabe

Zu a)
/1/ Die Leitung soll durch Drücken entsprechender Buttons an- und ausgeschaltet werden können.
/2/ Der Zustand soll gehalten werden, d.h. es ist dafür Sorge zu tragen, dass die Hardware nicht nach 300ms die Leitung abschaltet.

Zu b)
/3/ Der aktuelle Zustand der Empfangsleitung ist grafisch darzustellen.

"interne Pflichten":

/4/ Die Dokumentation ist konsequent weiterzuführen.
/5/ ....

Prototyp

Zu Teilproblem a)

Durch Drücken des Buttons "An" wird die Sendeleitung eingeschaltet, mit "Aus" entsprechend ausgeschaltet.
Zu Teilproblem b)

Der Zustand der Empfangsleitung wird durch die Farbe eines Shapes dargestellt.

Objektorientierte Analyse

Sequenzdiagramm

erstellt mit violet
Zu Teilproblem a)
Der Timer löst in regelmäßen Abständen das Ereignis OnTimerTick aus, indem er dem Objekt GUI eine Nachricht zum Aufruf der Methode OnTimerTick sendet, die eine Ereignisbehandlungsroutine (hier: Sende dem Objekt NetzHw eine Nachricht zum Aufruf der Methode Refresh) enthält.

Zu Teilproblem b)
Leider lassen sich in violet keine "Antwort-Pfeile" (im Sinne einer Funktionswerte-Übergabe) zeichnen, wir können entweder das Diagramm mit einem anderen Werkzeug ergänzen, oder aber den Nachrichten-Pfeil mit Antwort := getEmpfangsLeitung beschriften.
Vereinfacht
Vollständig (zwei Möglichkeiten)
Obige Sequenzdiagramme beschreiben noch nicht alle auftretenden Interaktionen. Das Verhalten bei Eintritt des Ereignisses bAnClick kann wie folgt dargestellt werden:
Das nächste Sequenzdiagramm zeigt den Nachrichtenfluss bei Klick auf den Button bAus:
Um die Darstellung möglichst übersichtlich zu halten, werden die Ereignisse bAnClick und bAusClick in separate Sequenzdiagramme gezeichnet, denn sie sind voneinander und vom Ereignis OnTimerTick unabhängig.

Objektorientiertes Design

Klassendiagramm

Zu Teilproblem a)
Zu Teilproblem b)

Implementierung

Exemplarisch hier die entscheidenden Stellen:
Zu a) sender_v1.zip
procedure TGUI.OnCreate(Sender: TObject);
begin
  NetzHw := TNetzHw.Create;
end;

procedure TGUI.bAnClick(Sender: TObject);
begin
  NetzHw.SetSendeLeitung( An );
end;

procedure TGUI.bAusClick(Sender: TObject);
begin
  NetzHw.setSendeLeitung( Aus );
end;

procedure TGUI.OnTimerTick(Sender: TObject);
begin
  // Das Interface schaltet nach 300ms die Ausgaenge ab,
  // wenn sie nicht benoetigt werden. Daher:
  NetzHw.Refresh;
end;

procedure TGUI.OnDestroy(Sender: TObject);
begin
  NetzHw.Free;
end;
Zu b) empfaenger_v1.zip
procedure TGUI.OnCreate(Sender: TObject);
begin
  NetzHw := TNetzHw.Create;
end;

procedure TGUI.OnTimerTick(Sender: TObject);
begin
  case NetzHw.getEmpfangsLeitung of
    An  : sAnzeige.Brush.Color := clRed;
    Aus : sAnzeige.Brush.Color := clScrollBar;
  end;
end;

procedure TGUI.OnDestroy(Sender: TObject);
begin
  NetzHw.Free;
end;

Test

Augenscheinlich tun die zwei Programme, was von ihnen erwartet wird.