From 560e6aa01cc57e4a9292cd9d8cbbbc18b42ab7df Mon Sep 17 00:00:00 2001 From: Robert Jeutter Date: Mon, 15 Mar 2021 20:25:36 +0100 Subject: [PATCH] Grobentwurf hydrated --- Softwaretechnik - Cheatsheet.pdf | Bin 229569 -> 221020 bytes Softwaretechnik - Cheatsheet.tex | 817 +++++++------------------------ 2 files changed, 184 insertions(+), 633 deletions(-) diff --git a/Softwaretechnik - Cheatsheet.pdf b/Softwaretechnik - Cheatsheet.pdf index 5f894f9d4e977c38466a781a625f3875cbb81a38..f2769438f7c2cf03f97c9bbec206b41fede16143 100644 GIT binary patch delta 38153 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 Y@-i~R(dqH|!C+wlTox83ZDrj51HXT-XaE2J delta 46541 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

A3#kp3_w5W2FBu;H6_O)j46B` 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 - \begin{itemize*} - \item Kapselt Funktionalitäten (Physisch gruppierte Klassen) - \item „Spezialisierte“ Klasse (Vererbung, Exemplare möglich) - \item Stellt Funktionalitäten über Schnittstellen bereit - \item Definiert benötigte Schnittstellen - \item Enthält Klassen oder weitere Komponenten - \item Modulares Element: Substitution (Austauschbarkeit) steht im Vordergrund - \end{itemize*} - \item Black-Box-Darstellung - \begin{itemize*} - \item Zur Verfügung gestellte Funktionalität `<>` - \item Benötigte Funktionalität `<>`‚ - \end{itemize*} - \item White-Box-Darstellung - \begin{itemize*} - \item Interner Aufbau der Komponente `<>` - \item Artefakte `<>`‚ Realisierende physische Einheit (z.B.: .dll) - \end{itemize*} - \end{itemize*} - \end{itemize*} - - Schnittstellen / Interfaces - \begin{itemize*} - \item Definition Diagrammunabhängig - \begin{itemize*} - \item Meist Klassendiagramm - \end{itemize*} - \item Ähnlich Semantik einer Klasse - \begin{itemize*} - \item Nur public-Attribute und Operationen - \end{itemize*} + \item Definition Diagrammunabhängig: Meist Klassendiagramm + \item Ähnlich Semantik einer Klasse: Nur public-Attribute und Operationen \item Definiert Verpflichtung zur Implementierung von \begin{itemize*} \item Operationen @@ -905,89 +704,27 @@ \item Verpflichtungen (z.B.: Vor- / Nachbedingungen) \end{itemize*} \item Meist abstrakte Klassen mit abstrakten Operationen - \item Abstrakt - muss überschrieben werden - \item Notation - \begin{itemize*} - \item Stereotyp: <> - \item Meist kursiv geschrieben, da abstrakte Klasse - \end{itemize*} - \end{itemize*} - - Schnittstellenrealisierung, Implementierungsbeziehung - \begin{itemize*} + \item Klasse realisiert alle Attribute und Operationen \item Schnittstellen werden realisiert, nicht instanziiert - \item Schnittstellenkonform - \begin{itemize*} - \item Klasse realisiert alle Attribute und Operationen - \end{itemize*} \item Schnittstelle kann von anderen Schnittstellen erben \item Keine Schnittstellenrealisierung zwischen zwei Interface-Klassen $\rightarrow$ Generalisierung verwenden - \item Darstellung - \begin{itemize*} - \item Gestrichelte Linie mit nicht gefülltem Dreieck an der Seite der Superklasse - \item Alternativ: Lollipop-Darstellung - \end{itemize*} - \end{itemize*} - - - \subsection{Softwarearchitekturmuster} - \begin{itemize*} \item Wiederverwendung auf sehr hoher Abstraktionsstufe - \item Falls geplante Anwendung passt, anwenden! \end{itemize*} Schichten-Architektur (layers) \begin{itemize*} - \item Problem - \begin{itemize*} - \item Komplexität: Strukturierung des Systems, unterschiedliche Abstraktionsebenen - \item Änderungen sollen möglichst lokal bleiben - \item Teilsysteme sollen austauschbar, wiederverwendbar und getrennt entwickelbar sein - \item Schnittstellen sollen stabil sein - \end{itemize*} - \item Lösung - \begin{itemize*} - \item Zuordnung von Subsystemen zu horizontalen Schichten gleicher Abstraktionsebene - \item Komponenten einer Schicht bieten Dienste der darüber liegenden Schicht an - \end{itemize*} + \item Zuordnung von Subsystemen zu horizontalen Schichten gleicher Abstraktionsebene + \item Komponenten einer Schicht bieten Dienste der darüber liegenden Schicht an \end{itemize*} - Client-Server (Klient/Anbieter) + Client-Server (Klient/Anbieter) Two-tier \begin{itemize*} - \item Client (front-end) - \begin{itemize*} - \item Benutzungsschnittstelle - \item Einbindung in Geschäftsprozesse - \item Entkoppelt von Netztechnologie und Datenhaltung - \end{itemize*} - \item Server (back-end) - \begin{itemize*} - \item Datenhaltung, evtl. Fachlogik - \end{itemize*} - \item Genauer: Two-tier client/server architecture + \item Client (front-end): Benutzungsschnittstelle + \item Server (back-end): Datenhaltung, evtl. Fachlogik \item Asynchroner Kontrollfluss \item Aufteilung Funktionen Client / Server - \begin{itemize*} - \item Mehr Funktionen im Server: - \begin{itemize*} - \item zentrale Verwaltung, Wartungsaufwand geringer, Portabilität, einfache Client-Hardware (Net PC) - \item „Thin Client“ - nur GUI - \end{itemize*} - \item Mehr Funktionen im Client: Flaschenhals Server wird entlastet, individuellere Client-Funktionen - \begin{itemize*} - \item „Fat Client“ - Teil der Anwendung im Client - \end{itemize*} - \item Entscheidet mit über Umsetzung (Java Script, ...) - \end{itemize*} - \end{itemize*} - - Three-Tier / Four-Tier Architecture: Client/Server mit weiterer Aufteilung ähnlich Repository - - Bewertung Client-Server - \begin{itemize*} \item Vorteile \begin{itemize*} - \item Leicht verständlich \item Änderungen bleiben lokal \item Geringere Kopplung zwischen den Schichten \item Schichten austauschbar und wiederverwendbar @@ -998,26 +735,21 @@ \begin{itemize*} \item Geringere Performance \item Zusätzlicher Verwaltungs- oder Datenoverhead - \item Manche Änderungen führen zu Änderungen in allen Schichten (z.B. neues Datenfeld) + \item Manche Änderungen führen zu Änderungen in allen Schichten \end{itemize*} \end{itemize*} Pipes and Filters \begin{itemize*} \item Datenstrom- oder Kontrollflussorientiertes System - \item Lose verbundene Berechnungskomponenten \item Kombination der Berechnungskomponenten nur vom Typ der Ein- und Ausgabedaten abhängig - \item Leicht erweiterbar System gewünscht - \item Parallele Verarbeitung vorteilhaft - \item Verwendung von globalen Steuerungskontrollstrukturen (Parallelisierung, Verzweigung, Schleifen) gewünscht + \item Verwendung von globalen Steuerungskontrollstrukturen \item Vorteile \begin{itemize*} - \item Stark entkoppelte Komponenten \item Hohe Flexibilität gegenüber Änderungen \& Erweiterungen \item Hoher Wiederverwendungsgrad der Komponenten \item Unabhängige Entwicklung der Komponenten \item Leichte Parallelisierung der Berechnungen möglich - \item Überprüfung der Datenkompatibilität dynamisch / statisch \end{itemize*} \item Nachteile \begin{itemize*} @@ -1027,21 +759,12 @@ \end{itemize*} \end{itemize*} - Plug-In Architektur (Microkernel) \begin{itemize*} - \item Zielstellung - \begin{itemize*} - \item Stabile, verbreitete Standard-Anwendung (Kern) - \item Funktionalität soll durch Komponenten leicht erweiterbar sein - \item Dritte sollen Komponenten leicht erstellen können - \end{itemize*} - \item Lösung - \begin{itemize*} - \item Möglichst schlanker zentraler Kern - \item Plugin-Manager verwaltet Komponenten: Laden, Entladen, Zugriffskontrolle, Konfiguration - \end{itemize*} - \item Plugin + \item Stabile, schlanker verbreitete Standard-Anwendung (Kern) + \item Funktionalität durch Komponenten leicht erweiterbar sein + \item Dritte sollen Komponenten leicht erstellen können + \item Plugin-Manager verwaltet Komponenten: Laden, Entladen \begin{itemize*} \item Komponente mit Standard-Schnittstelle \item Erweitert Funktionalität (extension point) @@ -1052,7 +775,6 @@ \item Trennung der Zuständigkeiten \item Erweiterbar, Austauschbar, Wiederverwendbar \item Geringe Kopplung zu den Komponenten - \item Anpassung an eigene Bedürfnisse möglich \item Leichte Aufteilung der Entwicklung der Arbeitspakete \end{itemize*} \item Nachteile @@ -1061,199 +783,51 @@ \item Verwaltungsoverhead zur Laufzeit \item Versionsverwaltung der Komponenten nötig \item Abhängigkeiten unter den Komponenten schwierig realisierbar - \item Geschickte Definition der Extension Points nötig \end{itemize*} \end{itemize*} - Repository (Depot, blackboard) - \begin{itemize*} - \item Zentrale Datenhaltung - \begin{itemize*} - \item Datenbankmanagementsystem, Dateisystem - \end{itemize*} - \item Anwendungen tauschen Daten nur über Repository aus - \item Kontrollfluss z.B. über Signale oder Semaphore - \item Gut für datenintensive Verarbeitungsaufgaben geeignet - \end{itemize*} - - Peer-to-peer - \begin{itemize*} - \item Gleichberechtigte Partner, “Föderation” - \item Verteilte kommunizierende Subsysteme - \item Orts- und Umgebungsunabhängigkeit - \end{itemize*} - Model-View-Controller (MVC) \begin{itemize*} - \item Modell / Sicht / Steuerung - \item Trennung verschiedener Aufgabengebiete: - \begin{itemize*} - \item Model: verwaltet Domänenwissen, Daten und Zustand; häufig Datenbank - \item View: Darstellung, Anzeige, GUI - \item Controller: Steuerung der Interaktion, Nutzerbefehle - \end{itemize*} \item Erlauben Austausch von Anzeige- und Speichersystem - \item Kontrollfluss - \begin{itemize*} - \item Controller steuert - \item View wird über Datenänderungen benachrichtigt (callback) - \end{itemize*} + \begin{description*} + \item[Model] verwaltet Domänenwissen, Daten und Zustand; Datenbank + \item[View] Darstellung, Anzeige, GUI + \item[Controller] Steuerung der Interaktion, Nutzerbefehle + \end{description*} \item Geeignet für interaktive Systeme - \item Problem - \begin{itemize*} - \item Lose Kopplung zwischen verschiedenen Komponenten - \item Daten werden in verschiedenen Sichten dargestellt - \item Realisierung von GUI‘s - \end{itemize*} - \item Lösung durch drei Komponenten - \begin{itemize*} - \item Daten (Model) enthält die Kernfunktionalität / Durchführung der Geschäftsprozesse, kapselt und Speichert die Daten - \item Sichten bzw. Dialoge (View) stellt die Daten für den Anwender in unterschiedlicher Art dar - \item Logik bzw. Steuerung (Controller) Realisiert die Interaktion mit dem Benutzer, übernimmt die Eingaben vom View und ändert die Daten im Modell, legt die Darstellungsart der Sichten fest - \end{itemize*} - \item Vorteile - \begin{itemize*} - \item Unabhängige Entwicklung der Komponenten - \item Änderung der Oberfläche ohne Änderung des Modells - \item Unterschiedliche Oberflächen für das selbe Modell - \end{itemize*} - \item Nachteile - \begin{itemize*} - \item Performance - \item Erhöhter initialer Entwicklungsaufwand - \end{itemize*} + \item Daten enthält Kernfunktionalität, kapselt und speichert Daten + \item Sichten stellt die Daten in unterschiedlicher Art dar + \item Steuerung realisiert die Interaktion mit dem Benutzer, übernimmt die Eingaben vom View und ändert die Daten im Modell \end{itemize*} - \subsection{Frameworks} - Was ist ein Framework? \begin{itemize*} - \item A framework is a set of prefabricated software building blocks that programmers can use, extend, or customize for specific computing solutions [Taligent] - \item Ein framework (Rahmenwerk, Anwendungsgerüst) ist eine Menge von zusammengehörigen Klassen, die einen abstrakten Entwurf für eine Problemfamilie darstellen [nach Pomberger/Blaschek] - \end{itemize*} - - Ziele - \begin{itemize*} - \item Wiederverwendung von Code, Architektur, Entwurfsprinzipien und Verhaltensschema + \item Menge von zusammengehörigen Klassen, für eine Problemfamilie + \item Wiederverwendung von Code, Architektur, Entwurfsprinzipien \item Ähnliche Benutzungsschnittstelle - \end{itemize*} - - Klassifikation I - \begin{itemize*} - \item Anwendungs-Framework (application framework) + \item Klassifikation I \begin{itemize*} - \item Gibt Systemarchitektur für typische Anwendungsstruktur vor - \item GUI-Framework: Motif, Qt, Swing, ... - \end{itemize*} - \item Bereichsspezifisches Framework (domain framework) - \begin{itemize*} - \item Expertenwissen für Anwendungsbereich - \item für typische Anwendungen u.a. in den Bereichen Luftfahrt, Produktion, Finanzwesen, Automotive, ... - \item Beispiel: AUTOSAR - \end{itemize*} - \item Infrastrukturgerüst (support framework) - \begin{itemize*} - \item Gerätetreiber, Anpassung an Hardware - \item Middleware: DCOM, Java RMI, CORBA, WebSphere, ... - \end{itemize*} - \end{itemize*} - - Klassifikation II - \begin{itemize*} - \item Offene Programmgerüste (white box) - \begin{itemize*} - \item Erweiterbarkeit durch Vererbung und dynamische Bindung - \item Funktionen konkretisieren durch Ableitung von Basisklassen des Programmgerüsts und Überschreiben vordefinierter Methoden - \end{itemize*} - \item Geschlossene Programmgerüste (black box) - \begin{itemize*} - \item Erweiterbarkeit durch Definition von Schnittstellen für Module, die für eine konkrete Anwendung in das Gerüst eingesetzt werden können - \item Wiederverwendung durch Komponenten, die sich an Schnittstellen halten; Aufruf über Delegation - \end{itemize*} - \end{itemize*} - - - Webframeworks - Angular JS - \begin{itemize*} - \item Clientseitiges Webframework von Google - \item Frei verwendbar (Open Source) - \item Erstellung von Single-Page-Webanwendungen - \item Model View Prinzip - \end{itemize*} - - \begin{itemize*} - \item Vorteile - \begin{itemize*} - \item Weitergabe von Expertenwissen - \item Durchdachtes Design: langfristige Aufwandsersparnis - \item Wartungsaufwand reduziert, systematische Tests möglich - \item Prinzipiell sehr hohe Produktivität möglich - \item Erleichtert Integration und Konsistenz verwandter Anforderungen - \end{itemize*} - \item Nachteile - \begin{itemize*} - \item Erstellung und Einarbeitung aufwändig - \item Zusätzlicher Dokumentations- und Wartungsaufwand - \item Fehlersuche erschwert durch Overhead des Frameworks - \item Kombination verschiedener Frameworks sehr schwierig + \item Anwendungs-Framework (application framework) + \item Bereichsspezifisches Framework (domain framework) + \item Infrastrukturgerüst (support framework) \end{itemize*} + \item Klassifikation II + \begin{description*} + \item[Offene Programmgerüste] (white box) Erweiterbarkeit durch Vererbung und dynamische Bindung + \item[Geschlossene Programmgerüste] (black box) Erweiterbarkeit durch Definition von Schnittstellen für Module + \end{description*} + \item Webframeworks \end{itemize*} \subsection{Systemarchitektur und Verteilung} - Systemarchitektur \begin{itemize*} \item Aufbau und Elemente der Ablaufumgebung, Hardware \item Häufig enger Zusammenhang mit Softwarearchitektur - \begin{itemize*} - \item Architekturmuster - \item Ablaufmuster - \end{itemize*} \item Besonders bei eingebetteten Systemen \item Systemarchitektur hat Einfluss auf Softwarearchitektur - \begin{itemize*} - \item Grenzobjekte, Schnittstellen, ... - \end{itemize*} - \item Gute Systemarchitektur? - \begin{itemize*} - \item Nichtfunktionale Anforderungen - \item Modellierung und Simulation, Lastmessungen - \end{itemize*} - \end{itemize*} - - Typische Strukturen - \begin{itemize*} - \item Zentralrechner (mainframe) mit Terminals - \item Server und einfache Stationen - \item PCs und Server - \item Kommunikationsverbindungen, Sensoren, Speicher, ... - \end{itemize*} - - - \begin{itemize*} - \item Blockdiagramm - \begin{itemize*} - \item Klassisches Beschreibungsmittel für Systemaufbau - \item Nicht Teil von UML - \end{itemize*} - \item Konfigurationsdiagramm - \begin{itemize*} - \item meistverbreitetes Hilfsmittel zur Beschreibung der physikalischen Verteilung von System-Komponenten - \item Nicht Teil von UML - \end{itemize*} - \item Verteilungsdiagramm (UML deployment diagram) - \begin{itemize*} - \item Darstellung der Hardwaretopologie - \item Zuordnung von Artefakten zu Hardwareeinheiten (Knoten) - \begin{itemize*} - \item Verteilung von Systembestandteilen auf Hardware - \end{itemize*} - \item Kommunikationsverbindung und Abhängigkeiten zwischen Knoten - \item Relativ spät im Projekt Installation / Wartung des Systems - \end{itemize*} \end{itemize*} \subsection{Globaler Kontrollfluss} - Globaler Kontrollfluss \begin{itemize*} \item Ablaufsicht der Architektur \begin{itemize*} @@ -1261,15 +835,13 @@ \item Steuerung der Abfolge von Einzelfunktionen \item Synchronisation und Koordination \item Reaktion auf externe Ereignisse - \item Darstellung z.B. durch Sequenzdiagramme \end{itemize*} \item Nebenläufigkeit auf Architekturebene \begin{itemize*} \item Threads , Prozesse, verteiltes System \item Asynchroner Nachrichtenaustausch \end{itemize*} - \item Einfluss auf Architektur / abhängig von Architektur! - \item Ablaufmuster + \item Einfluss auf Architektur / abhängig von Architektur \begin{itemize*} \item Zentral \begin{itemize*} @@ -1281,35 +853,14 @@ \item Ereignisgesteuert (event-driven) \item interrupts \item publish-subscribe (ähnlich observer) - \item (selective) broadcast \item Datenflussgesteuert (data flow architecture) \end{itemize*} \end{itemize*} \end{itemize*} - \subsection{Sonstiges} - Ablauf des OO-Systementwurfs [B. Oesterreich] + \subsection{Weitere Aufgaben beim Grobentwurf} \begin{itemize*} - \item Schichtenmodell definieren - \item Verteilungsmodell definieren - \item Fachliches Subsystemmodell definieren - \item Ablaufverantwortlichkeiten definieren - \item Komponentenspezifisches Klassenmodell entwickeln - \item Komponentenschnittstelle entwerfen - \item Zustandsmodelle weiterentwickeln - \item Objektfluss modellieren - \item Interaktionsmodelle entwickeln, Attribute definieren - \item Dialoge spezifizieren - \item Design-Diskurs - \item Testgetriebene Entwicklung - \end{itemize*} - - Weitere Aufgaben beim Grobentwurf - \begin{itemize*} - \item Entwurf einer persistenten Datenverwaltung - \begin{itemize*} - \item Dateisystem, Datenbank - \end{itemize*} + \item Entwurf einer persistenten Datenverwaltung (Datenbank) \item Sicherheit \begin{itemize*} \item Zugriffskontrolle @@ -1317,43 +868,43 @@ \item Protokollfunktionen \end{itemize*} \item Kontrollfluss - \begin{itemize*} - \item Ausnahmen - \item Starten, Initialisieren und Beenden der Anwendung - \item „Randanwendungsfälle“ - \end{itemize*} - \end{itemize*} - - Notwendigkeit der Architekturdokumentation + \item Dokumentation \begin{itemize*} - \item Quellcode aufgrund niedrigen Abstraktionsniveaus ungünstig für Dokumentation - \item Überblick und Arbeitsteilung - \item Lebensdauer von Systemen länger als geplant - \item Fehler und Probleme leichter finden und beseitigen - \item Neue Anforderungen mit angemessenem Aufwand erfüllen - \item Vereinfachung der Wartung, Pflege, Erweiterung, Wiederverwendung + \item Verständlich aus Sicht des Lesers formulieren (Glossar) + \item Das Warum beschreiben (Entwurfsentscheidungen) + \item Annahmen, Voraussetzungen, Randbedingungen + \item Notation erklären oder Standards verwenden (UML) + \item Auf Zweckdienlichkeit prüfen, Reviews durchführen + \item Verschiedene Sichten für verschiedene Zielgruppen \end{itemize*} +\end{itemize*} + +Schicht +\begin{itemize*} + \item Gruppe von Subsystemen in der Zerlegungshierarchie + \item Verwandte Dienste + \item Ähnlicher Abstraktionsgrad + \item Abhängigkeit nur von darunter liegenden! +\end{itemize*} + +Repository (Depot, blackboard) +\begin{itemize*} + \item Zentrale Datenhaltung + \item Anwendungen tauschen Daten nur über Repository aus + \item Kontrollfluss z.B. über Signale oder Semaphore + \item Gut für datenintensive Verarbeitungsaufgaben geeignet +\end{itemize*} + +Peer-to-peer +\begin{itemize*} + \item Gleichberechtigte Partner, Föderation + \item Verteilte kommunizierende Subsysteme + \item Orts- und Umgebungsunabhängigkeit +\end{itemize*} - \subsection{Dokumentation} - \begin{itemize*} - \item Grundprinzipien - \begin{itemize*} - \item Verständlich aus Sicht des Lesers formulieren (Glossar) - \item Das Warum beschreiben (Entwurfsentscheidungen) - \item Annahmen, Voraussetzungen, Randbedingungen dokumentieren - \item Wiederholungen vermeiden - \item Notation erklären oder Standards verwenden (UML) - \begin{itemize*} - \item Legende hinzufügen - \end{itemize*} - \item Auf Zweckdienlichkeit prüfen, Reviews durchführen (Inhalt, Qualität) - \item Verschiedene Sichten für verschiedene Zielgruppen - \end{itemize*} - \end{itemize*} \newpage \section{Feinentwurf} - %| Analyse-Modell | Entwurfs-Modell | %| -\item | -\item | %| Fachliche Domäne | Lösungsdomäne |