ex05

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

ex05

Beitrag von Toobee »

Hi,

Aufgabe 1b) Ist es ein Plagiat, wenn ich mich der fertigen Lösung aus den Vorlesungsfolie bediene?

Aufgabe 2) soll das ausführbarer code sein oder reicht pseudo code?

Aufgabe 3) Design by contract ist nicht auf Vererbung begrenzt, die Aufgabe suggeriert das etwas.
Und es fällt wesentlich leichter DbC anhand von methoden zu erklären, anstatt an Klassenhierachien mit Vererbung. Auch Beispiele für Verletzung sind auf Methodenlevel wesentlich sinnvoller klar zu machen. Ist das gewollt?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex05

Beitrag von MisterD123 »

zu 1b) Plagiate sind grundsätzlich ungekennzeichnete Kopien. Theoretisch kannst du immer einfach kopieren und drunterschreiben "Quelle: xx", dann gibts aber unter umständen Punktabzug aufgrund fehlender eigenleistung. Ein Plagiat ist das dann aber nicht mehr ;)

Wenn du der Meinung bist, dass die Kopie aus den Vorlesungsfolien wirklich *genau* erklärt kannst du das sicher kopieren, wobei das aber wie oben gesagt a) zu kennzeichnen ist und b) ich dir trotzdem raten würde, wenigstens einen eigenen Kommentar dazuzusetzen, damit für uns ersichtlich wird, dass ihr euch damit auseinandergesetzt habt.

zu 2) Ausführbar im sinne von "Test mitliefern der mit der subklasse fehlschlägt" muss das nicht sein. Es reicht einfach eine Klasse mit ner Methode drin hinzuschreiben, und dann ne subklasse die die Methode überschreibt oder sowas. Das muss auch garnicht als Java-Source-Datei sein, das könnt ihr einfach als Listing in eure schriftliche Ausarbeitung reinschreiben. Es ist aber natürlich trotzdem schön, wenn das zumindest syntaktisch korrekter Java-Code ist ;P

zu 3) Wie willst du denn DbC an Methoden erklären ohne die Klassen zu vererben? Du kannst ne Methode doch nicht ohne Subklasse überschreiben, um die Vor- und Nachbedingungen zu ver- oder entschärfen. Mit Bedingungen der Klassen sind in der Aufgabenstellung aber natürlich die Bedinungen an eine oder mehreren Methoden der Klasse gemeint.

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex05

Beitrag von Toobee »

Ok, danke soweit

zu 3)
Bsp:
Klasse "Bruch"

addBruch(Bruch b);
Pre: Wenn b negativ ist, dann steht das negative Vorzeichen im Nenner
Pos: Der Bruch ist garantiert gekürzt

Ein einfaches und sinnvolles Beispiel für Design by contract :-), jetzt weiß ich was ich rein tun muss und auf was ich mich verlassen kann, wenn wieder was rauskommt.
Deswegen find ich die Aufgabe etwas irritierend und ich wundere mich grade ob man Design by Contract wrklich auf Klassenebene durch Vererbung beschreiben kann. Letztendlich redet man doch eigentlich über die Methoden die in der Unterklasse lockerer oder strenger werden. Vererbung brauch ich für DbC aber nicht.
Das geht auch mit Funktionen in C oder welche Sprache man grade benutzt. Ob das da noch so sinnvoll ist sei mal fraglich, weil man alles von überall aufrufen kann....

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex05

Beitrag von MisterD123 »

Methoden in C kannst du nur überladen, nicht überschreiben im Sinne von Polymorphie. Das hat mit DbC garnichts zu tun.

Letzendlich - solang du einfach nur eine Methode hast macht DbC keinen Sinn. Die Pre- und Post-Conditions anzugeben für Methoden, die es einfach nur genau einmal gibt und die sich nie ändern, hilft niemandem was. Da kannst du die Pre- und Post-Conditions theoretisch ja einfach aus dem Code ablesen, eine andere Implementierung als genau diese eine gibt es dann ja nicht.

Pre- und Post-Conditions sind speziell dafür da, dass klar ist, welche Bedingungen beim Überschreiben von Methoden durch Vererbung einer Klasse von den Methoden der überschreibenden Klasse eingehalten werden müssen. Die Contracts sind speziell dafür da, von der Implementierung unabhängige Bedingungen festzulegen, die dann eben eingehalten werden müssen, wenn eine andere Implementierung gemacht wird, die die gegebene ersetzen kann - das ist genau dann der Fall wenn du die Klasse der ursprünglichen Methode vererbst.

