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
- Instanzvariables privat machen
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