"Probeklausur" Blatt 13 OCL

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

“Probeklausur” Blatt 13 OCL
Servus,

wollte fragen, ob jemand evtl. eine Lösung für die OCL Aufgabe auf dem Übungsblatt 13 hat. Damit stehe ich bisschen auf Kriegsfuß…
Wäre echt cool.

Danke


Hier waren iridium und MiriTheRing so freundlich ihre Mitschriften zu veröffentlichen. Wenn du die Aufgaben so oder so ähnlich bearbeiten kannst sollten ~80% der Klausurvorbereitung getan sein.


Hier ist meine Lösung. Ein paar Sachen habe ich anders als MiriTheRing gemacht, das Ergebnis sollte jedoch das gleiche sein. Bei Teilaufgabe f) bin ich allerdings der Meinung, dass der Kontext Person sein sollte.

context Abteilung
	inv: mitarbeiter->includes(abteilungsleiter)

context Abteilung
	inv: nachfolger->notEmpty()

context Firma
	inv: nachfolger->isEmpty()

context Firma
	inv: Abteilung.allInstances->forAll(abt : Abteilung | not abt.mitarbeiter->includes(geschaeftsfuehrer))

context Antrag
	inv: Person.allInstances->exists(p : Person | p.antraege->includes(self) )
	
context Person
	inv: Abteilung.allInstances()->forAll(abt1 : Abteilung, abt2 : Abteilung | abt1 <> abt2 implies abt1.abteilungsleiter <> abt2.abteilungsleiter)

context Person::entscheide(a: Antrag)
	pre: Abteilung.allInstances()->exists(abt : Abteilung | abt.abteilungsleiter = self and abt.genehmigungsLimit >= a.kosten)

Den Thread hab ich übersehen, habe nur nach OCL gesucht, weil ich mit dem Rest kein Stress hab.

Danke Leute :smiley:


Sicher, dass man das so machen darf? Ich dachte jetzt, wenn ich den context Firma hab, dass ich dann nicht auf Abteilung allInstances aufrufen kann, das war zumindest in noch keinem einzigen Beispiel so, ich bin eher davon ausgegangen, dass man sich auf seinen Kontext beziehen soll und hätte es so wie in der anderen Lösung gemacht, also

context Firma
inv: abteilungen ->forall(a: …)


Ich sehe ein, dass die Lösung mit abteilungen statt Abteilung.allInstances() möglicherweise eleganter ist, wenn man die Referenzen bereits in der Hand hat.

Mit deiner Variante darf der Geschäftsführer Mitarbeiter in einer Abteilung einer anderen Firma sein, in meiner Lösung nicht. Was davon tatsächlich verlangt ist, lässt sich (mal wieder) nicht eindeutig aus der Aufgabenstellung herauslesen.

Soweit ich weiß darf man [KontextB].allInstances() auch innerhalb von KontextA aufrufen. Insofern halte ich beide Lösungen für korrekt.

Btw. Klammern nicht vergessen wie ich :wink: