Helmichs Informatik-Lexikon

HAT-Beziehung

Vorbemerkung

Der Begriff "HAT-Beziehung" scheint in der Informatik recht umstritten zu sein. Oft wird er mit der "KENNT-Beziehung" gleichgesetzt, manchmal wird er als Untertyp der "KENNT-Beziehung" angesehen. In der Fachliteratur, die mir zur Verfügung steht, wird der Begriff "HAT-Beziehung" kein einziges Mal erwähnt. Es scheint sich also eher um einen didaktischen Begriff zu handeln, der eine bestimmte Beziehung zwischen Klassen und Objekten verdeutlichen soll.

HAT-Beziehungen gehören zu den gerichteten Beziehungen bzw. Assoziationen. Von einer gerichteten Beziehung kann man sprechen, wenn ein Objekt über eine Referenz  (einen Zeiger oder pointer) Zugriff auf ein oder mehrere Objekte einer anderen Klasse hat.

Beziehungen

Auf dieser Lexikonseite finden Sie einen Überblick über die verschiedenen Beziehungen zwischen Objekten unterschiedlicher Klassen, u.a. die HAT-Beziehung, die KENNT-Beziehung und die IST-Beziehung.

Aggregation

In der Fachsprache werden HAT-Beziehungen meistens als Aggregationen bezeichnet. Eine Aggregation beschreibt eine Art Besitz-Verhältnis. Die Objekte der einen Klasse besitzen und benutzen Objekte einer anderen Klasse.

Stellen wir uns die Klassen Held und Gegenstand vor sowie die Objekte karl der Klasse Held und schwert der Klasse Gegenstand.. Das Objekt karl besitzt dann das Objekt schwert, und alle anderen Objekte der Klasse Held besitzen ebenfalls ein, zwei oder mehrere Objekte der Klasse Gegenstand.

Realisiert wird eine solche Aggregation oder HAT-Beziehung in Java beispielsweise so:

public class Held
{
   String name;
   double leben;
   Gegenstand waffe = new Gegenstand("Schwert des Grauens",40,10,560);
   Gegenstand schild = new Gegenstand("Beschuetzer",6,50,120);
   Gegenstand ruestung = new Gegenstand("Panzer der Hoffnung",7,70,240)
	
	// weitere Attribute und Methoden ...
}

Jedes Objekt der Klasse Held ist hier automatisch mit drei unterschiedlichen Gegenständen ausgestattet, deren Typ beim Erzeugen der Objekte durch die übergebenen Parameter festgelegt wird.

In UML-Diagrammen wird eine solche HAT-Beziehung durch einen Pfeil zwischen den beiden Klassen angedeutet, der eine rautenförmige Spitze hat, die auf die besitzende Klasse zeigt. Zwischen den Klassen Held und Gegenstand sieht diese HAT-Beziehung so aus:

Beschreibung siehe folgenden Text

Eine Assoziation im UML-Diagramm
Autor: Ulrich Helmich 2017, Lizenz: siehe Seitenende

Die kleine Ziffer 3 am Anfang des Pfeiles deutet an, dass die Held-Objekte je drei Gegenstand-Objekte haben.

HAT-Beziehungen ermöglichen die Erzeugung von Objekten anderer Klassen sowie die Benutzung der Methoden anderer Klassen innerhalb eines Objektes. Schauen wir uns das an einem ganz typischen Anwendungsbeispiel an. Angenommen, jeder Held, egal wie er heißt, soll von Anfang an einen Schild namens "Orkwehr" mit einem Verteidigungswert von 10 und einem Goldwert von 100 besitzen. Dann können wir in den Konstruktor des Helden schreiben:

public Held(String name) 
{ 
   this.name = name; 
   leben = 100; 
   schild = new Gegenstand(2,"Orkwehr",0,10,100); 
}

Wir haben jetzt im Konstruktor der Klasse Held auf den Konstruktor der Klasse Gegenstand zugegriffen. Auf ähnliche Weise können wir in der Methode anzeigen() des Helden auf die anzeigen()-Methode des Gegenstandes zurückgreifen:

public void anzeigen(Graphics g, int x, int y)
{
   g.drawString("Der Held heißt " + name,x,y);
   g.drawString("Er hat " + (int)leben + " Lebenspunkte,x,y+20);
   g.drawString("Er hat folgenden Schild: ",x,y+40);
   schild.anzeigen(g,x,y+60);
}

HAT-Beziehungen / KENNT-Beziehungen

Eigentlich muss man zwischen zwei verschiedenen Formen der HAT-Beziehung unterscheiden. In unserem Beispiel können Objekte der Klasse Gegenstand existieren, ohne dass sie in ein Objekt der Klasse Held eingebettet sind. Sie können quasi für sich alleine vorkommen. Ein Objekt der Klasse Gegenstand kann beispielsweise auch in einer Schatztruhe liegen oder unter einem Stein vergraben sein.

Es gibt aber auch Klassen, deren Objekte ausschließlich als Bestandteile anderer Objekte vorkommen; alleine kommen sie nicht vor. Hier würde man dann von einer Komposition reden. Das übergeordnete, besitzende Objekt enthält dann Objekte, die für sich alleine nicht existieren können. Ein häufig zitiertes Beispiel ist die Klasse Golfplatz, die Objekte der Klasse Loch besitzt. Ein Loch kann aber ohne Golfplatz nicht existieren.

Eine andere Unterscheidung zwischen HAT-Beziehung und KENNT-Beziehung (inf-schule.de) sieht so aus: Bei einer HAT-Beziehung kann die übergeordnete Klasse die Objekte der untergeordneten Klasse selbst erzeugen, bei einer KENNT-Beziehung aber nicht. Ein Objekt der Klasse Held aus dem obigen Beispiel kann Objekte der Klasse Gegenstand erzeugen (mit dem new-Operator), darum handelt es sich hier um eine HAT-Beziehung.