1 Modularitt Modularitt 7 8 Wiederverwendbarkeit + - - PDF document

1
SMART_READER_LITE
LIVE PREVIEW

1 Modularitt Modularitt 7 8 Wiederverwendbarkeit + - - PDF document

1 2 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Vorlesung 2: Modularitt, Wiederverwendbarkeit Bertrand Meyer Chair of Software Engineering Chair of Software Engineering Programmierung im Grossen - Vorlesung 2


slide-1
SLIDE 1

1

Programmierung im Grossen - Vorlesung 2

1 Chair of Software Engineering

Programmierung im Grossen

Bertrand Meyer

Letzte Aktualisierung: 16. April 2004

Programmierung im Grossen - Vorlesung 2

2 Chair of Software Engineering

Vorlesung 2: Modularität, Wiederverwendbarkeit

Programmierung im Grossen - Vorlesung 2

3 Chair of Software Engineering

Programm für heute

Software Qualität Modularität Wiederverwendbarkeit

Programmierung im Grossen - Vorlesung 2

4 Chair of Software Engineering

Software Qualität

Externe Faktoren: für Kunden sichtbar (nicht nur der Endbenutyer, zB auch Käufer) Beispiele: leichte Benutzbarkeit, Erweiterbarkeit Interne Faktoren: nur von Entwicklern wahrnehmbar Beispiele: guter Programmier-Stil, Information Hiding Letztendlich zählen nur die externen Faktoren, aber die internen ermöglichen erst deren Erreichung.

Programmierung im Grossen - Vorlesung 2

5 Chair of Software Engineering

Externe Qualitäts-Faktoren

  • KORREKTHEIT
  • ROBUSTHEIT
  • INTEGRITÄT
  • LEICHTE BENUTZBARKEIT
  • WIEDERVERWENDBARKEIT
  • ERWEITERBARKEIT
  • PORTABILITÄT
  • EFFIZIENZ
  • Korrektheit:

Die Fähigkeit eines Software Systems, entsprechend der Spezifikation zu arbeiten, in durch die Spezifikation definierten Fällen.

  • Robustheit:

Die Fähigkeit eines Software Systems, sich in Fällen, die nicht von der Spezifikation abgedeckt werden, angemessen zu verhalten.

Korrektheit Robustheit Integrität FEINDLICHE VERWENDUNG FEHLER SPEZIFIKATION

Programmierung im Grossen - Vorlesung 2

6 Chair of Software Engineering

Zuverlässigkeit

Korrektheit + Robustheit Techniken werden genau diskutiert werden: Typisierung, Design by Contract, …

slide-2
SLIDE 2

2

Programmierung im Grossen - Vorlesung 2

7 Chair of Software Engineering

Modularität

Wiederverwendbarkeit + Erweiterbarkeit Begünstigt durch architektonische Techniken, die zur Sicherstellung dezentralisierter Module tendieren

Programmierung im Grossen - Vorlesung 2

8 Chair of Software Engineering

Modularität

Einige Prinzipien von Modularität: Zerlegbarkeit Zusammensetzbarkeit Kontinuität Information Hiding (manchmal “Geheimnisprinzip”) Das “Offen-Geschlossen” Prinzip Das “Einzige Auswahl” Prinzip

Programmierung im Grossen - Vorlesung 2

9 Chair of Software Engineering

Zerlegbarkeit

Diese Methode hilft komplexe Probleme in Teil-Probleme zu zerlegen. Folgerung: Aufspaltung der Arbeit. Beispiel: Top-down Design-Methode (folgt). Gegenbeispiel: Allgemeines Initialisierungs- Modul.

Programmierung im Grossen - Vorlesung 2

10 Chair of Software Engineering

Top-down funktionales Design

A B D C C1 I1 C2 I2 I Oberste funktionale Abstraktion Schleife Bedingung Sequenz

Programmierung im Grossen - Vorlesung 2

11 Chair of Software Engineering

Top-down Design

Siehe Niklaus Wirth, “Program Construction by Stepwise Refinement”, Communications of the ACM, 14, 4, (April 1971), p 221-227. http://www.acm.org/classics/dec95/

Programmierung im Grossen - Vorlesung 2

12 Chair of Software Engineering

Diese Methode bevorzugt die Erzeugung von Software-Elementen die frei untereinander zusammengesetzt werden können, um neue Software zu erzeugen. Beispiel: Unix Shell Konventionen Programm1 | Programm2 | Programm3

Zusammensetzbarkeit

slide-3
SLIDE 3

3

Programmierung im Grossen - Vorlesung 2

13 Chair of Software Engineering

Direktes Abbilden

Diese Methode ergibt ein Software-System dessen modulare Struktur kompatibel bleibt mit irgendeiner modularen Struktur, die beim modellieren der Problem-Domäne erdacht wird.

Programmierung im Grossen - Vorlesung 2

14 Chair of Software Engineering

