+ All Categories
Home > Documents > Prinzipiensprachen

Prinzipiensprachen

Date post: 19-Jun-2015
Category:
Upload: 11-internet-ag
View: 212 times
Download: 0 times
Share this document with a friend
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.
85
Prinzipiensprachen Christian Rehn – 1&1 Source Center 1
Transcript
Page 1: Prinzipiensprachen

Prinzipiensprachen

Christian Rehn – 1&1 Source Center

1

Page 2: Prinzipiensprachen

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

Page 3: Prinzipiensprachen

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

Page 4: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 4

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Page 5: Prinzipiensprachen

Geschichte

® 1&1 Internet AG 2013 5

Es war einmal…

Page 6: Prinzipiensprachen

Geschichte

® 1&1 Internet AG 2013 6

QBasic, Delphi, …

Page 7: Prinzipiensprachen

Geschichte

® 1&1 Internet AG 2013 7

Page 8: Prinzipiensprachen

Geschichte

® 1&1 Internet AG 2013 8

Page 9: Prinzipiensprachen

Geschichte

® 1&1 Internet AG 2013 9

Page 10: Prinzipiensprachen

BibDB

® 1&1 Internet AG 2013 10

Page 11: Prinzipiensprachen

Warum?

® 1&1 Internet AG 2013 11

Was unterscheidet gute Lösungen von schlechten?

Page 12: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 12

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Page 13: Prinzipiensprachen

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

Page 14: Prinzipiensprachen

Es gibt viele Prinzipien

® 1&1 Internet AG 2013 14

Page 15: Prinzipiensprachen

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.

Page 16: Prinzipiensprachen

Information Hiding/Encapsulation (IH/E)

® 1&1 Internet AG 2013 16

“Objekte sind wie Abwasserleitungen”

Page 17: Prinzipiensprachen

Murphy‘s Law (ML)

® 1&1 Internet AG 2013 17

“Whatever can go wrong, will go wrong”

Page 18: Prinzipiensprachen

Murphy‘s Law (ML)

® 1&1 Internet AG 2013 18

Page 19: Prinzipiensprachen

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.”

Page 20: Prinzipiensprachen

Murphy‘s Law (ML)

® 1&1 Internet AG 2013 20

“Whatever can go wrong, will go wrong”

Page 21: Prinzipiensprachen

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

Page 22: Prinzipiensprachen

Murphy‘s Law (ML)

® 1&1 Internet AG 2013 22

“new Date(2013, 01, 12);”

Page 23: Prinzipiensprachen

Keep It Simple Stupid (KISS)

® 1&1 Internet AG 2013 23

Page 24: Prinzipiensprachen

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

Page 25: Prinzipiensprachen

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

Page 26: Prinzipiensprachen

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

Page 27: Prinzipiensprachen

Problem

® 1&1 Internet AG 2013 27

Prinzipien widersprechen einander

Page 28: Prinzipiensprachen

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

Page 29: Prinzipiensprachen

Pareto-Optimum

® 1&1 Internet AG 2013 29

Page 30: Prinzipiensprachen

Tradeoff

® 1&1 Internet AG 2013 30

Tradeoff

Page 31: Prinzipiensprachen

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

Page 32: Prinzipiensprachen

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

Page 33: Prinzipiensprachen

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);

}

Page 34: Prinzipiensprachen

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"; }

Page 35: Prinzipiensprachen

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

Page 36: Prinzipiensprachen

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

Page 37: Prinzipiensprachen

Module Communication

® 1&1 Internet AG 2013 37

Module Communication

Page 38: Prinzipiensprachen

Ripple Effects und Shotgun Surgery

® 1&1 Internet AG 2013 38

Page 39: Prinzipiensprachen

Kommunikation beschränken

® 1&1 Internet AG 2013 39

Page 40: Prinzipiensprachen

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

Page 41: Prinzipiensprachen

HC, LC und Abstraktionsstufen

