# FujabaTM Associations Specification

## Unterscheidungen der Assoziationen

Assoziationen werden durch die folgenden fünf Attribute näher beschrieben.

1. Anzahl der beteiligten Klassen
2. Name der Assoziation
3. Namen der jeweiligen Rollen
4. Kardinalität der jeweiligen Rollen
5. Qualifizierte Rollen

Im folgenden werden nur Assoziationen mit zwei beteiligten Klassen betrachtet. Bei einer näheren Untersuchen der jeweiligen Attribute fällt auf, daß die beiden letzten Eigenschaften eine besondere Auswirkung auf das jeweilig zu implementierende Interface und deren Umsetzung im Quelltext haben.

In der folgenden Tabelle werden die sechs möglichen Assoziationen aufgeschlüsselt.

Association | Cardinality | Qualifier | Key Cardinality
--- | --- | --- | ---
"To One" | 1 | - | -
"To Many" | n | - | -
Attributed qualified "To One" | n | attribute | 1
Attributed qualified "To Many" | n | attribute | n
Qualified "To One" | n | any | 1
Qualified "To Many" | n | any | n

## Implementierungsanweisungen

1. Im Kommentar vor einer Klasse sollten alle Assoziationen der Klasse dokumentiert sein!
2. Vor jedem Attribut, das zu einer Assoziation gehört, muß die Assoziation dokumentiert werden.
3. Die Zugriffsmethoden für die jeweiligen Assoziationen müssen wie in diesem Dokument beschrieben implementiert werden. Sollten einige Randbedingungen eine andere Implementierung oder zusätzliche Methoden erforden, so sind diese ausführlich in dem Kommentar zur Assoziation und in bzw. über der jeweiligen Methode zu dokumentieren.
4. Methoden, die in den Zugriffsmethoden benutzt werden, werden hinter der letzten Zugriffsmethode im Quelltext positioniert.
5. Vor und nach jedem Block, der die Zugriffsmethoden incl. Kommentaren und anderen benötigten Methoden beinhaltet, werden Einzeilenkommentare eingefügt, so daß die Blöcke besser zu erkennen sind.

## Auswahl eines Containers

Zur Auswahl stehen folgende Container:

- FHashSet
- FHashMap
- FDuplicatedHashMap

- FLinkedList
- FTreeSet
- FTreeMap
- FDuplicatedTreeMap

Von Außen unterscheiden sich die Hashtabellen und Bäume nur wenig. Der wesentliche Unterschied liegt in der Reihenfolge, in der die Elemente durch einen Iterator ausgegeben werden. Bei Hashtabellen werden die Elemente in Einfügefolge und bei Bäumen in Sortierfolge ausgegeben.

Bei der Verwendung von Bäumen müssen die Elemente das Interface Comparable implementieren. Ein Standard-Comparator wird zur Verfügung gestellt, es kann aber auch ein spezieller Comparator angegeben werden.

Zu beachten ist eine korrekte Implementierung der Funktion hashCode () bei Verwendung der Hashtabellen!

## Darstellung einer Assoziation im Kommentar der Klasse

    /**
     * <h2>Associations</h2>
     *
     * <pre>
     *            1                       1
     * LeftClass --------------------------- RightClass
     *            leftRole        rightRole
     * </pre>
     */
    public LeftClass
    {