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 zurückgeliefertes Ergebnis
y
Modultyp 1 (mit genau einer funktionalen Abhäng.)
ohrmarke_ok
x y
Funktionale Abstraktion 2
Modultyp 2 (mit mehreren logisch zusammenge- hörenden funktionalen Abhängigkeiten)
ohrmarke_ok x
muttertier
v x m
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“
Modul
„Elterntiere_suchen“
Ohrmarkennummer Gesuchtes_Elterntier
Ohrmarkennummer_Elterntier
FUNCTION Elterntiere_suchen (IN: Ohrmarkennummer,
Gesuchtes_Elterntier;
OUT: Ohrmarkennummer_Elterntier)
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 Ausgabe
Lesen Druckausgabe
Satzzähler szaehler
patholog. Verbindung
IF szaehler >=
100 THEN ...
Allgemeines Moduldiagramm mit Kontrollfluß und Objekttransport
Hauptmodul (abstrakte Funktion
auf abstraktem Datenobjekt)
Eingabemodul (eingelesenes
Objekt aufbereiten)
Verarbeitungs- modul (Eingabe- objekt in abstraktes
Ausgabeobjekt transormieren)
Ausgabemodul (auszugebendes
Objekt aufbereiten)
Lesefunktion der
Basismaschine
Schreibfunk- tion der
Basismaschine
e,se
e‘
e a
a‘
a
sa
Legende:
Benutztbeziehung Kontrollfluß (Steuerfluß) Objekttransport
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 STS- Zerlegung (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
Umformung in Datenbank- suchanfrage Eingabe einer
Suchanfrage
Suche der Schlüsselwörter
in Datenbank Ausgabe der
Abstracts Bereitstellen
der Abstracts
a b c
d e
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 Suchan- fragen durch
Lese nächste Suchanfrage
Suche Schlüssel- wörter in der
Datenbank
Gib Abstracts aus
1 2 3
Source-Modul Transform-Modul Sink-Modul
3 Definition der Schnittstellen