DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Teil 3: Qualitätsmodell Wie komme ich zu einem guten Entwurf? Definition: Der beste Entwurf ist derjenige, der über die gesamte Lebenszeit der Software minimale Kosten verursacht. Oder Ein schlechter Entwurf erzeugt hohe Wartungskosten Problematisch wird es immer dann, wenn sich Entwurfsentscheidungen hinsichtlich Qualitätsmerkmalen gegenseitig beeinflussen: Erhöhung der Flexibilität geht häufig einher mit einer Verringerung der Verständlichkeit. Seite 1 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Teil 3: Qualitätsmodell Drei Ansätze führen zu einem guten Entwurf: • • • Einsatz von bekannten Prinzipien und Heuristiken, die zu robusten, flexiblen und wieder verwendbaren Entwürfen führen. Die zwei bekanntesten sind: – Information hiding (Parnas), auch Kapselung, Abstraktion genannt – Geringe Kopplung Verwendung von Metriken, die einen Entwurf aus einem festzulegenden Blickwinkel beurteilen. Dadurch kann die Komplexität verringert und die Verständlichkeit erhöht werden. Die bekannteste ist die – Cyclomatische Komplexität (McCabe) Zu guter letzt haben wir natürlich noch die bekannten Entwurfs-Muster (design pattern) Und nicht zu vergessen: Bei mehreren Lösungsalternativen ist die einfachste zu wählen. Seite 2 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Beispiel: Ausleihe von Videofilmen. Ziel: Es soll ein System zur Rechnungserstellung entworfen werden. Kunde, Ausleihe und Videofilm werden jeweils durch Klassen modelliert. Dem Kunden sind seine Ausleihen zugeordnet, während jede Ausleihe den ausgeliehenen Videofilm und die Ausleihdauer (in Tagen) kennt. Ein Videofilm hat einen Preiscode, der zusammen mit der Leihdauer den Preis bestimmt. Es gibt Preiscodes für normale Filme, Kinderfilme und neue Filme. Der Preiscode eines Videofilmes kann sich ändern, daher gibt es in der Klasse Videofilm eine Methode setzePreiscode(). 1. Entwurf: Es erscheint sinnvoll, die Erstellung einer kundenspezifischen Rechnung in der Klasse Kunde vorzunehmen und dazu alle erforderlichen Informationen bei den Klassen Ausleihe und Videofilm einzuholen. Seite 3 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Seite 4 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Diskussion des 1. Entwurfs: Dieses Vorgehen ist ein Verstoß gegen die Regel, unnötige Kopplungen zu vermeiden, siehe Benutz-Beziehung im Klassendiagramm: Auf einem Objekt, das von einer anderen Klasse (Ausleihe) als Resultat eines Methodenaufrufs (holeVideofilm) geliefert wurde, wird eine Methode (ermittlePreis) aufgerufen. Außerdem erscheint es sinnvoll, die Preisberechnung für einen(!) Ausleihvorgang in der Klasse Ausleihe durchzuführen. 2. Entwurf: Die Preisberechnung wird geteilt und sowohl in der Klasse Ausleihe als auch in der Klasse Videofilm durchgeführt. (Diagramme nächste Seite) Diskussion des 2. Entwurfs: Zwischen den Klassen bestehen weniger Kopplung (Kunde weiß nichts mehr von Videofilm) und die Kapselung von Ausleihe und Videofilm wurde verbessert, da die drei getMethoden (holeAusleihdauer, holeVideofilm, holePreis) entfallen können. Jedoch ist die Berechnung des Rechnungsbetrages nun über drei Klassen „verschmiert“, so dass man drei Klassen betrachten muss, um den Algorithmus vollständig nachvollziehen zu können. Seite 5 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Seite 6 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell 3. Entwurf: Unter Einbeziehung des Design Patterns „State“ (zustandsabhängiges Verhalten in separaten Objekten) wird die Preisberechnung in eine abstrakte Klasse Preis ausgelagert. Fallunterscheidung nach dem Preiscode durch dynamisches Binden. Seite 7 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Diskussion des 3. Entwurfs: Diese Lösung ist einfacher (als der 2. Entwurf) um neue Preiscodes zu erweitern, auch Änderungen in der Preisberechnung sind einfacher durch zu führen. Dafür jedoch hat sich die Anzahl der Klassen mehr als verdoppelt und damit hat sich die Verständlichkeit verringert. Seite 8 DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 4.5.3 Aug 2011 Objektorientierter Entwurf (OOD) Qualitätsmodell Schlussfolgerungen: Die Änderungen der Entwürfe von 1 nach 3 dienten der Entkopplung und damit der Änderbarkeit. Jedoch verschlechtert sich die Verständlichkeit dadurch, dass die Anzahl der Klassen ansteigt. Es wird Flexibilität eingebaut, die aber nur dann wirklich sinnvoll ist, wenn sich die Preiscodes tatsächlich ändern werden. Die Güte des Entwurfs hängt somit auch vom Kontext der Software ab. Empfehlung: Grundsätze wie Entkopplung und Kapselung von Details und von (sich wahrscheinlich ändernden) Entwurfsentscheidungen sollten immer beachtet werden. Flexibilität, insbesondere durch Entwurfsmuster (design pattern) ist oft teuer, da der vorhandene Entwurf geändert werden muss, und sollte erst dann eingebaut werden, wenn sie benötigt wird. Seite 9