LE 9 | REF - Refactoring - ME [überarbeitet 20150701 / ME] Flashcards

1
Q

Was bedeutet übersetzt Refactoring?

A
  • Umgestalten von Softwareprogrammen
  • bezieht sich in der IT meißtens auf OO-Code
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Beschreibe 5 Ziele des Refactoring!

A

Folgende Ziele werden verfolgt:

  • Verbesserung der Lesbarkeit des Codes
  • Verständlichkeit des Codes erhöhen
  • Übersichtlichkeit erhöhen
  • Redundanzen vermeiden
  • Leichter erweiterbar machen
  • Code optimal modularisieren
  • Code soll testbar werden / bleiben
  • Integration von Entwurfsmustern in den Code
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Welche Risiken können beim Refactoring auftreten? Wie können die Risiken minimiert werden?

A
  • Risiken
    • Entstehung neuer Fehler
    • Reichweite des Refactorings
  • Risikominimierung durch:
    • Refactorings nur auf fehlerfreien Code angewendet werden
      • UnitTests
    • Einsatz von UnDo und Versionskontrollsystem um sicheren Boden zu haben
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was bedeutet es wenn ein Code einen schlechten Geruch hat? (Smells)

A
  • Code der nicht falsch ist, aber einen schlechtes Gefühl verursacht
  • bad smells
    • Duplizieıter Code
      • Copy & Paste Code der mehrfach auftritt
    • zu lange Methoden
      • Methoden werden länger und länger durch die Umsetzung der Kommentare)
    • zu Große Klassen
      • GUI-Klassen mit hunderten Attributen..
    • Lange Parameterliste
      • Methoden mit zu vielen Parametern
    • Divergierende Änderungen
      • für eine Änderung muss eine Klasse an mehreren Stellen angepasst werden
    • Zuviel elementare Datentypen
      • zu oft verwendet, obwohl Verwendung von kapselnden Objekten besser wäre)
    • Neid
      • Methode X der Klasse A ist mehr an Daten der Klasse B interessiert als an seinen eigenen Daten
  • Weitere Ursachen für „Smell“ können sein:
    • Datenklumpen (Gruppe von Objekten kommen häufig zusammen vor)
    • Switch-Befehle (besser Polymorphie)
    • Falsche Vererbungshierarchien
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Nenne Beispiele für Refactorings!

A
  • Refactoring-Muster
    • bilden Kernelement
    • werden ähnlich wie Entwurfsmuster eingesetzt
    • verbessern den Code
    • Transformation des Codes die meist durch die IDE ausgeführt wird
  • Beispiele für Refactorings (Eclipse -> Rechtklick -> Refactor) / alt+shift+t):
    • Rename, Move, Change Method Signature, UnDo, ReDo
    • Convert Anonymous Class to Nested, Convert Nested Type to Top Level
    • Push Down, Pull Up
    • Extract Interface
    • Inline, Extract Method
    • Extract local Variable, extract Constant
    • Convert local Variable to Field, Encapsulate Field
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Nenne Smells und die möglichen Refactoringsmöglichkeiten.

A
  • Duplizierter Code
    • Methode extrahieren
  • Neid
    • Feld in andere Klasse verschieben
  • Datenklumpen
    • Klasse extrahieren / Objekt übergeben
  • zu viele Kommentare
    • Methode extrahieren / aufteilen
  • Switch-Befehle
    • Durch Polymorphie ersetzen
  • Schrotkugeln
  • Für Änderung müssen weitere Änderungen an vielen Klassen durchgeführt werden.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Beschreibe des Refactoring Pattern –> Extract Method. Nenne ein Beispiel!

A
  • Extract Method
    • schneidet aus großer Methode eine kleinere Methode heraus
    • Code wird lesbarer und testbarer
    • Bsp.:
      • Methode die Daten holt UND berechnet in zwei Methoden aufteilen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Beschreibe des Refactoring Pattern –>Pull Up / Push Down!

A
  • auf ein oder mehrere Elemente anwendbar
  • zwei Klassen werden einer Superklasse hinzugefügt
  • Methoden die doppelt sind wandern Superklasse
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Beschreibe des Refactoring Pattern –> Inline Method.

A
  • Inline Method
    • Inhalt der Methoden wird zusammengefasst
    • Inline Temp:
      • entfernt eine temporäre Variable und ersetzt diese durch ihre Zuweisung
    • Inline Class:
      • verschmelzt Klassen miteinander
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Beschreibe des Refactoring Pattern –> Triviale Refactorings.

A
  • UnDo
  • ReDo
  • Rename
  • Move (verschieben zwischen Packages, Methoden, etc.)
  • Change Method Signature
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Beschreibe des Refactoring Pattern –>Extract Interface!

A
  • Erstellt ein Interface aus der aktuellen Klasse
  • Die Ausgangsklasse wird so geändert, dass sie das Interface implementiert
  • Alle Klassen die vorher auf die Klasse verweisen haben implementieren jetzt gegen das erzeugte lnterface
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Beschreibe des Refactoring Pattern –>Weak Refactoring!

A
  • Source-Code Veränderungen
    • lntroduce Parameter
      • Ein Ausdruck wird durch einen Parameter ersetzt
        • Verbesserung der Lesbarkeit
    • Extract Local Variable
      • Ausdruck wird durch eine lokale Variable ersetzt
        • Verbesserung der Lesbarkeit
    • Extract Constant
      • Aus lokaler Konstante wird Klassenattribut
      • Optional mit static final
    • Use Supertype where possible
      • Nutzt statt des speziellen Typen den Typen der Superklasse
      • bei Polymorphie sinnvoll
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was sind Architektur-Refactorings?

A
  • sind erklärende Refactoings
  • verändern i.d.R. Klassenstrukturen oder Teile vonKlassendiagrammen
    • z. B. Collapse Hierarchy (analog zu Inline Class Refactoring)
      • Superklasse und Subklasse zeigen keine großen Unterschiede und sind klein genug um zu verschmelzen
    • statt einer erklärenden temporären Variable kann auch erklärende Methode eingeführt werden
How well did you know this?
1
Not at all
2
3
4
5
Perfectly