validating the object calisthenics - .agenda wer bin ich? die object calisthenics vorstellung der
Post on 04-Jun-2018
212 views
Embed Size (px)
TRANSCRIPT
Validating the
Object Calisthenics Evaluation and Prototypical Implementation
of Tool Support
Fabian Schwarz-Fritz
Agenda
Wer bin ich?
Die Object Calisthenics
Vorstellung der neun Regeln
Validierung der neun Regeln
2
Validating the
Object Calisthenics
Wer bin ich?
Fabian Schwarz-Fritz 21 Jahre
6. Semester
Duales Studium bei SAP
Studienarbeit an der Dualen Hochschule
Validating the
Object Calisthenics
3
4
Object Calisthenics Calisthenics
(von griechisch kalos = schn, gut und sthenos = Kraft)
Gymnastikbungen
Extrem anstrengend
Einfaches Setup
Liegesttzen, Klimmzge, Kniebeugen
Validating the
Object Calisthenics
5
Object Calisthenics Objektorientierte
Gymnastikbungen
Im Training
9 extreme Regeln
Kleines Projekt
Hrteste Regelbefolgung ohne Zweifel
Im Wettkampf
Erfahrung durch Training ThoughtWorks Anthology 2008,
Essay Object Calisthenics von Jeff Bay
Validating the
Object Calisthenics
6
Validating the Object Calisthenics
Meine Studienarbeit:
Tool Support fr die Regeln
untersuchen
Hinweis auf Regelversto
Erleichterung des Trainings
! Versto:
Regel 1, Zeile 24,
Entwicklertag.java
Validating the
Object Calisthenics
Vorstellung der neun Regeln 1. Nur eine Einrcktiefe pro Methode!
2. Kein else Schlsselwort!
3. Kapsele alle primitiven Datentypen und Strings!
4. Nur ein Punkt pro Zeile!
5. Keine Abkrzungen!
6. Kleine Entitten!
7. Keine Klasse mit mehr als zwei Instanzvariablen!
8. Collections nur alleinstehend verwenden!
9. Keine Getter/Setter/Properties!
7
Validating the
Object Calisthenics
8
1. Nur eine Einrcktiefe
pro Methode!
Weniger Komplexitt
Gleiches
Abstraktionslevel pro
Methode
Do one thing
Wiederverwendbarkeit
Validating the
Object Calisthenics
9
2. Kein else Schlsselwort!
Alternativen:
Early return
Polymorphismus
Validating the
Object Calisthenics
3. Kapsele alle primitiven
Datentypen und Strings!
10
Problem:
Semantik nur ber Namen
Compiler ausnutzen!
Programmlogik in neuen Datentypen
Validating the
Object Calisthenics
4. Nur ein Punkt pro Zeile!
Richtige Kapselung
Erfllt Law of Demeter
Weniger komplex
11
Train Wreck Lines:
Validating the
Object Calisthenics
5. Keine Abkrzungen!
Klasse: BpmPOrder
Klasse: BusinessProcessManagerPurchaseOrder
Methode: order.retrieveOrder()
Zwei Wrter fr Klassen- und Methodennamen
Klassen:
Methoden:
12
Abkrzungen schwer
verstndlich
Kontext verwendet
BusinessProcessManagerPurchaseOrder BusinessProcessManagerPurchaseOrder
order.retrieveOrder() order.retrieveOrder()
Validating the
Object Calisthenics
6. Kleine Entitten!
Keine Klasse mit mehr als 50 Zeilen
Kein Paket mit mehr als 10 Klassen
Kleine Einheiten
=> besser wart- und testbar
=> Wiederverwendung
13
Validating the
Object Calisthenics
7. Keine Klasse mit mehr als zwei
Instanzvariablen Problem: Niedrige Kohsion
Feingranulares Objektmodell
14
Validating the
Object Calisthenics
8. Collections nur alleinstehend
verwenden ArrayList customers = new ArrayList();
Eine Instanzvariable: die Collection
Operationen auf neuem Typ: customers.sendOffer()
=> Neuer Typ hat Semantik
15
Validating the
Object Calisthenics
9. Keine
Getter/Setter/Properties Datenkapselung
Schreibt Tell, dont ask vor
nderung des Kontrollflusses
16
Validating the
Object Calisthenics
Validierung der Regeln Validierung ber Java
Development Tools
Analyse des Abstrakten
Syntaxbaums (AST)
AST stellt Syntax und Semantik
als Baum zur Verfgung
Visitor Pattern
17
Validating the
Object Calisthenics
Darstellung im Prototyp
18
Information im Editor
Information in Tabelle
Validating the
Object Calisthenics
19
1. Nur eine Einrcktiefe
pro Methode!
Signatur
einrckendes
Statement
einrckendes
Statement
Schachtelung von Einrckenden Statements innerhalb einer Methode
while, if, switch, for
Validating the
Object Calisthenics
20
2. Kein else Schlsselwort!
Suche nach jedem else Schlsselwort im
Code
Validating the
Object Calisthenics
21
3. Kapsele alle primitiven
Datentypen und Strings!
Wrapper Typen Enthalten nur den
einen
primitiven/String Typ
Nicht-Wrapper Typen
Enthalten keinen primitiven/String Typ
Kapselt int
Validating the
Object Calisthenics
4. Nur ein Punkt pro Zeile!
22
Statements in einer Zeile
Statements in einer Zeile
Ignorieren bestimmter Statements ThisStatement, QualifiedNames
ExpressionStatement, IfStatement, AssertStatement
Validating the
Object Calisthenics
5. Keine Abkrzungen! Regex
Klassennamen BoatRental
Methodennamen rentSailboat();
Keine Prfung der Semantik
Variable: Day month = new Day()
Klassenname: AbcDef
23
Validating the
Object Calisthenics
6. Kleine Entitten! Formatierung nicht immer einheitlich
Zhlen der Zeilen
Zhlen der Statements im Code
Maximal 10 Klassen pro Paket
24
Validating the
Object Calisthenics
7. Keine Klasse mit mehr als zwei
Instanzvariablen
Zhlen der Instanzvariablen einer Klasse
25
Dritte Instanzvariable
Validating the
Object Calisthenics
26
8. Collections nur alleinstehend
verwenden
Wrapper Typen Enthalten nur die
Collection
Nicht-Wrapper Typen
Enthalten keine Collection
Kapselt int
Validating the
Object Calisthenics
Validating the
Object Calisthenics
27
9. Keine
Getter/Setter/Properties
Typische Struktur der Getter/Setter erkennen
Getter: Rckgabe ist
member
Setter: Zuweisung Parameter zu member
Fabian Schwarz-Fritz Fabian Schwarz-Fritz
0049 172 7679803 fabian@schwarz-fritz.de
github/fabianschwarzfritz
Vielen Dank!
Validating the Object Calisthenics Evaluation and Prototypical Implementation
of Tool Support
29
Validating the
Object Calisthenics