|
DisTAnz 1.0 | ||||||||
PREV NEXT | FRAMES NO FRAMES |
Das neue Klassendiagramm des Agenten (neues Browserfenster). Vorsicht: Sehr groß (84 kB, 2564x1725 Pixel)
Neue Variablen/Klassen/Methoden sind so markiert, entfallene sind anders markiert und geänderte auf diese Art. Variablen werden der Übersichtlichkeit halber nicht aufgeführt, wenn sie noch "im Originalzustand" sind.
Klasse | Variable/Methode | Erläuterung |
---|---|---|
DTAManager | DTAManager() | Keine Veränderung. |
go():void | Dient nach dem Erzeugen der nötigen Instanzen durch den Konstruktor zum Start der Agententätigkeit. | |
main(args:String[]):void | Keine Veränderung. | |
DataStorage | DataStorage() | Keine Veränderung. |
size():int | Liefert die Größe des data-Vectors zurück. | |
clear():void | Löscht den Inhalt von DataStorage. Wichtig! | |
removeElementAt(pos:int):void | Ersetzt deleteBlock, welches im Feinentwurf nur unvollständig spezifiziert wurde. | |
toString():String | Dient hauptsächlich dem Test der Klasse und liefert eine String-Repräsentation des Inhaltes von DataStorage. | |
refreshBlocks():void | Es werden jetzt immer alle Blöcke in DataStorage überprüft, eine Angabe der Blöcke ist daher nicht mehr nötig. | |
deleteBlock():void | Wird durch removeElementAt ersetzt. | |
ManagerData | ManagerData() | Keine Veränderung. |
getLastRequest(managerIP:InetAddress):Date | Keine Veränderung. | |
setLastRequest(managerIP:InetAddress, requestTime:Date):Date | Keine Veränderung. | |
main(args:String[]):void | Dient dem Test der Klasse. | |
DataCollector | port:int | Es wird kein Standardwert mehr vorgesehen. |
in:BufferedReader | Zum Lesen des Datenstromes von localhost:2000. Im Feinentwurf vergessen. | |
myMemory:DataStorage | Zum Speichern der gesammelten Daten. Im Feinentwurf vergessen. | |
collThread:Thread | Dient der Threadkontrolle. Im Feinentwurf nicht enthalten, da diese Art der Threadsteuerung noch nicht bekannt bzw. geplant war. | |
DataCollector(storage:DataStorage) | Keine Veränderung an der Spezifikation. Es wird jedoch implizit port=2000 gesetzt. | |
DataCollector(storage:DataStorage, port:int) | Zur Angabe eines vom Standard abweichenden Ports. | |
start():void | Startet den Thread. Im Feinentwurf nicht enthalten, da diese Art der Threadsteuerung nicht bekannt war. | |
run():void | Keine Veränderung. | |
die():void | Ersetzt stop. Erklärung siehe dort. | |
filterPacketInfo(dataPacket:String):Flow | Keine Veränderung. | |
main(args:String[]):void | Dient dem Test der Klasse. | |
stop():void | Ersetzt durch die(). Grund: Bei ersten Implementierungen wurde Thread beerbt, und stop überschrieb eine Methode, die als deprecated markiert war. Bei der jetzigen Implementierung von Runnable könnte auch wieder stop() verwendet werden. Von einer erneuten Änderung wurde jedoch abgesehen. | |
DTAProtocol | Im Feinentwurf nicht enthalten. Lagert die Protokollverarbeitung aus der Klasse RequestHandlerData aus, die dadurch kompakter und weniger fehleranfällig wird. | |
WAITING:int=0 | Markiert den Wartezustand | |
SENTDATA:int=1 | MArkiert den Zustand "Daten wurden gesendet". | |
state:int | Zum speichern des aktuellen Zustandes. | |
data:Vector | Zur Zwischenspeicherung der zu versendenden Daten. | |
dStorage:DataStorage | Ermöglicht den Zugriff auf die zu versendenden Daten. | |
mData:ManagerData | Ermöglicht das speichern der neuen letzten Abfragezeit durch den Manager. | |
mAddress:InetAddress | Zur Identifikation des zu bedienenden Managers. | |
rqTime:long | Die Zeit der aktuellen Abfrage. Zur Umrechnung der in den zu versendenden Daten enthaltenen Zeitangaben. | |
DTAProtocol(mData:ManagerData, dStorage:DataStorage, mAddress:InetAddress, rqTime:long) | Der Konstruktor. | |
processInput(theInput:String):String | Verarbeitet die übergebene Zeile (die vom Manager empfangen wurde) und gibt die passende Ausgabezeile zurück. | |
RequestServerData | mData:ManagerData | Im Feinentwurf nicht enthalten, da die Notwendigkeit der Übergabe einer solche Referenz übersehen wurde. |
dStorage:DataStorage | Im Feinentwurf nicht enthalten, da die Notwendigkeit der Übergabe einer solche Referenz übersehen wurde. | |
srvThread:Thread | Dient der Threadkontrolle. Im Feinentwurf nicht enthalten, da diese Art der Threadsteuerung noch nicht bekannt bzw. geplant war. | |
RequestServerData(port:int, mData:ManagerData, dStorage:DataStorage) | Durch die Einführung von mData und dStorage wurde auch die Anpassung des Konstruktors nötig, so daß die entsprechenden Objekte übergeben werden können. | |
start():void | Startet den Thread. Im Feinentwurf nicht enthalten, da diese Art der Threadsteuerung nicht bekannt war. | |
run():void | Keine Veränderung. | |
die():void | Ersetzt stop. Erklärung siehe dort. | |
main(args:String[]):void | Dient dem Test der Klasse. | |
stop():void | Erklärung siehe DataCollector.stop. | |
RequestServerExistance | mSocket:MulticastSocket | Im Feinentwurf nicht enthalten. Durch Auflösung der Klasse RequestHandlerExistance in diese Klasse mit eingegangen. |
dSocket:DatagramSocket | Im Feinentwurf nicht enthalten, da die Notwendigkeit eines DatagramSocket noch nicht klar war. | |
srvThread:Thread | Dient der Threadkontrolle. Im Feinentwurf nicht enthalten, da diese Art der Threadsteuerung noch nicht bekannt bzw. geplant war. | |
RequestServerExistance(port:int, group:InetAddress) | Keine Veränderung. | |
run():void | Keine Veränderung. | |
die():void | Ersetzt stop. Erklärung siehe dort. | |
main(args:String[]):void | Dient dem Test der Klasse. | |
stop():void | Erklärung siehe DataCollector.stop. | |
RequestHandlerData | inputLine:String | Im Feinentwurf nicht enthalten, da die Notwendigkeit für eine solche Variable erst in der Implementierungsphase zutage trat. Relativ geringe Wichtigkeit. |
outputLine:String | Im Feinentwurf nicht enthalten, da die Notwendigkeit für eine solche Variable erst in der Implementierungsphase zutage trat. Relativ geringe Wichtigkeit. | |
convertTimeToRelative():void | Nicht mehr enthalten. da die nötige Funktionalität durch die neuen toString()-Methoden in DataBlock und Flow erfüllt wird. | |
RequestHandlerExistance | Entfällt komplett. Die Funktionalität wurde in den RequestServerExistance integriert. Dies erschien aufgrund der Einfachheit der Antwortfunktionalität einfacher und sinnvoller, als dafür jeweils einen eigenen Thread zu starten. |
Klasse | Variable/Methode | Erläuterung |
---|---|---|
DataBlock | DataBlock(duration:int) | Keine Veränderung. |
DataBlock(duration:int, data:Vector) | Keine Veränderung. | |
DataBlock(duration:int, startTime:long, data:Vector) | Neuer Konstruktor, der das Erzeugen von DataBlocks mit einer bestimmten Startzeit ermöglicht. | |
isPossibleToAdd(dataFlow:Flow):boolean | Liefert true, wenn es möglich ist, diesem DataBlock den übergebenen Flow hinzuzufügen. | |
addData(dataFlow:Flow):void | Keine Veränderung. | |
getData():Vector | Keine Veränderung. | |
elementAt(index:int):Flow | Liefert den durch index spezifizierten Flow aus dem internen data-Objekt. | |
size():int | Liefert die Größe des internen data-Objektes zurück. | |
getStart():Date | Keine Veränderung. | |
setStart(newStart:Date):void | Keine Veränderung. | |
getDuration():long | Keine Veränderung. | |
setDuration(newDuration:long):void | Keine Veränderung. | |
toString():String | Liefert eine String-Repräsentation der DataBlock-Inhalte. | |
toString(showAsLong:boolean):String | Wie toString, liefert jedoch alle Zeitangaben als long-Wert. | |
toString(time:long):String | Wie toString, liefert jedoch alle Zeitangaben als auf den Wert time relativierten long-Wert. | |
isEmpty():boolean | Gibt bei leerem DataBlock true zurück. | |
Flow | Flow() | Keine Veränderung. |
Flow(timeStamp:Date, sourceIP:InetAddress, sourcePort:int, destIP:InetAddress, destPort:int, protocoll:int, size:long) | Keine Veränderung. | |
getTime():Date | Keine Veränderung. | |
setTime(newTime:Date):void | Keine Veränderung. | |
getSourceIP():InetAddress | Keine Veränderung. | |
setSourceIP(newSourceIP:InetAddress):void | Keine Veränderung. | |
getDestIP():InetAddress | Keine Veränderung. | |
setDestIP(newDestIP:InetAddress):void | Keine Veränderung. | |
getSourcePort():int | Im Feinentwurf vergessen. | |
setSourcePort(newSourcePort:int):void | Im Feinentwurf vergessen. | |
getDestPort():int | Keine Veränderung. | |
setDestPort(newDestPort:int):void | Keine Veränderung. | |
getProtocoll():int | Keine Veränderung. | |
setProtocoll(newProtocoll:int):void | Keine Veränderung. | |
getSize():int | Keine Veränderung. | |
setSize(newsize:long):void | Im Feinentwurf nicht vorhanden, allerdings nötig (schon aufgrund der Tatsache, daß im Allgemeinen zu jeder get-Methode auch ein set-Äquivalent existieren sollte). | |
equals(packet:Flow):boolean | Keine Veränderung. | |
add(packet:Flow):void | Keine Veränderung. | |
toString():String | Liefert eine String-Repräsentation der Flow-Inhalte. | |
toString(showAsLong:boolean):String | Wie toString, liefert jedoch alle Zeitangaben als long-Wert. | |
toString(time:long):String | Wie toString, liefert jedoch alle Zeitangaben als auf den Wert time relativierten long-Wert. |
Die bereits im Feinentwurf vorhandenen Klassen blieben weitgehend unverändert, wie die niedrige Zahl der veränderten bzw. entfallenen Methoden und Variablen zeigt.
Die relativ hohe Anzahl von im Vergleich zum Feinentwurf hinzugekommenen Variablen und Methoden deutet dagegen auf zwei Tatsachen hin:
Erstens war die Problematik des Zugriffs auf andere Klassen und Methoden nicht völlig klar. Dies wird besonders deutlich, wenn man die direkte Assoziation von DataStorage und RequestHandlerData im Klassendiagramm des Feinentwurfes betrachtet. Auch die fehlende Übergabe von Referenzen der sonstigen assoziierten Objekte ist so zu erklären (d.h. es ist kein Zugriff über Konstrukte wie super().AndereKlasse oder parent().AndereKlasse möglich (wie zumindest ich es mir noch zu Beginn des Feinentwurfes in etwa vorstellte, Anm. des Verfassers).
Zweitens macht sich die fehlende detailliertere Planung der Abläufe im Programm bemerkbar, die wahrscheinlich die Notwendigkeit vieler der neu hinzugekommenen Methoden aufgezeigt hätte.
Quot erat demonstrandum: Es gab etwas zu lernen! :o)