Home
 UML
BuiltByNOF
 Objekte

1) Abstraktion ist ein Weg, um die Abhängigkeiten zwischen Klassen zu reduzieren. Abstraktion bedeutet im Kontext der SW-Entwicklung die Beschreibung aus Anwendersicht und das Auslassen von Implementierungsentscheidungen.

2) Attribute stellen eine Möglichkeit dar, Daten zu speichern. Attribute haben einen Namen und zur Laufzeit einen Wert. Typisierte Attribute besitzen bereits zur Übersetzungszeit einen Typ (wie etwa in C++, Java).

3) Nachrichten stellen die Möglichkeit zur Kommunikation in OO-Systemen dar. Eine Nachricht besteht aus einem ("Funktions-")Namen sowie einer Liste konkreter Werte für Parameter. Als Beispiel sei der Funktionsaufruf in C, C++ und Java genannt, bei dem ein ("Funktions-")Name sowie in Klammern eine Liste von Werten für die Parameter angegeben werden müssen.

4) Eine Signatur ist der Name von Nachrichten, die ein OO-System empfangen und beantworten kann. Die Signatur besteht aus dem Namen einer Nachricht ("Funktionsname") sowie einer Liste der Parameter (in der Nachricht); dies sind formale Attribute, also lediglich Attributnamen ohne Werte). In typisierten Sprachen besitzen Parameter bereits zur Übersetzungszeit einen Typ (wie etwa in C++, Java). Die Signatur ist der sogenannte Funktionskopf in C (auch Methodenkopf in C++, Java).

5) Methoden stellen eine Möglichkeit dar, Verhalten als Reaktion (Aktionen, Rückgabewert) auf empfangene Nachrichten zu definieren. Methoden bestehen aus einer Signatur (Name und Parameter) und einer Operation (Liste von Befehlen).

6) Identität ist ein Unterscheidungsmerkmal um verschiedene Daten zu unterscheiden, die ansonsten gleiche Attributwerte aufweisen. Identität wird beispielsweise benötigt, um Gegenstände und Vorgänge der realen Welt zu modellieren. Relationale Datensätze haben keine Identität, d.h. zwei Datensätze mit gleichen Werten in allen Feldern sind nicht unterscheidbar (= ein Datensatz). Die Identität wird realisiert durch ein verborgenes, zusätzliches Attribut, das eindeutig vergeben wird, oder durch die Adresse im Speicher. Mit dieser Technik können relationale Datenbanken sozusagen "nachgerüstet" werden. Die Identität ist auf jeden Fall von der Vergleichsfunktion ("==") abfragbar.

7) Ein Ereignis ist das Eintreffen einer Nachricht an seinem Ziel. Das Ziel der Nachricht ist durch seine Identität beim Absenden der Nachricht eindeutig beschrieben worden. Als Reaktion auf ein Ereignis wird der Empfänger die Methode mit der passenden Signatur ausführen, wobei deren formale Parameter mit den in der Nachricht mitgesandten Werten belegt werden.

8) Innerhalb eines Threads finden das Absenden der Nachricht (Methodenaufruf) und das Ereignis (Betreten des Methodenrumpfs) unmittelbar hintereinander statt. In Systemen mit mehreren Threads oder Prozessen kann man eine Zeit zwischen Nachricht und Ereignis beobachten. Arbeiten Empfänger und Sender mit dem gleichen Thread, spricht man von synchroner Zustellung. Verwenden Sender und Empfänger verschiedene Threads (oder sogar Prozesse), arbeitet man mit asynchroner Zustellung.  Bei synchroner Nachrichtenzustellung ist das Absenden der Nachricht (etwa: Funktionsaufruf in C++ und Java) und ihr Eintreffen am Ziel scheinbar zeitgleich. Bei asynchroner Zustellung ist die Zeitdauer der Nachrichtenzustellung im Voraus unbekannt. Typischerweise werden während der Zustellung einer Nachricht die Operationen zu anderen Nachrichten ausgeführt. Asynchrone Zustellung benötigt Puffer für alle abgesandten und noch nicht bearbeiteten Nachrichten.

