Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

worte.projekt.de
von worte.projekt.de Mehr von diesem Publisher
30.10.2013 Aufrufe

16 3 Objektorientierung ler: Berg et al. (1995) kommen in einer Untersuchung zu dem Ergebnis, dass 80% der neu ausgebildeten Entwickler die Grundzüge der objektorientierten Entwicklung verstanden haben und sie anwenden können. Von diesen 80% entwickelten sich 5% zu sehr guten Entwicklern (top performers), 15% waren immerhin gut (journeyman level). Die große Mehrheit blieb allerdings Mittelmaß. Dass die objektorientierte Vorgehensweise nicht ohne Schwierigkeiten gemeistert werden kann, zeigen auch die Sammlungen typischer Fehler von Webster (1995) und Alexander (2001). 3.1 Begriffe Die Begriffe in der Objektorientierung werden häufig unterschiedlich definiert, oder es werden für dasselbe Konzept unterschiedliche Begriffe verwendet. Das führt zu einem großen Begriffschaos (Snyder, 1993). Daher werden die Definitionen der zentralen Begriffe angegeben, wie sie in dieser Arbeit verwendet werden. Die verwendeten Definitionen stützen sich vor allem auf die Begriffsbildung im Zusammenhang mit UML gemäß Rumbaugh et al. (1998). Drei Eigenschaften zeichnen nach Wegner (1987, 1992) die objektorientierte Sichtweise aus: Objekte, Klassen und Vererbung. Viele Autoren nehmen noch Polymorphismus und das damit zusammenhängende dynamische Binden als wichtige Eigenschaften hinzu. Daher werden diese Begriffe zuerst eingeführt. 3.1.1 Objekt Die zentrale Rolle spielt der Begriff des Objekts. Ein Objekt besteht aus Datenfeldern, den so genannten Attributen, und aus Funktionen auf diesen Daten, den so genannten Methoden. Methoden dienen zur Reaktion auf Nachrichten, die ein Objekt versteht. Methoden können z. B. den Zustand des Objekts (die Werte seiner Attribute) verändern oder neue Nachrichten verschicken. Die Schnittstelle einer Methode wird als Operation bezeichnet; eine Methode ist also die Implementierung einer Operation. 3.1.2 Klasse Die Objekte eines Systems werden nicht individuell beschrieben, sondern anhand ihrer Gemeinsamkeiten in Klassen zusammengefasst. Eine Klasse definiert die Attribute und Methoden ihrer Objekte. Die Klasse dient als Schablone zur Instantiierung (Erzeugung) von Objekten (Instanzen). Bei der Instantiierung müssen nur die Werte für die Attribute angegeben werden, die Methoden übernimmt das Objekt von seiner Klasse. Bei getypten objektorientierten Programmiersprachen wie C++ (Stroustrup, 1997), Java (Gosling et al., 1998) oder Eiffel (Meyer, 1991) ist das Typkonzept mit dem Klassenkonzept verknüpft: Bei der Deklaration einer Klasse wird automatisch auch ein gleichnamiger Typ deklariert. Dieser Typ verfügt über einen Wertebereich, der sich aus den Wertebereichen der Attribute zusammensetzt, und über Operationen, die den Methoden entsprechen. Daher definiert Meyer (1997) eine Klasse auch als die Implementierung eines abstrakten Datentyps. Ein Objekt ist vom Typ seiner Klasse. Abbildung 3-1 zeigt die UML-Darstellung einer Klasse und eines Objekts dieser Klasse. Der Name des Objekts wird zur besseren Unterscheidung unterstrichen.

3.1 Begriffe 17 Klasse Person mit Attributen name, birthday und Operationen setName, getAge. Attribute, Parameter und Rückgabe haben einen Typ. Ein Objekt namens HAL der Klasse Person mit der Wertebelegung der Attribute. Der Objektstatus wird durch die Unterstreichung angezeigt. Abbildung 3-1: UML-Darstellung von Klasse und Objekt Kommentare werden in UML durch einen Kasten mit Eselsohr dargestellt, der mit dem Modellelement, auf das sich der Kommentar bezieht, durch eine gestrichelte Linie verbunden ist. 3.1.3 Vererbung Vererbung ist eine Beziehung zwischen Klassen. Eine Klasse kann sämtliche Eigenschaften (Attribute und Methoden) einer anderen Klasse erben, d. h. als Kopie übernehmen. Es dürfen außerdem weitere Eigenschaften hinzugefügt werden (Erweiterung) und geerbte Methoden modifiziert werden (Redefinition). Bei Einfachvererbung erbt eine Klasse von genau einer anderen Klasse, bei Mehrfachvererbung von mehreren Klassen. Die vererbende Klasse heißt Oberklasse, die erbende Unterklasse. Bei getypten objektorientierten Programmiersprachen wird die Vererbungsrelation auf die korrespondierenden Typen übertragen: Eine erbende Klasse definiert einen Subtyp des durch die vererbende Klasse definierten Typs. Dadurch entsteht eine zur Vererbungsstruktur der Klassen isomorphe Typstruktur. In UML wird die Vererbung durch einen Pfeil mit einer dreieckigen Spitze angezeigt, der von der Unterklasse zur Oberklasse geht (vgl. Abbildung 3-2). Geerbte Eigenschaften werden in der Darstellung der Unterklasse nicht wiederholt. Die Klasse OO_Designer erbt von Person und fügt dabei neue Eigenschaften hinzu. OO_Designer experience: int likesUML: boolean getExperience(): int Abbildung 3-2: UML-Darstellung der Vererbung Person name: String birthday: Date setName(n: String) getAge(): int HAL: Person name = "HAL 9000" birthday = 12.1.1997 Person name: String birthday: Date setName(n: String) getAge(): int Vererbung ist ein mächtiges Konzept; durch sie kann viel redundante Implementierung eingespart werden. Durch Erben kann aber die Kapselung durchbrochen werden, weil eine Unterklasse Zugriff auf die Implementierung der Oberklasse erhält (Snyder, 1986). Außerdem ist die Unterklasse durch das Erben stark an ihre Oberklasse gekoppelt: Jede Änderung der Oberklasse betrifft auch die Unterklasse.

