| |
30 Angenommene Spezifikation UML Ocl 2,0 Das observer^update(12, 14) Resultate in zutreffendem, wenn dem Beobachter eine Updateanzeige mit Argumenten 12 und 14 geschickt wurde während die Durchführung des Betriebes. Update() jeder ist ein Betrieb das wird in der Kategorie des Beobachters definiert oder es ist ein Signal spezifiziert im UML-Modell. Das argument(s) des Anzeigenausdruckes (12 und 14 in diesem Beispiel) muß an sich anpassen Parameter der operation-/signaldefinition. Wenn die Aktualparameter des operation/signal bekannt oder nicht nicht in keiner Weise eingeschränkt werden, kann sie nicht spezifiziert gelassen werden. Dieses wird gezeigt, indem man ein Fragezeichen verwendet. Nach dem Fragezeichen ist eine wahlweise freigestellte Art, die erforderlich sein kann, zu finden beheben Sie Betrieb, wenn der gleiche Betrieb mit unterschiedlichen Parameterarten besteht. Kontext Subject::hasChanged() Pfosten : observer^update(? Ganzzahl? Ganzzahl) Dieses Beispiel gibt an, daß dem Beobachter das Anzeigenupdate geschickt worden ist aber das die Werte der Parameter sind nicht gewußt. Ocl definiert auch ein spezielles OclMessage Art. Ein kann das tatsächliche OclMessages durch den Anzeigenoperator erhalten: ^^. Kontext Subject::hasChanged() Pfosten : observer^^update(12, 14) Dieses ergibt die Reihenfolge der gesendeten Anzeigen. Jedes Element der Ansammlung ist ein Fall von OclMessage . In Rest der Begrenzung man kann auf die Parameter des Betriebes sich beziehen, ihren Formalparameternamen von verwendend Betriebsdefinition. Wenn das Betriebsupdate mit den Formalparametern definiert worden ist, die i genannt werden und J dann können wir schreiben: Kontext Subject::hasChanged() Pfosten : gelassen Anzeigen: Sequence(OclMessage) = observer^^update(? Ganzzahl? Ganzzahl) in Anzeigen->notEmpty() und Anzeigen->exists(m|m.i > 0 und m.j > = m.i) Der Wert des Parameters I bekannt nicht, aber er muß als grösser sein, null und der Wert von Parameter J größer sein muß oder Gleichgestelltes zu i.. Weil der ^^operator einen Fall von OclMessage ergibt kann der Anzeigenausdruck auch verwendet werden, um zu spezifizieren Ansammlungen Anzeigen geschickt zu den unterschiedlichen Zielen. Für ein Beobachtermuster können wir schreiben: Kontext Subject::hasChanged() Pfosten : gelassen Anzeigen: Sequence(OclMessage) = Beobachter->collect(o|o^^update(? Ganzzahl? Ganzzahl)) innen Anzeigen->forAll(m|m.i < = m.j) Anzeigen jetzt ist ein Satz von OclMessage Fälle, wo jedes OclMessage Fall hat ein von Beobachter als a Ziel . 7,7,2 Zugänglich machende Resultatswerte Ein Signal, das Anzeige geschickt wird, ist durch die asynchrone Definition, so dort ist nie ein Rückholwert. Wenn es ein logisches Rückhol gibt, bewerten Sie es muß als unterschiedliche Signalanzeige modelliert werden. Jedoch denn ein Betriebsanruf gibt es einen möglichen Rückholwert. Dieses ist nur vorhanden, wenn der Betrieb bereits zurückgegangen hat (nicht neccesary, wenn der Betriebsanruf aynchronous ist) und es spezifiziert eine Rückkehr tippen Sie seine Definition ein. Das Standardbetriebs- result() von OclMessage enthält den Rückholwert des benannten Betriebes. Wenn getMoney(...) ist ein Betrieb auf Firma, die ein Boolesches zurückbringt, wie in Company::getMoney(amount: Ganzzahl): Boolesch , können wir schreiben: Kontext Person::giveSalary(amount: Ganzzahl) Pfosten : gelassen Anzeige: OclMessage = company^getMoney(amount) in message.hasReturned() -- getMoney wurde gesendet und zurückgebracht und message.result() = zutreffend -- das zurückgebrachte zutreffende des getMoney Anruf |  |
|
| |
|
|