From 7e451ae32519a2a68d8a2246fbba34c17fa4b312 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Mon, 13 Jan 2014 11:57:06 +0100 Subject: [PATCH] =?UTF-8?q?SE3:=20Aufgabe=201.3=20vervollst=C3=A4ndigt=20u?= =?UTF-8?q?nd=202.3=20bearbeitet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...artens_Britta-2noack_Jan-Simon-0giesel.rkt | 107 ++++++++++++++++-- 1 file changed, 96 insertions(+), 11 deletions(-) diff --git a/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt b/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt index 292ff27..df0ec26 100644 --- a/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt +++ b/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt @@ -259,22 +259,38 @@ Abgebende: Jim 2martens, Britta 2noack, Jan-Simon 0giesel ; Modifikationen überladen zu werden, sondern werden nur ; ergänzt. +; Ergänzungsmethoden könnten dazu genutzt werden die Basis-cite +; Methode zu ergänzen, sodass nicht eine Methode für jede Publikationsform +; von Nöten ist. Dabei könnten die Informationen schrittweise +; aufgebaut werden. Allgemeine Information zu Beginn, dann buchspezifische, +; dann sammelbandspezifische. Für Zeitschriften würde eine alternative +; Reihenfolge von allgemeinen und zeitschriftenspezifischen +; Informationen genutzt werden. + +; Allerdings käme es dort zu Problemen, wo Informationen zwischendrin +; eingefügt werden müssen. Die Sammelbandseitenangabe zum Beispiel erfolgt +; am Schluss, die restlichen Informationen jedoch in der Mitte vor den +; Buchinformationen wie Reihe und Verlag. + ; 2) ; 2.1 -(defclass fahrzeug ()) +;(defclass fahrzeug ()) -(defclass landfahrzeug (fahrzeug)) -(defclass schienenfahrzeug (landfahrzeug)) -(defclass straßenfahrzeug (landfahrzeug)) -(defclass wasserfahrzeug (fahrzeug)) -(defclass luftfahrzeug (fahrzeug)) +; allgemeine Landfahrzeuge +;(defclass landfahrzeug (fahrzeug)) +; Schienenfahrzeuge +;(defclass schienenfahrzeug (fahrzeug)) +; Straßenfahrzeuge +;(defclass straßenfahrzeug (fahrzeug)) +;(defclass wasserfahrzeug (fahrzeug)) +;(defclass luftfahrzeug (fahrzeug)) -(defclass amphibienfahrzeug (wasserfahrzeug landfahrzeug)) -(defclass amphibienflugzeug (luftfahrzeug wasserfahrzeug straßenfahrzeug)) -(defclass zweiwegefahrzeug (schienenfahrzeug straßenfahrzeug)) -(defclass zeitzug (schienenfahrzeug luftfahrzeug)) +;(defclass amphibienfahrzeug (wasserfahrzeug landfahrzeug)) +;(defclass amphibienflugzeug (luftfahrzeug wasserfahrzeug straßenfahrzeug)) +;(defclass zweiwegefahrzeug (schienenfahrzeug straßenfahrzeug)) +;(defclass zeitzug (schienenfahrzeug luftfahrzeug)) ; 2.2 @@ -299,4 +315,73 @@ Abgebende: Jim 2martens, Britta 2noack, Jan-Simon 0giesel (defgeneric getPassagierzahl ((fz fahrzeug)) :combination generic-min-combination) -; 2.3 \ No newline at end of file +; 2.3 + +; Implementation zur Abfrage des Mediums + +(defclass fahrzeug () + :printer #t) +(defclass landfahrzeug (fahrzeug) + (check + :reader landfahrzeug-check + :initvalue #t + ) + :printer #t) +(defmethod getMedium ((fz landfahrzeug)) + 'Land) + +(defclass schienenfahrzeug (fahrzeug) + :printer #t) +(defmethod getMedium ((fz schienenfahrzeug)) + 'Schiene) + +(defclass straßenfahrzeug (fahrzeug) + :printer #t) +(defmethod getMedium ((fz straßenfahrzeug)) + 'Straße) + +(defclass wasserfahrzeug (fahrzeug)) +(defmethod getMedium ((fz wasserfahrzeug)) + 'Wasser) + +(defclass luftfahrzeug (fahrzeug)) +(defmethod getMedium ((fz luftfahrzeug)) + 'Luft) + +(defclass amphibienfahrzeug (wasserfahrzeug landfahrzeug)) +(defclass amphibienflugzeug (luftfahrzeug wasserfahrzeug straßenfahrzeug)) +(defclass zweiwegefahrzeug (schienenfahrzeug straßenfahrzeug)) +(defclass zeitzug (schienenfahrzeug luftfahrzeug)) + +; Die Funktion getMedium wird bei ampFahrzeug zunächst für +; Wasserfahrzeuge aufgerufen, da nach der Klassenpräzedenz- +; liste Wasserfahrzeug vor Landfahrzeug kommt. +; Anschließend wird die Funktion für Landfahrzeuge aufgerufen. + +; Da die generische Funktion getMedium mit der list combination +; verwendet wird, werden die Ausgaben der einzelnen Funktionsaufrufe +; in eine Liste kombiniert und zurückgegeben. Das wären in diesem +; Fall also 'Wasser und 'Land, die insgesamte Rückgabe sieht dann +; so aus: '(Wasser Land) +; Da Fahrzeug die generische Funktion nicht implementiert, +; bleibt es bei den beiden Funktionsaufrufen. + +; Bei ampFlugzeug funktioniert es analog und es wird +; '(Luft Wasser Straße) zurückgegeben. + +; Bei schienenbus verhält es sich analog und die Rückgabe +; ist '(Schiene Straße). + +; Für zug wird '(Schiene Luft) zurückgegeben. + +; Die Klassenpräzedenzliste ist hier unerlässlich, um die Reihenfolge +; der Funktionen zu bestimmen. Wenn die combination der jeweiligen +; generischen Funktion nur ein Ergebnis zurückgibt (bspw. begin combination), +; dann bestimmt die Liste auch das Ergebnis. +; Ohne eine combination wird auch nur die Funktion ausgeführt, +; deren zugehörige Klasse in der Präzendenzliste ganz vorne steht. + +(define ampFahrzeug (make amphibienfahrzeug)) +(define ampFlugzeug (make amphibienflugzeug)) +(define schienenbus (make zweiwegefahrzeug)) +(define zug (make zeitzug)) \ No newline at end of file