Ausgabe 2003-03-11
Lutz Prechelt
1. Beim
Entwurfsmuster Kompositum besteht ein Problem darin, dass auch die Blätter die
Operationen implementieren, die eigentlich nur für zusammengesetzte Komponenten
sinnvoll sind.
-
Modifizieren Sie das Entwurfsmuster Kompositum so, dass dieses Problem nicht mehr auftritt.
-
Was geschieht nach Ihrer Modifikation beim dem Versuch, auf Bestandteile eines Blattes
zuzugreifen?
-
Welche Lösung halten Sie für besser? Warum?
2. Gegeben
ist die Klasse Kommunikationskanal, die die reine Übertragung von
Nachrichtenpaketen übernimmt. Dieser Kommunikationskanal soll nun flexibel eine
Zuschaltung von separat implementierten
Zusatzfunktionen wie Bitsicherung, Verschlüsselung und Kompression in
beliebiger Verkettung zulassen.
class Kommunikationskanal {
void
verbindungAufbauen(Kommunikationskanal) {...}
void verbindungAbbauen() {...}
void verbindungZuruecksetzen()
{...}
void sende(String s) {...}
String empfange() {...}
}
-
Welches Entwurfsmuster setzen Sie ein?
-
Geben Sie ein Klassendiagramm an. Dazu ist eine leichte
Änderung an Kommunikationskanal nötig (und erlaubt)
-
Was bedeutet diese Änderung für die Praxis, wenn
nachträglich Entwurfsmuster verwendet werden sollen?
-
Lässt sich daraus eine Entwurfsregel ableiten?
Diskutieren Sie diese mit zwei oder drei Kollegen.
-
Fügen Sie in das Klassendiagramm auch Konstruktoren ein.
-
Geben Sie einen Konstruktoraufruf an, der einen Kanal
erzeugt, der beim Senden verschlüsselt,
dann komprimiert, dann sichert.
-
Die obige Schnittstelle von Kommunikationskanal ist an
einer Stelle naiv. An welcher?
Wie kann man das reparieren?