9) Relationen stellen die Möglichkeit dar, identifizierte Daten miteinander in Beziehung zu setzen. Die allgemeinste Relation ist die Abhängigkeit ("dependency"). Den grundsätzlichen Beziehungen "Haben" (HAS-A) und "Sein" (IS-A) der abzubildenden Welt entsprechen die "Assoziation" sowie die "Generalisierung" in UML.

10) Spezieller als die Assoziation ist die "Aggregation", die für Teil-Ganzes-Beziehungen eingesetzt wird. Die "Komposition" ist eine Verschärfung der "Aggregation", wenn das Teil ohne das Ganze nicht existieren kann.

11) Eine Klasse im Sinne der Objektorientierung wird durch einen Namen sowie Attribute, Methoden und Relationen beschrieben. Die Methoden haben üblicherweise Operationen, sie müssen es aber nicht; in diesen Fällen besteht die Methode nur aus der Signatur. Relationen werden in UML zwischen Klassen formuliert. Mit der Generalisierung baut man die Oberklassen- und Vererbungshierarchien auf. Klassen erben alle Attribute, Methoden und Relationen mit den Sichtbarkeiten "protected"/"public" ihrer Oberklasse(n).

Klassensymbol                                                                 Klasse mit Methoden und Attributen
class_small                                     class_details


cd_dependency
Abhängigkeit (siehe auch “Architektur”)


cd_generalization
Generalisierung


cd_association
Assoziation


cd_aggregation

cd_composition



12) Ein Objekt X ist die Laufzeit-Instanz einer Klasse und besitzt Attributwerte sowie eine Identität. Bildet man eine weitere Instanz Y der gleichen Klasse und gibt ihr die gleichen Werte wie dem Objekt X zuvor, unterscheiden sich die beiden Instanzen X und Y durch die Identität.  Die Vergleichsfunktion für X und Y wird "false" ergeben (also X != Y).

13) Besitzen Objekte in asynchronen objektorientierten Softwaresystemen auch eigene Threads, heißen diese Objekte "aktive Objekte". Aktive Objekte präsentieren sich dem Benutzer als scheinbar parallel arbeitende Instanzen.

14) Polymorphie ist die Möglichkeit, speziellere Objekte an Stelle allgemeinerer Objekte einzusetzen. Mittels Polymorphie können den spezielleren Objekten dann die gleichen Nachrichten gesendet werden, zeigen jedoch eine speziellere Reaktion. Die Vererbung ist eine besondere Relation, die zur Realisierung der Polymorphie eingesetzt wird. Vererbung ist typisch, aber nicht wesentlich für Objektorientierung (man könnte ja auch stets Delegation einsetzen).

15) Abstraktion benötigt u.a. Kapselung. Kapselung bedeutet, Implementierungsdetails einer SW unsichtbar zu machen, um diese Details vor den Benutzern (Aufruf, Zeiger) zu verbergen. Kapselung wird durch Einschränkung der Sichtbarkeit von technischen Details realisiert. Jeweils einzeln für Attribute, Operationen und Relationen kann eine Sichtbarkeitsstufe zur Einschränkung der Sichtbarkeit angegeben werden. Die Sichtbarkeitsstufen lauten "public:" : "Aufruf bzw. Zugriff v. außen erlaubt";  "protected": "Zugriff nur für Unterklasse", und  "private": "Zugriff nur in der Klasse möglich". Im Idealfall können die Benutzer nur auf die Schnittstelle der SW zugreifen und die Implementierung kann geändert (Korrektur, Erweiterung) werden, ohne dass die Benutzer der SW angepasst werden müssten (slange nur die Schnittstelle unverändert bleibt).

16) Die wesentlichen Merkmale der Objektorientierung sind Kapselung, Identität sowie Polymorphie. Das grundlegende Ziel dabei ist die Abstraktion; Kapselung und Polymorphie sind Techniken, um Abstraktion zu implementieren.


class_sample

Beispiele für Klassendiagramme

cd_carrental

 

[Home] [UML]