lesson_3 Flashcards

(50 cards)

1
Q

Was ist die Kernvoraussetzung dafür dass Code als Clean Code bezeichnet werden kann?

A

Code gilt als clean wenn er einem inhärenten Wertesystem folgt dessen Werte und Attitüden in ihrer Gesamtheit die Verantwortung gegenüber sich selbst dem Käufer und dem Kunden unterstützen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Welche drei zentralen Fragen sollte ein aussagekräftiger Variablenname beantworten?

A

Ein Name sollte die Existenzberechtigung (Warum existiert sie?) die bereitgestellte Funktionalität (Was leistet sie?) und die Verwendung (Wie wird sie genutzt?) klären.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was versteht man unter dem Begriff Software-Rot oder Software-Erosion?

A

Darunter versteht man die Verschlechterung der Softwarequalität durch reduzierte Ausdruckskraft erschwerte Wartbarkeit zeitintensive Änderungen sowie die Anhäufung von Fehlern und Architekturverletzungen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welche psychologischen oder organisatorischen Gründe führen laut Vorlesung zu irresponsible Code?

A

Gründe sind Zeitmangel die Einstellung Probleme später zu beheben fehlende Fähigkeiten mangelnde Konzentration oder generell unverantwortliches Handeln.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Welche Verhaltensweisen kennzeichnen einen professionell agierenden Software-Entwickler?

A

Professionelle Entwickler passen Pläne an reflektieren intensiv praktizieren und trainieren ihre Fähigkeiten und sind stets vorbereitet durch Werkzeuge und Dokumentationskenntnis.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Warum ist die Verwendung von Variablen wie int d für die Zeitmessung problematisch?

A

Solche Namen erfüllen nicht die Kriterien für Existenz Funktionalität und Nutzung wohingegen int elapsedTimeInDays die Bedeutung sofort klarstellt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welche Regel gilt für die Benennung von Konzepten innerhalb eines Projekts?

A

Es sollte genau ein Begriff pro Konzept verwendet werden um Unklarheiten durch Synonyme wie getAllUsers fetchAllUsers oder retrieveAllUsers zu vermeiden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was ist die primäre Regel bezüglich der Aufgabenstellung einer Funktion?

A

Eine Funktion sollte genau eine einzige Aufgabe (One Duty) haben und diese vollständig erfüllen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Warum sollten Kodifizierungen oder Präfixe wie m für Member-Variablen vermieden werden?

A

Sie erschweren das Verständnis des Kontexts und stellen unnötigen mentalen Ballast dar da moderne IDEs die Herkunft von Variablen bereits visualisieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was besagt das Prinzip No mental mapping im Kontext der Namensgebung?

A

Namen müssen so klar sein dass der Programmierer sie nicht im Kopf übersetzen muss da Code sonst bereits nach kurzer Zeit unverständlich wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Warum ist getAddressAttribute(String add) besser als getAddrAttr(String add)?

A

Man sollte aussprechbare Namen verwenden da dies die Kommunikation erleichtert und moderne IDEs den Tippaufwand ohnehin minimieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was versteht man unter einem Side Effect bei Funktionen?

A

Ein Seiteneffekt liegt vor wenn eine Funktion neben ihrem Rückgabewert eine zusätzliche versteckte Aktion ausführt wie zum beispiel das Versenden einer Nachricht in einer Getter-Methode.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welche Regel gilt für das Abstraktionsniveau innerhalb einer Funktion?

A

Innerhalb einer Funktion sollte nur eine einzige Abstraktionsebene verwendet werden um die Lesbarkeit und Struktur zu wahren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was ist die Empfehlung für die Anzahl von Funktionsparametern?

A

Funktionen sollten so wenig Parameter wie möglich haben da viele Parameter oft darauf hindeuten dass die Funktion mehr als eine Aufgabe erfüllt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie kann man eine Funktion mit vielen Parametern wie paintCircle(x y radius surface) optimieren?

A

Man kann zusammengehörige Parameter in ein Objekt überführen zum beispiel paintCircle(Circle currentCircle Color surface).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Warum ist Error-Handling eine eigene Aufgabe für eine Funktion?

A

Fehlerbehandlung vermischt sich oft mit der Geschäftslogik was die Lesbarkeit verschlechtert daher sollte sie idealerweise in separate Funktionen ausgelagert werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Warum sollte man lieber Exceptions werfen anstatt NULL zurückzugeben?

A

Das Werfen von Exceptions verhindert dass der aufrufende Code durch NULL-Werte abbricht und trennt die Fehlerbehandlung klar von der Geschäftslogik.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was ist ein Special Case Object und welchen Vorteil bietet es?

A

Es ist ein Objekt das ein definiertes Standardergebnis liefert (zum beispiel Collections.emptyList()) um den restlichen Code nicht durch Fehler oder NULL-Prüfungen zu unterbrechen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Welchen Rat gibt Clean Code bezüglich Kommentaren in schlechtem Code?

A

Man sollte schlechten Code nicht kommentieren sondern ihn direkt refactoren und fixen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Wann sind Kommentare laut Vorlesung sinnvoll oder zulässig?

A

Kommentare sind sinnvoll für Copyright-Hinweise oder wenn sie die Ausdruckskraft erhöhen die nicht durch Code allein erreicht werden kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was wird als Garbage in Kommentaren bezeichnet?

A

Veralteter Code der auskommentiert wurde oder redundante Kommentare die keinen Mehrwert bieten da dafür die Versionsverwaltung genutzt werden sollte.

22
Q

Wie sollten Klassen intern organisiert sein?

A

Klassen sollten nach dem Step-Down-Prinzip organisiert und in Sektionen gruppiert sein wobei öffentliche Methoden vor privaten Methoden stehen.

23
Q

Warum stehen öffentliche Methoden in einer Klasse idealerweise vor den privaten?

A

Öffentliche Methoden definieren die Schnittstelle und das was man nutzen kann während private Details der Implementierung dienen und oft weniger abstrakt sind.

24
Q

Was bedeutet High Cohesion (hohe Kohäsion) auf Klassenebene?

A

Es bedeutet dass alle Elemente innerhalb einer Klasse eng zusammengehören und eine gemeinsame logische Einheit bilden.

