LE 9 | REF - Refactoring - ME [überarbeitet 20150701 / ME] Flashcards
Was bedeutet übersetzt Refactoring?
- Umgestalten von Softwareprogrammen
- bezieht sich in der IT meißtens auf OO-Code
Beschreibe 5 Ziele des Refactoring!
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
Welche Risiken können beim Refactoring auftreten? Wie können die Risiken minimiert werden?
-
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
- Refactorings nur auf fehlerfreien Code angewendet werden
Was bedeutet es wenn ein Code einen schlechten Geruch hat? (Smells)
- 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
-
Duplizieıter Code
- Weitere Ursachen für „Smell“ können sein:
- Datenklumpen (Gruppe von Objekten kommen häufig zusammen vor)
- Switch-Befehle (besser Polymorphie)
- Falsche Vererbungshierarchien
Nenne Beispiele für Refactorings!
- 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
Nenne Smells und die möglichen Refactoringsmöglichkeiten.
-
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.
Beschreibe des Refactoring Pattern –> Extract Method. Nenne ein Beispiel!
- 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
Beschreibe des Refactoring Pattern –>Pull Up / Push Down!
- auf ein oder mehrere Elemente anwendbar
- zwei Klassen werden einer Superklasse hinzugefügt
- Methoden die doppelt sind wandern Superklasse
Beschreibe des Refactoring Pattern –> Inline Method.
- 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
Beschreibe des Refactoring Pattern –> Triviale Refactorings.
- UnDo
- ReDo
- Rename
- Move (verschieben zwischen Packages, Methoden, etc.)
- Change Method Signature
Beschreibe des Refactoring Pattern –>Extract Interface!
- 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
Beschreibe des Refactoring Pattern –>Weak Refactoring!
- Source-Code Veränderungen
-
lntroduce Parameter
- Ein Ausdruck wird durch einen Parameter ersetzt
- Verbesserung der Lesbarkeit
- Ein Ausdruck wird durch einen Parameter ersetzt
-
Extract Local Variable
- Ausdruck wird durch eine lokale Variable ersetzt
- Verbesserung der Lesbarkeit
- Ausdruck wird durch eine lokale Variable ersetzt
-
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
-
lntroduce Parameter
Was sind Architektur-Refactorings?
- 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
- z. B. Collapse Hierarchy (analog zu Inline Class Refactoring)