Date post: | 19-Jun-2015 |
Category: |
Documents |
Upload: | 11-internet-ag |
View: | 212 times |
Download: | 0 times |
Prinzipiensprachen
Christian Rehn – 1&1 Source Center
1
Organisatorisches
Folien enthalten nur wenig TextBesser für PräsentationZusätzlich ausführlichere Vortragsnotizen onlineDie Vortragsnotizen geben nicht notwendigerweise 1:1 den Vortrag wieder
Feedback erwünscht
Bei FragenFragen!Wenn kurze Antworten möglich sind, gleichAnsonsten zum Ende eines Kapitels
® 1&1 Internet AG 2013 2
Vorstellung – Wer erzählt das hier alles eigentlich?
Christian Rehn, 25 Jahre, Softwareentwickler
Informatikstudium an der TU Kaiserslautern
Seit Mai im 1&1 Source Center
Blog: http://www.christian-rehn.de
Wiki: http://www.principles-wiki.net
E-Mail: [email protected]
® 1&1 Internet AG 2013 3
Agenda
® 1&1 Internet AG 2013 4
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Geschichte
® 1&1 Internet AG 2013 5
Es war einmal…
Geschichte
® 1&1 Internet AG 2013 6
QBasic, Delphi, …
Geschichte
® 1&1 Internet AG 2013 7
Geschichte
® 1&1 Internet AG 2013 8
Geschichte
® 1&1 Internet AG 2013 9
BibDB
® 1&1 Internet AG 2013 10
Warum?
® 1&1 Internet AG 2013 11
Was unterscheidet gute Lösungen von schlechten?
Agenda
® 1&1 Internet AG 2013 12
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Was unterscheidet gute Lösungen von schlechten?
Bewertung, nicht Generierung von LösungenNicht: „Wie komme ich auf eine Lösung?“
Irgendwelche Lösungen zu finden, ist oft gar nicht das Problem
Sondern: „Wie weiß ich, ob das gut ist?“
® 1&1 Internet AG 2013 13
Es gibt viele Prinzipien
® 1&1 Internet AG 2013 14
Prinzip: Definition
® 1&1 Internet AG 2013 15
Ein Prinzip ist eine Daumenregel, die gute von schlechten Lösungen
unterscheidet – in Bezug auf einen Entwurfsaspekt.
Information Hiding/Encapsulation (IH/E)
® 1&1 Internet AG 2013 16
“Objekte sind wie Abwasserleitungen”
Murphy‘s Law (ML)
® 1&1 Internet AG 2013 17
“Whatever can go wrong, will go wrong”
Murphy‘s Law (ML)
® 1&1 Internet AG 2013 18
Murphy‘s Law (ML)
® 1&1 Internet AG 2013 19
“If there’s more than one possible outcome of a job or task, and one of those outcomes will result in disaster or an undesirable consequence, then
somebody will do it that way.”
Murphy‘s Law (ML)
® 1&1 Internet AG 2013 20
“Whatever can go wrong, will go wrong”
Murphy‘s Law (ML)
Aussage Alles was schief gehen kann, wird irgendwann schiefgehen. Also ist eine
Lösung dann besser, wenn sie weniger Möglichkeiten zulässt, dass etwas schiefgeht.
BegründungMenschen machen Fehler und das wird sich nie grundlegend ändern.
Statistisch gesehen wird also auf lange Sicht, eine Fehler-Möglichkeit auch zu einem Fehler führen.
Beispiel Date date1 = new Date(2013, 01, 12);
® 1&1 Internet AG 2013 21
Murphy‘s Law (ML)
® 1&1 Internet AG 2013 22
“new Date(2013, 01, 12);”
Keep It Simple Stupid (KISS)
® 1&1 Internet AG 2013 23
Keep It Simple Stupid (KISS)
® 1&1 Internet AG 2013 24
“There are two ways of constructing a software design: One way is to make it so
simple that there are obviously no deficiencies, and the other way
is to make it so complicated that there are no obvious deficiencies.” – Tony Hoare
Keep It Simple Stupid (KISS)
Aussage Einfache Lösungen sind besser als komplizierte.
BegründungWenn etwas einfacher ist, kann man es einfacher verstehen und ändern.Wenn etwas einfacher ist, macht man weniger Fehler.
Beispiel Eine Lösung ohne komplizierte Sprachfeatures wie polymorphe Enums,
innere Klassen und tiefe Vererbungshierarchien, …
® 1&1 Internet AG 2013 25
Generalization Principle (GP)
Aussage Mächtige, allgemein anwendbare Lösungen sind besser als
Speziallösungen.
BegründungAllgemeine Lösungen sind wiederverwendbarWenn sich die Anforderungen ändern, muss man spezielle Lösungen eher
ändern
Beispiel Funktionen mit Parametern, wiederverwendbare Klassen, Generics, …
® 1&1 Internet AG 2013 26
Problem
® 1&1 Internet AG 2013 27
Prinzipien widersprechen einander
Beispiel
Anforderung:√2 wird benötigt
Mehrere Möglichkeiten1.final double SQRT_2 = 1.4142135623730951;2.double sqrt_2() {…}3.double sqrt(double r) {…}4.double power(double base, double exponent) {…}5.class ComplexPolynomRootCalculator
® 1&1 Internet AG 2013 28
Pareto-Optimum
® 1&1 Internet AG 2013 29
Tradeoff
® 1&1 Internet AG 2013 30
Tradeoff
Principle of Separate Understandability (PSU)
Aussage Jedes Modul sollte separat verständlich sein.
BegründungAndere Module lesen und verstehen zu müssen kostet unnötig Zeit und ist
fehleranfällig.
Beispiel… folgt auf den nächten Folien …
® 1&1 Internet AG 2013 31
Principle of Separate Understandability (PSU)
// Anforderung:
printStatistics('d', 0); // „There are 0 ds“
printStatistics('d', 1); // „There is 1 d“
printStatistics('d', 25); // „There are 25 ds“
® 1&1 Internet AG 2013 32
Principle of Separate Understandability (PSU)
private void printStatistics(
char ch, int count) {
String number; String verb;
String pluralModifier;
if (count == 0) {
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1) {
number = "1";
verb = "is";
pluralModifier = "";
® 1&1 Internet AG 2013 33
} else {
number =
Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String message =
String.format("There %s %s %s
%s", verb, number, ch,
pluralModifier);
System.out.println(message);
}
Principle of Separate Understandability (PSU)
class StatisticsMessage {
private String number;
private String verb;
private String pluralModifier;
…
public String make(
char ch, int
count) {
createMessageParts(count);
return String.format(
"There %s %s %s
%s",
verb, number, ch,
pluralModifier);
}
® 1&1 Internet AG 2013 34
private void createMessageParts( int count) { if (count == 0) thereAreNoLetters(); else if (count == 1) thereIsOneLetter(); else thereAreManyLetters(count); }
private void thereAreNoLetters() { number = "no"; verb = "are"; pluralModifier = "s"; }
…
Principle of Separate Understandability (PSU)
private String composeStatistics(char candidate, int count) {
Number number = requiresPluralForm(count) ?
PLURAL : SINGULAR;
return "There "
+ thirdFormOfToBe(number) + " "
+ countToString(count) + " "
+ declineLetter(candidate, number));
}
® 1&1 Internet AG 2013 35
Principle of Separate Understandability (PSU)
private boolean requiresPluralForm(int count) {
return count != 1;
}
private String thirdFormOfToBe(Number number) {
return number == SINGULAR ? "is" : "are";
}
private String countToString(int count) {
return count == 0 ? "no" : Integer.toString(count);
}
private String declineLetter(char letter, Number number) {
return number == SINGULAR ?
Character.toString(letter) : letter + "s";
}
® 1&1 Internet AG 2013 36
Module Communication
® 1&1 Internet AG 2013 37
Module Communication
Ripple Effects und Shotgun Surgery
® 1&1 Internet AG 2013 38
Kommunikation beschränken
® 1&1 Internet AG 2013 39
Bindung und Kopplung
Cohesion/BindungMaß für den Zusammenhalt eines Moduls
Coupling/KopplungMaß für die Abhängigkeiten zwischen den Modulen
® 1&1 Internet AG 2013 40
HC, LC und Abstraktionsstufen
® 1&1 Internet AG 2013 41
Low Coupling (LC)
® 1&1 Internet AG 2013 42
Aussage Die Kopplung zwischen Modulen sollte lose sein.
BegründungEine starke Kopplung zwischen den Modulen A und B bedeutet, dass
o.B.d.A. Modul A viele Annahmen über Modul B macht. Durch Weiterentwicklung werden manche der Annahmen falsch werden. Es entstehen Ripple Effects. Je weniger Annahmen/Abhängigkeiten da sind, desto geringer ist die Wahrscheinlichkeit, dass Ripple Effects auftreten.
Beispiel ###ToDo: beispiel
High Cohesion (HC)
® 1&1 Internet AG 2013 43
Aussage Die Bindung in einem Modul sollte stark sein.
BegründungEine schwache Bindung würde bedeuten, dass gewisse Teile des Moduls
„thematisch“ dort nicht hingehören. Zum einen verschlechtert das die Lesbarkeit. Zum anderen bedeutet das ja auch, dass eine Änderung in dem Modul sich auf Teile auswirken kann, die thematisch gar nicht betroffen sein müssten. Auch das sind Ripple Effects.
Beispiel ###ToDo: beispiel
LC und HC
® 1&1 Internet AG 2013 44
Agenda
® 1&1 Internet AG 2013 45
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Entwurfsentscheidungen
Modularisierung Welche Artefakte, Klassen, Methoden, etc.
Modulkommunikation Methodenaufrufe: wann, welche Klasse mit welcher anderen
SchnittstellenMethodensignaturen, Parameter, …
…
® 1&1 Internet AG 2013 46
Masterarbeit
® 1&1 Internet AG 2013 47
Patterns und Pattern Langauges
® 1&1 Internet AG 2013 48
Christopher Alexander:
A Pattern Language
Neue Idee: Prinzipiensprachen
® 1&1 Internet AG 2013 49
A Principle Language
Welche Aspekte sind zu bedenken?
® 1&1 Internet AG 2013 50
Wie findet man passende Prinzipien?
OOD Principle Language
® 1&1 Internet AG 2013 51
Beispiel
® 1&1 Internet AG 2013 52
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 53
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 54
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 55
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 56
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 57
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 58
Eine Prinzipiensprache navigieren
® 1&1 Internet AG 2013 59
Resultat
LC
KISS
RoE
TdA/IE
ML
® 1&1 Internet AG 2013 60
Agenda
® 1&1 Internet AG 2013 61
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Das Wiki
® 1&1 Internet AG 2013 62
www.principles-wiki.net
Das Wiki
® 1&1 Internet AG 2013 63
Das Große Ganze
® 1&1 Internet AG 2013 64
Agenda
® 1&1 Internet AG 2013 65
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Vorteile
Lernen
Entscheiden
Kommunizieren
® 1&1 Internet AG 2013 66
Lernen
® 1&1 Internet AG 2013 67
Lernen
® 1&1 Internet AG 2013 68
Entscheiden
® 1&1 Internet AG 2013 69
Entscheiden
® 1&1 Internet AG 2013 70
Kommunizieren
® 1&1 Internet AG 2013 71
Kommunizieren
® 1&1 Internet AG 2013 72
Kommunikation
® 1&1 Internet AG 2013 73
Prinzipien-Sprachen
Fazit
PrinzipienSind wiederverwendbare von ErfahrungUnterscheiden gute von schlechten Lösungen
Prinzipiensprachen Vernetzen PrinzipienZeigen weiterführende Aspekte aufBilden ein Vokabular
www.principles-wiki.net
® 1&1 Internet AG 2013 74
Ausblick
Das Wiki wird ständig erweitert und ausgebaut
Weitere Prinzipien Prinzipiensprachen
Vernetzung von Patterns mit Prinzipien
Mitarbeit willkommen
® 1&1 Internet AG 2013 75
Ausblick: Ideen
Prinzipiensprachen fürAndere Programmierparadigmen
Prozedurale, funktionale, dynamische, 4GL etc. Programmierung
Andere AbstraktionsstufenArchitektur, Coding, Anforderungsanalyse, …
Andere Arten von DesignGUI Design, Webdesign, Mobile UI Design, …DB-Entwurf, API Design, Communication Protocol Design, …
Nicht-Funktionale AnforderungenSecurity, Performance, Usability, …
Spezielle DomänenEmbedded Systems, Enterprise Information Systems, Spiele, …Medizin, Finanzen, Automotive, …
® 1&1 Internet AG 2013 76
Vielen Dank für Ihre Aufmerksamkeit
Zeit für Fragen…
77
klassisch viajobs.1und1.de
Karriere bei 1&1
Unternehmen kennenlernen
Kontaktnetzwerk knüpfen
Optimalen Job finden
Speziell für Entwickler
Source Center
® 1&1 Internet AG 2013
Wie funktioniert das Source Center?
Einarbeitung (Technologien, Prozesse, Kultur)
Teameinsatz (~6 Monate produktiver Einsatz)
Fach-/Technologische Spezifika kennenlernen
Soziales Netzwerk aufbauen
Standort übergreifender Einsatz möglich (finanziert AG)
Wechsel in dauerhafte Position jederzeit möglich (Gegenseitigkeit)
Agenda
® 1&1 Internet AG 2013 79
Motivation/Geschichte
Prinzipien
Prinzipiensprachen
Das Wiki
Vorteile
Anhang
Dependency Inversion
® 1&1 Internet AG 2013 80
Beispiel: Rahmenbedingungen
Rahmenbedingungen:Eine Software verwendet intern ExceptionsAn der Schnittstelle werden aber auch technischen Gründen (REST)
Fehlercodes erwartetAnforderung: Exceptions in HTTP Response Codes übersetzen
® 1&1 Internet AG 2013 81
Beispiel: Lösung 1 – alles fangen
public Response doSomethong() {
try {
…
} catch (SomeException e) {
return Response.status(NOT_FOUND).build();
} catch (OtherException e) {
return Response.status(BAD_REQUEST).build;
}
}® 1&1 Internet AG 2013 82
Beispiel: Lösung 2 – Exception Mapper pro Exception
public class SomeExceptionMapper implements
ExceptionMapper<SomeException> {
public Response toResponse(SomeException exception) {
return Response.status(NOT_FOUND).build();
}
}
® 1&1 Internet AG 2013 83
Beispiel: Lösung 3 – Ein Exception Mapper
public class BaseExceptionMapper implements
ExceptionMapper<BaseException> {
public Response toResponse(BaseException exception) {
return Response.status(exception.getStatus()).build();
}
}
® 1&1 Internet AG 2013 84
OOD Principle Language
® 1&1 Internet AG 2013 85