OOPM1718 Übungswoche 03 (20.11-26.11.17)

Zielsetzung für die Übung

  • Besprechung der Hausaufgaben
  • Informale Problembeschreibung (Anforderungsspezifikation)
  • Formale Problembeschreibung (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 Verkaeufer
sort Kunde
sort Name
sort Preis
sort Lagerbestand

function erstelleKunde : Name -> Kunde
function erstelleArtikel : Name x Preis x Lagerbestand -> 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 -> Shop
function getPreis : Artikel -> Preis
function getArtikelName : Artikel -> Name
function getLagerbestand: Artikel -> Lagerbestand
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

property verkaufenProperty(s,v,a) : Shop x Verkaeufer x Artikel
  istVerkaeufer(v) 
  /\  ~grenzeErreicht(v)  =>
    let s1 = verkaufeArtikel(s,v,a) in
      istVerfuegbar(s1,a) 

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 s2 = kaufeArtikel(s1,a) in
        /\  getLagerbestand(sucheArtikel(s2,n)) + 1 = getLagerbestand(a)

Zielsetzung für das Programmierpraktikum

  • Strukturierte Programmierung
    • Datentypen und Variablen (Wiederholung)
    • Kontrollstrukturen (Wiederholung)
    • Switch-Anweisung
    • Vermeidung von Goto-Anweisungen
  • Numerische Verfahren
    • Standardalgorithmen
    • Break/Continue
    • Delta/Epsilon
    • Math Bibliothek