OOPM1617 Übungswoche 03 (14.11-20.11.16)

Zielsetzung für die Übung

  • Besprechung der Hausaufgabe aus letzter Woche
  • Algebraische Spezifikation

Aufgabe:
Erstellen Sie mithilfe der folgenden Anforderungsspezifikation eine Algebraische Spezifikation

Im Online-Shop können beliebige Artikel verkauft und gekauft werden.
Dafür existieren Kunden und Verkäufer Rollen mit Namen. Die Artikel werden alle aufgelistet und haben einen Namen und Preis.
Der Verkäufer kann einzelne Artikel zum Verkauf freigeben.
Der Kunde kann einzelne Artikel kaufen. Das System stellt eine Suchfunktion für Artikel bereit.
Der Kunde kann nur etwas kaufen, wenn der Artikel eingestellt wurde und im Lager verfügbar ist. Jeder Verkäufer kann maximal n Artikel einstellen.

Eine mögliche Lösung:

sort Shop
sort Artikel
sort Kunde
sort Verkaeufer
sort Name
sort Preis

function erstelleArtikel : Name x Preis -> Artikel
function verkaufeArtikel : Shop x Verkaeufer x Artikel -> Shop
function sucheArtikel : Shop x Name -> Artikel?
function sucheAehnlicheArtikel : Shop x Artikel -> Artikel*
function kaufeArtikel : Shop x Kunde x Artikel -> Preis
function getPreis : Artikel -> Preis
function getName : Artikel -> Name
function setPreis : Artikel x Preis -> Artikel
function setName : Artikel x Name -> Artikel

predicate istPositiverPreis : Preis
predicate istVerfuegbar : Shop x Artikel
predicate istVerkaeufer : Verkaeufer
predicate grenzeErreicht : Verkaufer
predicate grenzeUeberschritten : Verkaeufer

property verkaufenProperty(s,v,n,p) : Shop x Verkaeufer x Name x Preis
let a1 = erstelleArtikel(n,p) in
  istVerkaeufer(v) 
  /\  ~grenzeErreicht(v)  ->
    let s1 = verkaufeArtikel(s,v,a1) in
      istVerfuegbar(s1,a1) 
      /\  sucheArtikel(s1,n) = a1
      /\  ~grenzeUeberschritten(v)

property kaufenProperty(s,v,n,p) : Shop x Verkaeufer x Name x Preis
let s1 = verkaufeArtikel(s,v, erstelleArtikel(n,p))  in
  let a = sucheArtikel(s1,n)
    istVerfuegbar(s1, a) ->
      let p1 = kaufeArtikel(s1,a) in
        getName(a) = n
        /\  getPreis(a) = p1

Zielsetzung für das Programmierpraktikum

  • Umgang mit Feldern (Arrays)
    • deklarieren
    • initialisieren
    • zugreifen
  • Iteration über Arrays
    • eindimesnsional
    • zweidimensional
  • Suchen in Arrays
  • Sortieren von Arrays