Prüfkriterien für objektorientierte Systeme

Slides:



Advertisements
Ähnliche Präsentationen
Prüfung objektorientierter Programme -1
Advertisements

Objektorientierte Programmierung
Frame-Logik Eine Einführung Andreas Glausch.
Designing Software for Ease of Extension and Contraction
Einführung in die Programmierung Zusammenfassung
Die Definitionsphase -Objektorientierte Analyse - Das statische Modell
Freie Universität Berlin Institut für Informatik
Objektorientierte Programmierung
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Algorithmentheorie 04 –Hashing
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Agenda Einführung Haskell QuickCheck Zusammenfassung
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Modularisierungstechniken
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Kursleitung: Hier ist Platz für Ihren Namen
Objektorientierte DBMS Klassen und Beziehungen Seminar: Verteilte Datenbanken Manuela Fischer.
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Entwurfsmuster EDV Entwurfsmuster.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
1 Klassen (1) Eine Klasse beschreibt eine Menge von Objekten mit gemeinsamer Struktur gemeinsamem Verhalten gemeinsamen Beziehungen gemeinsamer Semantik.
OO Analyse und Entwurf für Anwender XIII. Objektorientierte Benutzeroberfäche Dr. Michael Löwe.
Wizards & Builders GmbH Einführung in die objektorientierte Programmierung Norbert Abb.
Visual FoxPro Objektorientierte Programmierung. © 1999 TMN-Systemberatung GmbH Grundbegriffe n Objekte n Eigenschaften n Methoden n Objektnamen n Klasse.
Visualisierung objektrelationaler Datenbanken
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 12. Sitzung WS 02/03.
Objektorientierte Programmierung
Objektorientiertes Programmieren
Gestaltung von Folien mit Powerpoint
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
ObjektOrientiertes Programmieren
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
EPROG Tutorium #6 Philipp Effenberger
Analyseprodukte numerischer Modelle
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
SOFTWARE TECHNOLOGY 2009/2010 Faculty of Electrical Engineering and Technical Informatics Budapest University of Technology and Economics OO problems 1.
Seminar Wien Einführung.
Objektorientierung.
Klassen und Klassenstruktur
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
2 Datenabstraktion Geheimnisprinzip:
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Sichtbarkeit einschränken
Abstrakte Klassen und das Interface-Konzept
Objektorientierte (OO) Programmierung
Objektorientierte Programmierung Was ist das eigentlich ?
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
1 Lutz Ullrich SOA – serviceorientierte Architektur SOA – Was ist das?
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
 Präsentation transkript:

Prüfkriterien für objektorientierte Systeme Software Qualitäts Labor

OO Konzepte OO Programmierung macht viele Strukturmerkmale des Entwurfs explizit, aber Nutzung der Notation allein macht noch keinen guten OO Entwurf aus Wesentliche Bestandteile eines Systems sind Objekte beschrieben durch Klassen Objekte werden als eigenständige Einheiten betrachtet mit einem Zustand und der Fähigkeit, Nachrichten zu senden/zu verarbeiten Entwurfskonzepte: Bündelung Kapselung Modularität Vererbung Polymorphismus Entwurfsziele: änderbar verstehbar Ein guter OO-Entwurf nutzt diese Prinzipien zum Vorteil der Entwurfsziele aus Software Qualitäts Labor

Betrachtungsebenen Systemebene Paketebene: jedes Verzeichnis ein Paket Dateiebene Klassenebene Attribute/Variable Methoden/Funktionen Software Qualitäts Labor

Bündelung Bündelung von Daten und zugehörigen Operationen in Klassen Enge Verflechtung durch Schreib/Lesezugriffe auf Attribute Aufrufe von Methoden innerhalb der Klasse Nutzen: Wesentliches Strukturmerkmal, hilft eigenständige Einheiten zu identifizieren Verständnis der Daten von Algorithmen abhängig und umgekehrt Separat wiederverwendbare Einheiten gute Bündelung bedeutet... Keine globalen Funktionen oder Daten Gute Strukturierung des Systems mit Hilfe von Klassen Software Qualitäts Labor

Kapselung Klassenelemente können explizit als öffentlich/privat gekennzeichnet werden Nutzen: Macht Modulschnittstelle explizit Verhindert unerwünschte Kopplung (prüfbar!) Verständnis: Unterscheidung in wichtige/unwichtige Teile Wartbarkeit: Änderungen am privaten Teil bleiben lokal Software Qualitäts Labor

