Clean Code Flashcards

1
Q

Was bedeutet das Law “Don’t talk to Strangers?0” und was sind die Probleme?

A
  • Eine Variable/Ergebniss wird einer riesigen Verkettung an Objekten, Funktionen, Arrays zugewiesen
  • Es ist sehr intransparent was denn eigentlich wirklich am Ende zugewiesen wird und wo in der Verkettung was drinnen steckt.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wie sieht ein Paradebeispiel für das Law “Don’t talk to Strangers” aus und wie sieht es behoben aus?

A

int i = getObjectA().getObjectB().getSomeOtherObject().getArray()[0];

-Man sollte nur auf folgendes zugreifen:
Parameter
this.* (Klassenattribute)
* = new ... (neues Objekte)
this.myVariable.*

-Beheben kann man es wenn man die Methode z.B. in eine andere Klasse ausgliedert, da sie anscheinend in die jetzige Klasse nur schwer hineinpasst.

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

Was ist heißt das DRY-Prinzip?

A

-Don’t Repeat Yourself

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

Was bedeutet das DRY-Prinzip und wie behebt man es?

A
  • Ein Entwickler kopiert Stellen im Code
  • Man gliedert doppelte Codestellen in Methoden/Funktionen aus
  • JEDES MAL beim Copy und Pasten nachdenken, ob man nicht ausgliedern sollte
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Warum ist das Nicht-Einhalten vom DRY-Prinzip schlecht?

A
  • Die allermeisten Fehler im Code geschehen durch Copy und Paste
  • Besonders wenn Schleifen einfach an mehreren Stellen kopiert werden entstehen Logikfehler
  • Man erzeugt unnötig viel Code und Komplexität die das Programm später kaum wartbar macht.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was sind übliche Probleme mit Kommentaren?

A
  • Oftmals ist Code entweder in einen Roman verwandelt und man sieht den Code kaum vor Erklärung.
  • Oder Code besitzt gar keine Erklärungen und ist unwartbar.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was sollte kommentiert werden?

A
  • Performenzprobleme mit weirden Verhalten (z.B. Kann mehrere Tage Laufzeit haben)
  • RegEx erklären
  • TODO für noch nicht implementierte Routen/Verhalten
  • Lizenzen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind unnötige Kommentar?

A
-Erklärungen für selbstverständliches
//Der Name des Kontos 
int name;
-ausgelagerte If Abfragen brauchen oft keinen Kommentar, da der Methodenname es erklärt
//unnötige Kontogedeckt Erklärung
if(this.kontoGedeckt()){}

-

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

Was ist bedeutet Prinzip der kleinsten Überraschung und was sind die Probleme?

A
  • Namensgebungen sind irreführend
  • Eine Methode hat einen ganz unvermeintlichen Namen (getFile) und sollte z.B. nur eine Datei einlesen aber in der Methode ist viel mehr Komplexität und Manipulation der Daten versteckt (Die Atombombe) was man nicht erwartet.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie geht man mit dem Prinzip der kleinsten Überraschung richtig um?

A
  • Methoden sollten einfach gehalten werden und nur das ausführen was von ihrem Namen ablesbar ist
  • Eine Klasse Konto braucht als Attrribut keinen “kontonamen” sondern einfach nur einen namen, denn man weiß, dass es sich um das Konto handelt.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie sollte man an den Prozess des Code-Schreibens herangehen?

A
  • Man kann niemals die ganze Applikation beim ersten Schreiben korrekt coden.
  • Daher erst einmal zügig die App zuende schreiben, auch wenn es Problemstellen gibt funktionabel machen
  • Dann erneut durch den funktionierenden Code gehen und alle Probleme verbessern und verschönern.
  • Dann ein drittes Mal den Code durchdenken und aufpolieren damit er releaseready wird.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wofür steht das YAGNI Prinzip?

A

-You ain’t gonna need it

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

Was bedeutet das YAGNI Prinzip?

A
  • Man sollte sich nicht mit zu vielen Methoden befassen, die man am Ende gar nicht benötigt.
  • Erstmal eine Basisversion der App bauen und erst danach an die Features erweitern
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was bedeutet das Single Responsibility Prinzip?

A
  • Nur eine große Funktionalität in einer Klasse anbieten
  • Die Klasse myConnector soll nur connecten und nicht auch Methoden zum Dateien empfangen oder send0en bereitstellen, dass sollte in eine andere Klasse ausgegliedert werden
  • Klassen mit übet 15 Methoden sind verdächtige Kandidaten zum Zerlegen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was ist das Open-Close-Prinzip?

A
  • Es kann offen erweitert werden
  • Aber es muss nicht dafür verändert werden
  • Klasse Shape iteriert durch übergebene Formen und zeichnet jede Shape egal ob es mal Rechtecke oder Kreise geben wird.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist das Liskovsches Substitutionsprinzip?

A

-

17
Q

Was besagt das Interface Segregation Konzept?

A
  • Wenn man von einem Interface erbt sollte man es auch wirklich brauchen
  • class A implements B,C,D,E,F,G
  • Jedes Interface sollte nur eine Verantwortlichkeit haben (2-3 Methoden)
  • Interface Arbeiter mit Methoden Essen und Arbeiten kann man z.B. in zwei neue Interfaces splitten damit ein Roboter z.B. nur das Arbeiten erben kann aber nicht die für ihn nutzlose essen Methoden erben muss.
18
Q

Was bedeutet Dependency Inversion Prinzip?

A
  • GUI | Logik | Persistenz
  • Umkehrung der Abhängigkeiten
  • Klasse CopyPaste
  • Interface Reader
  • Methode ReadTextInput der Klasse CopyPaste erbt von Reader
  • Interface Writer
  • Methode WriteFile der Klasse CopyPaste erbt von Writer
19
Q

Was ist das Single Level of Abstraction Prinzip?

A

-Es soll auf einer Abstraktionsebene geblieben werden oder in etwas tieferes reingewechselt werden
-Function foot(){
int i = algo1();
algo2(i);
algo3();
}
- algo1(){
if … (){}
}
-Die Foo Funktion ist die abstrakteste, sie tut nichts außer andere Funktionen aufzurufen, welche wiederum mehr Details haben und tiefere Methoden aufrufen
-Viele Abstraktionsebenen in das Programm bringen aber innerhalb einer Methode immer auf der gleichen Abstraktionsebene bleiben. In den Untermethoden können dann ifs hinein und Logik.

20
Q

Was ist die Pfadfinder-Regel des Refactorings?

A
  • Code soll immer sauberer verlassen werden, als vorgefunden
  • Funktionalität von Methoden z.B. Rückgabewerte nicht ändern. Im Zweifel eine neue überladene Methode hinzufügen die bei einer spezfiischen Parameterangabe anderes Verhalten auslöst
21
Q

Wann sollte man Refactoren?

A
  • Mann man eine Methode auf verschiedene Abstraktionsebenen bringe kann
  • Doppelter Code (Copy Paste)
  • Feature Envy (getA().getB().attr1) Wenn man auf ein Attribut einer anderen Klasse neidisch ist und immer auf diese zugreift. Am besten eine Methode die das Attrribut aus B verarbeitet in der Klasse A bereitstellen.
  • Data Class, also Klassen die nur Daten halten aber keine Methoden haben sollte man vermeiden.
  • Gottklasse die viel zu viel in einer Klasse tut sollte man aufteilen
22
Q

In welcher Reihenfolge sollte man Refactorn und die Performance von Code verbessern?

A
  • Erst Refactoren und den Code einfach und überschaubar machen
  • Danach die Performance verbessern