home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Objektsammlungen

Oft muss eine 1-n Beziehung zwischen Objekten dargestellt werden.

Das Objekt, dem mehrere Objekte vom gleichen Typ zugeordnet sind, hat eine Objektsammlung von diesen Objekten. Objektsammlungen können unterschiedlich implementiert werden.

  1. statische Datenstrukturen
    Bsp: Array
    Vorteil: der Zugriff auf ein Objekt kann schnell über einen Index erfolgen
    Nachteil: feste Größe

    Die Lösung wäre hier ein dynamische Array. Ein dynamisches Array müsste noch Methoden zur Verfügung stellen, wie z.B. newInstance(), die das Array vergrößert und das Objekt hinzufügt oder Methoden, die das Array um ein Feld vergrößert oder verkleinert.

  2. dynamische Datenstrukturen
    Bsp.: Verkettete Liste
    Nachteil: langsame Suche und kein direkter Zugriff mit Hilfe eines keys

Die verkettete Liste soll hier genauer betrachtet werden. Jedes Objekt kennt seinen Nachfolger, in dem es eine Referenz darauf speichert. Im oberen Beispiel kennt der Student dabei das erste Buch und dieses kennt seinen Nachfolger und so weiter.

 

Hier ist man allerdings auf den Objekttyp Buch beschränkt und kennt nur das erste Element und muss sich bei jedem Zugriff durch die Liste arbeiten.

Deswegen kapselt man die Elemente der Liste in einer Klasse Node. Unabhängig vom Objekttyp können damit Elemente in die Liste eingefügt werden.

Das Objekt mit der Objektsammlung hat jetzt nicht mehr nur eine Referenz auf das erste Objekt sonder hält eine lineare Liste. Die lineare Liste hat eine Referenz auf die erste und letzte Node. Die Klasse Studentin ist nun völlig unabhängig vom Typ Buch und kennt nur die LinearList. Welche Objekte in den Nodes stehen ist frei wählbar.

Es gibt noch weitere dynamische Datenstrukturen wie z.B. den Stack, Queue oder Ringpuffer.

Ein Stack arbeitete nach dem LIFO-Prinzip (last-in-first-out). Die Elemente werden am vorderen Ende der Liste eingefügt und von dort auch wieder entnommen. Das heißt, die zuletzt eingefügten Elemente werden zuerst entnommen und die zuerst eingefügten zuletzt.

Eine Queue arbeitete nach dem FIFO-Prinzip ( first-in-first-out). Das Element, das als erstes einfügt wurde wird auch als erstes wieder entfernt. Das ist zu vergleichen mit einer normalen Warteschlange an einer Kasse. Der Erste, der in der Warteschlange wird als erstes bedient und kann die Warteschlange verlassen.