Prinzip der wenigen Schnittstellen

Jedes Modul redet mit so wenigen anderen Modulen wie möglich.

(A) (B) (C)

Programmierung im Grossen - Vorlesung 2

15 Chair of Software Engineering

Prinzip der kleinen Schnittstellen

Wenn zwei Module kommunizieren, tauschen sie so wenig Information aus wie möglich.

x, y z

Programmierung im Grossen - Vorlesung 2

16 Chair of Software Engineering

Prinzip der expliziten Schnittstellen

Wenn zwei Module A und B kommunizieren, ist das aus dem Text von A oder B oder von beiden

  • ffensichtlich.

Modul A Modul B Daten x

Modifiziert Liest

Programmierung im Grossen - Vorlesung 2

17 Chair of Software Engineering

Kontinuität

Diese Methode stellt sicher, dass kleine Änderungen an der Spezifikation auch kleine Änderungen an der Architektur ergeben. Design Methode: Spezifikation → Architektur Beispiel: Prinzip des einheitlichen Zugriffs (folgt) Gegenbeispiel: Programme mit Mustern nach der physikalischen Implementierung der Datenstrukturen.

Programmierung im Grossen - Vorlesung 2

18 Chair of Software Engineering

Prinzip des einheitlichen Zugriffs

Funktionen die von einem Modul verwaltet werden sind für Kunden in der selben Weise zugreifbar, egal ob sie mit Berechnung oder Speicherung implementiert sind. Definition: Ein Kunde eines Moduls ist irgendein Modul, dass seine Funktionen benutzt.

slide-4
SLIDE 4

4

Programmierung im Grossen - Vorlesung 2

19 Chair of Software Engineering

Einheitlicher Zugriff: Beispiel

balance = list_of_deposits.total – list_of_withdrawals.total Ada, Pascal, C/C++, Java, C#: Simula, Eiffel: a.balance a.balance balance (a) a.balance()

list_of_deposits list_of_withdrawals balance list_of_deposits list_of_withdrawals (A2) (A1)

Programmierung im Grossen - Vorlesung 2

20 Chair of Software Engineering

Information Hiding

Zugrundeliegende Frage: Wie “bewirbt” man die Möglichkeiten eines Moduls? Jedes Modul sollte der externen Welt durch eine

  • ffizielle, öffentliche, “public” Schnittstelle bekannt

sein. Die restlichen Eigenschaften des Moduls sind seine “Geheimnisse”. Es soll unmöglich sein auf die Geheimnisse von aussen zuzugreifen.

Programmierung im Grossen - Vorlesung 2

21 Chair of Software Engineering

Das Information Hiding Prinzip

Der Designer jedes Moduls muss eine Teilmenge der Eigenschaften des Moduls als offizielle Information über das Modul auswählen. Diese Teilmenge wird den Entwicklern von Kunden-Modulen zur Verfügung gestellt.

Programmierung im Grossen - Vorlesung 2

22 Chair of Software Engineering

Information Hiding

Geheimer Teil Öffentlicher Teil

Programmierung im Grossen - Vorlesung 2

23 Chair of Software Engineering

Information Hiding

Begründungen: Kontinuität Zerlegbarkeit

Programmierung im Grossen - Vorlesung 2

24 Chair of Software Engineering

Das Offen-Geschlossen Prinzip

Module sollen Offen und Geschlossen sein.

Definitionen: Offenes Modul: Kann erweitert werden. Geschlossenes Modul: Für Kunden verwendbar. Kann freigegeben, als Grundlinie (baseline) verwendet und (falls eine Programmeinheit) kompiliert werden. Die Begründungen ergänzen sich: Ein Modul zu schliessen (Manager-Perspektive): Kunden benötigen es jetzt. Ein Modul offen zu lassen (Entwickler-Perspektive): Man übersieht oft Aspekte des Problems.

slide-5
SLIDE 5

5

Programmierung im Grossen - Vorlesung 2

25 Chair of Software Engineering

Ein Objekt

start forth put_right before after item index

hat eine Schnittstelle

Programmierung im Grossen - Vorlesung 2

26 Chair of Software Engineering

start forth put_right before after item index

Ein Objekt hat eine Implementierung

Programmierung im Grossen - Vorlesung 2

27 Chair of Software Engineering

Information Hiding

start forth put_right before after item index

Programmierung im Grossen - Vorlesung 2

28 Chair of Software Engineering

Das Offen-Geschlossen Prinzip

F A’ G H I A C E D B

Programmierung im Grossen - Vorlesung 2

29 Chair of Software Engineering

Zu frühes schliessen eines Moduls

type PUBLICATION = record author, title: STRING; publication_year: INTEGER case pubtype: (book, journal, conference) of book: (publisher: STRING); journal: (editor: STRING); conference: (place, chair: STRING) end end

  • Verwendung in Kunden:

p: PUBLICATION ; case p.pubtype of book: ... p.publisher ...; journal: ... p.editor ...; conference: ... p.place ... end

