War mein Lehrer in der Klausur zu pingelig?

... komplette Frage anzeigen

5 Antworten

Ich find die Definitionen beide falsch. ;)

Codeduplizierung: Angenommen, ich habe in einem Projekt eine Klasse "Hund" und eine Klasse "Katze". Beide Klassen haben eine Methode "sagWas()", wobei der Hund "WauWau" und die Katze "Miau" zurückgibt. Laut deiner Definition wäre das eine Codeduplizierung, weil ich den Namen "sagWas()" zweimal vergeben habe. Ist es aber nicht, das, was ich beschrieben hatte, ist der korrekte Programmentwurf für mein kleines Beispiel. Damit wäre deine Definition widerlegt.

Eine Codeduplizierung wäre es, wenn "Hund" und "Katze" beide jeweils eine Methode "friss()" hätten, die genau das Gleiche macht - den gegebenen Napf leeren (also einfach Copy-Paste-Code). Das könnte man dann besser machen, indem man eine Klasse "Tier" definiert, die "friss()" kann und von der "Hund" und "Katze" erben. Außerdem ist nicht eindeutig, was du mit "Wiederholungen" meinst, das könnte auch heißen, dass du Schleifen (also for, while, do-while, ...) vermeiden willst. Und das ist Quatsch.

Kopplung: Gekoppelt werden nicht Methoden, sondern Klassen. Die Kopplung beschreibt das Zusammenspiel der Klassen untereinander. Man versucht eine lose Kopplung zu erreichen, also dass die Klassen untereinander nur das wissen, was sie unbedingt wissen müssen, um zu kommunizieren. Um ganze Klassen austauschen zu können, während der Rest des Programms davon nicht beeinflusst wird .

Wenn du z.B. eine Klasse hast, die Dateien auf deinen Computer schreiben und löschen kannst, dann müssen andere Klassen, die diese nutzen, nur wissen, dass es eine Methode "loeschDatei()" und eine Methode "erstelleDatei()" gibt, mehr nicht. Das kann man durch ein Interface erzwingen. Wie die Methoden intern funktionieren, ist für außen stehende Klassen uninteressant und auf diese Weise könntest du auch ganz einfach neue Klassen schreiben und nahtlos in dein Programm einfügen, die Dateien nicht mehr aufs Dateisystem, sondern in die Cloud, eine Datenbank oder sonstwo hin schreiben. Die neuen Klassen müssen nur das Interface implementieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Kaleo
11.11.2016, 18:27

Ja klar, ich hab Codeduplizierung verstanden und hab es meinem Lehrer nochmal erklärt und er weiß das ich es verstanden habe. Nur das einstigste, was nicht korrekt ist die Art, wie ich es aufgeschrieben habe. Das ärgert mich auch extremst, weil ich dachte so versteht man es. Naja denke ich hätte mehr schreiben sollen... Aber trotzdem danke für deine Definition ;) 

1


Ich habe jetzt einfach mal nur das Wort Codeduplizierung genommen und gegoogelt. Siehe Link unten. Mit welchem Anspruch ihr die Arbeit schreiben solltet, weiß ich nicht. Aber wenn ich den Link nur zu dem einen Wort durchlese, ist mir klar, dass deine Aussage alles andere als umfassend ist. Schätze, es wurde einiges mehr erwartet.

http://www.inf-schule.de/programmierung/imperativeprogrammierung/fallstudien/modularisierung/fallstudie\_verschluesselungverschieben/codeduplizierung

Antwort bewerten Vielen Dank für Deine Bewertung

Wieviele Punkte sollte es denn pro definiertem Wort geben?

Ich finde die Erklärungen jetzt auch nicht so prall, groß definiert hast du da nichts. Vor allem "Kopplung" mit dem Wort "koppeln" zu beschreiben.... ich hätte dir vermutlich auch keinen Punkt gegeben. Der Text klingt eher wirr und nicht nach einer "Definition". 

Zuweisungen auf eine entsprechende Methode. Weniger Aufwandt beim verändern des Codes. zB nur an einer Stelle etwas ändern...

ist für mich jetzt keine Definition von Codeduplikation.

Codeduplikation hätte ich vermutlich auch gänzlich anders beschrieben. Nämlich als kopierte Quelltextstellen, die dieselbe Funktionalität haben und an mehreren Stellen im Projekt vorkommen.

Aufwand übrigens ohne "t" am Ende.

Antwort bewerten Vielen Dank für Deine Bewertung

Nein dein Lehrer ist nicht zu pingelig. Deine Antworten/Definitionen machen deutlich, dass du nicht verstanden hast worum es geht. Hätte dir auch keine Punkte für diese Antworten gegeben.

Antwort bewerten Vielen Dank für Deine Bewertung

Bei Codeduplizierung geht es nicht um

- mehrfach verwendete Begriffe bzw Befehle .

-* Mehr als einmal einen Befehl bzw Begriff zu wiederholen ist ja wohl normal .

-Zuweisung auf eine entsprechende Methode ist genau das gegenteil von Codeduplizierung .

-Weniger Aufwand beim verändern des Codes ist auch genau das Gegenteil .

- nur an einer Stelle etwas ändern ist auch genau das Gegenteil .

- Vermeidung von Wiederholungen ist auch genau das Gegenteil

Du hast die Frage einfach nicht verstanden , hier wurde gefragt was Bezeichnet man mit Codeduplizierung und nicht wie man sie verhindert bzw was der Vorteil ist keine Codeduplizierung zu haben .

Bei Kopplung

- Verschiedene Methoden leicht zusammenfügen/ koppeln

-* das ist das Angestrebte Ziel , erklärt aber nicht was eine Kopplung ist .

-** Ausserdem wird da nichts zusammengeführt ?? Oder meisnte Du wie man Kopplungen verhindert ?

- Klassen mit einander arbeiten lassen, ohne das ganze umzuprogrammieren.
-* Erklärt eine bestimmte Problematik einer Art der Kopplung hat  aber auch hier nicht die Kopplung selbst beschrieben .

-* Wenn ich jemanden sage eine Kopplung ist Klassen miteinander arbeiten zu lassen ohne das ganze Umzuprogrammieren. Dann habe ich ihm gerade erklärt das eine Kopllung  die Zusammenarbeit ohne Umprogrammierung ist . Wenn wir uns aber angucken wie die verschiedenen Kopplungen sind dann könnte man dafür vielleicht 0,1 Punkte geben weil es um Zusammenarbeit geht , aber was soll mir sagen das ich da nichts umprogrammieren soll ? Ich kann mir hier auch nur wenn ich es schon weiss vorstellen welchen speziellen Fall du meinst , aber dafür musste ich schon nachlesen was überhaupt Kopplung bedeutet .

Sorry aber da würde ich auch sagen , wo erklärt es die Kopplung bzw wo erklärst Du Codeduplizierung .

Das lustigste ist das gewisse Kopplungen dazu führen das Codeduplizierung vorhanden sein kann .

Dein Lehrer ist nicht zu pingelig , sondern der Fragt sich auch ob Du nicht verstanden hast was Definition bedeutet . Für das einfache gemüht würde ich sagen , erkläre die Worte und was sie bedeuten . Vielleicht hättest Du dann dein Wissen korrekt wieder gegeben .

Antwort bewerten Vielen Dank für Deine Bewertung