solid verstehen und anwenden - entwicklertag...• refaktorisiere, so dass die solid-prinzipien...
TRANSCRIPT
![Page 1: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/1.jpg)
© 2015 andrena objects ag
Experts in agile software engineering
Simon Wagner, Kristin Utech, Sabine Neubauer (andrena objects ag)
SOLID –Verstehen und Anwenden
1
![Page 2: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/2.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 2
Ablauf & Organisatorisches
1. Setup
2. Vorstellung und Diskussion der SOLID-Prinzipien
3. Programmieren
• bis zu 4 Übungsaufgaben
• nach jeder Übung Vorstellung und Diskussion der Lösungen
• Pausen bei Bedarf
![Page 3: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/3.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 3
Setup
1. Finde einen Pairing-Partner, der die Übungen in der gleichen Sprache durchführen möchte
2. Richtet eure Entwicklungsumgebung ein
3. Source-Code
• auf USB-Stick oder
• unter https://github.com/emilybache/Racing-Car-Katas/tree/master/Java
![Page 4: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/4.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 4
SOLID
ingle Responsibility Principle 1. S
2. O
3. L
4. I
5. D
![Page 5: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/5.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 5
Single Responsibility Principle
„Es sollte nie mehr als einen Grund dafür geben, eine Klasse zu ändern.“
- Robert C. Martin
![Page 6: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/6.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 6
Single Responsibility Principle
Beispielcode
![Page 7: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/7.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 7
SOLID
1. Single Responsibility Principle
2. O
3. L
4. I
5. D
pen/Closed Principle
![Page 8: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/8.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 8
Open/Closed Principle
„Module sollten sowohl offen (für Erweiterungen) als auch geschlossen (für Modifikationen) sein.“
- Bertrand Meyer
![Page 9: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/9.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 9
Open/Closed Principle
Beispielcode
![Page 10: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/10.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 10
SOLID
1. Single Responsibility Principle
2. Open/Closed Principle
3. L
4. I
5. D
iskov Substitution Principle
![Page 11: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/11.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 11
Liskov Substitution Principle
„Sei q(x) eine Eigenschaft des Objektes x vom Typ T, dann sollte q(y) für alle Objekte y des Typs S gelten, wobei S ein Subtyp von T ist.“
- Barbara Liskov
![Page 12: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/12.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 12
Liskov Substitution Principle
„Es besagt, dass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern.“
- Wikipedia
![Page 13: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/13.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 13
Liskov Substitution Principle
„Subtypes must be substitutable for their base types.“
- Robert C. Martin
![Page 14: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/14.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 14
Liskov Substitution Principle
Beispielcode
![Page 15: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/15.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 15
SOLID
1. Single Responsibility Principle
2. Open/Closed Principle
3. Liskov Substitution Principle
4. I
5. D
nterface Segregation Principle
![Page 16: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/16.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 16
Interface Segregation Principle
„Clients sollten nicht dazu gezwungen werden, von Interfaces abzuhängen, die sie nicht verwenden.“
- Robert C. Martin
![Page 17: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/17.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 17
Interface Segregation Principle
Beispielcode
![Page 18: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/18.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 18
SOLID
1. Single Responsibility Principle
2. Open/Closed Principle
3. Liskov Substitution Principle
4. Interface Segregation Principle
5. D
ependency Inversion Principle
![Page 19: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/19.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 19
Dependency Inversion Principle
„A. Module hoher Ebenen sollten nicht von Modulen niedriger Ebenen abhängen. Beide sollten von Abstraktionen abhängen. B. Abstraktionen sollten nicht von Details abhängen. Details sollten von Abstraktionen abhängen.“
- Robert C. Martin
![Page 20: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/20.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 20
Dependency Inversion Principle
Beispielcode
![Page 21: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/21.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 21
SOLID
1. Single Responsibility Principle
2. Open/Closed Principle
3. Liskov Substitution Principle
4. Interface Segregation Principle
5. Dependency Inversion Principle
![Page 22: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/22.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 22
Übung 1 - TirePressureMonitoringSystem
1. Aufgabe:
• Schreibe Unit-Tests für die Klasse Alarm
• Überlege, welche SOLID-Prinzipien verletzt sind
• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden
2. Kontext:
• Der Reifendruck wird überwacht
• Falls der Druck außerhalb des erwarteten Bereichs liegt soll es einen Alarm geben
• Sensor-Klasse liefert zufällige aber realistische Werte
• Verhalten der Sensor-Klasse soll nicht geändert werden
![Page 23: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/23.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 23
Übung 2 - TextConverter
1. Aufgabe: • Schreibe Unit-Tests für die Klasse HtmlTextConverter • Überlege, welche SOLID-Prinzipien verletzt sind • Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden
2. Kontext: • Eine Textdatei soll als HTML formatiert um den Inhalt in einem Browser anzeigen
zu können 3. Sonstiges:
• Zusatzaufgabe: HtmlPagesConverter • Der HtmlPagesConverter unterstützt zusätzlich zur Formatierung noch
Paging
![Page 24: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/24.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 24
Übung 3 - TurnTicketDispenser
1. Aufgabe:
• Schreibe Unit-Tests für die Klasse TicketDispenser
• Überlege, welche SOLID-Prinzipien verletzt sind
• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden
2. Kontext:
• In einer Behörde sollen Nummern gezogen werden
• Die Nummern werden nach und nach aufgerufen
• Es gibt mehrere Ticket Dispenser in der Behörde
• Zwei Personen sollen nie die gleiche Nummer ziehen können
![Page 25: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/25.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 25
Übung 4 – Telemetry System
1. Aufgabe:
• Schreibe Unit-Tests für die Klasse TelemetryDiagnosticControls
• Überlege, welche SOLID-Prinzipien verletzt sind
• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden
2. Kontext:
• Der Telemetry Server soll angefragt werden um von diesem aktuelle Diagnose-Informationen zu erhalten
• TelemetryClient ist von außen vorgegeben und kann nicht geändert werden
![Page 26: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/26.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 26
Quellen
1. Racing Car Kata auf github bei Emily Bache: https://github.com/emilybache/Racing-Car-Katas
2. Racing Car Kata auf github bei Luca Minudel: https://github.com/lucaminudel/TDDwithMockObjectsAndDesignPrinciples/tree/master/TDDMicroExercises
![Page 27: SOLID Verstehen und Anwenden - Entwicklertag...• Refaktorisiere, so dass die SOLID-Prinzipien (besser) erfüllt werden 2. Kontext: • In einer Behörde sollen Nummern gezogen werden](https://reader034.vdocuments.net/reader034/viewer/2022051907/5ffa3fd1201edb66054b5171/html5/thumbnails/27.jpg)
© 2015 andrena objects ag
Experts in agile software engineering 27
Quellen
1. http://t3n.de/news/prinzipien-software-entwicklung-solid-615556/
2. http://code.tutsplus.com/series/the-solid-principles--cms-634
3. Software Craftmansship Berlin: https://drive.google.com/folderview?id=0B9kuBIdCsSLYfk1MTGZud1BoQ2czY3ppSl9wTTlGMXJkWEU3S1F1Y3FaVlNJOGNobm5TdU0&usp=sharing
4. Wikipedia: https://de.wikipedia.org/wiki/Dependency-Inversion-Prinzip
5. Wikipedia: https://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip