DV-Konzept (Systementwurf und Modulentwurf) Ziel dieses Teils der Unterrichtsveranstaltung: -) Prinzipien der Modularisierung -) Moduldiagramme exemplarisch an einfachen Beispielen anwenden Lernziel: Sie sollen für einfache Fälle die Modularisierung anwenden können und Fehler selbständig erkennen Modulkonzept 1. Aspekte/Qualitätsanforderungen an die Modulbildung: – Performance – Änderbarkeit – Homogenität (in sich zusammenhängende, zweckorientierte, verständliche Bausteine) 2. Modularisierungskriterien (Entwurfsprinzipien) – – – – Abstraktionsprinzip Geheimnisprinzip Prinzip der hohen Kohäsion Prinzip der losen Kopplung Funktionale Abstraktion 1 Konstruktion von Bausteinen, deren Funktionen – also das „was“ – von den Benutzern (hier der Programmierer i.w.S.) der Bausteine ausschließlich aufgrund der Kenntnis dieser Funktionen benutzt werden können. Die algorithmische Realisierung – also das „wie“ – ist dagegen für den Benutzer (hier der Programmierer i.w.S.) uninteressant Funktionale Abstraktion 1 Beispiel Ohrmarkenprüfung: FUNCTION ohrmarke_ok (IN: x; OUT: y) wobei x übergebenes Argument y y zurückgeliefertes Ergebnis Modultyp 1 (mit genau einer funktionalen Abhäng.) y x ohrmarke_ok Funktionale Abstraktion 2 Modultyp 2 (mit mehreren logisch zusammengehörenden funktionalen Abhängigkeiten) x v ohrmarke_ok x m muttertier Datenabstraktion • Konstruktion eines Bausteins, der aus einem abstrakten Datenobjekt und aus den Operationen besteht, die auf dem Datenobjekt zulässig sind. Geheimnisprinzip • Systemzerlegung hat so zu erfolgen, daß jeder der entstehenden Modul eine bestimmte Entwurfsentscheidung vor dem Rest des Systems verbirgt (Information Hiding) • Beispiele: – eine Datenstruktur, ihre internen Verbindungen, Zugriffsprozeduren und manipulierenden Prozeduren sollten Bestandteil eines einzigen Moduls sein – Zeichencodes, alphabetische Ordnungen usw. sollten in einem Modul verborgen werden – Die Reihenfolge, in der bestimmte Objekte verarbeitet werden, sollte man (soweit möglich) in einem einzigen Modul verbergen. Prinzip der hohen Kohäsion (Ausmaß, in dem alle Teile eines Moduls zusammengehören) Kohäsionsarten Erläuterung Zufällige Kohäsion Modul enthält voneinander unabhängige Operationen Logische Kohäsion Modul enthält ähnliche Operationen (z.B. wenn Steuerung über Schalter) Zeitliche Kohäsion z.B. für Initialisierungen Prozedurale Kohäsion Zusammenhängende Teile eines Flußdiagramms werden in ein Modul einbezogen. Kommunikative Kohäsion Die Operationen des Moduls greifen auf die gleichen Daten zu (z.B. Ergebnisberechnung und Ausdruck erfolgt in einem Modul) Funktionale Kohäsion Modul führt genau eine Funktion aus (bei funktionaler Abstraktion erzielt) Informationelle Kohäsion Modul enthält eine oder mehrere logisch zusammengehörende Operationen, die ein gemeinsames Datenobjekt manipulieren (z.B. Hinzufügen, Entfernen, Lesen von Sätzen einer Datei) Prinzip der losen Kopplung • Erwünscht ist eine möglichst lose Kopplung der Module eines Softwaresystems, weil das die Änderbarkeit des Systems begünstigt. • Arten der Kopplung: – Datenkopplung – Steuerungskopplung – externe/inhaltliche/pathologische Kopplung Datenkopplung • Ist die loseste Kopplung und daher am meisten erwünscht. • Beispiel: Suche nach den Elterntieren eines Rindes: Datenkopplung durch Übergabe von Daten als Parameter Modul „Herkunft_ermitteln“ Ohrmarkennummer_Elterntier FUNCTION Elterntiere_suchen Ohrmarkennummer Gesuchtes_Elterntier (IN: Ohrmarkennummer, Gesuchtes_Elterntier; OUT: Ohrmarkennummer_Elterntier) Modul „Elterntiere_suchen“ Steuerungskopplung • Ein Modul gibt Steuerungsinformationen an einen anderen Modul. Steuerinformationen sind – Schalter (switches) – Steuervariable (control variables) – Statusvariable (flags) • Diese lösen im empfangenden Modul z.B. Fehlerbehandlungen, Verzweigungen usw. aus. • Steuerungsinformationen z.T. unvermeidbar z.B. bei „eof“. Pathologische Kopplung • Ein Modul nimmt hierbei auf das Innere eines anderen Moduls Bezug (indem auf interne Daten des anderen Moduls zugegriffen wird oder in den Ablauf der Operationen des anderen Moduls eingegriffen wird) • Beispiel: Eingabe Lesen Satzzähler szaehler Ausgabe patholog. Verbindung Druckausgabe IF szaehler >= 100 THEN ... Allgemeines Moduldiagramm mit Kontrollfluß und Objekttransport Hauptmodul (abstrakte Funktion auf abstraktem Datenobjekt) Legende: Benutztbeziehung Kontrollfluß (Steuerfluß) Objekttransport sa e,se Eingabemodul (eingelesenes Objekt aufbereiten) e‘ Lesefunktion der Basismaschine e a Verarbeitungsmodul (Eingabeobjekt in abstraktes Ausgabeobjekt transormieren) a Ausgabemodul (auszugebendes Objekt aufbereiten) a‘ Schreibfunktion der Basismaschine Schichten („Zwiebelschema“) von Modulen 1. Schicht: Steuermodule 2. Schicht: problemorientierte Module (verknüpfen Datenobjekte verschiedener Datentypen mittels problemorientierter Funktionen) 3. Schicht: Verwaltungsmodule (beinhalten Funktionen zur Manipulation von mehreren Datenobjekten eines Datentyps) 4. Schicht: Zugriffsmodule (Zugriffe auf einzelne Datenobjekte eines Datentyps) Vorgehensweise für den Modulentwurf • • • • • Definition des Hauptmoduls Zerlegung des Hauptmoduls in eine Menge von direkt untergeordneten Modulen insbesondere mittels STSZerlegung (source-transform-sink decomposition) Definition der Schnittstellen zwischen dem Hauptmodul und den untergeordneten Modulen Anwendung der Schritte 1-3 auf jeden noch nicht zerlegten Modul, bis eine weitere Zerlegung ausscheidet, z.B. weil: – Unterteilung in funktional kohäsive Modul nicht möglich – Logik des Moduls ist klar umrissen und beschreibt eine spezielle Funktion – Weitere Zerlegung würde zu einer Menge von kleinen, extrem spezialisierten Funktionen führen Überprüfung und Revision des Entwurfs Beispiel für den Entwurf eines Information-Retrieval-Systems für die Ausgabe von Infos über Tierarzneimittel (Teil 1) 1. Führe alle Suchanfragen durch Definition des Hauptmoduls Das Modul, das die Leistung des gesamten Systems repräsentiert Führe alle Suchanfragen durch Beispiel für den Entwurf eines Information-Retrieval-Systems für die Ausgabe von Infos über Tierarzneimittel (Teil 2) 2. Zerlegung des Hauptmoduls (mittels STS) 2.1 Darstellung der Problemstruktur Strukturierungskriterium: Der Datenstrom, der das gesamte Problem durchsetzt a Eingabe einer Suchanfrage d Bereitstellen der Abstracts b e Umformung in Datenbanksuchanfrage Ausgabe der Abstracts c Suche der Schlüsselwörter in Datenbank Beispiel für den Entwurf eines Information-Retrieval-Systems für die Ausgabe von Infos über Tierarzneimittel (Teil 3) 2.2 Identifikation der Hauptdatenströme Die logischen Datenströme sind zu ermitteln, die durch die Kette der Teilprobleme „hindurchfließt“. Bei mehreren Datenströmen ist der „wesentliche Strom“ gesucht. Im o.g. Beispiel sind dies: „Terminalanfrage“ als Hauptein- und „Anzeige der Suchergebnisse“ als Hauptausgabestrom. 2.3 Ermitteln der Punkte der höchsten Abstraktion Es sind zwei Punkte in der Kette zu finden, die das Problem in drei Teilprobleme zerlegen. Diese sollen voneinander möglichst unabhängige, spezielle Funktionen darstellen. Bei der Bestimmung dieser Punkte folgt man den Hauptdatenströmen so lange, bis diese im Sinne der ursprünglichen Bedeutung nicht mehr zu existieren scheinen. Im o.g. Beispiel die Punkte c und d. 2.4 Definition direkt untergeordneter Module Führe alle Suchanfragen durch 1 Lese nächste Suchanfrage Source-Modul 2 Suche Schlüsselwörter in der Datenbank Transform-Modul 3 Definition der Schnittstellen 3 Gib Abstracts aus Sink-Modul