ENTWURFSPRINZIPIEN DIE SOLID-PRINZIPIEN NACH ROBERT C. MARTIN 1 / 21. Markus Just Wissenschaftliche Vertiefung

Ähnliche Dokumente
Entwurfsprinzip. Entwurfsprinzip

Langlebige Softwarearchitekturen

Die Macht, die uns umgibt. Design Prinzipien. Schneller und besser Software entwickeln Jörg Bächtiger

Lehrplan: Architektur und Design. paluno

oose. Abhängigkeiten: Die Wurzel allen Übels im Softwareentwurf. Und wie Sie sie in der Java-Entwicklung behandeln...

Gelebte Architektur und ALM in der Praxis

16 Architekturentwurf Einführung und Überblick

Bernd Ua probucon Business Consulting GmbH&Co KG. Better Code. Besseren Code mit Delphi. Bernd Ua, probucon Business Consulting GmbH&Co KG

Ziele und Tätigkeiten von Architekten

Enterprise-Softwarearchitektur und Domain Driven Design (DDD)

TDD with Contracts ein SOLIDer Ansatz

Model-View-Controller

Was die OOP-Tutorials verschweigen

CONTINUOUS DELIVERY. codecentric AG

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Das Liskovsche Substitutionsprinzip

Inhalt. 3.1 Der inkrementelle Entwurf im Überblick Flache Aufwandskurve Qualitätskriterien für den inkrementellen Entwurf...

Whitepaper. The Big Ball of Mud. Flexible Architekturen (Stand: August 2009)

Olaf Seng Thomas Genßler Benedikt Schulz. Forschungszentrum Informatik, Karlsruhe

SEP 114. Design by Contract

Clean Code. Warum sich sauberer Java-Code lohnt! JUGS-Referat von Roland Gisler Luzern, 12. September 2012

Ersetzbarkeit und Verhalten

Design for Testability in der Praxis David Völkel, codecentric AG

Objektorientierte und Funktionale Programmierung SS 2014

Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET

Refaktorisierung des Eclipse- Plugins Saros für die Portierung auf andere IDEs. Verteidigung der Bachelorarbeit von Arndt Tigges

6 Architektur-Mittel (WOMIT)

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Software Engineering. 8. Prinzipien objektorientierten Designs. Franz-Josef Elmer, Universität Basel, HS 2010

Komponentenbasierte Softwareentwicklung

Jan Schumann, G+J Manuel Pichler, Trainer & Consultant - Qafoo. Statische Codeanalyse wirklich effektiv nutzen

Created by Angelo Maron

Übungen Softwaretechnik I

Assertions (Zusicherungen)

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Bundling auf Softwaremärkten Eine technische Sicht

Vorstellung. Wie entsteht Architektur in Scrum

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Informatik II Übung 6 Gruppe 7

Techniken der Projektentwicklung

Software-Architektur Design Patterns

Softwarequalität und Softwarealterung. Anne Moormann Benedikt Scholz Michael Herbener

Softwarearchitekten. Basiswissen für. dpunkt.verlag. Foundation Level

Softwarepraktikum: Enigma

vii Inhaltsverzeichnis 1 Einleitung 1

Das Softwaresystem BASEMENT

1.3 Charakteristische Eigenschaften von objektorientierten Systemen

7. Komponenten Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Dependency Injection mit dem Unity Container

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Risikogetriebene Softwarearchitektur. STEFAN TOTH Agile Bodensee

Kapitel 3 Software Quality III

Skalierbare Enterprise Architekturen für Universal Windows Platform Apps

11/2009 Bernhard Gangl. Steuerungen mit OOP entwickeln 11 / Themenübersicht. Übersicht und Begriffsklärung: Objektorientierte Programmierung

Komponentenbasierte Softwareentwicklung mit PHP. Oliver Schlicht - bitexpert

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

OO Design. welche Methoden in welcher Klasse sind, und. diese Interagieren

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard

Iterativ. Inkrementell

Softwaretechnik 3. Klausurnachbesprechung , Phillip Ghadir

DIGICOMP OPEN TUESDAY AKTUELLE STANDARDS UND TRENDS IN DER AGILEN SOFTWARE ENTWICKLUNG. Michael Palotas 7. April GRIDFUSION

Visual Studio 2010 Jetzt auch für Architekten

Objektorientierte. Techniken und UML

Abend 7 Vererbung und Polymorphie, Abstrakte Klassen

Präsentation Interfaces

Vererbung. Was versteht man unter dem Begriff Vererbung?

Was ist Software-Architektur?

Oliver Paulus, 7. Februar Spring Framework Einführung. Oliver Paulus, Was ist Spring?

Jason T. Roff UML. IT Tutorial. Übersetzung aus dem Amerikanischen von Reinhard Engel

12.4 Sicherheitsarchitektur

Software-Evolution im Staged Lifecycle Model

Software- und Systementwicklung

Application Frameworks

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

