Clean Coding Theorie & Praxis Guide Artem Kaftanenko 13.05.2011 Clean Coding - Theory & Praxis Guide
Agenda 13.05.2011 Clean Coding - Theory & Praxis Guide Agenda <ul><ul><li>Part I - Theorie </li></ul></ul><ul><ul><ul><li>...
13.05.2011 Clean Coding - Theory & Praxis Guide Part I - Theorie Einführung
<ul><li>Bjarne Stroustrup </li></ul><ul><ul><li>…  inventor of C++ and author of  The C++ Programming  Language </li></ul>...
<ul><li>Grady Booch </li></ul><ul><ul><li>…  author of  Object Oriented Analysis and Design with  Applications </li></ul><...
<ul><li>“ Big” Dave Thomas </li></ul><ul><ul><li>...  godfather of the  Eclipse strategy </li></ul></ul><ul><li>Clean code...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Einführung <ul><li>Dirty Code </li></ul><ul><ul><li>„ natürlich“  ...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie <ul><li>&quot; Softwareentwicklung  braucht  Profis . Was aber sin...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie [MR09] Clean Code: A Handbook of Agile Software Craftsmanship;  Ro...
13.05.2011 Clean Coding - Theory & Praxis Guide Part I - Theorie Motivation & Ziele
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation   & Ziele Ziel - Mehrwert (1) <ul><li>Kunde </li></ul...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation   & Ziele Ziel - Mehrwert (2) <ul><li>Softwarearchite...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation   & Ziele …  und den Preis <ul><li>Mehrkosten?  => fr...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Namensgebung
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Charakteristik  guter Namen </li></ul><ul...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Prinzipien </li></ul><ul><ul><li>Mehrdeut...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Gute  Namen  zu finden ist schwierig, abe...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Funktionen
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Einführung (1) <ul><li>FUNCTION   </li></ul><ul><ul><...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Einführung (2) <ul><li>Funktions größe </li></ul><ul>...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Logikfluss <ul><li>Als  Ergebnis </li></ul><ul><ul><l...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Benennung <ul><li>Muss ein  Verb  enthalten </li></ul...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (1) <ul><li>Argument anzahl </li></ul><ul><...
13.05.2011 Clean Coding - Theory & Praxis Guide <ul><li>Argumenten anzahl </li></ul><ul><ul><li>zwei  Argumente </li></ul>...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (3) <ul><li>Argumenten anzahl </li></ul><ul...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (4) <ul><li>Argument arten </li></ul><ul><u...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Fehlerbehandlung <ul><li>Exception  werfen  bevorzugt...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Klassen
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Einführung <ul><li>…  es gibt eine gewisse Korrelation m...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Sin...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Sin...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Sin...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Kohäsion-Merkmal <ul><li>Clean-Cod...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Änderungsrisiko-Merkmal Moderne  S...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Ausblick
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie -   Ausblick <ul><ul><li>Formatierungsregeln </li></ul></ul><ul><u...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Ausblick Heuristiken - Beispiele (1) <ul><li>Comments  </li></ul...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Ausblick Heuristiken - Beispiele (2) <ul><li>General  </li></ul>...
13.05.2011 Clean Coding - Theory & Praxis Guide PART II – Praxis Guide
13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Aufgabenstellung <ul><li>Ausgangsdaten  für die  Entwickler <...
13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Fachliche Abstraktionsniveau <ul><li>Businesslogik  (BL)  Sch...
13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Technische Abstraktionsniveau <ul><li>Frameworks </li></ul><u...
13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Clean Coding – Verfahren (1) <ul><li>Inkrementelle   Verbesse...
13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Clean Coding – Verfahren (2) <ul><li>Suche nach  passender  B...
13.05.2011 Clean Coding - Theory & Praxis Guide Theorie & Praxis Guide [MR09] Clean Code: A Handbook of Agile Software Cra...
Nächste SlideShare
Wird geladen in …5
×

Clean Coding - Theorie und Praxis Guide (in german)

3.269 Aufrufe

Veröffentlicht am

Eine Präsentation auf Basis von dem Buch von Robert C. Martin "Clean Code".