25
Was bedeutet Low Coupling (niedrige Kopplung)?
Es beschreibt das Ziel die Abhängigkeiten zwischen verschiedenen Klassen so gering wie möglich zu halten um Änderungen zu vereinfachen.
26
Was besagt das Law of Demeter (Prinzip des geringsten Wissens)?
Ein Objekt sollte so wenig wie möglich über die Struktur anderer Objekte wissen und nur mit unmittelbaren Nachbarn kommunizieren.
27
Was ist ein Train Wreck im Programmcode?
Ein Train Wreck ist eine lange Kette von Methodenaufrufen über mehrere Ebenen wie context.options.path.absolute die eine tiefe Kopplung offenbart.
28
Wie löst man ein Train Wreck nach dem Law of Demeter auf?
Indem man die Logik in das Zielobjekt verschiebt zum beispiel context.createLog() anstatt sich den Pfad mühsam durch die Hierarchie zu holen.
29
Welche Rolle spielen automatisierte Tests für die Wartbarkeit?
Automatisierte und ausführbare Tests sind essenziell um die Qualität dauerhaft sicherzustellen und Refactorings ohne Angst vor Regressionen durchzuführen.
30
Was kennzeichnet die Fäulnis einer Softwarearchitektur?
Kennzeichen sind obsolete oder redundante Module hohe Kopplung und mangelnde Kohäsion auf struktureller Ebene.
31
Was ist der erste Schritt bei der Evaluierung einer Softwarearchitektur?
Die Beschreibung des aktuellen Ist-Zustands zum beispiel unter Verwendung von UML2-Diagrammen.
32
Wie sieht der Zyklus im Test-driven Development (TDD) aus?
Erstellung eines fehlschlagenden Tests Implementierung des Codes bis der Test erfolgreich ist und anschließendes Refactoring des Codes.
33
Was ist die strikte Regel für Code in einer TDD-Umgebung?
Code ohne zugehörige Tests ist nicht erlaubt und Tests müssen automatisiert wiederholbar sein.
34
Welchen Vorteil bietet eine modulare oder komponentenbasierte Struktur?
Sie sorgt für klare Schnittstellen und verbessert die Austauschbarkeit sowie Testbarkeit einzelner Softwareteile.
35
Warum ist getFullNameById(id) problematisch wenn sie auch eine Nachricht sendet?
Dies verletzt das Prinzip der Side-Effect-Freiheit da der Name der Funktion eine reine Abfrage suggeriert aber eine Aktion auslöst.
36
Was ist die Definition von Clean Code laut Vorlesung im Hinblick auf Praktiken?
Clean Code ist eine Sammlung von Best Practices zur Konstruktion hochwertiger Softwareergebnisse inklusive Qualitätssicherung durch Tests.
37
Welche Bedeutung hat das Schlüsselwort interface in der Architektur?
Es markiert eine klare Schnittstelle und trennt die Definition der Funktionalität von ihrer konkreten Implementierung.
38
Warum ist die Verwendung von Konstanten besser als Inline-Kommentare wie Pattern für hh:mm:ss?
Eine gut benannte Konstante dokumentiert sich selbst im Code und macht den Kommentar überflüssig.
39
Was versteht man unter Gossip in Bezug auf Klassenkommentare?
Redundante oder offensichtliche Kommentare über Methoden die keinen Informationsgehalt über das hinaus bieten was bereits im Methodennamen steht.
40
Wie unterstützt Tooling den Clean Code Prozess?
Durch die Automatisierung von Tests und den Aufbau einer Entwicklungsumgebung die den Entwickler bei der Einhaltung von Standards unterstützt.
41
Welche Gefahr besteht bei der Verwendung von boolean-Parametern in Funktionen?
Sie führen oft zu einer Fallunterscheidung innerhalb der Funktion was darauf hindeutet dass die Funktion zwei Aufgaben hat.
42
Was ist die Konsequenz wenn man Abstraktionsebenen innerhalb einer Funktion mischt?
Die Lesbarkeit sinkt rapide da der Leser ständig zwischen Implementierungsdetails und High-Level-Logik hin- und herwechseln muss.
43
Wie korrigiert man eine niedrige Kohäsion zwischen verschiedenen Teilen einer Klasse?
Man spaltet die Klasse in zwei oder mehr spezialisierte Klassen auf die jeweils eine klare Aufgabe haben.
44
Was bedeutet Reflector eminently im Kontext professionellen Handelns?
Es bedeutet den eigenen Code und die gewählten Lösungen ständig kritisch zu hinterfragen und zu verbessern.
45
Warum ist die Inability (Unfähigkeit) ein Grund für Software-Rot?
Weil ohne die nötigen Skills keine sauberen Strukturen geschaffen werden können was zwangsläufig zu technischer Schuld führt.
46
Welches Buch gilt als die Basis für die Idee des Clean Code?
Clean Code: A Handbook of Agile Software Craftsmanship von Robert C. Martin (2008).
47
Was ist das Ziel des Prinzips One abstraction level per function?
Es soll sicherstellen dass eine Funktion auf einem konsistenten Komplexitätsniveau bleibt und dadurch leichter verständlich ist.
48
Welchen Einfluss hat schlechte Namensgebung auf die Wartungskosten?
Schlechte Namen erhöhen die Analysezeit drastisch da Programmierer länger brauchen um die Intention des Codes zu verstehen.
49
Warum ist die Trennung von Geschäftslogik und Fehlerbehandlung so wichtig?
Damit der eigentliche Algorithmus (der Happy Path) klar sichtbar bleibt und nicht in einem Nest aus Try-Catch-Blöcken verschwindet.
50
Was ist die abschließende Botschaft der Vorlesung bezüglich Verantwortung?
Softwarequalität und Clean Code sind eine Frage der professionellen Verantwortung des Entwicklers gegenüber allen Beteiligten.