solid verstehen und anwenden - entwicklertag...• refaktorisiere, so dass die solid-prinzipien...

27
© 2015 andrena objects ag Experts in agile software engineering Simon Wagner, Kristin Utech, Sabine Neubauer (andrena objects ag) SOLID –Verstehen und Anwenden 1

Upload: others

Post on 19-Sep-2020

2 views

Category:

Documents


0 download

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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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 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

© 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