Prinzipiensprachen

Post on 19-Jun-2015

212 views 0 download

description

Als Entwickler haben wir gute Ideen und weniger gute. Manchmal ist es aber gar nicht so einfach, diese voneinander zu unterscheiden. Oder wir haben das Gefühl, dass etwas gut oder schlecht ist, haben aber Schwierigkeiten, dieses zu erklären. Hier helfen Softwareentwicklungsprinzipien. Diese in schlaue Sprüche gegossene Entwicklererfahrung hilft, Argumente zu finden und zu kommunizieren. Darüber hinaus lassen sich Prinzipien untereinander verknüpfen. Dabei entstehen Prinzipiensprachen, die helfen, Entwurfsentscheidungen systematisch zu treffen und zu begründen. Im Rahmen einer Gastvorlesung an der Uni Stuttgart wurden Prinzipien und Prinzipiensprachen vorgestellt und an Beispielen erläutert.

transcript

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: christian.rehn@1und1.de

® 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