Programmierung im Grossen - Vorlesung 2

30 Chair of Software Engineering

Das Einzige Auswahl Prinzip

Immer wenn ein Software-System eine Menge von Alternativen unterstützen muss gibt es genau ein Modul im System, dass die komplette Liste kennt. Editor: Menge von Kommandos (Einfügen, Löschen, etc.) Graphik-System: Menge von Formen (Rechteck, Kreis, etc.) Kompiler: Menge von Sprach-Konstrukten (Anweisung, Schleife, Ausdruck, etc.)

slide-6
SLIDE 6

6

Programmierung im Grossen - Vorlesung 2

31 Chair of Software Engineering

Wiederverwendbarkeits-Probleme

Organisations- und Management-Probleme: (Werden hier nicht behandelt.) Technische Probleme: Welche Form von Komponenten? Prozedur-Bibliotheken Packete (Ada) Klassen-Bibliotheken Welche Form von Klassen?

Programmierung im Grossen - Vorlesung 2

32 Chair of Software Engineering

Wiederverwendbarkeit: Techn. Probleme

Allgemeines Muster für eine Such-Routine:

has (t: TABLE; x: ELEMENT): BOOLEAN is

  • - Erscheint Element x in der Tabelle t?

local pos: POSITION do from pos := initial_position (t) until exhausted (t, pos) or else found (t, x, pos) loop pos := next (t, pos) end Result := found (t, x, pos) end

Programmierung im Grossen - Vorlesung 2

33 Chair of Software Engineering

Probleme eines allgemeinen Such-Moduls

Typ-Varianten: Was sind die Tabellen-Elemente? Routinen-Groupierung: Eine Such-Routine ist nicht genug: sie sollte mit Routinen für die Tablellen-Erzeugung, das Einfügen und Löschen, etc. kombiniert sein. Implementierungs-Varianten: Viele mögliche Alternativen für die Datenstrukturen und Algorithmen: sequentielle Tabelle (sortiert oder unsortiert), Array, binärer Such-Baum, Dateien, ...

Programmierung im Grossen - Vorlesung 2

34 Chair of Software Engineering

Probleme (fortgesetzt)

Repräsentations-Unabhängigkeit: Kann ein Kunde Operationen verwenden, wie zB Tabellen-Suche (has), ohne zu wissen welche Implementierung intern verwendet wird? has (t1, y)

Programmierung im Grossen - Vorlesung 2

35 Chair of Software Engineering

Probleme (fortgesetzt)

Ausgliedern von Gemeinsamkeiten: Wie kann der Autor von Zuliefer-Modulen die Gemeinsamkeiten von Teilen der möglichen Implementierungen positiv ausnutzen? Beispiel: Die Menge an sequentiellen Tabellen- Implementierungen. Gemeinsamer Routinen-Text für has:

has (....; x: T): BOOLEAN is

  • - Erscheint x in der Tabelle?

do from start until after or else found (x) loop forth end Result := found (x) end

Programmierung im Grossen - Vorlesung 2

36 Chair of Software Engineering

Ausgliedern von Gemeinsamkeiten

1 item index forth count start after back before

slide-7
SLIDE 7

7

Programmierung im Grossen - Vorlesung 2

37 Chair of Software Engineering

Ausgliedern von Gemeinsamkeiten

TABLE SEQUENTIAL_ TABLE TREE_ TABLE HASH_ TABLE ARRAY_ TABLE LINKED_ TABLE FILE_ TABLE has start after found forth

Programmierung im Grossen - Vorlesung 2

38 Chair of Software Engineering

Implementierungs-Varianten

Array Linked list File start forth after found (x)

c := first_cell rewind i := 1 c := c.right i := i + 1 read end_of_file c = Void f = ξ c.item = x i > count t [i] = x

Programmierung im Grossen - Vorlesung 2

39 Chair of Software Engineering

Kapselungs-Sprachen (“Object-based”)

Ada, Modula-2, CLU... Grundidee: Sammle eine Gruppe von Routinen, die einen ähnlichen Zweck dienen, zB has, insert, remove, etc., zusammen mit den entsprechenden Beschreibungen der Datenstrukturen. Das behandelt das verwandte Routinen-Problem. Vorteile: Für Zuliefer-Autoren: Alles unter einem Dach. Vereinfacht Konfigurations-Management, Veränderung der Implementierung, hinzufügen von neuen Basisfunktionen. Für Kunden-Autoren: Man findet alles an einem

  • Platz. Vereinfacht die Suche nach existierenden

Routinen und Erweiterungs-Anfragen.

Programmierung im Grossen - Vorlesung 2

40 Chair of Software Engineering

Ergänzendes Material

OOSC2: Kapitel 3: Modularity Kapitel 4: Approaches to reusability

Programmierung im Grossen - Vorlesung 2

41 Chair of Software Engineering

Ende Vorlesung 2