Aktuelle Präsentation ermöglicht einen Einblick in ein der wichtigsten Aspekten der professionellen Softwareentwciklung und zeigt die Wege zum Produzieren einen sauberen, testbaren, leicht modifizierbaren, robusten und langlebigen Quellkode.

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.269
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
16
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • .
  • .
  • .
  • .
  • .
  • .
  • .
  • .
  • Clean Coding - Theorie und Praxis Guide (in german)

    1. 1. Clean Coding Theorie & Praxis Guide Artem Kaftanenko 13.05.2011 Clean Coding - Theory & Praxis Guide
    2. 2. Agenda 13.05.2011 Clean Coding - Theory & Praxis Guide Agenda <ul><ul><li>Part I - Theorie </li></ul></ul><ul><ul><ul><li>Einführung </li></ul></ul></ul><ul><ul><ul><li>Motivation und Ziele </li></ul></ul></ul><ul><ul><ul><li>Namensgebung </li></ul></ul></ul><ul><ul><ul><li>Funktionen </li></ul></ul></ul><ul><ul><ul><li>Klassen </li></ul></ul></ul><ul><ul><ul><li>Ausblick </li></ul></ul></ul><ul><ul><li>Part II - Praxis Guide </li></ul></ul>
    3. 3. 13.05.2011 Clean Coding - Theory & Praxis Guide Part I - Theorie Einführung
    4. 4. <ul><li>Bjarne Stroustrup </li></ul><ul><ul><li>… inventor of C++ and author of The C++ Programming Language </li></ul></ul><ul><li>I like my code to be elegant and efficient . </li></ul><ul><li>The logic should be straightforward to make it hard for bugs to hide , the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy , and performance close to optimal so as not to tempt people to make the code messy with unprincipled optimizations. </li></ul><ul><li>Clean code does one thing well. </li></ul>13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Einführung
    5. 5. <ul><li>Grady Booch </li></ul><ul><ul><li>… author of Object Oriented Analysis and Design with Applications </li></ul></ul><ul><li>Clean code is simple and direct . Clean code reads like well-written prose . Clean code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control . </li></ul>13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Einführung
    6. 6. <ul><li>“ Big” Dave Thomas </li></ul><ul><ul><li>... godfather of the Eclipse strategy </li></ul></ul><ul><li>Clean code can be read , and enhanced by a developer other than its original author. It has unit and acceptance tests . It has meaningful names . It provides one way rather than many ways for doing one thing . It has minimal dependencies , which are explicitly defined, and provides a clear and minimal API . ... </li></ul>13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Einführung
    7. 7. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Einführung <ul><li>Dirty Code </li></ul><ul><ul><li>„ natürlich“ entstandene Code </li></ul></ul><ul><ul><li>gefährdet </li></ul></ul><ul><ul><ul><li>Langlebigkeit eines SW-Produktes </li></ul></ul></ul><ul><ul><ul><li>seine Stabilität und Erweiterbarkeit </li></ul></ul></ul><ul><li>Clean Coding legt besonders Acht auf </li></ul><ul><ul><li>Lesbarkeit </li></ul></ul><ul><ul><li>Nebeneffektfreiheit </li></ul></ul><ul><ul><li>Isolierung der Systemänderungen </li></ul></ul><ul><li>--- </li></ul>
    8. 8. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie <ul><li>&quot; Softwareentwicklung braucht Profis . Was aber sind Profis? Menschen die mit der Softwareentwicklung Geld verdienen? Nein, ..., es gehört mehr und anderes dazu. Professionalität in der Softwareentwicklung hat nichts mit Geld zu tun. Sie hat auch nur bedingt mit einem bestimmten Ausbildungsweg zu tun. </li></ul><ul><li><Es gibt> ... professionelle Softwareentwickler, die wenig oder gar kein Geld mit ihrer Software verdienen und <es gibt> ... professionelle Softwareentwickler, die weder Diplom noch Doktortitel haben.„ </li></ul><ul><ul><ul><ul><li>http://clean-code-developer.de (Stand: 10.05.2011) </li></ul></ul></ul></ul>Einführung
    9. 9. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie [MR09] Clean Code: A Handbook of Agile Software Craftsmanship; Robert C. Martin (aka Uncle Bob) ISBN-13: 978-0132350884 Einführung - Informationsquellen [CCD] Clean Code Developer – Initiative von Ralf Westphal und Stefan Lieser
    10. 10. 13.05.2011 Clean Coding - Theory & Praxis Guide Part I - Theorie Motivation & Ziele
    11. 11. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation & Ziele Ziel - Mehrwert (1) <ul><li>Kunde </li></ul><ul><ul><li>Implementierung = Wunsch (im Endeffekt) </li></ul></ul><ul><ul><li>Kosten der Änderungswünsche realistisch abschätzbar </li></ul></ul><ul><li>Endbenutzer </li></ul><ul><ul><li>deutlich weniger Bugs </li></ul></ul><ul><ul><li>schnellere Bug-Beseitigung </li></ul></ul><ul><li>Projektleiter (PL) </li></ul><ul><ul><li>realistisch abschätzbare Impl.-/Änderungsaufwände </li></ul></ul><ul><ul><li>höheres Vertrauensniveau an die Entwicklung </li></ul></ul>
    12. 12. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation & Ziele Ziel - Mehrwert (2) <ul><li>Softwarearchitekt (SWA) </li></ul><ul><ul><li>sauberes und überschaubares Design auch auf Impl.-Niveau </li></ul></ul><ul><ul><li>leicht kontrollierbares Qualitätsniveau </li></ul></ul><ul><ul><li>motiviert reguläre Aktualisierung der Style-Guides </li></ul></ul><ul><ul><li>Implementierung mit den Anforderungen (leicht) abgleichbar </li></ul></ul><ul><li>Entwickler </li></ul><ul><ul><li>schneller Einstieg </li></ul></ul><ul><ul><li>leichte Nachvollziehbarkeit des Fremdcodes </li></ul></ul><ul><ul><li>Lerneffekt ebenfalls sauber zu programmieren </li></ul></ul><ul><ul><li>gutes Gefühl sich stolz als einen Professional bezeichnen zu dürfen </li></ul></ul>
    13. 13. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Motivation & Ziele … und den Preis <ul><li>Mehrkosten? => franglich, aber eher so gut wie keine + langfristige Spareffekte </li></ul><ul><ul><li>der einzige Unterschied : natürliches/ungeübtes vs. systematisches Vorgehen </li></ul></ul><ul><ul><li>meidet Kreativitätskrisen (bei SWA’s/Entwickler) </li></ul></ul><ul><ul><li>leicht gemachter fachlicher Einstieg für die Neueinsteiger </li></ul></ul><ul><ul><li>Synergieeffekte durch etwa gleichen Gedankenfluss/Vorgehensweise </li></ul></ul><ul><ul><li>schafft Grundlage für das rechtzeitige Refactoring , bewahrt Code-Consistence </li></ul></ul>
    14. 14. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Namensgebung
    15. 15. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Charakteristik guter Namen </li></ul><ul><ul><li>aussagekräftig </li></ul></ul><ul><ul><li>aussprechbar </li></ul></ul><ul><ul><li>auffindbar (IDE) </li></ul></ul><ul><ul><li>eindeutig & klar </li></ul></ul><ul><li>Auswahl der Schlüsselwörter </li></ul><ul><ul><li>ein Wort per Konzept </li></ul></ul><ul><ul><li>aus der Domainsprache </li></ul></ul><ul><ul><ul><li>=> (Problem/Lösungs-Domain) </li></ul></ul></ul><ul><ul><li>Verwenden von Namenskonventionen </li></ul></ul><ul><ul><ul><li>=> z. Bsp. für Funktionen: is<…>, set<…>, get<…>, … </li></ul></ul></ul>
    16. 16. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Prinzipien </li></ul><ul><ul><li>Mehrdeutigkeit vermeiden </li></ul></ul><ul><ul><li>Desinformationen vermeiden </li></ul></ul><ul><ul><ul><li>=> „say what you mean, mean what you say.“ </li></ul></ul></ul><ul><ul><li>aussagekräftigen Kontext verwenden </li></ul></ul><ul><ul><ul><li>=> meist durch gut benannte Klassen, Funktionen und andere Namensräume gegeben </li></ul></ul></ul><ul><ul><ul><li>=> wenn kein klarer Kontext gegeben, muss dieser ein Teil des Namens sein </li></ul></ul></ul><ul><ul><li>Verwendung desselben Schlüsselworts für mehrere Konzepte vermeiden </li></ul></ul><ul><ul><li>Typ/Scope/Mitgliedschaft bedingte Präfixe vermeiden </li></ul></ul>
    17. 17. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Namensgebung … <ul><li>Gute Namen zu finden ist schwierig, aber </li></ul><ul><ul><li>zahlt sich sehr schnell aus </li></ul></ul><ul><ul><li>animiert zur Suche nach einem Konsensus </li></ul></ul><ul><ul><li>schafft gemeinsame Basis für alle Entwickler </li></ul></ul><ul><ul><li>trägt der inkrementeller Entstehung von DSL bei </li></ul></ul>
    18. 18. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Funktionen
    19. 19. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Einführung (1) <ul><li>FUNCTION </li></ul><ul><ul><li>… SHOULD DO ONE THING . </li></ul></ul><ul><ul><ul><li>… SHOULD DO IT WELL . </li></ul></ul></ul><ul><ul><ul><ul><li>… SHOULD DO IT ONLY . </li></ul></ul></ul></ul><ul><li>Diese Beschreibung </li></ul><ul><ul><li>bestimmt die Größe der Funktion </li></ul></ul><ul><ul><li>sichert ihre Nebeneffekt-Freiheit </li></ul></ul><ul><ul><li>weist auf die Auswahl der Funktionsnamen hin </li></ul></ul>
    20. 20. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Einführung (2) <ul><li>Funktions größe </li></ul><ul><ul><li>Regel 1: … muss KLEIN sein </li></ul></ul><ul><ul><li>Regel 2: … muss noch KLEINER sein </li></ul></ul><ul><li>Funktions name </li></ul><ul><ul><li>… soll deskriptiv sein </li></ul></ul><ul><ul><li>… soll beschreiben WAS die Funktion tut </li></ul></ul><ul><ul><li>… soll beschreiben ALLES was die Funktion tut </li></ul></ul><ul><li>Eine Funktion ist sauber wenn: </li></ul><ul><ul><li>… implementiert nur eine einzige Handlung </li></ul></ul><ul><ul><li>… implementiert Handlung nur eines Abstraktionsniveaus </li></ul></ul><ul><ul><li>… ihre Funktionalität ist durch Funktionsnamen vollständig beschrieben </li></ul></ul><ul><ul><li>=> Nebeneffekt-Freiheit </li></ul></ul>
    21. 21. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Logikfluss <ul><li>Als Ergebnis </li></ul><ul><ul><li>viele kurze Funktionen (3-10 Zeilen) </li></ul></ul><ul><ul><li>nicht selten eine Funktion nur von einer einzigen Stelle aufgerufen </li></ul></ul><ul><li>„ Step-Down“- Regel </li></ul><ul><ul><li>aufzurufende nach den aufrufenden Funktionen (vertikale Anordnung) </li></ul></ul><ul><li>Gruppierung der Funktionen </li></ul><ul><ul><li>die einander aufrufen </li></ul></ul><ul><ul><li>die ähnliche Funktionalität umsetzen </li></ul></ul><ul><ul><li>die die gleichen Objekte/Instanzvariablen behandeln </li></ul></ul><ul><li>sich wiederholende Switch -Anweisungen </li></ul><ul><ul><li>meist durch Polymorphie lösbar </li></ul></ul>
    22. 22. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Benennung <ul><li>Muss ein Verb enthalten </li></ul><ul><li>Namenskonventionen wichtig </li></ul><ul><ul><li>dieselben Verben für dieselben Handlungen </li></ul></ul><ul><ul><ul><li>=> Bsp.: get, set, is, find, query, check, … </li></ul></ul></ul><ul><li>Schlüsselwörter aus den Domainsprachen </li></ul><ul><li>… sonst der allgemeinen Regeln der Namensgebung folgen (s. oben) </li></ul>
    23. 23. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (1) <ul><li>Argument anzahl </li></ul><ul><ul><li>keine Argumente </li></ul></ul><ul><ul><ul><li>ist ideal => ganzen Zustand durch Instanzvariablen bestimmt </li></ul></ul></ul><ul><ul><li>ein Argument </li></ul></ul><ul><ul><ul><li>… prüft Annahmen </li></ul></ul></ul><ul><ul><ul><ul><li>=> Rückgabe: boolesche Typ boolean fileExists(“MyFile”) </li></ul></ul></ul></ul><ul><ul><ul><li>… behandelt Ereignisse </li></ul></ul></ul><ul><ul><ul><ul><li>=> keine Rückgabe void onDataLoad(Event event) </li></ul></ul></ul></ul><ul><ul><ul><li>… transformiert dieses Argument/Objekt </li></ul></ul></ul><ul><ul><ul><ul><li>=> Rückgabe: transformiertes Objekt InputStream fileOpen(“MyFile”) </li></ul></ul></ul></ul>
    24. 24. 13.05.2011 Clean Coding - Theory & Praxis Guide <ul><li>Argumenten anzahl </li></ul><ul><ul><li>zwei Argumente </li></ul></ul><ul><ul><ul><ul><li>assertEquals(expected, actual) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>=> leicht zu verwechselnde Reihenfolge gleichartiger Argumenten </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>p = new Point(0,0); </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>=> sind geordnete Bestandteile desselben Wert-Objekts! </li></ul></ul></ul></ul></ul><ul><ul><li>drei Argumente </li></ul></ul><ul><ul><ul><ul><li>assertEquals(message, expected, actual) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>=> leicht zu verwechselnde Reihenfolge gleichartiger Argumenten </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>assertEquals(1.0, amount, .001) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>=> sind fachlich bedingt (Vergleich von zwei Floatpoint-Werten ist nur mit einem Genauigkeitsgrad möglich) </li></ul></ul></ul></ul></ul>Theorie - Funktionen Argumente (2)
    25. 25. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (3) <ul><li>Argumenten anzahl </li></ul><ul><ul><li>mehr als drei Argumente </li></ul></ul><ul><ul><ul><li>eindeutiges Warnsignal zum Refactoren </li></ul></ul></ul><ul><li>Mittel zur Reduzierung der Argumentenanzahl: </li></ul><ul><ul><li>… in Instanzvariablen umwandeln </li></ul></ul><ul><ul><li>… in Wrapper-Klassen kapseln </li></ul></ul><ul><ul><li>… Funktion in Kontext eines der Argumente verschieben </li></ul></ul><ul><ul><ul><li><some-class>.writeField(outputStream, name) => outputStream.writeField(name) </li></ul></ul></ul>
    26. 26. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Argumente (4) <ul><li>Argument arten </li></ul><ul><ul><li>Flag- Argumente (boolesche) </li></ul></ul><ul><ul><ul><li>=> verletzt „do one thing“-Regel </li></ul></ul></ul><ul><ul><li>in/out Argumente </li></ul></ul><ul><ul><ul><li>=> Nebeneffekte </li></ul></ul></ul><ul><ul><ul><li>=> verschlechtern Nachvollziehbarkeit </li></ul></ul></ul><ul><ul><li>Argument- Listen </li></ul></ul><ul><ul><ul><li>=> wenn diese gleich behandelt werden = ein Argument vom List-Typ </li></ul></ul></ul><ul><ul><ul><li>=> im übrigen dieselben Begrenzungen auf die Argumentenanzahl </li></ul></ul></ul>
    27. 27. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Funktionen Fehlerbehandlung <ul><li>Exception werfen bevorzugt über Rückgabe eines ErrorCode ‘s </li></ul><ul><li>Fehlerbehandlung = one thing </li></ul><ul><ul><li>=> in die Extrafunktion auslagern </li></ul></ul><ul><li>… sonst ist dies das Thema für eine Extrapräsentation. </li></ul>
    28. 28. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Klassen
    29. 29. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Einführung <ul><li>… es gibt eine gewisse Korrelation mit den Anforderungen zu den Funktionen </li></ul><ul><li>Klassen größe </li></ul><ul><ul><li>Regel 1: … muss KLEIN sein </li></ul></ul><ul><ul><li>Regel 2: … muss noch, Ihr wisst schon, KLEINER sein </li></ul></ul><ul><li>Klassen name </li></ul><ul><ul><li>… soll deskriptiv sein </li></ul></ul><ul><ul><li>… soll beschreiben WOFÜR die Klasse verantwortlich ist </li></ul></ul><ul><ul><li>… soll beschreiben ALLES WOFÜR die Klasse verantwortlich ist </li></ul></ul>
    30. 30. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Single Responsibility Principle ( SRP ) </li></ul><ul><li>public class SuperDashboard extends JFrame implements MetaDataUser </li></ul><ul><ul><li>public String getCustomizerLanguagePath() </li></ul></ul><ul><ul><li>public void setSystemConfigPath(String systemConfigPath) </li></ul></ul><ul><ul><li>public String getSystemConfigDocument() </li></ul></ul><ul><ul><li>public void setSystemConfigDocument(String systemConfigDocument) </li></ul></ul><ul><ul><li>public boolean getGuruState() </li></ul></ul><ul><ul><li>public boolean getNoviceState() </li></ul></ul><ul><ul><li>public boolean getOpenSourceState() </li></ul></ul><ul><ul><li>public void showObject(MetaObject object) </li></ul></ul><ul><ul><li>public void showProgress(String s) </li></ul></ul><ul><ul><li>public void setIsMetadataDirty(boolean isMetadataDirty) </li></ul></ul><ul><ul><li>public Component getLastFocusedComponent() </li></ul></ul><ul><ul><li>public void setLastFocused(Component lastFocused) </li></ul></ul><ul><ul><li>public void setMouseSelectState(boolean isMouseSelected) </li></ul></ul><ul><ul><li>public boolean isMouseSelected() </li></ul></ul><ul><ul><li>public LanguageManager getLanguageManager() </li></ul></ul><ul><ul><li>public Project getProject() </li></ul></ul><ul><ul><li>public Project getFirstProject() </li></ul></ul><ul><ul><li>public Project getLastProject() </li></ul></ul><ul><ul><li>public String getNewProjectName() </li></ul></ul><ul><ul><li>public void setComponentSizes(Dimension dim) </li></ul></ul><ul><ul><li>public String getCurrentDir() </li></ul></ul><ul><ul><li>public void setCurrentDir(String newDir) </li></ul></ul><ul><ul><li>public void updateStatus(int dotPos, int markPos) </li></ul></ul><ul><ul><li>public Class[] getDataBaseClasses() </li></ul></ul><ul><ul><li>public MetadataFeeder getMetadataFeeder() </li></ul></ul><ul><ul><li>public void addProject(Project project) </li></ul></ul><ul><ul><li>public boolean setCurrentProject(Project project) </li></ul></ul>
    31. 31. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Single Responsibility Principle ( SRP ) </li></ul><ul><li>public class SuperDashboard extends JFrame implements MetaDataUser </li></ul><ul><ul><li>public String getCustomizerLanguagePath() </li></ul></ul><ul><ul><li>public void setSystemConfigPath(String systemConfigPath) </li></ul></ul><ul><ul><li>public String getSystemConfigDocument() </li></ul></ul><ul><ul><li>public void setSystemConfigDocument(String systemConfigDocument) </li></ul></ul><ul><ul><li>public boolean getGuruState() </li></ul></ul><ul><ul><li>public boolean getNoviceState() </li></ul></ul><ul><ul><li>public boolean getOpenSourceState() </li></ul></ul><ul><ul><li>public void showObject(MetaObject object) </li></ul></ul><ul><ul><li>public void showProgress(String s) </li></ul></ul><ul><ul><li>public void setIsMetadataDirty(boolean isMetadataDirty) </li></ul></ul><ul><ul><li>public Component getLastFocusedComponent() </li></ul></ul><ul><ul><li>public void setLastFocused(Component lastFocused) </li></ul></ul><ul><ul><li>public void setMouseSelectState(boolean isMouseSelected) </li></ul></ul><ul><ul><li>public boolean isMouseSelected() </li></ul></ul><ul><ul><li>public LanguageManager getLanguageManager() </li></ul></ul><ul><ul><li>public Project getProject() </li></ul></ul><ul><ul><li>public Project getFirstProject() </li></ul></ul><ul><ul><li>public Project getLastProject() </li></ul></ul><ul><ul><li>public String getNewProjectName() </li></ul></ul><ul><ul><li>public void setComponentSizes(Dimension dim) </li></ul></ul><ul><ul><li>public String getCurrentDir() </li></ul></ul><ul><ul><li>public void setCurrentDir(String newDir) </li></ul></ul><ul><ul><li>public void updateStatus(int dotPos, int markPos) </li></ul></ul><ul><ul><li>public Class[] getDataBaseClasses() </li></ul></ul><ul><ul><li>public MetadataFeeder getMetadataFeeder() </li></ul></ul><ul><ul><li>public void addProject(Project project) </li></ul></ul><ul><ul><li>public boolean setCurrentProject(Project project) </li></ul></ul><ul><li>public class SuperDashboard extends JFrame { </li></ul><ul><ul><li>public Component getLastFocusedComponent() </li></ul></ul><ul><ul><li>public void setLastFocused(Component lastFocused) </li></ul></ul><ul><ul><li>public int getMajorVersionNumber() </li></ul></ul><ul><ul><li>public int getMinorVersionNumber() </li></ul></ul><ul><ul><li>public int getBuildNumber() </li></ul></ul><ul><li>} </li></ul>
    32. 32. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Responsibility-Merkmal <ul><li>Single Responsibility Principle ( SRP ) </li></ul><ul><li>public class SuperDashboard extends JFrame implements MetaDataUser </li></ul><ul><ul><li>public String getCustomizerLanguagePath() </li></ul></ul><ul><ul><li>public void setSystemConfigPath(String systemConfigPath) </li></ul></ul><ul><ul><li>public String getSystemConfigDocument() </li></ul></ul><ul><ul><li>public void setSystemConfigDocument(String systemConfigDocument) </li></ul></ul><ul><ul><li>public boolean getGuruState() </li></ul></ul><ul><ul><li>public boolean getNoviceState() </li></ul></ul><ul><ul><li>public boolean getOpenSourceState() </li></ul></ul><ul><ul><li>public void showObject(MetaObject object) </li></ul></ul><ul><ul><li>public void showProgress(String s) </li></ul></ul><ul><ul><li>public void setIsMetadataDirty(boolean isMetadataDirty) </li></ul></ul><ul><ul><li>public Component getLastFocusedComponent() </li></ul></ul><ul><ul><li>public void setLastFocused(Component lastFocused) </li></ul></ul><ul><ul><li>public void setMouseSelectState(boolean isMouseSelected) </li></ul></ul><ul><ul><li>public boolean isMouseSelected() </li></ul></ul><ul><ul><li>public LanguageManager getLanguageManager() </li></ul></ul><ul><ul><li>public Project getProject() </li></ul></ul><ul><ul><li>public Project getFirstProject() </li></ul></ul><ul><ul><li>public Project getLastProject() </li></ul></ul><ul><ul><li>public String getNewProjectName() </li></ul></ul><ul><ul><li>public void setComponentSizes(Dimension dim) </li></ul></ul><ul><ul><li>public String getCurrentDir() </li></ul></ul><ul><ul><li>public void setCurrentDir(String newDir) </li></ul></ul><ul><ul><li>public void updateStatus(int dotPos, int markPos) </li></ul></ul><ul><ul><li>public Class[] getDataBaseClasses() </li></ul></ul><ul><ul><li>public MetadataFeeder getMetadataFeeder() </li></ul></ul><ul><ul><li>public void addProject(Project project) </li></ul></ul><ul><ul><li>public boolean setCurrentProject(Project project) </li></ul></ul><ul><li>public class SuperDashboard extends JFrame { </li></ul><ul><ul><li>public Component getLastFocusedComponent() </li></ul></ul><ul><ul><li>public void setLastFocused(Component lastFocused) </li></ul></ul><ul><ul><li>public int getMajorVersionNumber() </li></ul></ul><ul><ul><li>public int getMinorVersionNumber() </li></ul></ul><ul><ul><li>public int getBuildNumber() </li></ul></ul><ul><li>} </li></ul><ul><li>public class Version { </li></ul><ul><ul><li>public int getMajorVersionNumber() </li></ul></ul><ul><ul><li>public int getMinorVersionNumber() </li></ul></ul><ul><ul><li>public int getBuildNumber() </li></ul></ul><ul><li>} </li></ul>
    33. 33. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Kohäsion-Merkmal <ul><li>Clean-Code-Anforderung zu den Funktionen – Minimierung der Argumentenanzahl </li></ul><ul><ul><li>als Folge – viele kleinere Funktionen </li></ul></ul><ul><ul><li>der ganze Objektzustand ist durch seine Instanzvariablen präsentiert </li></ul></ul><ul><li>Wenn eine Untermenge der Instanzvariablen ausschließlich von einer Untermenge der Klassenmethoden benutzt wird => Warnsignal zur Klassen-Spaltung </li></ul>
    34. 34. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Klassen Klassenorganisation – Änderungsrisiko-Merkmal Moderne SW-Systeme sind permanenten Änderungen unterworfen Änderung eines Systemteils => Systemrest funktioniert nicht mehr als erwartet Aus diesem Grund sollte man das System so organisieren , damit die Funktionalität der nicht angefassten Systemteile erhalten bleibt
    35. 35. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie Ausblick
    36. 36. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Ausblick <ul><ul><li>Formatierungsregeln </li></ul></ul><ul><ul><li>Kommentare </li></ul></ul><ul><ul><li>Unit Tests </li></ul></ul><ul><ul><li>Concurrency </li></ul></ul><ul><ul><li>Error-Handling </li></ul></ul><ul><ul><li>Systemaufbau </li></ul></ul><ul><ul><li>… </li></ul></ul>Weitere hier nicht behandelte Themen
    37. 37. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Ausblick Heuristiken - Beispiele (1) <ul><li>Comments </li></ul><ul><ul><li>C1: Inappropriate Information </li></ul></ul><ul><ul><li>C2: Obsolete Comment </li></ul></ul><ul><ul><li>C3: Redundant Comment </li></ul></ul><ul><ul><li>C4: Poorly Written Comment </li></ul></ul><ul><ul><li>C5: Commented-Out Code </li></ul></ul><ul><li>Environment </li></ul><ul><ul><li>E1: Build Requires More Than One Step </li></ul></ul><ul><ul><li>E2: Tests Require More Than One Step </li></ul></ul><ul><li>Functions </li></ul><ul><ul><li>F1: Too Many Arguments </li></ul></ul><ul><ul><li>F2: Output Arguments </li></ul></ul><ul><ul><li>F3: Flag Arguments </li></ul></ul><ul><ul><li>F4: Dead Function </li></ul></ul>
    38. 38. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie - Ausblick Heuristiken - Beispiele (2) <ul><li>General </li></ul><ul><ul><li>G1: Multiple Languages in One Source File </li></ul></ul><ul><ul><li>G2: Obvious Behavior Is Unimplemented </li></ul></ul><ul><ul><li>G3: Incorrect Behavior at the Boundaries </li></ul></ul><ul><ul><li>G4: Overridden Safeties </li></ul></ul><ul><ul><li>G5: Duplication </li></ul></ul><ul><ul><li>G6: Code at Wrong Level of Abstraction </li></ul></ul><ul><ul><li>G7: Base Classes Depending on Their Derivatives </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><li>… und viele anderen sind im [MR09] zu finden. </li></ul>
    39. 39. 13.05.2011 Clean Coding - Theory & Praxis Guide PART II – Praxis Guide
    40. 40. 13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Aufgabenstellung <ul><li>Ausgangsdaten für die Entwickler </li></ul><ul><ul><li>Fachliche Spezifikation des zu realisierenden Systems </li></ul></ul><ul><ul><ul><li>durch Fachabteilung/Analysten erarbeitet </li></ul></ul></ul><ul><ul><ul><li>mittels Dekomposition des Gesamtsystems in </li></ul></ul></ul><ul><ul><ul><ul><li>Fachbereiche/Fachklassen </li></ul></ul></ul></ul><ul><ul><ul><ul><li>fachliche Abhängigkeiten/Operationen </li></ul></ul></ul></ul><ul><li>Aufgabe des Entwicklers </li></ul><ul><ul><li>Umsetzung dieser Spezifikation </li></ul></ul>
    41. 41. 13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Fachliche Abstraktionsniveau <ul><li>Businesslogik (BL) Schnittstelle </li></ul><ul><ul><li>spiegelt die Fachspezifikation auf die Implementierungssprache </li></ul></ul><ul><ul><ul><li>… um Implementierung mit der Spezifikation abgleichbar zu halten </li></ul></ul></ul><ul><ul><ul><ul><li>=> Verwendung einer fachlichen DSL nötig </li></ul></ul></ul></ul><ul><ul><li>muss beschreiben WAS implementiert werden muss </li></ul></ul><ul><ul><ul><li>=> Strukturierungseinheiten: Aggregate, Fachklassen, … </li></ul></ul></ul><ul><ul><ul><li>=> nächste Hierarchiestufe: Businessoperationen </li></ul></ul></ul><ul><li>Businesslogik Implementierung </li></ul><ul><ul><li>muss das WIE beschreiben, aber immerhin im Scope des BL-Abstraktionsniveaus </li></ul></ul><ul><ul><li>evtl. zwischen mehreren Aggregaten teilbaren lower-level BL-Framework </li></ul></ul><ul><ul><li>immerhin Realisierung in den Begriffen einer fachlichen DSL </li></ul></ul>
    42. 42. 13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Technische Abstraktionsniveau <ul><li>Frameworks </li></ul><ul><ul><li>commons </li></ul></ul><ul><ul><li>Datenpersistenz </li></ul></ul><ul><ul><li>Dependency Injection </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><li>(Kommunikations-) Schnittstellen zu anderen Systemen </li></ul><ul><ul><li>JMS </li></ul></ul><ul><ul><li>FTP </li></ul></ul><ul><ul><li>Email </li></ul></ul><ul><ul><li>… </li></ul></ul>
    43. 43. 13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Clean Coding – Verfahren (1) <ul><li>Inkrementelle Verbesserung des Codes, rechtzeitigen Reviews/Refactorings </li></ul><ul><li>Einhaltung der Grenzen einzelner Abstraktionsebenen </li></ul><ul><ul><li>auf Schnittstellen-Niveau </li></ul></ul><ul><ul><li>innerhalb der Implementierung einzelner Funktionen </li></ul></ul><ul><li>Passende Benennung der Artefakte </li></ul><ul><ul><li>Pakete/Module </li></ul></ul><ul><ul><li>Klassen </li></ul></ul><ul><ul><li>Funktionen und ihre Argumente </li></ul></ul><ul><ul><li>Instanz- bzw. lokale Variablen </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><li>Eindeutiger Kontext </li></ul>
    44. 44. 13.05.2011 Clean Coding - Theory & Praxis Guide Praxis Guide Clean Coding – Verfahren (2) <ul><li>Suche nach passender Benennung führt zu richtigen Designentscheidungen </li></ul><ul><ul><li>Pakete/Klassen/Funktionen/… ( Kontexte ) </li></ul></ul><ul><ul><ul><li>zu spezialisieren bzw. zu generalisieren </li></ul></ul></ul><ul><ul><ul><li>zu spalten bzw. in anderen Kontext auszulagern </li></ul></ul></ul><ul><ul><li>die Artefakte ähnlicher Abstraktionsniveau/Funktionalität landen in den naheliegenden/denselben Kontexten und werden sogar oft ähnlich/gleich benannt </li></ul></ul><ul><ul><ul><li>erleichtert Identifikation der Artefakte mit gleicher/ähnlicher Funktionalität </li></ul></ul></ul><ul><ul><ul><li>ermöglicht beste Implementierung auszuwählen und Redundanzen zu beseitigen </li></ul></ul></ul>
    45. 45. 13.05.2011 Clean Coding - Theory & Praxis Guide Theorie & Praxis Guide [MR09] Clean Code: A Handbook of Agile Software Craftsmanship; Robert C. Martin (aka Uncle Bob) ISBN-13: 978-0132350884 Weiterführende Informationen [CCD] Clean Code Developer – Initiative von Ralf Westphal und Stefan Lieser

    ×