® 1&1 Internet AG 2013 41

Page 42: Prinzipiensprachen

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

Page 43: Prinzipiensprachen

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

Page 44: Prinzipiensprachen

LC und HC

® 1&1 Internet AG 2013 44

Page 45: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 45

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Page 46: Prinzipiensprachen

Entwurfsentscheidungen

Modularisierung Welche Artefakte, Klassen, Methoden, etc.

Modulkommunikation Methodenaufrufe: wann, welche Klasse mit welcher anderen

SchnittstellenMethodensignaturen, Parameter, …

® 1&1 Internet AG 2013 46

Page 47: Prinzipiensprachen

Masterarbeit

® 1&1 Internet AG 2013 47

Page 48: Prinzipiensprachen

Patterns und Pattern Langauges

® 1&1 Internet AG 2013 48

Christopher Alexander:

A Pattern Language

Page 49: Prinzipiensprachen

Neue Idee: Prinzipiensprachen

® 1&1 Internet AG 2013 49

A Principle Language

Page 50: Prinzipiensprachen

Welche Aspekte sind zu bedenken?

® 1&1 Internet AG 2013 50

Wie findet man passende Prinzipien?

Page 51: Prinzipiensprachen

OOD Principle Language

® 1&1 Internet AG 2013 51

Page 52: Prinzipiensprachen

Beispiel

® 1&1 Internet AG 2013 52

Page 53: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 53

Page 54: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 54

Page 55: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 55

Page 56: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 56

Page 57: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 57

Page 58: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 58

Page 59: Prinzipiensprachen

Eine Prinzipiensprache navigieren

® 1&1 Internet AG 2013 59

Page 60: Prinzipiensprachen

Resultat

LC

KISS

RoE

TdA/IE

ML

® 1&1 Internet AG 2013 60

Page 61: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 61

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Page 62: Prinzipiensprachen

Das Wiki

® 1&1 Internet AG 2013 62

www.principles-wiki.net

Page 63: Prinzipiensprachen

Das Wiki

® 1&1 Internet AG 2013 63

Page 64: Prinzipiensprachen

Das Große Ganze

® 1&1 Internet AG 2013 64

Page 65: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 65

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Page 66: Prinzipiensprachen

Vorteile

Lernen

Entscheiden

Kommunizieren

® 1&1 Internet AG 2013 66

Page 67: Prinzipiensprachen

Lernen

® 1&1 Internet AG 2013 67

Page 68: Prinzipiensprachen

Lernen

® 1&1 Internet AG 2013 68

Page 69: Prinzipiensprachen

Entscheiden

® 1&1 Internet AG 2013 69

Page 70: Prinzipiensprachen

Entscheiden

® 1&1 Internet AG 2013 70

Page 71: Prinzipiensprachen

Kommunizieren

® 1&1 Internet AG 2013 71

Page 72: Prinzipiensprachen

Kommunizieren

® 1&1 Internet AG 2013 72

Page 73: Prinzipiensprachen

Kommunikation

® 1&1 Internet AG 2013 73

Prinzipien-Sprachen

Page 74: Prinzipiensprachen

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

Page 75: Prinzipiensprachen

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

Page 76: Prinzipiensprachen

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

Page 77: Prinzipiensprachen

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

Page 78: Prinzipiensprachen

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)

Page 79: Prinzipiensprachen

Agenda

® 1&1 Internet AG 2013 79

Motivation/Geschichte

Prinzipien

Prinzipiensprachen

Das Wiki

Vorteile

Anhang

Page 80: Prinzipiensprachen

Dependency Inversion

® 1&1 Internet AG 2013 80

Page 81: Prinzipiensprachen

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

Page 82: Prinzipiensprachen

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

Page 83: Prinzipiensprachen

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

Page 84: Prinzipiensprachen

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

Page 85: Prinzipiensprachen

OOD Principle Language

® 1&1 Internet AG 2013 85