| |
32 Angenommene Spezifikation UML Ocl 2,0 7,8 Behebende Eigenschaften Für jede mögliche Eigenschaft (Attribut, Betrieb oder Navigation), umfaßt die volle Darstellung den Gegenstand, von dem die Eigenschaft genommen wird. Wie in Abschnitt 7,3 gesehen. 3, Selbst kann implizit verlassen werden und also machen Sie die iteratorvariablen in den Ansammlungsbetrieben ein. An irgendeinem Platz in einem Ausdruck wenn ein iterator ausgelassen wird, wird ein implizites iterator-variables eingeführt. Z.B. in: Kontext Person inv : Arbeitgeber->forAll(angestellt->exists(lastName = -name)) drei implizite Variablen werden eingeführt. Das erste ist Selbst das immer der Fall ist, von dem die Begrenzung abfährt. Zweitens wird ein implizites iterator durch das forAll eingeführt und an dritter Stelle durch besteht . Die impliziten iteratorvariablen sind namenlos. Der Eigenschafts- Arbeitgeber Angestellter lastName und Name alle haben den Gegenstand, auf dem sie aus angewendetes links sind. Das Beheben diese geht, wie folgt: ? am Ort von Arbeitgeber es gibt eine implizite Variable: Selbst: Person. Folglich Arbeitgeber sein muß eine Eigenschaft von Selbst . ? am Ort von Angestellter es gibt zwei implizite Variablen: Selbst: Person und iter1: Firma . Folglich Arbeitgeber sein muß eine Eigenschaft jedem Selbst oder iter1 . Wenn Angestellter ist eine Eigenschaft von beiden Selbst und iter1 dann wird es definiert, um zu gehören zur Variable im innersten Bereich, der iter1 ist . ? am Ort von lastName und Name es gibt drei implizite Variablen: Selbst: Person , iter1: Firma und iter2: Person. Folglich lastName und Name Muß beide ist eine Eigenschaft jedem Selbst oder iter1 oder iter2 . Im vorbildlichen Eigenschafts- Namen UML ist eine Eigenschaft von iter1. Jedoch lastName ist eine Eigenschaft von beiden Selbst und iter2 . Dieses ist vieldeutig und folglich dauern Sie Name bezieht sich die auf Variable im innersten Bereich, der ist iter2 . Beide der folgenden unveränderlichen Begrenzung sind korrekt, aber haben eine andere Bedeutung: Kontext Person inv : Arbeitgeber->forAll(angestellter->exists(p|p.lastName = Name)) inv : Arbeitgeber->forAll(angestellter->exists(self.lastName = Name)) |  |
|
| |
|
|