Design by Contract heißt nicht, dass du, wenn du eine Methode brauchst, erstmal die Conditions aufschreibst, und danach ne Methode implementierst die diese Conditions erfüllt. Die Conditions sind nicht wie Tests bei Test-Driven Development. Die Conditions sind zusätzliche Artefakte, welche dir nicht deine Implementierung vorschreiben, sondern generelle Bedingungen an deine aktuelle und alle zukünfigigen, weiteren Implementierungen einer Methode stellen. Es geht hierbei nicht drum, dir Conditions auszudenken anhand denen du dann deine Methode implementieren kannst, sondern es geht darum, bleibende Dokumentation zusätzlich zu deiner Implementierung anzugeben. Deine Implementierung hat sich zwar daran zu halten, aber DbC ist keine Programmiermethodik wie TDD oder Pair Programming oder sowas, sondern eine Designmethodik zur Beschreibung von Softwaredesigns, nicht Programmcode!

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex05

Beitrag von Toobee »

>solang du einfach nur eine Methode hast macht DbC keinen Sinn
Doch, DbC erspart dir dann nämlich diverse Überprüfungen auf Randbedingungen, wenn du darauf vertraust, dass Clienten sich an die Regel halten. Das Konzept von DbC hat ohne Frage einen erweiterten Sinn für Vererbung, insbesondere mit dem Hinblick auf LSP und den OCP Verletzungen die dort als Rattenschwanz dranhängen. Aber trotzdem, die Darstellung das DbC an Vererbung gebunden ist, ist imo nicht korrekt.

Auch die deutsche Wiki-Seite assosiert Vererbung nicht zwingend mit DbC, http://de.wikipedia.org/wiki/Design_by_contract

Darum gehts mir eigentlich, Dbc verlangt keine Vererbung. Es ist eine sinnvolle (zwingend notwendige?) Ergänzung für die Handhabung von Vererbungshierachien. Nur dieser feine Unterschied scheint mir in der Aufgabenstellung verlorgen gegangen zu sein, der auch sonst nirgendwo korrigiert wird.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex05

Beitrag von marcel_b »

Hi,

weil's gerade so spannend ist:

Wikipedia sagt auch:

"Durch die Definition von Klasseninvarianten, Vor- und Nachbedingung kann ein Modul durch ein beliebiges anderes ausgetauscht werden, wenn dieses denselben „Vertrag“ erfüllt."

Was hast du davon, wenn du Pre- und Postconditions für ein Modul angibst, das nicht austauschbar ist? Man könnte dann auch alle VOr&Nachbedingungen innerhalb der Methoden mit assertXXX(o)-Statements abdecken. Wie viel habe ich damit gewonnen (abgesehen von der Dokumentation der Verträge in Form von Annotationen)?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex05

Beitrag von marcel_b »

Nur um sicher zu sein: Wir reden hier nicht nur von Vererbung im Sinne von "extends" richtig?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex05

Beitrag von MisterD123 »

marcel_b hat geschrieben:Nur um sicher zu sein: Wir reden hier nicht nur von Vererbung im Sinne von "extends" richtig?
ich schon :)

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex05

Beitrag von Toobee »

>Was hast du davon, wenn du Pre- und Postconditions für ein Modul angibst, das nicht austauschbar ist?
Ist doch austauschbar, man muss ggf. andere Methodennamen verwenden, wenn die alte Schnittstelle weiter verwendet wird, aber um Austauschbarkeit zu schaffen ist DbC nicht an Vererbung gebunden. Es macht es natürlich eleganter, weil man dann die gleichen Methodennamen nutzen kann und auch OCP und LSP sind dann glücklich.

>Wie viel habe ich damit gewonnen
Man kommt drum herum sich um alle Eventualitäten zu kümmern. Man definiert dann quasi, dass "garbage in=garbage out" gilt.

Auch wenn man bei Vererbung an Austauschbarkeit interessiert ist und es für DbC dann zusätzliche Dinge zu beachten gibt - ist das Konzept in keinsterweiße an OOP oder Vererbung gebunden. Ich kann ein ganzes System mit DbC aufbauen und mir dann jede Art von Error-handling sparen, weil ich einfach definiere was ich erwarte und dann Aussagen treffe, was man erwarten kann, wenn man sich an meine Regeln hält. Ist natürlich sehr stark an Programmierdisziplin gebunden - aber das ist es auch mit Vererbung.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex05

Beitrag von marcel_b »

