Objekte
Definition: Objekt (Exemplar; Instanz)
Ein Objekt ist allgemein ein Gegenstand des Interesses, insbesondere einer Beobachtung, Untersuchung oder Messung. In der OOM ist ein Objekt ein individuelles Exemplar von Dingen (z. B. Roboter, Auto), Personen (z. B. Kunde, Mitarbeiter) oder Begriffen der realen Welt (z. B. Bestellung).
Der Zustand (state) eines Objektes wird durch seine Attributwerte bestimmt. Das Verhalten (behavior) wird durch eine Menge an Methoden (Operationen) bestimmt.
Ein Objekt besitzt einen bestimmten Zustand (gespeichert in den Attributwerten) und reagiert mit einem definierten Verhalten (Methoden) auf seine Umgebung. Außerdem besitzt jedes Objekt eine Objekt-Identität, die es von allen anderen Objekten unterscheidet. Objekte können sich untereinander kennen.
Eine Änderung oder die Abfrage von Attributwerten eines Objektes ist nur über seine Methoden möglich, d. h. die Attributwerte sind außerhalb des Objekts nicht sichtbar. Man spricht daher von der Verkapselung der Daten bzw. der Einhaltung des Geheimnisprinzips (information hiding). Daher sind Attribute grundsätzlich mit der Schutzklasse private (oder protected) zu versehen. Methoden, die aufgerufen werden sollen, erhalten die Schutzklasse public.
In der UML-Notation wird ein Objekt durch ein zweigeteiltes Rechteck dargestellt. Der obere Teil enthält den unterstrichenen Klassennamen (mit vorgestelltem Doppelpunkt), zu dem das Objekt gehört (anonymes Objekt). Besitzt das Objekt einen eigenen Namen, dann steht dieser vor dem Doppelpunkt (benanntes Objekt). Der Klassenname beginnt immer mit einem großen Buchstaben, der Objektname immer mit einem Kleinbuchstaben.
Im unteren Teil des Rechtecks werden die relevanten Attribute des Objekts mit den Attributwerten und ihrer Schutzklasse angegeben, getrennt durch ein Gleichheitszeichen. Dieser Teil des Rechtecks kann entfallen, auch können nicht interessierende Attribute weggelassen werden.
Methoden können in der UML-Notation für Objekte (im Unterschied zu Klassen) weggelassen werden, da alle Objekte die gleichen, in der Klasse definierten Methoden, besitzen.
Auch die interaktiven Elemente der grafischen Benutzeroberfläche eines Programms sind ebenfalls Objekte, z. B. JLabel, JTextfield, …
Beispiel
Die Firma ProfiSoft soll ein Kundenverwaltungsprogramm erstellen. Die Anforderungen an das Programm werden (in Zusammenarbeit mit dem Auftraggeber) in einem Pflichtenheft zusammengefasst:
- Firmenname und Firmenadresse jedes Kunden sollen gespeichert werden.
- Alle Daten müssen einzeln gelesen werden können.
- Alle Daten müssen einzeln geschrieben werden können.
- Firmenname und Firmenadresse müssen zusammen geändert werden können.
- Die Auftragssumme ist mit dem Wert 0 vorzubesetzen.
Die ersten Kunden KFZ-Zubehör GmbH und Schrottverwertung AG lassen sich mit ihren Eigenschaften folgendermaßen beschreiben:
Klassen
Eine Klasse ist allgemein eine Gruppe von Dingen, Lebewesen oder Begriffen der realen Welt.
Definition: Klasse; Fachkonzept-Klasse
In der objektorientierten Welt repräsentiert eine Klasse die Gemeinsamkeit einer Menge von Objekten mit denselben Attributen, demselben Verhalten (Methoden) und denselben Beziehungen. Eine Klassenbeschreibung dient als Schablone , die angibt, wie ein Objekt aussehen soll.
Eine Fachkonzept-Klasse realisiert die in einem Pflichtenheft festgelegten fachlichen Anforderungen.
Eine Klasse besitzt einen Mechanismus, um Objekte zu erzeugen. Jedes erzeugte Objekt gehört zu genau einer Klasse. Beziehungen zwischen Klassen (relationships) sind Vererbungsstrukturen und Assoziationen (Aggregationen bzw. Kompositionen).
Im Beispiel der Firma ProfiSoft haben die Objekte KFZ-Zubehör GmbH und Schrottverwertung AG die gleichen Attribute und Methoden. Sie gehören daher zur Klasse Kunde.
Die Attribute einer Klasse müssen jedoch noch genauer spezifiziert werden, jedem Attribut muss ein Datentyp und seine Schutzklasse zugeordnet werden. Datentypen werden in UML-Notation getrennt durch einen Doppelpunkt hinter den Attributnamen angegeben. Schutzklassen werden vor den einzelnen Attributen angegeben.
Da auf die einzelnen Attribute nicht direkt zugegriffen werden darf (information hiding) müssen in Klassen spezielle Methoden vereinbart werden. Für das Schreiben von einzelnen Attributwerten wird als Methodenname setAttributname verwendet, für das Lesen der Methodenname getAttributname.
Jede Klasse benötigt Methoden, mit denen Objekte bzw. Instanzen dieser Klasse erzeugt werden können. Eine solche Methode wird als Konstruktor bezeichnet, und verwendet den Namen der Klasse. Im einfachsten Fall besteht ein Konstruktor aus dem Klassennamen gefolgt von einem Klammerpaar (). Wird an diese Methode eine Botschaft geschickt wird im Allgemeinen ein leeres Objekt erzeugt, d. h. die Attribute des erzeugten Objektes erhalten keine (oder die als default gesetzten) Attributwerte. Konstruktoren können im Klammerpaar aber auch Parameter angeben, z. B. Kunde(Name:String);. Beim Aufruf des Konstruktors wird dann ein Objekt erzeugt, welches die gewünschte Belegung des Attributes erhält.
In UML-Notation wird eine Klasse als dreigeteiltes Rechteck dargestellt. Im oberen Teil steht zentriert und fett der Klassenname (nicht unterstrichen). Im mittleren Teil sind die Attributnamen und ihre Datentypen angegeben, im unteren Teil die Methoden. Dem Methodennamen folgt ein Klammerpaar (). Besitzt die Methode einen Parameter, dann stehen diese im Klammerpaar. Übergibt eine Methode Ergebnisse zurück (= Funktion), dann wird der Typ des Ergebnisses, getrennt durch eine Doppelpunkt, hinter dem Klammerpaar angegeben.
Beispiel
Die Klasse Kunde besitzt zwei Konstruktoren. Das erste Objekt Kunde wurde mit dem Konstruktor kunde() erzeugt, das zweite mit dem Konstruktor kunde(Firmenname: String), konkret mit kunde(„Schrottverwertung AG“). Zudem besitzt die Klasse Kunde z. B. die Methoden getAuftragssumme(): int, die als Ergebnis die aktuelle Auftragssumme zurück gibt, und setAuftragssumme(Auftragssumme: int), mit der der Wert des Attributes auftragssumme geändert werden kann. Die Methoden sind als public gekennzeichnet, die Attribute als private.