16 3 Objektorientierung<br />

ler: Berg et al. (1995) kommen in einer Untersuchung zu dem Ergebnis, dass 80% <strong>der</strong><br />

neu ausgebildeten Entwickler die Grundzüge <strong>der</strong> objektorientierten Entwicklung verstanden<br />

haben und sie anwenden können. Von diesen 80% entwickelten sich 5% zu<br />

sehr guten Entwicklern (top performers), 15% waren immerhin gut (journeyman<br />

level). Die große Mehrheit blieb allerdings Mittelmaß. Dass die objektorientierte Vorgehensweise<br />

nicht ohne Schwierigkeiten gemeistert werden kann, zeigen auch die<br />

Sammlungen typischer Fehler von Webster (1995) und Alexan<strong>der</strong> (2001).<br />

3.1 Begriffe<br />

Die Begriffe in <strong>der</strong> Objektorientierung werden häufig unterschiedlich definiert, o<strong>der</strong><br />

es werden für dasselbe Konzept unterschiedliche Begriffe verwendet. Das führt zu<br />

einem großen Begriffschaos (Sny<strong>der</strong>, 1993). Daher werden die Definitionen <strong>der</strong> zentralen<br />

Begriffe angegeben, wie sie in dieser Arbeit verwendet werden. Die verwendeten<br />

Definitionen stützen sich vor allem auf die Begriffsbildung im Zusammenhang<br />

mit UML gemäß Rumbaugh et al. (1998).<br />

Drei Eigenschaften zeichnen nach Wegner (1987, 1992) die objektorientierte Sichtweise<br />

aus: Objekte, Klassen und Vererbung. Viele Autoren nehmen noch Polymorphismus<br />

und das damit zusammenhängende dynamische Binden als wichtige Eigenschaften<br />

hinzu. Daher werden diese Begriffe zuerst eingeführt.<br />

3.1.1 Objekt<br />

Die zentrale Rolle spielt <strong>der</strong> Begriff des Objekts. Ein Objekt besteht aus Datenfel<strong>der</strong>n,<br />

den so genannten Attributen, und aus Funktionen auf diesen Daten, den so genannten<br />

Methoden. Methoden dienen zur Reaktion auf Nachrichten, die ein Objekt versteht.<br />

Methoden können z. B. den Zustand des Objekts (die Werte seiner Attribute) verän<strong>der</strong>n<br />

o<strong>der</strong> neue Nachrichten verschicken. Die Schnittstelle einer Methode wird als<br />

Operation bezeichnet; eine Methode ist also die Implementierung einer Operation.<br />

3.1.2 Klasse<br />

Die Objekte eines Systems werden nicht individuell beschrieben, son<strong>der</strong>n anhand<br />

ihrer Gemeinsamkeiten in Klassen zusammengefasst. Eine Klasse definiert die Attribute<br />

und Methoden ihrer Objekte. Die Klasse dient als Schablone zur Instantiierung<br />

(Erzeugung) von Objekten (Instanzen). Bei <strong>der</strong> Instantiierung müssen nur die Werte<br />

für die Attribute angegeben werden, die Methoden übernimmt das Objekt von seiner<br />

Klasse. Bei getypten objektorientierten Programmiersprachen wie C++ (Stroustrup,<br />

1997), Java (Gosling et al., 1998) o<strong>der</strong> Eiffel (Meyer, 1991) ist das Typkonzept mit dem<br />

Klassenkonzept verknüpft: Bei <strong>der</strong> Deklaration einer Klasse wird automatisch auch<br />

ein gleichnamiger Typ deklariert. Dieser Typ verfügt über einen Wertebereich, <strong>der</strong><br />

sich aus den Wertebereichen <strong>der</strong> Attribute zusammensetzt, und über Operationen, die<br />

den Methoden entsprechen. Daher definiert Meyer (1997) eine Klasse auch als die<br />

Implementierung eines abstrakten Datentyps. Ein Objekt ist vom Typ seiner Klasse.<br />

Abbildung 3-1 zeigt die UML-Darstellung einer Klasse und eines Objekts dieser<br />

Klasse. Der Name des Objekts wird zur besseren Unterscheidung unterstrichen.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!