ein paar Fragen zu Klausuraufgaben vom gestern

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.

ein paar Fragen zu Klausuraufgaben vom gestern
Hallo Leute,

ich hätte gerne mal fragen, ob ihr bei der letzten Aufgabe Pfadüberdeckung überhaupt möglich findest. Ich finde es nicht, aber bin mir nicht sicher. :rolleyes:

Und bei Klassendiagramm,
Klasse Search
abstract int search ( …)

ich verstehe hier die code nicht, wieso bei konstruktur einen Rückgabe typ es gibt? :nuts:


Das ist kein Konstruktor. Die Klasse ist groß geschrieben und die Methode klein!


  1. Pfadüberdeckung
    Stimmt, war nicht möglich, da die zweite if-Abfrage nur erreicht werden kann, wenn die erste zu TRUE auswertet. Die zweite kann also im FALSE-Fall gar nicht erreicht werden.

  2. Konstruktor
    Ich hab auch in Erinnerung, dass es entweder class Searcher und dann die Methode search hieß oder so. Je nachdem was genau du meinst.
    Es gab aber keinen Konstruktor der ein int zurück gegeben hat. Ist mir zumindest nicht aufgefallen :wink:


Sicher?

Ich hab mir das der Übersichtlichkeit halber mal skizziert:

          O
        / |
      O   | 
     / \  |
    O   \ |
     \   ||
       \ ||
         O

Und da gibt es doch sehr wohl eine Pfadüberdeckung… oder nicht?

1 „Gefällt mir“

So ein Blödsinn. Für die Klausuraufgabe galt Verzweigungsüberdeckung => Pfadüberdeckung.


Jep, wollts auch grad ändern. Wie Nyx schon schön hingemalt hat kann man alle Pfade abklappern. Hab vorhin irgendwie komplett falsch gedacht.
Es galt aber nicht nur Verzweigungsüberdeckung => Pfadüberdeckung sondern es gilt Verzweigungsüberdeckung <=> Pfadüberdeckung. :slight_smile: (und diesmal sollte es auch stimmen :wink: ).


Danke schön. Alles klar


Wie hätte man denn die letzte OCL-Aufgabe am besten gelöst?

[quote=der Klausur]Wird die Methode zufallsListe mit einer Anzahlt n als Parameter aufgerufen so
enthält die Wiedergabeliste danach entweder keine Titel oder maximal n Titel mit
paarweise unterschiedlichem Interpreten[/quote]

Meine Idee war Folgende:

context Wiedergabeliste::zufallsListe(n:int):void post: titel->size() = 0 or (titel->size() <= n and titel->forAll(m1:Musikstueck| titel->forAll(m2 : Musikstueck| m1 <> m2 implies m1.interpret <> m2.interpret))

Allerdings war ich mir nicht sicher, ob so eine Doppelschleife in OCL funktioniert.
Daher noch ein anderer Ansatz:

context Wiedergabeliste::zufallsListe(n:int):void post: titel->size() = 0 or (titel->size() <= n and titel->forAll(m1:Musikstueck| titel->select(m2:Musikstueck | m1.interpret = m2.interpret)->size() = 1))

Zumindest die zweite Variante sollte ja auf jeden Fall so funktionieren, oder?


Sollte beides gehen, letzteres kann man noch vereinfachen, da gilt:

foo->select(p)->size=1

ist äquivalent zu

foo->one(p)

Das ist natürlich nett, dass es diese Funktion gibt.
Danke :slight_smile:


Ich hatte es in der Klausur so gelöst, geht das auch? Ich dachte ich hätte das irgendwo mal gelesen mit den 2 Werten bei forAll.

context Wiedergabeliste::zufallsListe(n:int):void post: titel->size() = 0 or (titel->size() <= n and titel->forAll(m1, m2 :Musikstueck|m1 <> m2 implies m1.interpret <> m2.interpret))
Edit: Habe gerade nochmal gegoogelt, es geht anscheinend mit 2 Argumenten bei forAll. Allerdings bin ich mir über die Schreibweise nicht ganz klar.
forAll(m1: Musikstueck, m2: Musikstueck |m1 <> m2 implies m1.interpret <> m2.interpret) oder
forAll(m1, m2 :Musikstueck|m1 <> m2 implies m1.interpret <> m2.interpret)


Also wenn ich hiernach (http://www.yancy.org/education/phd/links/ocl-grammar-01b.pdf) gehe, ist nur die zweite Fassung legal (wenn ich das richtig interpretiere).
Aber was offiziell für SoSy gilt, ka…

1 „Gefällt mir“

OCL
Wenn wir von einer Klasse auf eine andere zugreifen können
Bsp.: Abteilung -------------> Person
abteilungsleiter

Ist abteilungsleiter dann eine einelementige Liste?
Sprich, wenn wir wissen wollen, ob der abteilungsleiter einer Abteilung die betrachtete person (self) ist, müssen wir includes() verwenden?
In der Übung wurde das mit einem = geprüft.


Eine Collection ist es nur, wenn es mehrere sind. (z.B: 0…*)

1 „Gefällt mir“

aber es ist doch per default 1…1
das zählt dennoch nicht als Collection?


1…1 bedeutet ja wohl nicht „mehrere“ :wink:

1 „Gefällt mir“

es ist eindeutig zu früh für sosy^^
danke