Das reicht noch nicht für eine Implementierung.Die Anforderungen sind sehr abstrakt und allgemein.
Doch, ich denke schon dass es so ähnlich war. Anforderung: eindeutig Key/Value Paare speichern. Welche Methoden sind sinnvoll? Dann definiert man sinnvolle Implementierungen (HashMap, SynchronizedHashMap, ...). Dann definiert man, dass konkrete Implementierungen von diesem Verhalten abweichen können. Die Bedingungen sind am Interface erläutert. Das bedeutet, dass das Interface nicht das Verhalten wiederspiegeln muss, nur eine Schnittstelle für Zugriffe. Andere Sachen aber werden festgelegt (eben z.B. key/value Paare ohne Duplikate in den Keys).Bei den Collections hat sich ja auch keiner gedacht: "Ich will eine Lagerverwaltung implementieren", sondern "Ich definiere ein Interface zur allgemeinen Speicherung von Daten, für das es verschiedene Implementierungen geben kann
Map (Java Platform SE 6)
Wieso nachsehen?. Man schreibt Tests gegen konkrete Implementierungen (sprich der Entwickler der Klasse) und deren Verhalten.Und genau um letzteres zu prüfen, reicht es IMHO nicht, in allen Implementierungen einrach "nachzusehen"....
Definiert eine Methode als Rückgabewert Map und liefert eine bestimmte Implementierung, die u.U. nicht alle Funktionalitäten bietet, die man erwarten würde, dann ist das m.E. ein Fehler. Das gilt natürlich nicht, wenn das zu erwartende Verhalten dokumentiert ist.
Java:
Map getNotExtendableButModifyableData();
Wäre also ok (Außer evtl. die Namensgebung ;-) )
Da würde ich dann testen können, ob der Vertrag eingehalten wird.
Java:
NotExtendableButModifyableMap getTheMap();