Typen, Module und Schnittstellen

Typisierung

  • Warum?

    • sagt was gültige Werte sind
    • sagt was mit Variablen möglich ist
    • wie viel Speicher muss reserviert werden
    • was für Operationen sind zulässig
  • Warum Type-Checker?

    • Hilft Fehler zur Kompilierzeit zu finden, nicht erst zur Laufzeit
    • Bei nicht statischer Sprache existiert Checker nicht, Fehler treten bei Laufzeit auf
      • Verhindern durch automatisierte Tests
  • Zusammengesetzte Typen

    • Klassen bestehen meist aus mehreren aus Typen
    • Klassen bilden einen neuen Typen

Modularisierung

  • Flexibilität / Nachhaltigkeit

    • Austausch einzelner Teile bei Defekt
    • Änderungen oder Erweiterungen nach Bedarf
  • man erhält was man braucht

  • seit 1960er Jahren

  • effiziente Wartung

  • Erweiterung von Programmen

  • parallele Entwicklung

  • verringert Redundanz von Code

  • Erhöht Verständlichkeit

  • Ermöglicht Wiederverwendung

Modularisierung nach Parnas - Information Hiding Prinzip

Herangehensweise: Was sind wichtige Entscheidungen die sich ändern können?

Ergebnis: Erstelle Module so, dass den anderen Modulen egal sein kann, ob du deine Entscheidung irgendwann änderst und die sich nicht darauf verlassen.

Schnittstellen

  • Wozu Normen und Standards?

    • Flexibilität, keine Bindung an Hersteller
    • Hersteller kann sich auf Standard verlassen
  • Geht nur wenn Standard klare Richtlinien definiert und sich alle daran halten

  • Interfaces in Java definieren Menge von Methoden und einen Typ

  • Klasse kann angeben ein Interface zu implementieren

    • muss alle im Interface definierten Methoden besitzen
  • Variable kann und sollte auf Interface-Typ deklariert werden

    • kann Objekt jeder klasse belegen die das Interface implementiert

Datenkapselung

  • Was ist Zustand?

    • Werte aller Daten zusammen, die sich verändern und Einfluss auf Verhalten haben
    • Einfache Funktionsbibliotheken haben keinen Zustand
      • da sie keine Daten speichern
      • nur Daten direkt wieder ausgeben
      • verhalten sich immer gleich
    • Komplexe Systeme haben immer einen Zustand
      • will vermeiden das nicht zulässiger Wert angenommen wird
  • Grundregeln

    • Instanzvariables privat machen
      • nur über öffentliche Methoden zugänglich machen
      • Erfüllt Hiding Prinzip
      • Definiert Schnittstelle
      • sichert sauberen Zustand

Take-Home Message

  • Information Hiding bedeutet, dass man Implementierungsentscheidungen, die sich ändern können, so versteckt, dass andere sich nicht fälschlicherweise darauf verlassen können.
    • Entscheidungen die sich nicht ändern, werden über verlässliche Schnittstellen dokumentiert
  • zustandsbehaftete Objekte reagieren ggf. unterschiedlich, je nach dem was davor damit gemacht wurde.
    • Ein Objekt ohne Instanzvariablen kann sich nichts merken und ist daher zustandslos
  • Datenkapselung sorgt dafür, dass der Zustand eines Objekts nur auf kontrollierte Weise geändert werden kann
Last modified 2022.10.24