Achtung:

Dieses Wiki, das alte(!) Projektwiki (projektwiki.zum.de)
wird demnächst gelöscht.

Bitte sichere Deine Inhalte zeitnah,
wenn Du sie weiter verwenden möchtest.


Gerne kannst Du natürlich weiterarbeiten

im neuen Projektwiki (projekte.zum.de).

Liste in perfekter Komposition: Unterschied zwischen den Versionen

Aus Projektwiki - ein Wiki mit Schülern für Schüler.
Wechseln zu: Navigation, Suche
(Objektsituation vor und nach dem Aufruf der Methode EinfuegenVor)
(Nachher)
Zeile 41: Zeile 41:
 
d_vergleich kann nur ein Datenelement sein, dass '''bereits in der Liste eingefügt''' ist.
 
d_vergleich kann nur ein Datenelement sein, dass '''bereits in der Liste eingefügt''' ist.
  
== Nachher ==
+
=== Nachher ===
  
 
Ist die Methode fertig ausgeführt befindet sich das neue Datenelement vor dem verglichenen Datenelement.
 
Ist die Methode fertig ausgeführt befindet sich das neue Datenelement vor dem verglichenen Datenelement.
Zeile 49: Zeile 49:
 
* Der frühere Vorgängerknoten von d_vergleich hat nun d_neu als Nachfolger
 
* Der frühere Vorgängerknoten von d_vergleich hat nun d_neu als Nachfolger
  
'''Objektdiagramm nach dem dem Aufruf:''' ''Siehe Bild ObjektdiagrammNachher''
+
'''Objektdiagramm nach dem dem Aufruf:
[[Datei:ObjektdiagrammNachher.png|thumb|'''ObjektdiagrammVorher''':Objektdiagramm, nach dem Aufruf der Methode EinfuegenVor.]]
+
[[Datei:ObjektdiagrammNachher.png|'''ObjektdiagrammVorher''':Objektdiagramm, nach dem Aufruf der Methode EinfuegenVor.]]
  
 
== Vereinfachung des Quelltexte  ==
 
== Vereinfachung des Quelltexte  ==

Version vom 12. Dezember 2013, 17:01 Uhr

Inhaltsverzeichnis

Entwurfsmuster Kompositum

Problematik

Die Zielsetzung ist die Trennung von Struktur und Inhalt. Dies wurde durch die Klasse KNOTEN bereits zum Teil erfüllt. Jedoch verhält sich der letzte Knoten in der Liste anders als die Restlichen, wegen der Überprüfung ob es einen Nachfolger gibt.

if(nachfolger != null) {}

Lösung

Optimaler wäre es, wenn alle Objekte der Klasse KNOTEN sich gleich verhalten und die Abfrage nach dem Nachfolger nicht mehr nötig ist. Abhilfe schafft eine neue Klasse ABSCHLUSS, welche stets das letzte Objekt in der Liste darstellt und die Aufgaben des eigentlichen letzten Knotens übernimmt.

Dazu wird eine abstrakte Basisklasse LISTENELEMENT erstellt, von welcher die Klasse KNOTEN und ABSCHLUSS erben. In der Klasse ABSCHLUSS wird jediglich das ausformuliert, was der letzte Knoten machen müsste.

Objekte der Klasse ABSCHLUSS

Sekundäre Überschrift

Objektsituation vor und nach dem Aufruf der Methode EinfuegenVor

Vorher

Damit die Methode EinfuegenVor ausgeführt werden kann, müssen Objekte dieser Klassen bereits erzeugt sein:

  • LISTE
  • KNOTEN (mind. 2)
  • ABSCHLUSS
  • PATIENT bzw. DATENELEMENT (mind. 2)

Das Objektdiagramm sieht dementsprechend so aus: Siehe Bild ObjektdiagrammVorher

ObjektdiagrammVorher:Objektdiagramm, bevor die Methode EinfuegenVor ausgeführt wurde.


Wird die Methode EinfuegenVor(d_neu, d_vergleich) nun ausgeführt, wird nach d_neu und d_vergleich verlangt. Siehe Bild Methodenaufruf

EinfuegenVor Methodenaufruf

d_neu ist das Datenelement, welches eingefügt werden soll.

d_vergleich ist das Datenelement, welches verglichen wird und dann der Nachfolger von d_neu wird.


d_neu kann entweder ein neu erzeugtes Datenelement oder ein bereits vorhandenes, aber noch nicht eingefügtes Datenelement, sein.

d_vergleich kann nur ein Datenelement sein, dass bereits in der Liste eingefügt ist.

Nachher

Ist die Methode fertig ausgeführt befindet sich das neue Datenelement vor dem verglichenen Datenelement.

  • Alle Attributwerte (z.B. Nachfolger) von d_vergleich bleiben gleich
  • d_vergleich ist nun der Nachfolger von d_neu
  • Der frühere Vorgängerknoten von d_vergleich hat nun d_neu als Nachfolger

Objektdiagramm nach dem dem Aufruf: ObjektdiagrammVorher:Objektdiagramm, nach dem Aufruf der Methode EinfuegenVor.

Vereinfachung des Quelltexte