Das wird eine spannende Diskussion. Ich weiß nicht ob dich ganz richtig verstehe - die Übungsbesprechung wird's zeigen :)

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex05

Beitrag von MisterD123 »

Wie gesagt, DbC ist ein Design-Tool, kein Implementierungs-Tool! DbC ist nicht dafür da, dir Teile der Implementierung abzunehmen, sondern es ist dafür da, um Designdokumentation "semi-formal" am code festzuhalten und einhaltung überprüfen zu lassen (wenn gewünscht - das sollte idR ausschließlich zum debugging verwendet werden und in der normalen Software spätestens abgeschaltet werden. Sowas wie normale java assert(..) statements). Wenn du DbC zur als Implementierungshilfe verwendest hast du sozusagen das Thema verfehlt.

Edoat
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 242
Registriert: 26. Feb 2007 15:10

Re: ex05

Beitrag von Edoat »

Toobee hat geschrieben: Aufgabe 1b) Ist es ein Plagiat, wenn ich mich der fertigen Lösung aus den Vorlesungsfolie bediene? [...]
Der Fachbereich Informatik hat eine Seite, wo das Thema Plagiarismus behandelt wird: Grundregeln der wissenschaftlichen Ethik am Fachbereich Informatik
MisterD123 hat geschrieben:zu 1b) Plagiate sind grundsätzlich ungekennzeichnete Kopien. Theoretisch kannst du immer einfach kopieren und drunterschreiben "Quelle: xx", dann gibts aber unter umständen Punktabzug aufgrund fehlender eigenleistung. Ein Plagiat ist das dann aber nicht mehr ;)
Obwohl ich mit SE D&C nichts zu tun habe, will ich an dieser Stelle darauf hinweisen, dass das im Allgemeinen falsch ist:
Grundregeln der wissenschaftlichen Ethik am Fachbereich Informatik hat geschrieben: Die Übernahme so vieler Worte und Ideen aus einem Fremdwerk, dass diese den Großteil des so erstellten Werkes ausmachen. Dies ist Plagiarismus, auch bei Angabe der Quellen.
Edit: ersten Satz umformuliert, damit klarer wird, was ich meine

PaddyG
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 9. Okt 2009 10:29

Re: ex05

Beitrag von PaddyG »

Können wir für diese Diskussion in der nächsten Übungsbesprechung ein wenig Zeit lassen oder gesondert einen Rahmen für das Thema schaffen?

Ich finde die Diskussion nämlich äußerst interessant und "sympathisiere" da ein wenig mit Tobee. Ich hatte zwar diesbezüglich keine Probleme bei der Aufgabenstellung (denn dort gehts ja eindeutig um DbC im direkten Zusammenhang mit LSP), aber ich finde, ihr geht da ein wenig zu engstirnig heran, wird Zeit mal euren Horizont zu erweitern :mrgreen:

Aber scherz beiseite:

Wichtig bei der Frage ist wohl vor allem, wie man den Begriff DbC genau absteckt. In der englischen Wikipedia z.B. sind auch durchaus Verweise für DbC third-party support für Nicht-OOP Sprachen.

gruß
Patrick

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex05

Beitrag von MisterD123 »

Edoat hat geschrieben:
MisterD123 hat geschrieben:zu 1b) Plagiate sind grundsätzlich ungekennzeichnete Kopien. Theoretisch kannst du immer einfach kopieren und drunterschreiben "Quelle: xx", dann gibts aber unter umständen Punktabzug aufgrund fehlender eigenleistung. Ein Plagiat ist das dann aber nicht mehr ;)
Obwohl ich mit SE D&C nichts zu tun habe, will ich an dieser Stelle darauf hinweisen, dass das im Allgemeinen falsch ist:
Grundregeln der wissenschaftlichen Ethik am Fachbereich Informatik hat geschrieben: Die Übernahme so vieler Worte und Ideen aus einem Fremdwerk, dass diese den Großteil des so erstellten Werkes ausmachen. Dies ist Plagiarismus, auch bei Angabe der Quellen.
Gut dann ist das halt auch noch ein Plagiat ;P Man lernt nie aus ^^

MeisterSoda
Erstie
Erstie
Beiträge: 19
Registriert: 24. Okt 2007 14:58
Kontaktdaten:

Re: ex05

Beitrag von MeisterSoda »

Hi,

Entweder es ist zu lange her oder ich stehe mächtig auf dem Schlauch, aber wo genau finde ich denn den Abschnitt "a simple Example of a Violation of LSP"?

Vielen Dank!
[DKE 2010 Tutor]

Antworten

Zurück zu „Archiv“