Fußnoten Kap. 1

Fußnoten Kap. 2

Fußnoten Kap. 3

Fußnoten Kap. 4

Fußnoten Kap. 5

Fußnoten Kap. 6

Fußnoten Kap. A

Fußnoten Kap. B

Fußnoten Kap. C

Fußnoten zu Kapitel 3

1 Auktionen können im beschriebenen Auktionssystem angelegt, aber noch nicht eröffnet sein.

2 Wie in [CK01] beschrieben, erhöht die gleichzeitige (rekursive) Verwendung eines gerade definierten Elements im Rumpf der Definition die Komplexität der Typisierung (vgl. Gofer [Jon96] und SML [MTHM97]). Außerdem hat eine rekursive Gleichung in einer Spezifikationssprache wie OCL im Allgemeinen mehrere Lösungen (vergleiche Abschnitt 3.5). Da rekursive Definitionen auch durch das zugrunde liegende Objektsystem möglich sind, wird auf die Möglichkeit einer rekursiven Definition verzichtet. Um im Auktionssystem sicherzustellen, dass auch das spätestmögliche Auktionsende in der richtigen Relation zur Startzeit steht, kann folgendes formuliert werden:

3 Wird die OCL-Bedingung ausgewertet, so ist die bedarfsorientierte („lazy“) Auswertung der Ausdrücke in let-Konstrukten zu verwenden. Zum Beispiel gilt:

inv:

  5 == (let x = 1/0 in 5)

4 Die Prioritäten sind aus Java übernommen, die neuen Operatoren implies und <=> erhalten daher krumme Zahlen als Prioritäten. Diese Liste beinhaltet auch die Teilmenge der Operatoren aus Tabelle B.7, die in OCL verwendet werden dürfen, weil sie keine Seiteneffekte haben. Ausgeschlossen sind damit die Inkrementoperatoren ++ und -- sowie alle Zuweisungen. Neu aufgenommen wurden die booleschen Operatoren implies und <=>, die zur Darstellung von Implikationen und Äquivalenzen dienen, und die Postfixoperatoren @pre und ⋆⋆.

5 Das Terminierungsproblem ist jedoch unentscheidbar.

6 Der OCL-Standard [OMG10b] beschreibt nur im unverbindlichen informativen Anhang, dass die Kleene-Logik gelten soll.

7 In OCL haben Container keine Objektidentität. Der OCL-Vergleich == entspricht deshalb auf Containern der Java-Operation equals().

8 Die Redefinition von equals darf vom Modellierer nur mit großer Vorsicht vorgenommen werden, da sie wesentliche Auswirkungen auf die OCL-Logik hat. In der Praxis hat sich aber gezeigt, dass der verantwortungsvolle Umgang zu Spezifikations- und Implementierungsvorteilen führt.

9 characterization ist eine Schemavariable (ein Platzhalter) für einen OCL-Teilausdruck. Schemavariablen sind normalerweise in Deutsch formuliert.

10 Die Methode even stammt aus der OCL-Bibliothek, die in Abschnitt 3.4.4 eingeführt wird.

11 Diese Regelung des Flachdrückens ist einfacher nachzuvollziehen, als die im OCL-Standard benutzte, in der unter anderem aufgrund der Benutzung von Multimengen eine weniger intuitive Typisierung entsteht.

12 Das Problem der Menge, die sich selbst enthält ist in der Mathematik wohluntersucht und führt zu einigen überraschenden Anomalien des früher dort verwendeten Logikgebäudes. Einen Lösungsansatz dafür bietet unter anderem die hierarchische Typtheorie von B. Russel, die bei der Typisierung in Programmiersprachen letztlich übernommen wurde.

13 Die Frage, ob sich x selbst enthält, würde zu Widersprüchen führen. Sie kann jedoch nicht gestellt werden, da weder die Konversion noch die instanceof-Anfrage typkorrekt sind.

14 Der OCL-Standard besitzt keine Mechanismen zur Darstellung verschachtelter Container, also zum Beispiel Mengen von Mengen. Durch „Flachdrücken“ (engl.: flattening) werden stattdessen Navigationsergebnisse wieder zu einer einfachen Menge beziehungsweise maximal einer Multimenge.

15 auction[acIdent] ist identisch zu dem in Java ebenfalls angebotenen auction.get(acIdent), das vom Interface Map zur Verfügung gestellt wird.

16 Da in Abbildung 3.18 der Attributname auctionIdent als Qualifikator angegeben ist, ist wegen Abschnitt 2.3.7 diese Bedingung redundant.

17 Der OCL-Standard verwendet die Form menge.forall(rumpf) und ist damit nicht geeignet, Quantoren zusammenzufassen. Außerdem bleibt die quantifizierte Variable optional ungenannt und es wird als Default die Variable

18Wegen seiner Implementierungsnähe fällt dieser Operator aus dem üblichen funktionalen beziehungsweise spezifikationsorientierten Rahmen. Deshalb wurde auch explizit eine der Zuweisung ähnliche Syntax gewählt.

19 Eine Erweiterung der OCL könnte es erlauben, Exceptions auch in der Logiksprache zugänglich zu machen und so verschiedene „undefinierte Werte“ zu behandeln. So werden zum Beispiel bei den Statecharts in Kapitel 5 Exception-Stimuli eingesetzt.

20 OCL/P bietet Methoden in Bibliotheken an, die im OCL-Standard innerhalb der Sprache definiert wurden. OCL/P ist deshalb einerseits schlanker und zeigt andererseits, wie weitere solche Funktionen vom Modellierer selbst definiert werden können.

21 Unreine Queries sind aus pragmatischen Gründen erlaubt worden. Mit geeigneten Daten- und Kontrollfluss-Analysetechniken lassen sich mögliche auftretende Probleme erkennen.

22 Der OCL-Standard [OMG10b] legt diese Methoden nicht im Klassendiagramm ab, sondern bietet eine Definitionsklausel an, die einer OCL-Bedingung ähnelt.

23 Objektdiagramme werden in Kapitel 4 im Detail erklärt.

24 CC1pre’ unterscheidet sich von CC1pre, indem alle vorkommenden Attribute, Variablen, etc. mit @pre versehen werden. Damit kann die Interpretation von CC1pre’ nach Aufruf der Methode stattfinden und dennoch der ursprüngliche Wert von CC1pre bestimmt werden.

25 Der negativ formulierte Stereotyp not-inherited soll explizit darauf hinweisen, dass dies eher die Ausnahme sein sollte.

26 Das fünfte Peano-Axiom dient als Grundlage für die Termerzeugung der natürlichen Zahlen.

27 [MC99, Ric02] nutzen den prozeduralen Operator iterate und die Datenstruktur der Sequenzen, um den Warshall-Algorithmus zur Berechnung einer transitiven Hülle zu beschreiben.

28 Eine Assoziation heißt reflexiv, wenn beide Assoziationsenden zur gleichen Klasse gehören beziehungsweise Unterklassen voneinander sind. Eine Reflexivität der dadurch dargestellten Relation auf Ebene der Links ist nicht gefordert.


Bernhard Rumpe. Modellierung mit UML. Springer 2011