13. Polymorphie Inhaltsverzeichnis 15. Gleichheit bei der Reihungsimplementierung

14. Erweiterte Schnittstelle

Objektdiagramme sind also behilflich, um die Funktionsweise einer nicht ganz einfachen Objektstruktur wie die verkettete Liste dazustellen und zu verstehen.

Noch nützlicher sind sie bei dem Entwurf noch komplexeren Algorithmen.

Nehmen wir an, die Schnittstelle Queue wird um zwei weitere Methoden erweitert:

/** Extended Queue with equals and copy - ExtQ.scala*/

trait ExtQ[E] extends Queue[E] {

   /** Compares the elements with another queue.

   * Both queues remain unchanged.

   * @param q the other queue.

   * @result true if both queues contain the same objects

   *    in the same order.

   * @result false also if the types of both queues are different:

   *    q.getClass != this.getClass */

   def equals(q: ExtQ[E]): Boolean

   /** Copies the elements of the queue.

   * @throws OutOfMemoryError

   * @ensures equals(copy()) */

   def copy(q: ExtQ[E]) }

Die Methode equals vergleicht also die Parameterwarteschlange q mit der aktuellen; die Methode copy[1] kopiert den Inhalt der Parameterwarteschlange q in die aktuelle. Die Zusicherung @ensures beschreibt die Nachbedingung, dass der Vergleich von Kopie und Original mit equals das Ergebnis true liefern soll.

Wenn nun diese Schnittstelle implementiert werden soll, dann gibt es zwei Möglichkeiten: Eine implementierende Klasse kann entweder ArrayQ oder ListQ erweitern. Hieraus ergibt sich folgendes Klassendiagramm:

Abbildung25: Klassendiagramm

13. Polymorphie Inhaltsverzeichnis 15. Gleichheit bei der Reihungsimplementierung

[1] In Java könnte man sie clone nennen; Scala erlaubt aber nicht, protected Object.clone öffentlich zu überschreiben.


Version: 5. Dezember 2010

© Prof. Solymosi, 2010, Beuth-Hochschule für Technik Berlin