Gute Kapselung bedeutet... Wenige Bestandteile einer Klasse sind öffentlich Teile, die sich oft ändern nie öffentlich zugänglich machen Erfahrung: Datenrepräsentation ändert sich häufig  nur Methoden öffentlich machen Geringe Kopplung zwischen Systemteilen, da anderenfalls viel Information verbreitet wird Software Qualitäts Labor

Modularität Ein System in separate Einheiten unterteilen Trennung zwischen stabilen und instabilen Systemteilen – instabil= Muss oft geändert werden aufgrund neuer Anforderungen Soll separat wiederverwendet werden Ist plattformabhängig Ist technologieabhängig In OO: Module (Klassen) können instanziiert werden Module sind auch dynamisch austauschbar Nutzen: Definition von Teilen, die separat entwickelt, referenziert, gewartet, wiederverwendet werden können Antizipierte Änderungen wirken sich nur lokal aus Unterstützung von Abstraktion: Modulstruktur erlaubt Aufmerksamkeit auf einzelne Teile zu richten Software Qualitäts Labor

Gute Modularität bedeutet... In OO: Nutzung von Klassen zur Bildung von Modulen Schmale Schnittstellen (wenig öffentliche Methoden, wenig Parameter) Für große Module sollten separate Schnittstellenklassen verwendet werden Kommunikation findet ausschließlich über Schnittstellen statt (keine globale Variable) Lose Kopplung Hohe Kohäsion Software Qualitäts Labor

Kopplung „Der Grad an Abhängigkeit zwischen Klassen“ Lose Kopplung bedeutet, es gibt wenig solcher Abhängigkeiten Kopplungsrichtung: Efferent: die Fokusklasse benutzt andere Klassen Afferent: die Fokusklasse wird von anderen Klassen benutzt Arten der Nutzung Aufrufkopplung: aufgrund des Aufrufs von Methoden Attributkopplung: aufgrund des Lesens/Schreibens von Attributen Vererbungskopplung: aufgrund des Erbens von Eigenschaften Gefahren durch hohe Kopplung: Verständnis: eng gekoppelte Teile müssen auch verstanden werden Wartbarkeit: Änderungen haben viele Seiteneffekte  schlecht kontrollierbar Wiederverwendbarkeit: eng gekoppelte Teile lassen sich schlecht herauslösen Software Qualitäts Labor

Lose Kopplung bedeutet... Wenig Abhängigkeiten zwischen Klassen Keine Abhängigkeiten von Implementierungsdetails von Modulen Keine Abhängigkeit von globalen Elementen Keine bidirektionalen Abhängigkeiten Keine Nachrichtendurchschleusung Software Qualitäts Labor

Kohäsion „Der Grad zu welchem Designelemente aufeinander bezogen sind“ Tritt auf verschiedenen Ebenen auf: Paketebene: erfüllen alle enthaltenen Klassen den Zweck des Pakets? Klassenebene: Hat eine Klasse genau einen Zweck/Verantwortlichkeit? Funktionsebene: Führt eine Methode genau eine logisch zusammenhängende Operation aus? Entwurfsprinzip: Eine Einheit = ein Konzept Kohäsion ist eine inhaltliche Forderung, aus Entwurf lassen sich nur Indikatoren ableiten Auswertung von Strukturmerkmalen, welche eine Ähnlichkeit bzgl. der Nutzung von Variablen/Attributen/Methoden/Klassen nahelegen Software Qualitäts Labor

Hohe Kohäsion bedeutet... Nicht zu viele Attribute/Methoden pro Klasse Methoden nutzen gemeinsame Attribute (Klassenebene) Anweisungen beziehen sich auf gemeinsame Variable (Funktionsebene) Software Qualitäts Labor

