Abschnittsweise
Modellierung
(der richtige Titel war zu lang)
F. Steimann & T. Kühne
Programmiersysteme
Die zwei Weltsichten der
Modellierung
Welt der Statik

Klassifikation der
Entitäten



Welt der Dynamik

Deklaration von Attributen
und Relationen
(Assoziationen und
Operationen)
Dynamik als Änderung
der Objektkonfigurationen
und -zustände
zustandsabhängige
Verhaltensspezifikation


der Zustand bestimmt,
„was geht“
Zustand und
Zustandsänderungen
häufig rein abstrakt

kein/wenig Bezug zu
Objektkonfigurationen
F Steimann Fernuniversität in Hagen
Programmiersysteme
Die mißverstandene Deklaration
Dokument
drucken
Drucker
drucken: Dokument  Drucker
 d  Dokument, p  Drucker:
drucken(d, p) ist (irgendwie) definiert.
drucken: Text  Zeilendrucker
drucken: Diagramm  Plotter
drucken: Text  Plotter
F Steimann Fernuniversität in Hagen
Programmiersysteme
Die mißverstandene Deklaration
Dokument
drucken
Drucker
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 …
F Steimann Fernuniversität in Hagen
Programmiersysteme
Der Definitionsbereich hat Löcher!
Dokument
Zeichnung
Text
Zeilendrucker
Drucker
Plotter
F Steimann Fernuniversität in Hagen
Programmiersysteme
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
F Steimann Fernuniversität in Hagen
Programmiersysteme
Der Definitionsbereich hat trotzdem
Löcher!
Dokument
Text
Zeichnung
Zeilendrucker
Drucker
Plotter
F Steimann Fernuniversität in Hagen
Programmiersysteme
Der Definitionsbereich hat trotzdem
Löcher!
Dokument
Text
Zeichnung
Zeilendrucker
leer leer
leer leer
leer
Drucker
leer
Plotter
F Steimann Fernuniversität in Hagen
Programmiersysteme
Modellierung mit
Zustandstypen
F Steimann Fernuniversität in Hagen
Programmiersysteme
Statische Struktur
Printer
print
Document
PrintManager
print(Document)
print(Document, Printer)
Plotter
Diagram
LinePrinter
Text
hasMorePages() : bool
nextPage() : Page
F Steimann Fernuniversität in Hagen
Page
1
*
Programmiersysteme
prn:Printer
pm:PrintManager
Verhalten
print(doc, prn)
print(doc)
alt
[prn instanceof Plotter and doc instanceof Diagram]
alt

kombinatorische
Explosion




