Komponenten-basierte Entwicklung. Teil 17: Einige Prinzipien guter Software- Entwicklung
|
|
- Frieder Schuster
- vor 6 Jahren
- Abrufe
Transkript
1 Komponenten-basierte Entwicklung Teil 17: Einige Prinzipien guter Software- Entwicklung Komponenten WS 2014/15 Teil 17/Gute Software
2 Literatur [17-1] Martin, Robert: Clean Code. Mitp, 2009 [17-2] Passig, Kathrin; Jander, Johannes: Weniger schlecht programmieren. O'Reily, 2013 [17-3] Martin, Robert: Principles of OOD. [17-4] Martin, Robert: Agile Software Development. Principles, Patterns, and Practices. Prentice Hall, 2002 [17-5] Hunt, Andrew; Thomas, David: The Pragmatic Programmer. Addison- Wesley, 2000 [17-6] Pragmatic Programmer Quick Reference Guide: [17-7] Liskov, B. H.; Wing, J. M. (November 1994). "A behavioral notion of subtyping". ACM Trans. Program. Lang. Syst. 16 (6): Verbesserte Version: [17-8] Martin, Robert: The Liskov Substitution Principle. C++ Report, Komponenten WS 2014/15 Teil 17/Gute Software 2
3 Robert Martins Meinung Bei komplexen Software-Produkten sollten folgende Aspekte beachtet werden, siehe dazu [17-4]: Rigidity: Bei jeder Änderung muss beachtet werden, dass zu viele oder nicht beabsichtigte Teile zugleich verändert werden. Fragility: Bei jeder Änderung können unerwartet andere Teile der Software fehlerhaft werden. Immobility: Es ist schwer einen Teil bestehender Software zwecks Wiederverwendung aus seinem Kontext heraus zu lösen. Um dieser drei Aspekte zu reduzieren dienen die in diesem Teil vorgestellten Prinzipien. Komponenten WS 2014/15 Teil 17/Gute Software 3
4 Information Hiding I Es dürfen nur Informationen über die Benutzung einer Schnittstelle erkennbar sein, nie Informationen über die Implementierung. Die zur Benutzung erforderlichen Informationen (Parameterliste, Datentypen) müssen auch minimal sein. Durch die Trennung (Abstraktion) der Schnittstelle von deren Implementierung, kann ohne Modifikation der benutzenden Software die betreffende Sache (Klasse, Modul, Funktion etc.) geändert werden. Unter Schnittstelle werden in Java nicht nur Interfaces, sondern auch Signaturen von Methoden sowie Typ und Name von public-attributen verstanden. Komponenten WS 2014/15 Teil 17/Gute Software 4
5 Information Hiding II - Variante Die Sichtbarkeit einer Schnittstelle muss so klein wie möglich sein. Statt public sollte protected oder noch besser private benutzt werden, wenn nicht andere Gründe dagegen sprechen. Grund: Die Auswirkungen von Änderungen sollten so klein wie möglich sein, oder: der von einer Sache unabhängige Bereich sollte so groß wie möglich sein. Denn: Etwas nicht Sichtbares kann nicht benutzt werden. Komponenten WS 2014/15 Teil 17/Gute Software 5
6 DRY Don't Repeat Yourself Jede innerhalb der Software gelöste (Teil-)Aufgabe hat nur eine einzige Stelle der Implementierung. Dadurch ist eine Fehlerbeseitigung nur an einer Stelle notwendig. Wenn an mehreren Stellen Dasselbe oder Ähnliches realisiert wurde, können bei Fehlerbeseitigungen Stellen vergessen werden. Der Code-Umfang wird kleiner. Kurzer Code ist leichter zu verstehen als langer Code. Komponenten WS 2014/15 Teil 17/Gute Software 6
7 Design by Contract I Die Benutzung von Teilen einer Software verläuft über eine Schnittstelle (Interface), die als Vertrag fungiert. Ein Vertrag besteht aus Preconditions = Bedingungen, die der Vertrag voraussetzt, also zum Beginn der Benutzung erfüllt sein müssen Postconditions = Bedingungen, die nach Benutzung gelten Invarianten = Bedingungen, die während der Ausführung immer erfüllt sind Die Idee stammt von Bertrand Meyer, dem Erfinder der Programmiersprache Eiffel. Komponenten WS 2014/15 Teil 17/Gute Software 7
8 Design by Contract II Verträge/Schnittstellen zwischen Teilen von Software bilden die Basis für Unit-Tests, die möglichst automatisiert ablaufen sollten. Die Spezifikation einer Schnittstelle einer Unit" (Klasse, Funktion, Modul, Komponente) sollte das einzige sein, das getestet wird. Umgekehrt: Immer gegen Schnittstellen, nie gegen (spezielle) Implementierungen programmieren. Oder anders: Nie spezielle Eigenschaften, z.b. public-variablen, bei der Benutzung ausnutzen oder voraussetzen. Komponenten WS 2014/15 Teil 17/Gute Software 8
9 Exceptions Verwende Exceptions nur Behandlung von Problemen, die ein Benutzer/Aufrufer selbst lösen kann. Verwende Exceptions nur bei Verletzung der Vorbedingungen des Vertrages. Nicht behandelbare Ausnahmen sollten zum Abbruch nach einem Logging und einer ausführlichen Diagnose führen, z.b. Plattenfehler oder Durchtrennung eines Ethernet-Kabels. Behandelbare Ausnahmen werden häufig durch Prüfung eines bestimmten Zustands festgestellt. Ob solch ein Zustand vorliegt, kann der Benutzer durch eine sog. State-Testing Methode, z.b. im Iterator-Interface hasnext(), erfragen. Komponenten WS 2014/15 Teil 17/Gute Software 9
10 SOLID Single responsibility principle Eine Klasse soll genau eine Aufgabe lösen. Open/closed principle Funktionserweiterungen sollten nicht durch Modifikation der Codes erfolgen. Liskov substitution principle Unterklassen dürfen die Verträge ihrer Superklassen nicht verletzen. Interface segregation principle Interfaces sollen nicht allgemein, sondern spezifisch auf das Ziel gerichtet sein. Dependency inversion principle Abhängigkeiten sollten immer von benutzten Klassen zu benutzenden bestimmt werden. Komponenten WS 2014/15 Teil 17/Gute Software 10
11 Single responsibility principle I Realisiere eine Klasse immer so, dass sie genau eine Aufgabe vollständig, also in sich geschlossen, löst. Responsibility = eigentlich Verantwortung, hier Aufgabe oder Aufgabenlösung Anders formuliert: Es gibt immer nur einen einzigen Grund eine Klasse zu verändern, nämlich Beseitigung eines Fehlers oder Verbesserung der Performanz einer einzigen Aufgabenlösung. Durch dieses Prinzip werden die Klassen kleiner und einfacher zu verstehen. Typische Verletzungen dieses Prinzips: Die Klasse und ihre Erzeugung zusammen zu fassen, z.b. im Singleton-Muster. Komponenten WS 2014/15 Teil 17/Gute Software 11
12 Single responsibility principle II Zerlege komplexe Aufgaben in Teilaufgaben, die jeweils in separaten Klassen gelöst werden. Das Zerlegen kann nach der traditionellen Methode der Schrittweisen Verfeinerung (Stepwise Refinement) erfolgen. Typisch maximale Klassengrößen (zur Orientierung): Methode: Zeilen (Bildschirmgröße) Klasse: Zeilen Dies ohne Kommentare und Leerzeilen. Hiervon kann es berechtigte Ausnahmen geben, z.b. aufgrund von switch-statements. Komponenten WS 2014/15 Teil 17/Gute Software 12
13 Open/closed principle I Klassen sollen offen für Erweiterungen, aber gleichzeitig geschlossen für Veränderungen bestehenden Codes sein. Jede bestehende Klasse erfüllt einen Vertrag, an den sich alle diese Klasse benutzenden Klassen halten. Eine Veränderung dieses Vertrags durch Erweiterung der Funktionalität aufgrund von Code-Modifikation führt zu sehr komplexen Veränderungen, daher geschlossen". Wenn die realisierte Aufgabe vollständig ist (Single responsibility principle), kann durch eine einfache Vererbung eine neue Funktionalität und damit ein neuer Vertrag realisiert werden. Komponenten WS 2014/15 Teil 17/Gute Software 13
14 Open/closed principle II Class_A meth_a() Class_B meth_c() Vertrag A Vertrag B Die Methode kann nur dann sinnvoll überschrieben werden, wenn die neue Semantik nicht mit der alten meth_b (aus Class_A) kollidiert. Der Vertrag durch Class_B sind anders als der Vertrag A aus. Software, die nach Vertrag_A die Klasse Class_A benutzen, können dies unabhängig weiter tun. Dies ist ein typisches Beispiel für eine semantische Erweiterung ohne Effekte auf bestehende Software. Komponenten WS 2014/15 Teil 17/Gute Software 14
15 Open/closed principle III - Variationen Class_A meth_a() <<interface>> Interface_A meth_a() <<realize>> <<realize>> Class_B CLass_C Class_A Class_B meth_a() meth_a() meth_a() meth_a() Hier bleibt eine abstrakte Klasse "geschlossen". Hier ist es ein Interface, was "geschlossen" ist und trotzdem erweitert wird. Komponenten WS 2014/15 Teil 17/Gute Software 15
16 Liskov substitution principle I Entwirf Unterklassen immer nur so, dass dessen Objekte den Vertrag Ihrer Oberklasse erfüllen können. Dieses Prinzip geht auf Barbara Liskov zurück, die dies so beschrieben hat [17-7]: Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S, where S is a subtype of T. Anders ausgedrückt: Objekte von Unterklassen, die diesen Prinzip gehorchen, können Objekte ihrer Oberklasse in Programmen, die nur die Oberklasse benutzen, ersetzt werden, ohne dass die Software fehlerhaft wird. Komponenten WS 2014/15 Teil 17/Gute Software 16
17 Liskov substitution principle II Oder noch anders ausgedrückt: Vererbung sollte nur so benutzt werden, dass die Semantik der Oberklasse bei der Benutzung der Unterklasse erhalten bleibt. Class_C call meth_a() Class_A Class_A Call meth_a() meth_a() Class_B Class_C Class_B call meth_a() meth_c() meth_c() call So programmiert und muss auch so laufen Komponenten WS 2014/15 Teil 17/Gute Software 17
18 Interface segregation principle Achte darauf, dass Schnittstellen minimal in dem Sinne sind, dass nur eine einzige Aufgabe damit erfüllt wird. Segregation = hier: Aufteilung, Trennung Komplexe Leistungen sollen auf mehrere Schnittstelle, die sinnvolle Teilaufgaben lösen erlauben, aufgeteilt werden. Diese Teilschnittstellen können über umfassende zusammengefasst werden, wobei die Benutzung der Zusammenfassung nicht erzwungen ist. Komplexe Schnittstelle für mehrere Aufgaben würden Klasse dazu zwingen, mehr als eine Aufgabe zu erfüllen, was ein Verstoß gegen das Single Responsibility Prinzip wäre. Es darf die Implementierung von Methoden nicht erzwungen werden, die auf der benutzende Seite nicht benutzt werden. Komponenten WS 2014/15 Teil 17/Gute Software 18
19 Dependency inversion principle I Die Verknüpfung von benutzten Klassen/Objekten sollte immer unabhängig von den benutzenden Klassen/Objekten erfolgen. Anders formuliert: Die Bestimmung von welcher Klasse/Objekt eine Abhängigkeit besteht liegt nicht in der Hand der Klasse, die die Abhängigkeit eingeht. Oder: Der Zusammenbau von Objekten (Linking) wird nicht von der benutzenden Seite bestimmt. Der Code muss so gestaltet werden, das diese Umkehrung der Kontrolle realisiert werden kann. Eine Art dies zu implementieren ist Dependency Injection. Komponenten WS 2014/15 Teil 17/Gute Software 19
20 Dependency inversion principle II Die Benutzt-Relation sollte immer vom Aufrufer zum Aufgerufenen über eine Schnittstelle erfolgen, um Austauschbarkeit des Aufgerufenen zu gewährleisten. Class_A <<call>> <<interface>> Interface Durch den Gang über eine Schnittstelle wird von der konkreten benutzten Klasse abstrahiert. <<realize>> <<realize>> Class_B1 Class_B2 Zwischen Class_A und einer von Class_B liegt ein Interface (als Abstraktion). Class_A hängt vom Interface ab, während alle Class_B's dies implementieren. Komponenten WS 2014/15 Teil 17/Gute Software 20
21 Dependency inversion principle III Die Entscheidung, was ein Aufrufer konkret aufruft, wird dem Aufrufer weggenommen und einer anderen Instanz überlassen. Es geht also um eine Entkopplung zwischen Aufrufer und Aufgerufenen. Der Begriff Dependency ist sehr unglücklich gewählt, da eine Abhängigkeit des Aufrufers immer vom Aufgerufenen besteht. Benutzt Relation = A benutzt B, wenn A von der Korrektheit von B abhängig ist. Komponenten WS 2014/15 Teil 17/Gute Software 21
22 Dependency inversion principle IV Zitat von Robert Martin: High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions. Das ist nur dann verständlich, wenn Low-Level-Module, die ja aufgerufen werden, von Interface (Abstractions) auf der Ebene des Compilers abhängen, nicht jedoch auf der Ebene von Objekten. Komponenten WS 2014/15 Teil 17/Gute Software 22
23 Komposition vor Vererbung I Bevorzuge die Komposition gegenüber der Vererbung. Vererbungen erzeugen immer enge Kopplungen und sehr häufig unverständliche Software. Komposition erlaubt per Dependency Injection aufgrund der losen Kopplung auch Freiheit im Zusammenbau von Objekt- Geflechten. Komponenten WS 2014/15 Teil 17/Gute Software 23
24 Komposition vor Vererbung II Class_A meth_a() Class_B myb : Class_A instanziiert Class_A meth_a() <<call>> Class_B In wird meth_a() aufgerufen In wird myb.meth_a() aufgerufen Es wird eine Methode der Oberklasse in aufgerufen. Über eine Instanz von Class_A wird in die Methode aufgerufen. Komponenten WS 2014/15 Teil 17/Gute Software 24
25 Abtrennung von variablen Teilen Trenne absehbar in Zukunft zu ändernde Teile einer Klasse von Dingen, die absehbar konstant bleiben. Verlagere die variable Teile in eigene Klassen und benutze diese über ein Interface. Class_A meth_a() meth_a() ruft auf. Class_A myb : Interface meth_a() <<call>> <<interface>> Interface variiert von Applikation zu Applikation meth_a() ruft myb. auf <<realize>> Class_B1 <<realize>> Class_B2 Enge Kopplung mit variablen Aspekten. Lose Kopplung mit variablen Aspekten. Komponenten WS 2014/15 Teil 17/Gute Software 25
26 Nach dieser Anstrengung etwas Entspannung... Komponenten WS 2014/15 Teil 17/Gute Software 26
Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius
Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius Huber @ThomasClaudiusH BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH
MehrENTWURFSPRINZIPIEN DIE SOLID-PRINZIPIEN NACH ROBERT C. MARTIN 1 / 21. Markus Just Wissenschaftliche Vertiefung
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
MehrObjektorientierte Programmierung (OOP)
orientierte Programmierung (OOP) 1. Motivation Die objektorientierte Sichtweise der Welt Als Motivation für die OOP sieht man sich am besten die reale Welt an: Die reale Welt besteht aus "en", z. B.: Gegenstände,
MehrPraxisbuch Objektorientierung
Bernhard Lahres, Gregor Rayman Praxisbuch Objektorientierung Von den Grundlagen zur Umsetzung Galileo Press 1.1 Was ist Objektorientierung? 11 1.2 Hallo liebe Zielgruppe 12 1.3 Was bietet dieses Buch (und
MehrErsetzbarkeit und Verhalten
Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void
MehrEntwurfsprinzip. Entwurfsprinzip
Die Komposition (hat ein Beziehung) ist der Vererbung (ist ein Beziehung) vorzuziehen. Es können Familien von Algorithmen in eigenen Klassensätzen gekapselt werden. Das Verhalten lässt sich zu Laufzeit
MehrDie Macht, die uns umgibt. Design Prinzipien. Schneller und besser Software entwickeln. 2012 Jörg Bächtiger
Die Macht, die uns umgibt Design Prinzipien Schneller und besser Software entwickeln 2012 Jörg Bächtiger Joerg.Baechtiger@Abraxas.ch http://www.xing.com/profile/joerg_baechtiger Übersicht geben Zusammenhänge
MehrObjektorientierte Programmierung
Bernhard Lahres, Gregor Rayman Objektorientierte Programmierung Das umfassende Handbuch Galileo Press 1.1 Was ist Objektorientierung? 13 1.2 Hallo liebe Zielgruppe 14 1.3 Was bietet dieses Buch (und was
MehrWarum Programme Verträge schließen sollten
1 Warum Programme Verträge schließen sollten RALF HINZE Institut für Informatik, Lehrstuhl Softwaretechnik, Universität Freiburg Georges-Köhler-Allee, Gebäude 079, 79110 Freiburg i. Br. Email: ralf@informatik.uni-bonn.de
MehrObjektorientierte Programmierung III
Objektorientierte Programmierung III OOP Kapselung: Gruppierung von Daten und Funktionen als Objekte. Definieren eine Schnittstelle zu diesen Objekten. Vererbung: Erlaubt Code zwischen verwandten Typen
MehrCreational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.
Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational
MehrKonzepte der Programmiersprachen
Konzepte der Programmiersprachen Sommersemester 2010 4. Übungsblatt Besprechung am 9. Juli 2010 http://www.iste.uni-stuttgart.de/ps/lehre/ss2010/v_konzepte/ Aufgabe 4.1: Klassen in C ++ Das folgende C
MehrDie SOLID-Prinzipien Fünf Grundsätze für bessere Software
ESE Kongress 2014 Vortragsskript: Die SOLID-Prinzipien Fünf Grundsätze für bessere Software Frank Listing, MicroConsult GmbH Die Qualität der Software ist nicht in allen Projekten ideal, und deshalb werden
MehrDesign Patterns II. Der Design Muster Katalog. Prof. Dr. Nikolaus Wulff
Design Patterns II Der Design Muster Katalog Prof. Dr. Nikolaus Wulff Wiederverwendung Wiederverwendung ist das Schlagwort von OOP zur Erhöhung der Produktivität. Es gibt im Prinzip drei Methoden hierzu:
MehrClient-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
MehrAnwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie
Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,
MehrProgrammierkurs C++ Abstrakte Klassen und Methoden
Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double
MehrProgrammierwerkstatt. Objektorientierung und Korrektheit von Programmen
Programmierwerkstatt Objektorientierung und Korrektheit von Programmen Zum Inhalt Wir wollen Euch: das Wesentliche vermitteln Fehlerquellen verdeutlichen Verständnis ist uns wichtig programming by coincidence
Mehr7. Zusammenfassung (1)
Typisierung in OO-Sprachen Subtyping vs. Subclassing Untertypen für Typkonstrukte Funktionsuntertypen und Überschreiben Generik Einsatz von Vererbung konzeptioneller Entwurf: Abstraktion Spezialisierung
MehrEinführung in die Programmiersprache Java II
Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden
MehrSoftware-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)
2014-01-08 Software-Entwurfsmuster (weitere) 1 185.A01 OOP Software-Entwurfsmuster (weitere) 2014-01-08 Software-Entwurfsmuster (weitere) 2 OOP Vererbung versus Delegation class A { public void x() { z();
MehrOOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik
Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik
Mehr7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
MehrWeitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax
Weitere Beispiele Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts public interface Funktion { boolean istimdefbereich(double x); double wert(double x); String gibbeschreibung(); public interface
MehrProgrammierkurs Java
Programmierkurs Java Abstrakte Klassen und Methoden & Interfaces Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie
Mehr1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen?
Kapitel 2 1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen? 1. Durch das Verwenden von Untertypbeziehungen: Untertypen können oft einen Großteil
MehrÜberblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio
Entwurfsmuster Eine Einführung Botond Draskoczy Marcus Vitruvius Pollio Überblick Historie, Literatur Das Flugapparat-Bildschirmschoner-Projekt (FBP) Das internetbasierte Solar-Netzwerk (SNW) Zusammenfassung
MehrUniversität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich WS 02/03 Warum muss ein Objekt wissen, zu welcher Klasse es gehört? Damit die Klassenzugehörigkeit
MehrThomas Schissler MVP Visual Studio ALM, artiso AG
Thomas Schissler MVP Visual Studio ALM, artiso AG Kurs-Übersicht Moderne Softwareentwicklung 01 Überblick Was macht moderne Software-Entwicklung aus? 02 Projektmanagement Wie funktioniert modernes Projektmanagement
MehrErsetzbarkeit und Verhalten
Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void
Mehr14. Java Objektorientierung
Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen
MehrObjektorientierte Programmierung mit Java
David J. Barnes Michael Kölling Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Übersetzt von Axel Schmolitzky, Universität Hamburg PEARSON Studium ein Imprint von Pearson
MehrVerträge und objektorientierter Entwurf
Verträge und objektorientierter Entwurf Überblick Was dieses Video behandelt: Design by Contract (etwa: Entwurf gemäß Vertrag) als Richtlinie beim objektorientierten Entwurf Verträge Vererbung Invarianten
MehrOOSE 01 JAVA MIT BLUEJ UND UML-BY-EXAMPLE
OOSE 01 JAVA MIT BLUEJ UND UML-BY-EXAMPLE Nutzung des AMCS (Auditorium Mobile Classroom Service) https://amcs.website Einloggen/Registrieren mit beliebigem Pseudonym Passwort Kurs Softwaretechnologie PIN:
MehrNeben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
Mehr11. Komponenten Grundlagen der Programmierung 1 (Java)
11. Komponenten Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 10. Januar 2006 Einordnung im Kontext der Vorlesung
MehrEntwurfsmuster (Design Patterns)
Entwurfsmuster (Design Patterns) SEP 303 Entwurfsmuster (Design Patterns) In der alltäglichen Programmierarbeit tauchen viele Probleme auf, die man schon einmal gelöst hat und die man in der Zukunft wieder
MehrVererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus
Vererbung Generalisierung und Spezialisierung Vererbung und Polymorphismus Wir wollen in unserem Aquarium verschiedene Arten von Fischen schwimmen lassen. In einem ersten Ansatz definieren wir nicht nur
MehrSchlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:
Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -
MehrVererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
Mehr7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure
7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG
MehrSystematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015
Systematisches Testen der Funktionalität von Softwaresystemen 17. Juni 2015 Überblick Semantische Qualität von Software Teststrategien und prinzipien Testgetriebene Softwareentwicklung Welche Arten von
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrBehutsame Modernisierung
Software Evolution mit Legacy Systemen Forum Forschungsförderung / ViSEK Trends im Software Engineering Software Evolution mit Legacy Systemen Behutsame Modernisierung Jan Wloka
MehrBeuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1
Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1 Parameter-Übergabe-Mechanismen in Java und in anderen Sprachen. 1. Methoden vereinbaren mit Parametern Wenn man (z.b. in Java) eine Methode
MehrMatthias Geirhos. Entwurfsmuster. Das umfassende Handbuch. Rheinwerk. Computing
Matthias Geirhos Entwurfsmuster Das umfassende Handbuch Rheinwerk Computing Inhalt Vorwort 17 1 Einführung 19 1.1 Einleitung und allgemeine Hinweise 19 1.1.1 Für wen ist dieses Buch gedacht? 19 1.1.2 Muster
MehrDesign Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26
Design Patterns (Software-Architektur) Prof. Dr. Oliver Braun Letzte Änderung: 11.07.2017 15:12 Design Patterns 1/26 Standardwerk Gang of Four: Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides:
MehrProgrammieren 2 C++ Überblick
Programmieren 2 C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 5. Behälter und Iteratoren 6. Templates
MehrOOSE 13 Objektorientierter Entwurf (OOD) (Hörsaalübung)
OOSE 13 Objektorientierter Entwurf (OOD) (Hörsaalübung) SS 2015 Birgit Demuth Analyse Anforderungs- Ermittlung Von der Analyse zum Entwurf System- Modelierung Anforderungs- Spezifikation (Pflichtenheft)
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2
HSR Rapperswil 2001 Markus Rigling Programmieren: Vererbung 1 Variante 2 Inhaltsverzeichnis: 1. Was ist Vererbung...3 2. Anwendung...3 3. Realisierung...3 4. Vorgehensweise zur Erstellung einer Kind-Klasse...3
Mehrmonika.heiner@informatik.tu-cottbus.de SS 2013 1.4-1 / 16 schrittweise Verfeinerung -> Wirth, 1971, Programm Development by Stepwise Refinement
IMPLEMENTIERUNGSSTRATEGIE bis jetzt: Programmstruktur für Programmieren im Kleinen jetzt: Programmstruktur für Programmieren im Großen zunächst allgemein, d. h. sprachunabhängig monika.heiner@informatik.tu-cottbus.de
MehrInformatik II Übung 6 Gruppe 7
Informatik II Übung 6 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch DEBRIEFING Übung 5 2 U5A1-4 Im Prinzip alles richtig. Falls am Ende noch Zeit, dann Einsicht in die Best Of s 3 THEORIE Java Vererbung,
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 13: Interfaces Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme 1. Teil: Interfaces Motivation Eigenschaften Besonderheiten Anonyme Klassen Lambda-Ausdrücke Praxis:
MehrTh. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen
Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen Th Letschert FH Gießen-Friedberg Th. Letschert OOP 2 Sichtbarkeitsbeziehungen und Geheimnisprinzip Sichtbarkeitsbeziehungen realisieren
MehrMicrosoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber
Microsoft.NET Framework & Component Object Model ein Vortrag von Florian Steuber Übersicht I..NET Framework 1. Was ist das.net Framework? 2. Das.NET Execution Model 3. Sprachunabhängigkeit, CTS und CLS
MehrPrinzipien der objektorientierten Programmierung (OOP)
Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 2 22.03.2017 Was bisher geschah... Klassen und Objekte Attribute und Methoden Klasse Bruch
MehrListe MI / Liste I Programmieren in C++
Liste MI / Liste I Programmieren in C++ Fachhochschule Wiesbaden, FB Design Informatik Medien Studiengang Medieninformatik WS 2007/2008 Kapitel 1-4 1 Ziele Kennenlernen einer weiteren objektorientierten
MehrKapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrAssertions (Zusicherungen)
April 10, 2005 Oberseminar Software-Entwicklung Inhalt 1. Einführung (Motivation, Tony Hoare, Programmverifikation) 2. Design by Contract (Idee, Eiffel) 3. Praxis: Programming by Contract for Python 4.
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel Alina Stürck WS2016/17 11. Oktober 2016 Objektorientierte Programmierung OOP 1 Was ist das? 2 Wie geht das? 3 Warum
MehrGrundzüge der Programmierung. Wiederverwendung VERERBUNG
Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0
9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung
MehrAufgabenblatt 4 IT-Security Angewandte Informatik WS 2016/17
Aufgabenblatt 4 IT-Security Angewandte Informatik WS 2016/17 Lernziele 6 Punkte Bibliothek BigInt (Schnelle) Algorithmen für Multiplikation und Division Erweiterter Euklid'scher Algorithmus Für dieses
Mehr5. Dokumentieren und Testen Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik
5. Dokumentieren und Testen Advanced Programming Techniques Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik:
MehrObjekt-orientierte Programmierung
Objekt-orientierte Programmierung Eine (sehr) kurze Einführung Daniel Lübke Gliederung Motivation Grundlagen (Objekte, Klassen, Vererbung) Interfaces Klassenvariablen
MehrObjektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern
Thema Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern Referent: Frank Sanders Seite 1 Inhalt Der Vortrag hat einen sehr kurzen Einleitungsteil der sich mit Objektorientierung
MehrProgrammierparadigmen
Programmierparadigmen Paradigma = Denkweise oder Art der Weltanschauung klassische Einteilung: Programmiersprache imperativ deklarativ prozedural objektorientiert funktional logisch Zusammenhänge tatsächlich
MehrZiele und Tätigkeiten von Architekten
Ziele und Tätigkeiten von Architekten Definition Software Architektur o A software architecture provides a model of a whole software system that is composed of internal behavioral units (i.e. components)
MehrPolymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces
Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 / 20 Polymorphie/Späte Bindung Abstrakte Klassen Interfaces 2 / 20 Definition: Polymorphie Der Begriff Polymorphie (manchmal
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Prinzip der Vererbung: Aus
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrObjektorientierte Programmierung OOP
Objektorientierte Programmierung OOP Objektorientierte Programmierung OOP Ronja Düffel WS2012/13 08. Oktober 2013 Objektorientierte Programmierung OOP Objektorientierte Programmierung Objektorientierte
MehrBegriffe 1 (Wiederholung)
Begriffe 1 (Wiederholung) Klasse Eine Klasse ist der Bauplan für ein oder mehrere Objekte. In einer Klasse werden Dienste (Methoden) zur Verfügung gestellt. Klassennamen beginnen mit einem Großbuchstaben.
MehrSoftwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
MehrStrategy & Decorator Pattern
Strategy & Decorator Pattern Design Patterns Nutzen Wouldn t it be dreamy if only there were a way to build software so that when we need to change it, we could do so with the least possible impact on
MehrProgrammieren 1 09 Vererbung und Polymorphie
Programmieren 1 09 Vererbung und Polymorphie Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 I. VERERBUNG 2 2 Vererbung Von Interfaces übernehmen
MehrEntwurfsmuster. Marc Monecke
Entwurfsmuster Marc Monecke monecke@informatik.uni-siegen.de Praktische Informatik Fachbereich Elektrotechnik und Informatik Universität Siegen, D-57068 Siegen 20. Mai 2003 Inhaltsverzeichnis 1 Grundlagen
MehrObjektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
MehrEinstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen
Mehr2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article
2.13 Vererbung Klassen modellieren Objekte der realen Welt. Diese sind oft hierarchisch gegliedert. Beispiel: Ein Verlag bietet Bücher und CDs an. Beide Medien sind Artikel des Verlages. Book author: String
MehrVererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.
Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1
MehrUnified. Copyright Adriano Gesué UML 2.0 UML 1.4 UML 1.3 UML 1.2 UML 1.1 UML 1.0 UML 0.9. Method 0.8
Literatur Martin Fowler and Kendall Scott: UML Distilled: Applying the Standard Object Modeling Language. Addison-Wesley 1997. James Rumbaugh, Ivar Jacobson, and Grady Booch: The Unified Language Reference
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546 Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung
MehrEinführung in die Programmierung für NF MI. Übung 07
Einführung in die Programmierung für NF MI Übung 07 Inhalt Wiederholung Kommentare Wiederholung Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 07 2 Wiederholung Kommentare Kommentare
MehrInformationsverarbeitung im Bauwesen
12 im Bauwesen Markus Uhlmann 1 Zusammenfassung der 11. Vorlesung Objektorientierte Programmierung (OOP) Wozu eigentlich? Was unterscheidet OOP von traditionellen Techniken? Verwendung von vordefinierten
MehrProgrammierung im Grossen
1 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Bertrand Meyer 2 Vorlesung 4: Abstrakte Daten-Typen Übungen 3 Passe die vorhergehende Spezifikation von Stacks (LIFO, Last-In First-Out
MehrProgrammieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik
Programmieren II Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz 9.6 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Abstrakte Klassen: Motivation Grundidee abstrakter Klassen:
MehrSchnittstellen und. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
Schnittstellen und Abstrakte Klassen 1 Hauptziel der objektorientierten Programmiertechniken ist es, die Flexibilität leichte Anpassbarkeit und Wiederverwendbarkeit von Software zu vereinfachen. 2 Kapselung
MehrBeispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der
Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert
MehrKlausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrPraktische Informatik I
Praktische Informatik I WS 2005/2005 Prof. Dr. Wolfgang Effelsberg Lehrstuhl für Praktische Informatik IV Universität Mannheim 1. Einführung 1-1 Inhaltsverzeichnis (1) 1. Einführung 1.1 Was ist Informatik?
MehrDesign Patterns. 3. Juni 2015
Design Patterns 3. Juni 2015 Überblick Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Taentzer Softwarequalität 2015 138 Was sind Design Patterns?
MehrVererbung, Polymorphie
Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08
MehrEinführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
MehrSoftware-Refactoring. 29. Mai 2013
Software-Refactoring 29. Mai 2013 Überblick Was ist Refactoring und wozu dient es? Welche Refactorings gibt es? Refactoring-Katalog: www.refactoring.com Wann, wo und wie führt man Refactorings durch? Wie
MehrInhaltsverzeichnis. Teil 1 Grundlagen der Objektorientierung 29
Vorwort von James Gosling, Sun Microsystems 15 Vorwort an Kursleiter 16 Vorwort des Übersetzers 24 Projekte, die in diesem Buch detailliert besprochen werden 25 Danksagungen 27 Teil 1 Grundlagen der Objektorientierung
Mehr