Version [26612]
Dies ist eine alte Version von ObjProg05Beziehungen erstellt von RonnyGertler am 2013-04-29 19:15:42.
Objektorientierte Programmierung - Kapitel 5 - Objekt-Beziehungen
Inhalte von Dr. E. Nadobnyh
51. Verbindungen zwischen Objekten in C++
Nachricht
Ein objektorientiertes Programm ist eine Vielzahl kooperierender Objekte.
Kommunikation zwischen Objekten bedeutet, dass die Objekte sich gegenseitig Nachrichten schicken, d.h. Methoden des anderen Objektes aufrufen.
Verbindungen zwischen Objekten in C++
Die Voraussetzung für eine Kommunikation zwischen Objekten ist , dass diese sich kennen. Eine C++ -Methode kennt folgende Objekte:
1) Globale Objekte,
2) Lokale Objekte,
3) Parameter-Objekte,
4) Attribut-Objekte.
Objekte können in drei bekannten Formen gestaltet werden:
1) Benanntes-Objekt,
2) Referenziertes Objekt ,
3) Referenz-Objekt.
Subobjekte
Objekte können sich aus anderen Objekten (AttributObjekten) zusammensetzen.
Ein Attribut-Objekt wird auch als Subobjekt bezeichnet.
Es gibt zwei Arten von Subobjekten:
1) Teilobjekt (Benanntes-Objekt ),
2) Eigenständiges Subobjekt (Referenziertes Objekt ).
Begriffsverwirrung: Ein Subobjekt kann manchmal als ein Teilobjekt bezeichnet werden.
Ein Teilobjekt ist ein unlösbares Subobjekt.
class A{ };
class B{ A a1; };
main(){ B b1; }
Hier ist a1 das Teilobjekt des Objektes b1.
Bei der Initialisierung eines Objektes, das Teilobjekte enthält, sind mehrere Konstruktoren auszuführen.
Reihenfolge der Konstruktor- Aufrufe:
1) Zuerst werden die Teilobjekte angelegt und initialisiert. Ohne weitere Angaben wird für jedes Teilobjekt der Default- Konstruktor aufgerufen.
2) Danach wird der Konstruktor des Objektes aufgerufen.
Der Aufruf von Default-Konstruktoren beim Aufbau von Teilobjekten hat folgende Nachteile:
1) Ein Teilobjekt wird zwei mal mit Werten versehen: zuerst durch den Aufruf des Default-Konstruktors des Teilobjektes, danach durch die Zuweisung beim Aufruf des Konstruktors des Objektes. Diese doppelte Aktion beeinträchtigt die Ausführungszeit.
2) Konstante Objekte oder Referenzen können nicht durch die Zuweisung mit Werten versehen werden.
3) Klassen ohne Default-Konstruktor können nicht als Typ für Teilobjekte verwendet werden.
Initialisierungsliste
Eine Initialisierungsliste dient für die direkte Initialisierung von Teilobjekten. Diese Liste wird hinter dem Kopf des Konstruktors, durch einen Doppelpunkt getrennt, angegeben. Eine Initialisierungsliste besteht aus den Namen der Teilobjekten und seinen Anfangswerten.
⇒ Demo 1
5.2. Beziehungen zwischen Objekten und ihre Umsetzung in C++
Beziehungen
Man unterscheidet grundsätzlich drei Arten von Beziehungen:
1) Beziehungen zwischen Klassen und Objekten
Die Objekte, die zu einer Klasse gehören, werden als Exemplare (Instanze) dieser Klasse bezeichnet.
2) Beziehungen zwischen Klassen
Diese Beziehung wird durch Vererbung definiert. Die abgeleitete Klasse steht zur Basisklasse in einer Ist-Beziehung.
3 )Beziehungen zwischen Objekten
Objekte stehen in Beziehungen, wenn sie sich kennen. Ein Objekt steht in einer Hat-Beziehung zu anderem, wenn es das anderen Objekt als Attribut besitzt.
Beziehungen in UML
UML (Unified Modeling Language) ist eine Sprache, um objektorientierte Systeme zu beschreiben.
Die Ergebnisse der objektorientierten Analyse (OOA) und des objektorientierten Designs (OOD) können in einer normierten Form beschrieben werden. Damit können Analyse- und Entwurfsfehler z.B. noch vor der Implementierung entdeckt werden.
⇒ Demo 2
Arten von Objekt-Beziehungen
Die Arten sind in der UML unabhängig von konkreter Programmiersprache standardisiert:
1) Einfache Assoziation
2) Aggregation
3) Komposition
Objekt-Beziehungen werden ganz allgemein auch Assoziation genannt.
Die einfache Assoziation (auch Benutzt-Beziehung) bedeutet gleichrangige Beziehung zwischen Objekten.
UML- Klassendiagramm für unidirektionale Assoziation:
Ein Objekt der Klasse „Beruf“ kennt ein anderes Objekt der Klasse „Werkzeug“.
Obwohl in UML eine Assoziation als eine Linie zwischen den Klassenkästchen dargestellt wird, ist eine Assoziation eine Beziehung zwischen Objekten – den Exemplaren dieser Klassen.
Die einfache Assoziation kann in C umgesetzt sein:
1) als ein lokales Objekt,
2) als Parameterobjekt,
3) als referenziertes Attribut-Objekt
Beispiel:
Ein lokales Objekt der Klasse „Werkzeug“ wird in einer Methode der Klasse „Beruf“ angelegt:
class Werkzeug { public: void g(){ } };
class Beruf
{ public: void p(){ Werkzeug w1; w1.g(); }
};
class Beruf
{ public: void p(){ Werkzeug w1; w1.g(); }
};
⇒ Demo 3
CategoryObjProg