Vererbung Ausdrücken einer Spezialisierungsbeziehung zwischen Klassen Nutzen: Modellnähe: macht im Anwendungsgebiet existierende Ähnlichkeiten explizit Wartbarkeit: in Verbindung mit Polymorphismus instabile oder konfigurierbare Teile ausfaktorisieren Gefahren: Kann als Implementierungsvererbung missbraucht werden  hohe Kopplung Mehrfachvererbung von Implementierung ist unübersichtlich Vererbung sinnvoll nutzen bedeutet... Abgeleitete Klassen fügen neue Elemente hinzu Vollständiges Überschreiben von Methoden vermeiden Es werden abstrakte Schnittstellen definiert Keine Codedopplung in Klassen, die von gleichen Klienten benutzt werden ohne gemeinsame Oberklasse Überschriebene Methoden sind inhaltlich ähnlich zur Methode der Basisklasse Nutzung von Vererbung im Sinne einer Spezialisierung Gemeinsamkeiten von Klassen in eine Oberklasse verlagern Substitutionssprinzip Software Qualitäts Labor

Polymorphismus Griechisch: „viele Formen“ Es gibt erschiedene Arten des Polymorphismus, mit OO wird meist der „subtype polymorphism“ in Verbindung gebracht Eine Nachricht kann an verschiedene Methodenimplementierungen gebunden werden, abhängig vom Typ des Empfängerobjekts Technisch durch Überschreiben von Methoden von Basisklassen realisiert Nutzen: Hohes Abstraktionspotenzial: abstrakte Konzepte in abstrakten Klassen ausdrücken Erhöht Wartbarkeit: keine künstlichen Konstanten zur Identifizierung von Objekten und switch-Anweisungen zum Anwenden von Operationen auf diesen Macht Systeme flexibel: Implementierungen zur Laufzeit austauschbar Gefahren: Verteilen der Funktionalität auf zu viele Basisklassen  hohe Kopplung Software Qualitäts Labor

Polymorphismus sinnvoll nutzen bedeutet... Nutzung abstrakter Schnittstellen Methoden werden überschrieben, Funktionalität erweitert Keine switch-Anweisungen zur Auswahl eines zu rufenden Moduls Geeignete Tiefe der Vererbungshierarchie Software Qualitäts Labor

Codierrichtlinien Neben strukturellen Merkmalen des Entwurfs hat auch der Code Einflüsse auf Wartbarkeit, Portierbarkeit 28. Klare Organisation des Codes in Verzeichnissen 30. Zentrale Haltung von Zeichenketten 29. wenig Referenzen über Verzeichnisse hinweg 31. Einfacher Kontrollfluss Software Qualitäts Labor

Zusammenfassung der Kriterien1 Keine globalen Funktionen oder Daten Gute Strukturierung des Systems mit Hilfe von Klassen Wenige Bestandteile einer Klasse sind öffentlich Teile, die sich oft ändern nie öffentlich zugänglich machen Erfahrung: Datenrepräsentation ändert sich häufig  nur Methoden öffentlich machen Geringe Kopplung zwischen Systemteilen In OO: Nutzung von Klassen zur Bildung von Modulen Schmale Schnittstellen (wenig Methoden, wenig Parameter) Für große Module sollten separate Schnittstellenklassen verwendet werden Kommunikation findet ausschließlich über Schnittstellen statt (keine globale Variable) wenig Abhängigkeiten zwischen Klassen Keine Abhängigkeiten von Implementierungsdetails von Modulen Keine Abhängigkeit von globalen Elementen Keine bidirektionalen Abhängigkeiten Keine Nachrichtendurchschleusung Software Qualitäts Labor

Zusammenfassung der Kriterien2 Nicht zu viele Attribute/Methoden pro Klasse Methoden nutzen gemeinsame Attribute (Klassenebene) Anweisungen beziehen sich auf gemeinsame Variable (Funktionsebene) Abgeleitete Klassen fügen neue Elemente hinzu Vollständiges Überschreiben von Methoden vermeiden Es werden abstrakte Schnittstellen definiert Keine Codedopplung in Klassen, die von gleichen Klienten benutzt werden ohne gemeinsame Oberklasse Überschriebene Methoden sind inhaltlich ähnlich zur Methode der Basisklasse Nutzung abstrakter Schnittstellen Methoden werden überschrieben, Funktionalität erweitert Keine switch-Anweisungen zur Auswahl eines zu rufenden Moduls Geeignete Tiefe der Vererbungshierarchie Klare Organisation des Codes in Verzeichnissen Wenig Referenzen über Verzeichnisse hinweg Zentrale Haltung von Zeichenketten Einfacher Kontrollfluss Software Qualitäts Labor