Abschnittsweise Modellierung
(der richtige Titel war zu lang)
F. Steimann & T. Kühne
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Die zwei Weltsichten der Modellierung
Welt der Statik Klassifikation der
Entitäten Deklaration von Attributen und Relationen
(Assoziationen und Operationen)
Dynamik als Änderung der Objektkonfigurationen und -zustände
Welt der Dynamik zustandsabhängige
Verhaltensspezifikation der Zustand bestimmt,
„was geht“
Zustand und Zustandsänderungen häufig rein abstrakt kein/wenig Bezug zu
Objektkonfigurationen
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Die mißverstandene Deklaration
drucken: Dokument Drucker
d Dokument, p Drucker: drucken(d, p) ist (irgendwie) definiert.
drucken: Text Zeilendrucker
drucken: Diagramm Plotter
drucken: Text Plotter
Dokument Druckerdrucken
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Die mißverstandene Deklaration
drucken: Dokument Drucker
drucken Dokument Drucker Extension von fressen „atmet“ Deklaration definiert obere Schranke nur wenn ich schon weiß, daß Texte
nicht auf Plottern drucken …
Dokument Druckerdrucken
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Der Definitionsbereich hat Löcher!
Text
Zeilen-drucker
Zeichnung
Plotter
Drucker
Dokument
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Lösung
Eliminierung der Definitionslöcher durch nicht-kartesische Definitionsbereiche spezielle Typsysteme
z. B. Dependent types
abschnittsweise Definition durch Überladen
in allen Fällen drucken(d, p) ist nur für bestimmte
d Dokument, p Drucker definiert
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Der Definitionsbereich hat trotzdem Löcher!
DokumentZeichnungText
Drucker
Zeilen-drucker
Plotter
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Der Definitionsbereich hat trotzdem Löcher!
DokumentZeichnungText
Drucker
Zeilen-drucker
Plotter
leer leerle
er
lee
r
lee
rle
er
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Modellierung mit Zustandstypen
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Statische Struktur
print(Document, Printer)
PrintManager
Page
1 *hasMorePages() : boolnextPage() : Page
Text
Diagram
LinePrinter
Plotter
Document
print(Document)
Printerprint
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Verhaltenpm:PrintManager
print(doc, prn)
print(doc)
[prn instanceof Plotter and doc instanceof Diagram]
[prn.empty()]
IllegalState
[not prn.empty()]
rawPrint(doc)done
[prn instanceof LinePrinter and doc instanceof Text]
[not doc.hasMorePages()]
done
[not prn.empty() and doc.hasMorePages()]
nextPage()
pg:Page
done
IllegalState
altalt
altalt
altalt
[else]
rawPrint(pg)
print(doc)
[else]
IllegalArgument
prn:Printer doc:Document
kombinatorische Explosion 12 mögliche
Parameter-konstellationen
hier auf 6 eingekocht
äußerst fehleranfällig und das bei einem
einfachen Beispiel!
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Überladen der Deklaration
Page
1 *hasMorePages() : boolnextPage() : Page
Text
Diagram
LinePrinter
Plotter
Document
print(Document)
Printerprint
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Vereinfachung durch abschnittsweise Definition
pm:PrintManager
print(doc, prn)
doc:Diagram
print(doc)
[prn.empty()]
IllegalState
[not prn.empty()]
rawPrint(doc)done
altalt
prn:Plotter
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
pm:PrintManager
print(doc, prn)
prn:LinePrinter doc:Text
[not doc.hasMorePages()]done
[not prn.empty() anddoc.hasMorePages()]
nextPage()
pg:Page
done
IllegalState
altalt
[else]
rawPrint(pg)
print(doc)
print(doc)
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Einführung von Zustandssubtypen und entsprechenden Überladungen
Text|HasMorePages
Text|hasMorePages
Plotter|empty Plotter|Empty
LinePrinter|empty
LinePrinter|Empty
DocumentPrinter
Text
Diagram
LinePrinter
Plotter
Page
1 0..*
1
1..*
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Weitere Vereinfachung durch abschnittsweise Definition (I)
pm:PrintManager
print(doc, prn)
doc:Diagram
print(doc)
rawPrint(doc)
done
prn:Plotter|empty
pm:PrintManager
print(doc, prn)
prn:LinePrinter doc:Text|hasMorePages
done
print(doc)
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Weitere Vereinfachung durch abschnittsweise Definition (II)
pm:PrintManager
print(doc, prn)
prn:LinePrinter|empty doc:Text|hasMorePages
nextPage()
pg:Page
done
rawPrint(pg)
print(doc)
print(doc)
pm:PrintManager
print(doc, prn)
prn:LinePrinter|empty doc:Text|hasMorePages
nextPage()
pg:Page
rawPrint(pg)
print(doc)
empty hasMorePages
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
DocumentPrinter
DiagramPlotterprint
Integration von Statecharts
automatische Generierung
spezifiziert veränderlichenDefinitionsbereich von Methoden
DocumentPrinter
DiagramPlotter
Plotter
emptyempty
print(Diagram)
print(Diagram)
Plotter|empty Plotter|Empty
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Ableitung der Zustandssubtypen
Zustände spezifizieren veränderlichen Definitions- bereich von Methoden
Zustände können Wertebereiche von Attributen einschränken
Zustandswechsel erfordern ggf. neue Bindung (Rekursion)
Zustandsautomaten werden vererbt
empty empty
print(Diagram)
print(Diagram)
empty empty
print(Text)
print(Text|hasMorePages)
print(Text|hasMorePages)
hasMoreP.hasMoreP.
nextPage()
nextPage()
Plotter
LinePrinter
Text
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Automatische GenerierungPlotter
emptynot empty
print(Document)()
print(Document)()
LinePrinter
emptynot empty
print(Document)()
print(Document)()
print(Document)()Text
not hasMorePageshasMorePages
nextPage(nextPage)
nextPage(nextPage)+print(in Document, in Printer)
PrintManager Document
+print(Document)()
Printer
+hasMorePages() : Boolean+nextPage() : Page
Text
Diagram
LinePrinter
Plotter
Page 1*
* *
* *
* *
Text|notHasMorePages
Text|hasMorePages
LinePrinter|empty
LinePrinter|notEmpty
Plotter|empty Plotter|notEmpty
DocumentPrinter
Text
Diagram
LinePrinter
Plotter
Page
1 0..*
1
1..*
printprint
+ ++
=
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Modulare Erweiterbarkeit
nachträgliches Definieren von undefinierten Fällen
nachträgliches Aufdröseln nicht haltbarer Verallgemeinerungen
pm:PrintManager prn:LinePrinter|empty doc:Text|hasMorePages
print(doc)print(doc, prn)
donedoSomethingThatMakesSense
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Modellierung mit Ausnahmen
dynamische Typen machen statische Typprüfung schwierig kaum Beachtung in der Programmierpraxis für den Zweck der Modellierung ungeeignet
akzeptieren, daß Definitionen Lücken haben
Deklarationen deklarieren Delta Transformation in Deklarationen mit
Exceptions
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Diskussion
Grenzen der Modularität Probleme aus regelbasierten Systemen und
funktionalen Programmiersprachen bekannt verwandte Arbeiten
jede Menge! statische und dynamische Typsysteme algebraische Spezifikationen mit Fehler- und
Ausnahmebehandlung
ProgrammiersystemeProgrammiersysteme
F Steimann Fernuniversität in Hagen
Vielen Dank!Fragen?
Top Related