Übersicht. Softwarearchitektur. Softwarearchitektur, UML, Design Patterns und Unit Tests. Softwarearchitektur

Softwaretechnik (Medieninformatik) Überblick: 6. Objektorientiertes Design

Adressauflösung. IP Adresse Physikalische Adresse :FF:AA:36:AB: :48:A4:28:AA:18

CamelCaseCon 2011 Vortrag von Stefan Glase am Statische Code-Analyse für Groovy & Grails mit CodeNarc

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Werkzeugunterstützte Betrachtungen von Software-Qualität und -Architekturen

Software-Entwurfsmuster

Business Applika-onen schnell entwickeln JVx Framework - Live!

Karlsruher Entwicklertag Coding Dojos im Unternehmen

Gegenseitige Beeinflussungen von Testautomatisierung, Testmanagement und Entwicklung

Team Clean Coding: Gemeinsam besser programmieren

Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung. September 2013

REST-Schnittstellen Dokumentation und Testing. Adrian Moos Technology Advisor Bedag Informatik AG

Faustregeln zu Zusicherungen

Einführung in die Programmierung mit Java. Hörsaalübung

Prinzipiensprachen Entwurfsentscheidungen treffen und darüber reden

Inhaltsverzeichnis. Eine agile Grundlage. Einführung 1. Kapitel 1 Einführung in Scrum 13

AUTOSAR. Robert Neue. PG AutoLab Seminarwochenende Oktober AutoLab

...we make the invisible visible...

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Entwurf und Umsetzung eines Werkzeugs für die Fluchtwegplanung

Department of Computer Science Chair of Software Engineering Faculty of Engineering

Client/Server-Systeme

UI-Architekturen mit JSF

Agile Softwareentwicklung mit C#

Transkript:

ENTWURFSPRINZIPIEN DIE SOLID-PRINZIPIEN NACH ROBERT C. MARTIN Markus Just 22.01.2016 Wissenschaftliche Vertiefung 1 / 21

Agenda 1) Einführung 2) SOLID- nach Robert C. Martin 3) Fazit 2 / 21

Mängel von Software Auch Software unterliegt einem Alterungsprozess Symptome des Alterungsprozesses: Änderungen sind schwer einzupflegen Anpassungen an geänderte Programmumgebungen wie z. B. Frameworks sind schwer durchzuführen Robert C. Martin: "Software verrottet und stinkt" Grund: Zu viele Abhängigkeiten im Design Starke Kopplung der Software-Komponenten führt dazu, dass bei Änderungen unerwünschte Nebeneffekte auftreten Laufendes Refactoring oder komplette Neuentwicklung der Software sinnvoll! Alterungsprozess von Software 3 / 21

Ziele für den Softwareentwurf Ein System soll: erweiterbar, korrekt, stabil, so einfach wie möglich und verständlich dokumentiert sein. Diese Ziele erreicht man hauptsächlich durch eine Minimierung der Abhängigkeiten. Zu erreichende Ziele 4 / 21

Ziele für den Softwareentwurfs Um die genannten Ziele erreichen zu können, gibt es und Konzepte, die beim Entwurf einzuhalten sind. Diese kann man folgendermaßen unterteilen: zum Entwurf von Systemen zum Entwurf einzelner Klassen zum Entwurf miteinander kooperierender Klassen Einsatz von 5 / 21

SOLID- Robert C. Martin fasste eine wichtige Gruppe von zur Erzeugung wartbarer und erweiterbarer Software unter dem Begriff SOLID zusammen. Dieser Begriff soll andeuten, dass diese für das Schreiben hochwertiger Software unabdingbar sind. Robert C. Martin erklärte diese zu den wichtigsten Entwurfsprinzipien. Die SOLID- bestehen aus: Single Responsibility Prinzip Open-Closed Prinzip Liskovsches Substitutionsprinzip Interface Segregation Prinzip Dependency Inversion Prinzip SOLID nach Robert C. Martin 6 / 21

Single Responsibility Prinzip Das SRP "There should never be more than one reason for a class to change" (Ursprünglich nur auf Klassen bezogen, seit 2014 auf Software-Module im Allgemeinen) stammt von Robert C. Martin. Es bedeutet: Jedes Software-Modul sollte nur eine einzige Verantwortlichkeit realisieren Verantwortlichkeit = Grund für eine Änderung Dem Prinzip Separation of Concerns sehr ähnlich Mehrere Verantwortlichkeiten innerhalb eines Software-Moduls führen zu zerbrechlichem Design, da bei Änderung einer Verantwortlichkeit eine andere Verantwortlichkeit beschädigt werden kann Bedeutung SRP 7 / 21

Single Responsibility Prinzip Verletzung des SRP: Anwendung des SRP: Die Klassen besitzen zwei Verantwortlichkeiten: Verbindung sowie Nachrichtenaustausch. Aufteilung der Verantwortlichkeiten auf verschiedene Klassen. Beispiel SRP 8 / 21

