1 / 102

17 Entwurf

17 Entwurf . 17.1 Ziele und Bedeutung des Entwurfs 17.2 Begriffe 17.3 Prinzipien des Architekturentwurfs 17.4 Der objektorientierte Entwurf 17.5 Wiederverwendung von Architekturen 17.6 Die Qualität der Architektur. Entwurf im Software-Prozess.

gaye
Download Presentation

17 Entwurf

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 17 Entwurf • 17.1 Ziele und Bedeutung des Entwurfs • 17.2 Begriffe • 17.3 Prinzipien des Architekturentwurfs • 17.4 Der objektorientierte Entwurf • 17.5 Wiederverwendung von Architekturen • 17.6 Die Qualität der Architektur

  2. Entwurf im Software-Prozess • In Analyse und Spezifikation werden die Anforderungen ermittelt und dargestellt. • In der Codierung wird das Zielsystem im Detail realisiert. • Dazwischen liegt der Entwurf. • Im Entwurf wird die Architektur festgelegt, also die Struktur. • Je nach Art der zu entwickelnden Software und je nach der gewählten Entwicklungsstrategie spielen beim Entwurf ganz unterschiedliche Überlegungen eine Rolle. • Darum ist es unmöglich, eine einzige Strategie zu präsentieren, die immer angemessen ist und immer zum Erfolg führt.

  3. 17.1 Ziele und Bedeutung des Entwurfs

  4. Ziele des Entwurfs • Wer eine große, komplexe Software realisieren soll, kann zunächst die vielen Facetten des Systems und ihre Wechselwirkungen nicht überblicken; er muss die Software also gliedern. • Wenn damit überschaubare Einheiten entstanden sind, muss er zweckmäßige Lösungsstrukturen festlegen. • Schließlich muss er die sehr zahlreichen Bestandteile seiner Software so organisieren, dass er den Überblick behält. • Mit dem Entwurf verfolgen wir also drei Ziele, die sich nicht scharf gegeneinander abgrenzen lassen: • Gliederung des Systems in überschaubare (handhabbare) Einheiten Software- • Festlegung der Lösungsstruktur Architektur • Hierarchische Gliederung

  5. Gliederung in überschaubare Einheiten • Vergleich: Ein großes Bauwerk soll an einen anderen Standort versetzt werden. • Dazu muss man das Bauwerk zumindest soweit zerlegen, dass die einzelnen Teile handhabbar werden. • Die Konkretisierung hängt vom Haus, aber auch von der Ausrüstung und von den Fähigkeiten und Erfahrungen ab. • Es ist also nicht zu erwarten, dass die Spezifikation zu Beginn der Entwicklung vollständig vorliegt und der Entwickler sie auch vollständig kennt und versteht, bevor er einen Entwurf anfertigt. • Oft verhilft erst der Entwurf zum notwendigen Verständnis. • Verwendung von Standardstrukturen sinnvoll! • Wiederverwendung vorhandener Komponenten hat eine ähnliche Wirkung wie die Verwendung einer Standardstruktur.

  6. Festlegung der Lösungsstruktur • Struktur eines Gegenstands = Menge der Beziehungen zwischen seinen Teilen • Gegenstand, der nicht aus (erkennbaren) Teilen aufgebaut ist, heißt unstrukturiert oder amorph. • Die Struktur bleibt nach Abstraktion vom Material und von den quantitativen Aspekten des Gegenstands übrig. • Strukturen werden selbststabilisierend und damit sehr lange haltbar, oft viel länger als die Materialien, aus denen sie geformt werden. • Beispiele: Stadtpläne, Organisationen, Versteinerungen • Das heißt: Wer Strukturen festlegt, wirkt sehr weit in die Zukunft! • Die Struktur hat großen Einfluss auf die Brauchbarkeit (Effizienz) und (vor allem) auf die Wartbarkeit. → Die Wahl der Struktur ist die wichtigste (technische) Entscheidung der Software-Entwicklung.

  7. Versteinerung aus Holzmaden

  8. Hierarchische Gliederung • Miller (1956):Ein Mensch kann nur Systeme überblicken, die aus wenigen, typisch etwa sieben Teilen bestehen. • Sind es mehr, so muss man die Gegenstände nacheinander betrachten und ihren Zusammenhang systematisch entwickeln. • Programme (Systeme) bestehen typisch aus einigen bis vielen tausend Deklarationen und Anweisungen. Sie müssen hierarchisch organisiert werden, um für uns überschaubar zu sein. • Uhrmacher-Parabel (Simon, 1962): Nur dank (und mit)Abstraktion können wir sehr komplexe Objekte herstellen. • → Nur kleine Programme kann man direkt nach den Anforderungen codieren; alle anderen müssen schrittweise entwickelt werden. • Durch die sinnvolle Gliederung (und nur durch sie) entsteht die Möglichkeit zur Abstraktion.

  9. Die Entwicklungsrichtung • Entsteht der Entwurf sukzessive, so kann man vier verschiedene Vorgehensrichtungen unterscheiden.

  10. Top-down- und Bottom-up-Entwicklung • Top-down-Entwicklung • Man geht von der (abstrakten) Aufgabe zur konkreten, detaillierten Lösung des Problems. • Man zerlegt die Aufgabe rekursiv in Teilaufgaben, bis die elementare Ebene erreicht ist. • N. Wirth (1971): Schrittweise Verfeinerung (stepwise refinement) • Sind bei der Implementierung keine ungewöhnlichen Probleme zu erwarten, ist die Top-down-Entwicklung der übliche Ansatz. • Bottom-up-Entwicklung • Der Entwickler synthetisiert (kombiniert) solange Befehle, bis eine Gesamtlösung entstanden ist. • Wird auf einer exotischen Hardware implementiert, wird man bottom-up beginnen, also zunächst den virtuellen Rechner realisieren, der die benötigten Operationen anbietet.

  11. Outside-in- und Inside-out-Entwicklung • Outside-in-Entwicklung • Man geht von der Bedienoberfläche aus in Richtung auf die Datenstrukturen und Algorithmen vor. • Sinnvoll, wenn die Schnittstelle feststeht, die Implementierung aber offen ist. • Inside-out-Entwicklung • Man beginnt bei den „Innereien“ des Systems und arbeitet von dort zur Bedienoberfläche. • Typisch, wenn einem bestehenden (Informations-)System eine weitere Funktion angefügt wird.

  12. Der Entwurf in der Praxis - 1 • In der Praxis lassen sich die Ansätze nicht in Reinform anwenden. • Um den Weg zur Lösung zu finden, muss man in jedem Falle beides kennen, den Ausgangspunkt und den Zielpunkt. • Sinnvoll: • vom Vorgegebenen zum Gestaltbaren • vom Unbekannten zum Bekannten

  13. Der Entwurf in der Praxis - 2 • Oft: Ein (expliziter) Architekturentwurf wird nicht angefertigt, man begnügt sich mit allgemeinen Regeln für die Gestaltung der Systeme. Ein Entwurf findet erst auf Detailebene statt. • Die Architektur wird in dieser Situation natürlich auch nur unzureichend dokumentiert. • Aber: (Nur) Dokumentation schafft die Möglichkeiten der Diskussion und der Prüfung, auch zur Parallelisierung der Arbeiten. • In der Wartung wird oft die Architektur schleichend korrumpiert. • N. Parkinson: Der Aufwand für Entscheidungen in Organisationen ist nicht proportional dem Risiko, sondern oft eher reziprok: • Details von geringer Bedeutung werden ausführlich erwogen und erörtert, aber die wirklich wichtigen (und meist schwierigen) Fragen werden nicht diskutiert, sondern abgenickt.

  14. 17.2 Begriffe

  15. System • System bedeutet alles und nichts. • Definitionen führen über verwandte Begriffe wie Konfiguration und Komponente zum System zurück, sind also zyklisch. • Folge: Wir kommen über den intuitiven Systembegriff nicht hinaus, wie er beispielsweise von Sommerville eingeführt wird: • Wir verwenden die (schwache) Definition: A system is a purposeful collection of interrelated components that work together to achieve some objective. Ein Software-System ist eine Menge von Software-Einheiten und ihren Beziehungen, wenn sie gemeinsam einem bestimmten Zweck dienen. Dieser Zweck ist im Allg. komplex, er schließt neben der Bereitstellung eines ausführbaren Programms gewöhnlich die Organisation, Verwendung, Erhaltung und Weiterentwicklung des Programms ein.

  16. Komponente - 1 • Der Systembegriff stützt sich auf den (ebenfalls schwammigen) Komponentenbegriff: A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties. Szyperski (1999) Wir verwenden die (schwache) Definition: component — One of the parts that make up a system. A component may be hardware or software and may be subdivided into other components. IEEE Std 610.12 (1990)

  17. Komponente - 2 • Eine Komponente ist somit ein Bestandteil eines Systems. • Die Architektur bestimmt, aus welchen Komponenten ein System bestehen soll. • Eine Komponente ist atomar oder weiter verfeinert; sie bietet ihrer Umgebung eine Menge von Diensten an, die über eine wohldefinierte Schnittstelle genutzt werden können. • Dazu gehören auch die benötigten Dienste anderer Komponenten.

  18. Modul • Auch der Modulbegriff ist nicht klar: • Ein Modul kann Dienstanbieter (Server) und/oder Dienstnutzer (Client) sein. • Ein Modul ist ein typischer Gegenstand eines Arbeitspakets. module — (1) A program unit that is discrete and identifiable with respect to compiling, combining with other units, and loading; e.g., the input to, or output from an assembler, compiler, linkage editor, or executive routine. (2) A logically separable part of a program. IEEE Std 610.12 (1990) Präziser: Ein Modul ist eine Menge von Operationen und Daten, die nur so weit von außen sichtbar sind, wie dies die Programmierer explizit zugelassen haben.

  19. Schnittstelle • Metapher „Schnittstelle“ • Schneidet man einen Gegenstand in zwei Teile, so entstehen zwei Oberflächen, die spiegelsymmetrisch sind. • Was durch einen Schnitt von selbst entsteht, die beiden exakt zueinander passenden Oberflächen, muss in der Technik hergestellt werden. Das englische Wort „interface“ ist darum der Realität näher. • Schnittstellen = Festlegungen, die die Kombinierbarkeit sicherstellen sollen. • Achtung: Adapter (syn.: Konnektoren) sind keine Schnittstellen. • Die Programmiersprache Java erlaubt es, Schnittstellen explizit (als Interfaces) zu beschreiben.

  20. Entwurf und Architektur • Wir sprechen vom Entwurf, wenn die Tätigkeit, deren Resultat die Architektur ist, im Vordergrund steht. ((1) im IEEE-Glossar) • „Entwurf“ (oder „Architekturentwurf“) ist doppeldeutig: design — (1) The process of defining the architecture, components, interfaces, and other characteristics of a system or component.(2) The result of the process in (1). IEEE Std 610.12 (1990) architecture — The fundamental organization of a system embodied in its components, their relationships to each other and to the environment, and the principles guiding its design and evolution. IEEE Std 1471 (2000)

  21. Software-Architektur • Eine Software-Architektur besteht demnach aus Komponenten („software elements“) und ihren Beziehungen in verschiedenen Strukturen. • Eine Architektur hat einen Zweck, sie ist für eine bestimmte Funktion geschaffen; die Funktion ist aber nicht Teil der Architektur. The software architecture of a program or computing system is the structure or structures of the system which comprise software elements, the externally visible properties of those elements, and the relationships among them. Bass, Clements, Kazman (2003)

  22. Architektursichten • Jede Sicht entspricht einer bestimmten Struktur. Es kann viele Sichten geben, z. B. die organisatorische Sicht, die zeigt, wie die Bearbeitung der Komponenten auf Teams aufgeteilt ist. • Drei Architektursichten sind besonders wichtig: • Die Systemsicht zeigt, wie das zu entwickelnde System in die Umgebung eingebettet ist, mit welchen anderen Systemen es wie interagiert (inkl. Systemgrenzen, Schnittstellen). • Die statische Sicht zeigt die zentralen Komponenten und ihre Schnittstellen; in der Regel hierarchisch verfeinert. • Die dynamische Sicht modelliert, wie die Komponenten zur Laufzeit zusammenarbeiten. Beschränkt auf wichtige Interaktionen.

  23. Begriffe des Software-Entwurfs • Die Architektur einer Software ist ihre Struktur (oder die Menge ihrer Strukturen) auf einer bestimmten Abstraktionsebene; wo nichts anderes gesagt ist, geht es um die statische Struktur der höchsten Gliederungsebene, also um die Systemarchitektur.

  24. 17.3 Prinzipien des Architekturentwurfs

  25. Die gute Software-Architektur • Eine Software-Architektur ist gut, wenn die funktionalen und nichtfunktionalen Anforderungen erfüllt werden können. • Es gibt keine Entwurfsmethode, die eine gute Software-Architektur garantiert, aber eine Reihe bewährter Entwurfsprinzipien, die helfen die folgenden Fragen zu beantworten. • Nach welchen Kriterien soll das System in Komponenten unterteilt werden? • Welche Aspekte sollen in Komponenten zusammengefasst werden? • Welche Dienstleistungen sollen Komponenten nach außen an ihrer Schnittstelle anbieten, welche Aspekte müssen geschützt sein? • Wie sollen die Komponenten miteinander interagieren? • Wie sollen Komponenten strukturiert und verfeinert werden?

  26. Modularisierung modular decomposition — The process of breaking a system into components to facilitate design and development; an element of modular programming. IEEE Std 610.12 (1990) • Modularität ist demnach eine Eigenschaft der Architektur. • Sie ist hoch, wenn es dem Architekten gelungen ist, das System so in Komponenten zu zerteilen, dass diese möglichst unabhängig voneinander verändert und weiterentwickelt werden können. modularity — The degree to which a system or computer program is composed of discrete components such that a change to one component has minimal impact on other components. IEEE Std 610.12 (1990)

  27. Ziele der Modularisierung • D.L. Parnas hat die folgenden Ziele formuliert: • Die Struktur jedes Moduls soll einfach und leicht verständlich sein. • Die Implementierung eines Moduls soll austauschbar sein; Information über die Implementierung der anderen Module ist dazu nicht erforderlich. Die anderen Module sind vom Austausch nicht betroffen. • Die Module sollen so entworfen sein, dass wahrscheinliche Änderungen ohne Modifikation der Modulschnittstellen durchgeführt werden können. • Große Änderungen sollen sich durch eine Reihe kleiner Änderungen realisieren lassen. Solange die Schnittstellen der Module nicht verändert sind, soll es möglich sein, alte und neue Modulversionen miteinander zu testen

  28. Modularten (nach Nagl) • Funktionale Module • gruppieren Berechnungen, die logisch zusammengehören. Sie haben keinen variablen Zustand. Beispiele: mathematischer Funktionen oder Transformationsfunktionen. • Datenobjektmodule • realisieren das Konzept der Datenkapselung. Ein Datenobjektmodul versteckt dazu Art und Aufbau der Daten und stellt an seiner Schnittstelle Operationen zur Verfügung. Beispiele: Module, die gemeinsam benutzte Datenverwaltungen realisieren. • Datentypmodule • implementieren einen benutzerdefinierten Datentyp in Form eines Abstrakten Datentyps. Beispiele: Module für die Datentypen Kunde oder Produkt.

  29. Modularten - Beispiele

  30. Kopplung und Zusammenhalt • Der Architekt eines Konzertsaals bemüht sich, den Saal so zu bauen, dass die akustische Störung von außen extrem gering ist, die Hörbarkeit im Saal dagegen extrem hoch. • Dem entspricht bei der Arbeit des Software-Architekten die Gliederung in Module so, dass • die Kopplung (d.h. die Breite und Komplexität der Schnittstellen) zwischen den Modulen möglichst gering, • der Zusammenhalt (d.h. die Verwandtschaft zwischen den Teilen eines Moduls) möglichst hoch wird.

  31. Kopplung und Zusammenhalt • Das Konzept von Kopplung und Zusammenhalt basiert ursprünglich auf den Fortran- und Cobol-Programmen der frühen 70‘er Jahre. • Diese Programmiersprachen unterstützten die Bildung hierarchischer Strukturen nicht. • Kopplung betraf also die Wechselwirkungen zwischen verschiedenen Subroutines, der Zusammenhalt die logische Einheit (Atomizität) der einzelnen Subroutines. • Moderne Sprachenbieten uns mehrere Abstraktionsebenen. • Dabei streben wir • auf der Modulebene vor allem niedrige Kopplung (bei mäßigem Zusammenhalt), • auf der Prozedurebene vor allem hohen Zusammenhalt (bei erheblicher Kopplung) an.

  32. Stufen des Zusammenhalts • von stark = schlecht nach schwach = gut

  33. Stufen der Kopplung • von stark = schlecht nach schwach = gut

  34. K & Z im modularen Programm • Hoher Zusammenhalt ist innerhalb von Funktionen praktisch immer, innerhalb von Prozeduren in der Regel gegeben. Innerhalb von Modulen (zwischen den Funktionen und Prozeduren) ist der Zusammenhalt oft nur gering. • Zwischen verschiedenen Modulen sollte die Kopplung sehr gering sein; in der Praxis wird sie oft durch globale Variablen korrumpiert. • Auch der (unqualifizierte) Export von Variablen ist ein Schwachpunkt. Allgemein gilt, dass die Kopplung nur in modernen Programmiersprachen gering gehalten werden kann.

  35. K & Z im objektorientierten Programm • Während Prozeduren noch relativ unabhängig von anderen Prozeduren betrachtet (implementiert, analysiert, geprüft) werden können, sind die Methoden einer Klasse sehr eng miteinander verknüpft. • Darum betrachten wir in objektorientierten Programmen sowohl bei der Kopplung als auch beim Zusammenhalt die Klassen. • Sie sollten untereinander nur lose gekoppelt sein und jeweils aus Methoden bestehen, die starken Zusammenhalt haben.

  36. Metriken für Kopplung und Zusammenhalt • Kopplung und Zusammenhalt kann man messen, wenn die Definitionen syntaktisch konkretisiert, also in Metriken umgesetzt werden; das ist für objektorientierte Programme geschehen.

  37. Information Hiding • Parnas (1972) hat dieses Prinzip im SE eingeführt. Dabei wird dem Empfänger kein feindliches Verhalten unterstellt; vielmehr wird durch das Information Hiding verhindert, dass ein Programmierer Informationen, die er eigentlich nicht benötigt, trotzdem verwendet. • Typisch sind das Informationen über Datenformate und Speicherstrukturen. Wenn der Programmierer diese Information ausnutzt (z.B. um einen effizienten Zugriff zu erhalten), sabotiert er Änderungen. Information Hiding — A software development technique in which each module's interfaces reveal as little as possible about the module's inner workings, and other modules are prevented from using information about the module that is not in the module's interface specification. IEEE Std 610.12 (1990)

  38. Offene und gekapselte Daten • Darum darf der Datenzugriff nur indirekt, mittels spezieller Operationen erfolgen, die den Daten (Objekten) zugeordnet sind. • Information Hiding suggeriert (fälschlich), dass eine wichtige Information zurückgehalten wird; angemessener wäre die Bezeichnung „Privatsphären-Prinzip“. Es wird durch Kapselung oder durch Abstrakte Datentypen realisiert.

  39. Bewertung • Der Schutz, der durch das Information Hiding erzielt wird, ist natürlich nur partiell, verhindert werden vor allem unbeabsichtigte Fehler. • Sabotage ist weiterhin möglich, denn auch die vorgesehenen Operationen können sinnvoll oder falsch verwendet werden. Aber auch bei Sabotage erleichtert das Information Hiding die Diagnose, denn alle Zugriffe geschehen mittels Operationen. • Das Information Hiding hat praktisch keine Nachteile; einzig eine leichte Effizienzeinbuße ist in speziellen Fällen ein Nachteil. • Die objektorientierte Programmierung beruht zu einem erheblichen Teil auf den Ideen von Parnas.

  40. Vorteile und Nachteile • Vorteile • Weil die Datenstrukturen und die dazu gehörenden Zugriffsoperationen zusammen in einem einzigen Modul abgelegt werden, ist die Lokalität des Programms wesentlich verbessert. • Die Zugriffe können überwacht werden, ohne dass man in die tieferen Abstraktionsebenen eindringen, also einen Debugger verwenden muss. • Nachteile • Der Aufruf der vermittelnden Operationen kostet unvermeidlich Rechenzeit, das Programm ist dadurch weniger effizient. • Bei konsequentem Information Hiding entstehen sehr viele Module, und der Überblick, der gerade durch das Information Hiding geschaffen oder verbessert werden sollte, leidet.

  41. Trennung von Zuständigkeiten • Die Trennung von Zuständigkeiten (separation of concerns) ist ein grundlegendes Prinzip im Software Engineering. • Für den Software-Entwurf ist es von zentraler Bedeutung, denn jede Komponente sollte nur für einen ganz bestimmten Aufgabenbereich zuständig sein. • Wichtige Regeln zur Trennung von Zuständigkeiten sind: • Trenne fachliche und technische Komponenten. Diese Regel ist die konsequente Weiterführung der Überlegungen zur idealen Technologie. • Ordne Funktionalitäten, die variabel sind oder später erweitert werden müssen, eigenen Komponenten zu.

  42. Beispiel

  43. Die hierarchische Gliederung • Die Komponenten einer Architektur müssen so lange verfeinert werden, bis sie so einfach sind, dass wir sie spezifizieren und realisieren können. • Die hierarchische Gliederung ist ein bewährtes Vorgehen, um Komplexität zu reduzieren. • Eine Hierarchie ist eine Struktur von Elementen, die durch eine (hierarchiebildende) Beziehung in eine Rangfolge gebracht werden. • Entsteht dadurch eine Baumstruktur, dann spricht man von einer Monohierarchie, d. h., jedes Element der Hierarchie außer dem Wurzelelement besitzt genau ein übergeordnetes Element. • Kann ein Element mehrere übergeordnete Elemente haben, dann handelt es sich um eine Polyhierarchie; die entsprechende Struktur ist ein azyklischer gerichteter Graph.

  44. Hierarchien im Software-Entwurf - 1 • Aggregationshierarchie • Gliedert ein System in ihre Bestandteile; sie wird auch »Ganzes-Teile-Hierarchie« genannt. • Wir entwerfen Aggregationshierarchien immer auf der höchsten Ebene, der Ebene der Systemarchitektur. • Aggregationshierarchien sind in der Regel Monohierarchien. • Schichtenhierarchie • Ordnet Komponenten (Schichten) derart, dass jede Schicht genau auf einer darunterliegenden Schicht aufbaut und die Basis für genau eine darüberliegende Schicht bildet. • Sie ist eine strengere Form einer Monohierarchie.

  45. Hierarchien im Software-Entwurf - 2 • Generalisierungshierarchie • Ordnet Komponenten nach Merkmalen (Funktionen und Attributen), indem fundamentale, gemeinsame Merkmale mehrerer Komponenten in einer universellen Komponente zusammengefasst werden. • Davon abgeleitete, spezialisierte Komponenten übernehmen diese Merkmale und fügen spezielle hinzu. Damit werden die fundamentalen Merkmale nur einmal definiert. • Generalisierungshierarchien können als Mono- oder als Polyhierarchien auftreten. • Der objektorientierte Entwurf stellt Generalisierungshierarchien von Klassen und Schnittstellen in den Vordergrund, da diese mit Hilfe der Vererbung direkt in einer objektorientierten Programmiersprache implementiert werden können

  46. Beispiele für Hierarchien

  47. Prinzipien im Zusammenhang • Grundlage vieler Entwurfsprinzipien ist die Abstraktion. • Indem wir Abstraktionen bilden, konzentrieren wir uns auf das Wesentliche und blenden das Unwesentliche aus. • Zusammenhang der vorgestellten Entwurfsprinzipien • Die Modularisierung steht im Zentrum, die anderen Prinzipien tragen dazu bei, den Prozess der Modularisierung effektiv zu unterstützen.

  48. 17.4 Der objektorientierte Entwurf

  49. Ziele und Vorteile • Das Ziel des objektorientierten Entwurfs besteht darin, fachliche Programmbausteine (Klassen) so zu entwerfen, dass sie die relevanten Gegenstände und Konzepte des betrachteten Anwendungsbereichs repräsentieren. • Technisch gesehen, werden die Klassen konsequent nach dem Prinzip des Information Hiding konstruiert. • Ein wesentlicher Vorteil der objektorientierten Software-Entwicklung liegt darin, dass die objektorientierten Modellierungskonzepte durchgehend von der Analyse über den Entwurf bis hin zur Codierung genutzt werden können.

  50. Metamodell der Objektorientierung

More Related