doc:Document
12 mögliche
Parameterkonstellationen
hier auf 6 eingekocht
äußerst fehleranfällig
und das bei einem
einfachen Beispiel!
[prn.empty()]
IllegalState
[not prn.empty()]
rawPrint(doc)
done
[prn instanceof LinePrinter and doc instanceof Text]
alt
[not doc.hasMorePages()]
done
[not prn.empty() and doc.hasMorePages()]
nextPage()
pg:Page
rawPrint(pg)
print(doc)
done
[else]
IllegalState
[else]
IllegalArgument
F Steimann Fernuniversität in Hagen
Programmiersysteme
Überladen der Deklaration
Printer
Document
print
print(Document)
Plotter
print
LinePrinter
Diagram
Text
Page
print
hasMorePages() : bool
nextPage() : Page
F Steimann Fernuniversität in Hagen
1
*
Programmiersysteme
Vereinfachung durch
abschnittsweise Definition
doc:Diagram
prn:Plotter
pm:PrintManager
print(doc, prn)
print(doc)
alt
[prn.empty()]
IllegalState
[not prn.empty()]
rawPrint(doc)
done
F Steimann Fernuniversität in Hagen
Programmiersysteme
prn:LinePrinter
pm:PrintManager
doc:Text
print(doc, prn)
print(doc)
alt
[not doc.hasMorePages()]
done
[not prn.empty() and
doc.hasMorePages()]
nextPage()
pg:Page
rawPrint(pg)
print(doc)
done
IllegalState
[else]
F Steimann Fernuniversität in Hagen
Programmiersysteme
Einführung von Zustandssubtypen
und entsprechenden Überladungen
print
Printer
Document
print
Plotter
Diagram
print
print
LinePrinter
Plotter|empty
Text
Plotter|Empty
Page
1
0..*
1..*
LinePrinter|empty
print
Text|HasMorePages
print
Text|hasMorePages
LinePrinter|Empty
print
F Steimann Fernuniversität in Hagen
1
Programmiersysteme
Weitere Vereinfachung durch
abschnittsweise Definition (I)
prn:Plotter|empty
pm:PrintManager
doc:Diagram
print(doc, prn)
print(doc)
rawPrint(doc)
done
prn:LinePrinter
pm:PrintManager
print(doc, prn)
print(doc)
done
F Steimann Fernuniversität in Hagen
doc:Text|hasMorePages
Programmiersysteme
Weitere Vereinfachung durch
abschnittsweise Definition (II)
prn:LinePrinter|empty
pm:PrintManager
doc:Text|hasMorePages
print(doc, prn)
print(doc)
nextPage()
pg:Page
rawPrint(pg)
empty
done
F Steimann Fernuniversität in Hagen
print(doc)
hasMorePages
Programmiersysteme
Integration von Statecharts
Plotter
print(Diagram)
empty
print(Diagram)
spezifiziert veränderlichen
Definitionsbereich von
Methoden
empty
print
Printer
Document
print
Plotter
Diagram
print
automatische Generierung
Printer
Document
print
Plotter
Diagram
print
Plotter|empty
FPlotter|Empty
Steimann Fernuniversität in Hagen
Programmiersysteme
Ableitung der Zustandssubtypen
Plotter

print(Diagram)
 empty
print(Diagram)
empty

LinePrinter
print(Text)
print(Text|hasMorePages)
print(Text|hasMorePages)
 empty
empty

Text
nextPage()
hasMoreP.
nextPage()
 hasMoreP.

Zustände spezifizieren
veränderlichen Definitionsbereich von Methoden
Zustände können
Wertebereiche von Attributen
einschränken
Zustandswechsel erfordern
ggf. neue Bindung
(Rekursion)
Zustandsautomaten werden
vererbt
F Steimann Fernuniversität in Hagen
Programmiersysteme
Automatische Generierung
Plotter
LinePrinter
print(Document)()
+
+
Text
print(Document)()
+
PrintManager
print(Document)()
not empty
+print(in Document, in Printer) not empty
Document
Printer
print(Document)()
empty
*
+print(Document)()
empty
*
nextPage(nextPage)
not hasMorePages
hasMorePages
Diagram
print
Printer
*
Page
Plotter
=
print(Document)()
nextPage(nextPage)
1
Plotter
*
Document
LinePrinter
Text
print
+hasMorePages() : Boolean
+nextPage() : Page
print
*
Diagram
*
*
print
LinePrinter
Plotter|empty
Text
Plotter|notEmpty
Page
1
0..*
1..*
print
LinePrinter|empty
Text|notHasMorePages
print
LinePrinter|notEmpty
print
Text|hasMorePages
1
F Steimann Fernuniversität in Hagen
Programmiersysteme
Modulare Erweiterbarkeit


nachträgliches Definieren von undefinierten
Fällen
nachträgliches Aufdröseln nicht haltbarer
Verallgemeinerungen
pm:PrintManager
print(doc, prn)
prn:LinePrinter|empty
doc:Text|hasMorePages
print(doc)
doSomethingThatMakesSense
done
F Steimann Fernuniversität in Hagen
Programmiersysteme
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

F Steimann Fernuniversität in Hagen
Programmiersysteme
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
F Steimann Fernuniversität in Hagen
Programmiersysteme
Vielen Dank!
Fragen?
F Steimann Fernuniversität in Hagen

Programmiersysteme - FernUniversität in Hagen