Open-Closed Prinzip Das OCP lautet: "Module sollten offen sein und geschlossen." Es stammt von Bertrand Meyer und fordert: Module sollen offen für Erweiterungen sein Erweiterungen sollen durch das Hinzufügen von Code durchgeführt werden können Gleichzeitig sollen Module geschlossen gegenüber Veränderungen sein, damit sie im Rahmen anderer Architekturen wiederverwendet werden können Bedeutung OCP 9 / 21

Open-Closed Prinzip Erweiterungen können in Form von statischer Vererbung oder aggregierter Abstraktion erfolgen. Dabei sollte nach dem Prinzip "Favor composition over inheritance" von Erich Gamma letzteres favorisiert werden. Person nachname vorname setnachname() setvorname() print() Student matrikelnummer "is-a"-beziehung setmatrikelnummer() printmatrikelnummer() Statische Vererbung Beobachtbar «interface» Callback- Interface Beobachter Aggegierte Abstraktion Erweiterung 10 / 21

Liskovsches Substitutionsprinzip Das LSP von Barbara Liskov formuliert Bedingungen, damit Polymorphie gefahrlos eingesetzt werden kann: Ein Objekt einer abgeleiteten Klasse muss an die Stelle eines Objekts seiner Basisklasse treten können, ohne dass ein Client dies merkt Vor- und Nachbedingungen müssen eingehalten werden, Klasseninvarianten dürfen nicht gebrochen werden (Design by Contract) Bedeutung LSP 11 / 21

Liskovsches Substitutionsprinzip Entwurf einer Vererbungshierarchie: Die Klasse Pinguin verstößt gegen das LSP, da die Methode fliegen()nicht oder nur mit leerem Methodenrumpf implementiert ist. Beispiel LSP 12 / 21

Liskovsches Substitutionsprinzip Neue Einteilung: Jede abgeleitete Klasse kann nun an die Stelle ihrer Basisklasse treten. Beispiel LSP 13 / 21

Interface Segregation Prinzip Das ISP "Clients should not be forced to depend upon methods that they do not use" stammt von Robert C. Martin und fordert: Interfaces sollen nur Methodenschnittstellen beinhalten, die den Anforderungen eines Clients oder einer Gruppe von Clients genügen Änderungen an nicht benötigten Schnittstellen sollen sich nicht auf Clients auswirken, die diese nicht benutzen "Fat interfaces" sollen vermieden werden Bedeutung ISP 14 / 21

Interface Segregation Prinzip Beispiel Verletzung des ISP: Der Druckerclient ist von Methoden abhängig, die er nicht nutzt. Lösung: Aufteilen des Interface Beispiel ISP 15 / 21

Interface Segregation Prinzip Lösung nach ISP: Multifunktionsdrucker + drucken() : void + scannen() : void + kopieren(): void IScanner IKopierer IDrucker + scannen() : void + kopieren(): void + drucken() : void «use» «use» «use» «use» Client Multifunktionsdrucker Client Drucker Clients hängen nur von ihren benötigten Schnittstellen ab. Beispiel ISP 16 / 21

Dependency Inversion Prinzip (DIP) Problem: Klassisches hierarchisches System nach Grady Booch [Boo95]: Die Klassen der höheren Ebenen sind jeweils von den Klassen einer darunterliegenden Ebene abhängig. Problem 17 / 21

Dependency Inversion Prinzip (DIP) Das DIP "High-level modules should not depend on lowlevel modules. Both should depend on abstractions. Abstractions should not depend upon details. Details should depend upon abstractions" stammt von Robert C. Martin und fordert: Eine Klasse einer höheren Ebene soll nicht von einer Klasse einer tieferen Ebene abhängig sein Hingegen soll eine Klasse einer tieferen Ebene wie auch die Klasse der höheren Ebene von einer Abstraktion abhängen Bedeutung DIP 18 / 21

Dependency Inversion Prinzip (DIP) Einführung einer Abstraktionsschicht: Statt einer Abhängigkeit der höheren Klassen zur tieferen Klasse sind beide Klassen nur noch von der Abstraktion abhängig. Dies erlaubt es, hinter der Abstraktion beispielsweise Mock-Objekte zu verwenden. Beispiel DIP 19 / 21

Fazit SOLID- sind förderlich für: Verlangsamung des Alterungsprozesses durch Reduktion von Abhängigkeiten Wartbarkeit Erweiterbarkeit Korrektheit Aber: Einhalten der erfordert Erfahrung Verstoß kommt häufig erst bei auftretenden Problemen zum Vorschein Durch rechtzeitiges Refactoring des Systems können zukünftige Probleme vermieden werden und die Lebensdauer eines Software-Systems kann um ein Vielfaches erhöht werden. Einhalten von 20 / 21

DANKE FÜR IHRE AUFMERKSAMKEIT! Markus Just 22.01.2016 Wissenschaftliche Vertiefung 21 / 21