41-overview-architec..
Transcription
41-overview-architec..
Teil IV: Objektorientierter Entwurf OOD.1 Einführung in die objektorientierte Softwarearchitektur Prof. Dr. rer. nat. habil. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 09-0.4, 02.01.09 1) Modularität und Geheimnisprinzip 2) Geschichtete Architekturen Softwaretechnologie, © Prof. Uwe Aßmann 1 Obligatorische Literatur ► ► ► Zuser Kap 10. Ghezzi 4.1-4.2 Pfleeger 5.1-5.3 Prof. Uwe Aßmann, Softwaretechnologie 2 Sekundäre Literatur ► D. Parnas. On a buzzword: hierarchical structure. Proceedings IFIP Congress 1974, North-Holland, Amsterdam. Prof. Uwe Aßmann, Softwaretechnologie 3 Teil IV - Objektorientierter Entwurf (Object-Oriented Design, OOD) 1) Einführung in die objektorientierte Softwarearchitektur 1) Modularität und Geheimnisprinzip 2) Entwurfsmuster für Modularität 3) BCED-Architekturstil (3-tier architectures) 2) Verfeinerung des Entwurfsmodells zum Implementierungsmodell (Anreicherung von Klassendiagrammen) 1) Verfeinerung von Operationen 2) Verfeinerung von Assoziationen 3) Verfeinerung von Vererbung 3) Verfeinerung von Lebenszyklen 1) Verfeinerung von verschiedenen Steuerungsmaschinen 4) Verfeinerung mit Chicken Fattening 5) Objektorientierte Rahmenwerke (frameworks) 6) Softwarearchitektur mit dem Quasar-Architekturstil Prof. Uwe Aßmann, Softwaretechnologie 4 Von der Analyse zum Entwurf Vertrag mit dem Kunden Analyse AnforderungsErmittlung AnforderungsSpezifikation Produktdefi nition (Anforderungen und fachliches Modell) Fachliche Modellierung ArchitekturSpezifi kation KlassenSpezifi kationen ArchitekturEntwurf DetailEntwurf Entwurf 5 Prof. Uwe Aßmann, Softwaretechnologie Typische Bestandteile eines Softwaresystems ► ► ► ► ► Anwendungsspezifische Funktionen Benutzungsoberfläche Ablaufsteuerung Datenhaltung Infrastrukturdienste ■ ■ ■ Objektverwaltung Interne Objekt- und Prozeßkommunikation Verteilungsunterstützung Architektur Prof. Uwe Aßmann, Softwaretechnologie ► ► ► ► Kommunikationsdienste Sicherheitsfunktionen Zuverlässigkeitsfunktionen Systemadministration ■ ■ Installation, Anpassung Systembeobachtung etc. Anwendung (spezifisch) 6 Aspekte des Architekturentwurfs ► ► ► ► ► (Grobe) Strukturelle Zerlegung: ■ Blockdiagramme ■ Schichten, Sichten, Dimensionen F1 F2 F3 Physikalische Verteilung: Zentral oder verteilt? f1 f2 ■ ■ Topologie f3a f3b Ablaufsicht Logischer Detail-Entwurf Einhaltung nichtfunktionaler Anforderungen: ■ ■ ■ Architekturbestimmende Eigenschaften (z.B. Realzeitsystem, eingebettetes System) Optimierungen Standardarchitekturen 7 Prof. Uwe Aßmann, Softwaretechnologie Montagediagramme ► ► Wurden schon in der Top-Level-Architektur behandelt UML-Komponenten sind strukturiert und mit Anschlüssen DokumentSystem Adresses email DokumentSystem Adress Text Manager email Manager IText TextRep Text Manager Buffer Lines IForm Forms Prof. Uwe Aßmann, Softwaretechnologie 8 Blockdiagramme ► (Informelle) Blockdiagramme sind kein Bestandteil von UML ■ ► Blöcke stellen UML-Komponenten ohne Anschlüsse dar Blockdiagramme sind das meistverbreitete Hilfsmittel zum Skizzieren der logischen Struktur einer Systemarchitektur. 9 Prof. Uwe Aßmann, Softwaretechnologie Konfigurationsdiagramme ► ► Konfigurationsdiagramme sind nicht Bestandteil von UML! Konfigurationsdiagramme sind das meistverbreitete Hilfsmittel zur Beschreibung der physikalischen Verteilung von Systemkomponenten. Rechner, Knoten Lokales Kommunikationsnetz Speicherndes System Prof. Uwe Aßmann, Softwaretechnologie DatenkommunikationsNetz 10 Beispiel Terminverwaltung PC1 ... PCn TerminServer PDA1 PDAm Physikalische Konfi guration AnzeigetafelSteuerung PC Client PDA Client PDA Sync Blockdiagramm Termin-Manager DatenExport Termin-Datenbank 11 Prof. Uwe Aßmann, Softwaretechnologie Architekturprinzip: Hohe Kohäsion + Niedrige Kopplung ► Hohe Kohäsion: Subsystem B darf keine Information und Funktionalität enthalten, die zum Zuständigkeitsbereich von A gehört und umgekehrt. ► Niedrige Kopplung: Es muß möglich sein, Subsystem A weitgehend auszutauschen oder zu verändern, ohne Subsystem B zu verändern. Subsystem A (z.B. Benutzungsoberfl äche) Änderungen von Subsystem B sollten nur möglichst einfache Änderungen in Subsystem A nach sich ziehen. Subsystem B (z.B. fachlicher Kern) Prof. Uwe Aßmann, Softwaretechnologie ► Beispiele zur konkreten technischen Realisierung siehe später (MVC-Architektur, Entwurfsmuster) 12 Veränderungsorientierter Entwurf mit dem Geheimnisprinzip Softwaretechnologie, © Prof. Uwe Aßmann 13 Architekturprinzip: Komponente ► ► Nach dem Teile-und-Herrsche-Prinzip sollte Software in Komponenten oder Module eingeteilt werden Eine Komponente ■ ■ ■ gruppiert Funktionalität kann unabhängig von anderen entwickelt werden hat keine impliziten, nur explizit in der Schnittstelle angegebene Abhängigkeiten zu anderen Komponenten . . ■ Komponenten können einzeln getestet werden (Einheitstest, unit test) Fehler können zu individuellen Komponenten verfolgt werden hat eine schlanke Schnittstelle . ► Komponenten können ausgetauscht werden, ohne daß das System zusammenbricht ■ Komponenten können wiederverwendet werden Prof. Uwe Aßmann, Softwaretechnologie 14 Komponentenmodelle und Kompositionssysteme ► ► Es gibt nicht nur die UML-Komponente.... sondern viele verschiedene Komponentenmodelle ■ ■ ■ ■ ■ ■ ► Ein Kompositionssystem definiert: ■ ■ ■ ► Module einer modularen Programmiersprache (Modula, Ada) Klassen in objektorientierten Sprachen UML-Komponenten Fragmentkomponenten, Schablonen Dokumentkomponenten Serverseitige Webkomponenten Komponentenmodell: Eigenschaften der Schnittstelle einer Komponente Kompositionstechnik: Wie werden Komponenten komponiert? Kompositionssprache: Wie wird die Architektur eines großen Systems beschrieben? --> Vorlesung CBSE (SS) Prof. Uwe Aßmann, Softwaretechnologie 15 Wie modularisiert man einen Entwurf? Parnas' Prinzip des Entwurfs mit dem Geheimnisprinzip (veränderungsorientierter Entwurf, change-oriented modularization with information hiding) [Parnas, CACM 1972]: 1) Bestimme alle Entwurfsentscheidungen, die sich ändern können 2) Entwickle für jede Entscheidung ein Komponente, die die Entscheidung verbirgt Die Entscheidung nennt man das Komponenten- oder Modulgeheimnis (module secret) 3) Entwerfe eine stabile Schnittstelle für die Komponente die unverändert bleibt, wenn sich die Entwurfsentscheidung und somit die Implementierung des Modulgeheimnisses ändert Das Geheimnisprinzip erniedrigt die externe Kopplung und erhöht die innere Kohäsion Prof. Uwe Aßmann, Softwaretechnologie 16 Geheimnisse von Modulen/Komponenten ► ► Arbeitsweise von Algorithmen Datenformate ■ ► Datentypen ■ ► ► ► ► ► Texte, Dokumente, Bilder Abstrakte Datentypen und ihre konkrete Implementierung Benutzerschnittstellenbibliotheken Bearbeitungsreihenfolgen Verteilung Persistenz Parallelität 17 Prof. Uwe Aßmann, Softwaretechnologie Verschiedene Arten von Komponenten/Modulen Funktionale Module ohne Zustand ■ Daten-Repositorien ■ ■ ► ► eim Module, die ausgeprägt werden können Generische Klassen (Klassenschablonen) Komplexe Klassen (UML-Komponenten) Fragmentkomponenten ... ► eh ■ nis Prozesse (aktive Objekte) Klassen sG ► Klassen mit einer einzigen Instanz da ► pr inz ip ■ ilt ► Abstrakte Datentypen Singletons (Konfigurationskomponenten) eg ► Verbergen Repräsentation, Zugriff und Zustand der Daten Symboltabellen, Materialcontainer, ... all ► sin, cos, BCD arithmetic, gnu mp,... für ► Prof. Uwe Aßmann, Softwaretechnologie 18 Entwurfsmuster für Geheimnisprinzip ► ► ► ► ► Viele Entwurfsmuster (z.B. TemplateMethod) sind Variabilitätsmuster, d.h., sie lassen einem bestimmte Geheimnisse verbergen und dann die Implementierungen austauschen (variieren) Fassade verbirgt ein ganzes Subsystem Fabrikmethode verbirgt die Allokation von Produkten TemplateMethod und Strategie verbergen einen Anteil eines Algorithmus Singleton kapselt globale Konfigurationsdaten 19 Prof. Uwe Aßmann, Softwaretechnologie Entwurfsmuster Fassade zur Reduktion von Kopplung ... Ein Entwurfsmuster im Geiste Parnas (Wdh.) Softwaretechnologie, © Prof. Uwe Aßmann 20 Entwurfsmuster Fassade (Facade) ► Eine Fassade (Facade) ist ein Objektadapter, der ein komplettes Subsystem verbirgt ■ ■ Die Fassade bildet die eigene Schnittstelle auf die Schnittstellen der verkapselten Objekte ab Eine UML-Komponente ist gleichzeitig eine (einfache) Fassade. Die Delegationskonnektoren werden 1:1 an innere Komponenten delegiert; interne Adapter können adaptieren 21 Prof. Uwe Aßmann, Softwaretechnologie Fassaden verbergen Subsysteme ► Eine Fassade bietet eine Sicht auf ein Subsystem an. Es darf mehrere Sichten geben, nur keinen direkten Zugriff auf die inneren Objekte Client Abstract Facade HiddenSubsystem operation() adapted Object1 HiddenClass1 specificOperation() Concrete Facade operation() adapted Object2 adapted Object3 HiddenClass2 specificOperation() HiddenClass3 .... adaptedObject.specificOperation() adaptedObject2.specificOperation() .... Prof. Uwe Aßmann, Softwaretechnologie specificOperation() 22 Restrukturierung hin zur Fassade ► Fassaden entkoppeln; Subsysteme können leichter ausgetauscht werden (Variabilitätsmuster) Clients Facade Subsystem 23 Prof. Uwe Aßmann, Softwaretechnologie Fassaden und Schichten ► Falls einzelne Klassen eines Subsystems wieder Fassaden sind, entstehen fassadengeschützte Schichten Clients Facade Upper layer Facade Prof. Uwe Aßmann, Softwaretechnologie Lower layer 24 Entwurfsmuster Fabrikmethode (FactoryMethod) zur polymorphen Variation von Komponenten (Produkte) und zum Verbergen von Produkt-Arten Softwaretechnologie, © Prof. Uwe Aßmann 25 Problem der Fabrikmethode ► ► Wie variiert man die Erzeugung für eine polymorphe Hierarchie von Produkten? Problem: Konstruktoren sind nicht polymorph! Product ConcreteProduct1 ... Product = new ConcreteProduct1() ... Prof. Uwe Aßmann, Softwaretechnologie ConcreteProduct2 26 Struktur Fabrikmethode ► FactoryMethod ist eine Variante von TemplateMethod, zur Produkterzeugung Creator Product ConcreteProduct FactoryMethod() anOperation() ... Product = FactoryMethod() ... ConcreteCreator FactoryMethod() return new ConcreteProduct 27 Prof. Uwe Aßmann, Softwaretechnologie Factory Method (Polymorphic Constructor) ► Abstract creator classes offer abstract constructors (polymorphic constructors) ■ Concrete subclasses can specialize the constructor ■ Constructor implementation is changed with allocation of concrete Creator // Abstract creator class public abstract class Creator { // factory method public abstract Set createSet(int n); } public class Client { ... Creator cr = [.. subclass ].. public void collect() { Set mySet = Creator.createSet(10); .... } } Prof. Uwe Aßmann, Softwaretechnologie // Concrete creator class public class ConcreteCreator extends Creator { public Set createSet(int n) { return new ListBasedSet(n); } ... } 28 Beispiel FactoryMethod ► Rahmenwerk für Gebäudeautomation ■ ■ ► ► Klasse Building hat eine Schablonenmethode zur Planung von Gebäuden Abstrakte Methoden: createWall, createRoom, createDoor, createWindow Benutzer können Art des Gebäudes verfeinern Wie kann das Rahmenwerk neue Arten von Gebäuden behandeln? Building construct() createWall() createDoor() createWindow() createRoom() ... house = new Building(); house.construct(); ... house.createWall(); ... house.createDoor(); ... house.createWindow(); ... Framework Skyscraper Extensions createWall() createDoor() createWindow() createRoom() 29 Prof. Uwe Aßmann, Softwaretechnologie Lösung mit FactoryMethod ► Bilde createBuilding() als Fabrikmethode aus // abstract creator class public abstract class Building { public abstract Building createBuilding(); ... } // concrete creator class public class Skyscraper extends Building Skyscraper() { ... } public Building createBuilding() { ... fill in more info ... return new Skyscraper(); } ... } Prof. Uwe Aßmann, Softwaretechnologie { 30 Factory Method im SalesPoint-Rahmenwerk ► Anwender von SalesPoint verfeinern die StockImpl-Klasse, die ein Produkt des Warenhauses im Lager repräsentiert ■ z.B. mit einem CountingStockImpl, der weiß, wieviele Produkte noch da sind StockImpl +clone() : Object #createPeer(): StockImpl CountingStockImpl #createPeer(): StockImpl 31 Prof. Uwe Aßmann, Softwaretechnologie Einsatz in Komponentenarchitekturen ► In Rahmenwerk-Architekturen wird die Fabrikmethode eingesetzt, um von oberen Schichten (Anwendungsschichten) aus die Rahmenwerkschicht zu konfigurieren: Rahmenwerk Building Style Building Anwendung Bungalow Skyscraper Castle Prof. Uwe Aßmann, Softwaretechnologie Modern Style Mideval Style 32 Strategie (Strategy, Template Class) (Wdh.) Softwaretechnologie, © Prof. Uwe Aßmann 33 Strategy (also called Template Class) ► ► Strategy wirkt wie TemplateMethod, nur wird die Hakenmethode in eine separate Klasse ausgelagert Zur Variation der Hakenklasse (und -methode) hookObject TemplateClass HookClass (Strategy) templateMethod() hookMethod() hookObject.hookMethod() Prof. Uwe Aßmann, Softwaretechnologie ConcreteHookValueA ConcreteHookValueB hookMethod() hookMethod() 34 Kombinierter Einsatz in Rahmenwerken ► ► ► FactoryMethod variiert den Konstruktor TemplateMethod oder Strategy (TemplateClass) variiert die Hookmethode Bridge (s. später) variiert die TemplateMethode Rahmenwerk Anwendung Building CastleTempl CastleHook createBuilding() animate() createBuilding() drawBuilding() drawBuilding() Template Class Bungalow ScottishCastle drawBuilding() createBuilding() Template Method Factory Method 35 Prof. Uwe Aßmann, Softwaretechnologie Entwurfsmuster Einzelstück (Singleton) zur globalen Konfiguration einer Komponente oder Schicht (Wdh) Softwaretechnologie, © Prof. Uwe Aßmann 36 Entwurfsmuster Einzelstück (Singleton) ► ► Gesucht: globales Objekt, das global oder innerhalb einer Laufzeitkomponente (z.B. Schicht) Daten, z.B. Konfi gurationsdaten, vorhält Idee: ■ Erstelle eine Klasse, von der genau ein Objekt existiert (Invariante) ■ Erstelle einen artifi ziellen Konstruktor (Fabrikmethode), der oft aufgerufen werden kann, aber die Invariante sicherstellt ■ Eigentlicher Konstruktor wird verborgen (private) ■ Austausch der Konfi guration durch Unterklassenbildung (Variabilität) Singleton – theInstance: Singleton getInstance(): Singleton 0..1 theInstance:Singleton class Singleton { private static Singleton theInstance = null; private Singleton () {} public static Singleton getInstance() { if (theInstance == null) theInstance = new Singleton(); return theInstance; } } 37 Prof. Uwe Aßmann, Softwaretechnologie Singleton im SalesPoint – the Shop ► ► Der Shop im SalesPoint-Rahmenwerk ist ein Einzelstück (die Firma). Dagegen gibt es viele Verkaufsstellen (sales points) Austausch der Eigenschaften des Shops durch Unterklassenbildung Shop #Shop() $getTheShop(): Shop $setTheShop (Shop sh) Prof. Uwe Aßmann, Softwaretechnologie 38 OOD.1.2 Schichtenarchitekturen (Layered Architectural Styles) und die “benutzt”-Relation Softwaretechnologie, © Prof. Uwe Aßmann 39 Drei-Schichten-Architektur ► ► ► Klassische Struktur eines interaktiven Anwendungssystems Schichten sind jeweils stark kohäsiv, und wenig gekoppelt – aber warum? Oft kapselt eine Fassade eine Schicht, ein Einzelstück konfiguriert jede Schicht, Fabriken schneiden die Produkte der unteren Schichten zu, TemplateMethod/Class variieren Algorithmen der Produkte Benutzungsschnittstelle Basiert auf Analysemodell Fachlicher Kern Datenverwaltung Prof. Uwe Aßmann, Softwaretechnologie 40 Different Relations Between Components ► ► ► Remark: In the following, we use the word component for both the words module and class There are different relations between components Similarity ■ ► Whole/part ■ ■ ■ ► is-a (inheritance), behaves-like, ... has-a (aggregation) exclusively-owns-a, owns-a is-composed-of (composition) Access ■ ■ ■ accesses-a (access relation) is-privileged-to, owns-a (security) calls . . ► is-called-by delegates-to (delegation) It is possible to define a relationship that summarizes all of these41 Prof. Uwe Aßmann, Softwaretechnologie USES-Relation (Relies-On, Requires, Sees-A) Component A USES (relies-on, sees-a) component B iff A requires a correct implementation of B for its own correct execution. (A requires the presence of B) ► Requires an implementation may means visibility: ■ ■ ■ ■ ■ ► A accesses public variable of B A uses a resource provided by B A allocates an instance of B A delegates work to B (A calls B) or B delegates work to A (B calls A) A calls B by exception or event If the USES relation is a partial order (a tree or a dag), then the system is called hierarchical or layered ■ because partial orders can be layered Prof. Uwe Aßmann, Softwaretechnologie 42 Repeat: BCE/BCED Classification ► Boundary classes: ■ ■ <<boundary>> Represent an interface item that talks with the user May persist beyond a run <<control>> ► Control class: ► Controls the execution of a process, workflow, or business rules ■ Does not persist <<entity>> Entity class: ■ ■ ► Database class ■ ■ ► Describes persistent knowledge. Caches a persistent object from a database (data access object, DAO) <<database>> Adapter class for the database Often, Entity and Database classes are unified BCED is linked with the 3-tier architecture 43 Prof. Uwe Aßmann, Softwaretechnologie Example: USES Relation in 3- and 4-Tier Architectures (BCED) ► 3- and 4-tier architectures have an acyclic USES relation, divided into 3 (resp. 4) layers that use each other in an acyclic relationship ■ Upper layers see lower layers, but not vice versa Graphical user interface (GUI, Benutzerschnittstelle) <<boundary>> Application logic (business logic, Fachlicher Kern, Anwendungslogik) <<control>> Middleware (memory access, distribution) <<entity>> Data access object (DAO) Data Repository Layer (database, memory) <<database>> Prof. Uwe Aßmann, Softwaretechnologie 44 Example: 3- and 4-Tier Architectures (BCED) ► ► ► Good encapsulation of cohesive knowledge in a layer Few coupling due to acyclic USES relationship Better exchange of subsystems of the application ■ ■ ■ GUI encapsulates user interactions and look Data repository layer encapsulates how data is stored (database, transient, persistent component platforms such as Enterprise JavaBeans) Middleware mediates between both . . ► ► The middleware hides distribution and deals with security The BCED architecture is the architecture for business-oriented software ... and for projects in the projects ... 45 Prof. Uwe Aßmann, Softwaretechnologie Example: 4-Tier Web System (Thick Client) ► Thick client Web Systems have a http-based middleware, in which GUI and application logic reside on the client, data is managed on the server <<boundary>> <<page>> Graphical user interface Client <<control>> <<applet>> Application logic (business logic) http Middleware Server Data Repository Layer (database, memory) Prof. Uwe Aßmann, Softwaretechnologie <<entity>> Data access object (DAO) <<database>> 46 Example: 4-Tier Web System (Thin Client) ► Thin client Web Systems have a http-based middleware, in which GUI resides on the client, application logic and data is managed on the server Graphical user interface <<boundary>> <<page>> Client http <<control>> <<servlet>> Application logic (business logic) Middleware <<entity>> Data access object (DAO) Server Data Repository Layer (database, memory) <<database>> 47 Prof. Uwe Aßmann, Softwaretechnologie Example: ISO-OSI 7 Layers Network Architecture ► Every layer contains an abstract machine (set of operations) Presentation Layer Presentation Layer Session Layer Session Layer .. .. .. .. .. .. .. .. Data Transport Layer Data Transport Layer .. .. Prof. Uwe Aßmann, Softwaretechnologie 48 Example: Operating Systems UNIX: AppleUNIX User Space User Space Kernel Kernel Microkernel (Mach) Windows NT/XP: User Space Kernel Hardware Abstraction Layer (HAL) 49 Prof. Uwe Aßmann, Softwaretechnologie Example: Database Systems SQL compiler transaction manager lock manager table manager physical storage management record management layer Prof. Uwe Aßmann, Softwaretechnologie 50 Why are Layered Architectures Successful? ► ► Layered architectures require an acyclic USES relationship They are successful, ■ ■ ■ Because the dependencies within the system are structured as a dag System is structured Internals of layers can be abstracted away Prof. Uwe Aßmann, Softwaretechnologie 51 What Have We Learned ► ► ► Designing the global architectural style of your application is important (Architekturentwurf) Layers play an important role The USES (relies-on) relation is different from is-a (inheritance) and part-of (aggregation) ■ ■ ► It deals with prerequisites for correct execution Can be used to layer systems, if it is acyclic Examples of architectural styles with acyclic USES relation: ■ ■ ■ ■ The BCED 4-tier architecture Layered abstract machines for interactive applications Layered behavioral state machines Both styles can be combined Prof. Uwe Aßmann, Softwaretechnologie 52 Conway’s Law on Software Structure Software is always structured in the same way as the organisation which built it. Prof. Uwe Aßmann, Softwaretechnologie 53 The End Prof. Uwe Aßmann, Softwaretechnologie 54