Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 9. Schichtenarchtitektur: Teil 1 (Datenhaltung) 1
Entwurfsprozess Der (Architektur-) Entwurf beinhaltet Grundlegende Entwurfsentscheidungen (Teil 1) Schichtenarchitektur (Teil 1: Datenhaltung und Teil 2:GUI) Entwurfsmuster (verstreut) Standardisierung erhöht die Qualität und Wartbarkeit des Entwurfs und der Software 2
Entwurfsprozess Grundlegende Entwurfsentscheidungen Plattform Programmiersprache GUI-System Art der Datenhaltung 3
Entwurfsprozess Schichtenarchitektu r GUI-Schicht Benutzeroberfläche mit Dialogführung und Darstellung der Daten der Fachkonzeptschicht Fachkonzeptschicht Funktionaler Kern der Anwendung mit Zugriff auf Datenhaltungsschicht Manipulation der fachlichen Daten Datenhaltungschicht Realisierung der Datenspeicherung mit Zugriff auf gespeicherte Daten 4
Entwurfsprozess Schichtenarchitektur Objekte einer Schicht können jeweils nur auf Objekte der direkt unter ihr liegenden Schicht zugreifen Jede Schicht wird durch ein Paket modelliert
Entwurfsprozess Schichtenarchitektur: GUI-Schicht Sichtbarmachen von fachlichen Daten an der Oberfläche durch Polling: Regelmäßiges Abfragen von Änderungen der fachlichen Daten durch die GUI-Schicht Beobachtermuster: Signalisieren von Änderungen der fachlichen Daten durch die Fachkonzeptschicht (Details später)
Entwurfsprozess Vorteile Wiederverwendbarkeit: jede Schicht besitzt eine präzise definierte Aufgabe und Schnittstelle Änderbarkeit/Wartbarkeit: Interne Organisation einer Schicht kann bei gleicher Schnittstelle beliebig verändert werden Portabilität: Hardwareabhängigkeiten können in einer Schicht isoliert werden
Zur Laufzeit des Programms werden die Daten nur im Arbeitsspeicher gehalten Bei Beendigung des Programms gehen die Daten verloren Zur Vermeidung von Datenverlusten müssen die Daten dauerhaft (man sagt persistent) auf der Festplatte gespeichert werden
Möglichkeiten der persistenten Datenspeicherung: (relationale) Datenbank Objektserialisierung Textdateien (z.b. Im XML-Format)
Kriterien für die Wahl der Datenhaltung Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?
Objektserialisierung: Speicherung der Gesamtheit aller Objekte als Byte-Strom mit Informationen zur Klassen, Objektbeziehungen und Attributen Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?
Textdateien: Speicherung in Textdatei als Zeichenkette in einem Format, aus dem Objekte und Objektbeziehungen rekonstruierbar sind Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?
Textdateien im XML-Format: Schnittstellen mit Datenbank- Funktionalitäten Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?
Datenbank: wie im Exkurs zu Datenbanken beschrieben, viele verschiedene Produkte, Zugriff über standardisierte Schnittstellen (ODBC, JDBC) Mehrbenutzersystem? Mehr schreibende/lesende Zugriffe? Größe der Datenmengen (passen in Arbeitsspeicher)? Datenverlust bei Systemausfall akzeptabel? Performance-Anforderungen? Zugriffsverwaltung erforderlich? Portabilität der Daten?
Klassendiagramm mit Datenhaltungsschicht: Anbindung an Containerklassen der Fachkonzeptschicht <Container> -daten<container>... -root DatenContainer -root -store <<interface>> Datenhaltung <Container> -daten<container> Datei Fachkonzeptschicht Datenhaltungsschicht
Implementiere Wurzel-Container für alle verwalteten Daten im Singletonmuster DatenContainer - uniqueinstance: DatenContainer = null - DatenContainer() + instance :DatenContainer...
Schnittstellenoperationen zum Laden und Speichern von Daten <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte Müssen von jeder Daten-Speicherungs-Klasse implementiert werden Gewährleistet Austauschbarkeit der Speicherungs-Methode
Implementierung der Schnittstelle bei Objektserialisierung und Abspeicherung als Text (ausser XML-Format) <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte add, delete und modify werden leer implementiert oder rufen save auf
Implementierung der Schnittstelle bei Abspeicherung in einer Datenbank <<interface>> Datenhaltung + load + save + add + delete + modify Laden und Speichern aller Objekte Speichern, Löschen und Modifizieren einzelner Objekte save wird leer implementiert
Gesamtimplementierung des Ladevorgangs: Bei Start des Programms: Erzeugung eines DatenContainer-Objekts Bei Erzeugung des DatenContainer-Objekts (im Konstruktor): Erzeugung der anderen Container-Objekte und eines Datenhaltungs-Objekts Laden der Daten und Erzeugung der Objekte über das Datenhaltungs-Objekt
Gesamtimplementierung des Speichervorgangs: Serialisierung oder Text Bei Programmende/Benutzerbefehl/Datenänderung: Speichern aller Daten über das Datenhaltungs-Objekt (Überschreiben aller Daten) Datenbank Speichern/Modifizieren/Löschen der Daten des betreffenden Objekts über das Datenhaltungs-Objekt (Aktualisieren eines Teils der Daten)