Vererbung versus Delegation



Ähnliche Dokumente
Factory Method (Virtual Constructor)

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Gebundene Typparameter

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einführung in die Java- Programmierung

Client-Server-Beziehungen

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Vererbung & Schnittstellen in C#

Java: Vererbung. Teil 3: super()

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Programmieren in Java

Typumwandlungen bei Referenztypen

Klassenbeziehungen & Vererbung

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

Java Kurs für Anfänger Einheit 5 Methoden

Vorkurs C++ Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Grundlagen von Python

OO Softwareentwicklung

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

3 Objektorientierte Konzepte in Java

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

Kapitel 6. Vererbung

Objektorientierte Programmierung OOP

Testen mit JUnit. Motivation

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Design Patterns 2. Model-View-Controller in der Praxis

Innere Klassen in Java

5. Abstrakte Klassen

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung

Einführung in die Java- Programmierung

Tagesprogramm

Applet Firewall und Freigabe der Objekte

Der lokale und verteilte Fall

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Acceptor-Connector. Acceptor-Connector

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Komponentenbasierter Taschenrechner mit CORBA

Übungen zur Softwaretechnik

Code-Erzeugung aus UML-Klassendiagrammen

Einführung in die Programmierung

Menü auf zwei Module verteilt (Joomla 3.4.0)

Archiv - Berechtigungen

Cookies. Krishna Tateneni Jost Schenck Übersetzer: Jürgen Nagel

SANDBOXIE konfigurieren

Kapitel 6. Vererbung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Kapitel 6. Vererbung

Arbeiten mit UMLed und Delphi

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Software Engineering Klassendiagramme Assoziationen

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Programmierkurs Java

Kapselung und Methodenbindung: Javas Designprobleme und ihre Korrektur. Dipl.-Inform. Peter Müller Prof. Arnd Poetzsch-Heffter Fernuniversität Hagen

Client-Server Beziehungen

Enigmail Konfiguration

Objektorientiertes Software-Engineering

C# im Vergleich zu Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Assoziation und Aggregation

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

Funktionserweiterungen, behobene Funktionseinschränkungen und Funktionseinschränkungen, EASY Starter V1.5

Programmieren I. Kapitel 15. Ein und Ausgabe

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Howto. Einrichten des TREX Monitoring mit SAP Solution Manager Diagnostics

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

4D Server v12 64-bit Version BETA VERSION

Wie optimiert man die Werbungserkennung von Ad- Detective?

Algorithmen und Datenstrukturen

How-to: Webserver NAT. Securepoint Security System Version 2007nx

SEP 114. Design by Contract

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

(H ist Entropie) bei Redundanz Information vielleicht mehrfach. Redundanz zur Fehlererkennung und -korrektur nutzbar

WordPress. Dokumentation

13. Tutorium zu Programmieren

3. Stored Procedures und PL/SQL

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Das Model View Controller (MVC) Konzept

Robot Karol für Delphi

Transkript:

Vererbung versus Delegation class A { public void x() { z(); } protected void z() { /* A-Code */... } } class B extends A { protected void z() { /* B-Code */... } public void y() { delegate.x(); } private A delegate = new A(); } Vererbung: new B().x() B-Code Delegation: new B().y() A-Code Oft kein Überschreiben von Methoden wie z() egal Delegation sogar häufiger benötigt als Vererbung Unterschied manchmal wichtig da Verwechslung gefährlich FOOP Teil 6 1

Mixins Begriff unklar, etwas unterschiedliche Bedeutungen Mehrfach-Code+Interface-Vererbung (oder ähnlich dazu) mit konfigurierbarem geerbten Code (statisch/dynamisch) Anwendungsbeispiel: Template Method geerbt und Operationen (der Template Method) durch Mixins hinzugefügt Unterschiede zwischen Mehrfachvererbung und Delegation für Mixins in Praxis oft nicht entscheidend (asymmetrisch) Oberklassen-Typparameter (C++) u. Delegation geeignet Mixin-Oberklassen oft nur zwecks Delegation instanzierbar FOOP Teil 6 2

Lambda-Ausdrücke in OOP Delegate bzw. Closure kapselt eine Funktion in ein Objekt; im Gegensatz zu Funktionszeigern ist Umgebung enthalten (anonymisiert, nur über gekapselte Funktion zugreifbar) Lambda-Ausdruck = direkt erzeugtes Delegate/Closure Einfache Schreibweise (syntactic suggar + Intelligenz) Umgebung wird implizit aufgebaut (ähnlich innerer Klasse) Typinferenz für Parameter (da kein dynamisches Binden) Eher bei applikativem Programmierstil große Bedeutung FOOP Teil 6 3

Dependency Injection (DI) Ziele: Abhängigkeit zwischen Client und Server verringern, Boilerplate Code vermeiden, einfache Konfigurierbarkeit Klassisch: Inversion of Control (z.b. Factory Method) M. Fowler: DI = Service durch Mini-Container bestimmt Interface Injection (von Client implementiert) Setter Injection (Mini-Container z.b. von Client befüllt) Constructer Injection (bei Erzeugung gesetzt) Problem: Flexibilität durch Unübersichtlichkeit erkauft FOOP Teil 6 4

Laden von Klassen zu Laufzeit Patchen von Systemen durch Austausch einzelner Module (Versioning, seltener Konfiguration) Prakischer Nutzen: kein Linker und dadurch einfacherer Übersetzungszyklus Suche nach anderen Anwendungen hat nichts ergeben Möglichkeiten von Java auf Paket-Ebene kaum genutzt (nur auf Dateisystem-Ebene nutzbar) Aktuellere Techniken für Componenten und Frameworks kommen ohne Patches auf Dateisystem-Ebene aus FOOP Teil 6 5

Plugin Frameworks Zentrale Fragen: Wie findet man die Plugins? Wie (de)aktiviert man Plugins? Wo kann/soll Plugin eingreifen? Framework-spezifisches Interface für Plugins Konfigurationsdatei (meist XML) speichert Plugin-Liste An vorgegebenen Punkten Aufruf von Plugin-Methoden (über Interface) für jedes Plugin in Collection Oft hierarchisch (Plugins in Plugins), aber nicht zyklisch Zahlreiche Frameworks, die Organisation übernehmen (z.b. OSGi, JPF, Boost Extension, Qt, FxEngine, Zope) FOOP Teil 6 6

Dynamische Sprachkonzepte Dynamische Vererbung u. Delegation (= Methodensuche) Dynamische Programmänderungen (Oberklasse ändern, Methoden und Attribute hinzufügen bzw. entfernen) Keine deklarierten Typen, wohl aber dynamische Typen Typprüfung implizit (keine passende Methode gefunden) Reaktion auf unbekannte Methoden programmierbar Programmiertechniken von extensiven Zusicherungen bis Duck Typing (strukturelle Typen, Client verantwortlich) FOOP Teil 6 7

Dynamische Änderbarkeit von Klassen Decorator erlaubt dynamische Änderung von Konzepten Änderbarkeit auch in statischen Sprachen Normalfall Direkte Klassenänderung in dyn. Sprachen effizienter als Decorator (Laufzeit, Programmieraufwand, Lesbarkeit) Statische Sprachen effizienter wenn Änderungen selten Aber: nur vorhergesehene Änderungen durch Decorator nicht für Versioning geeignet Änderungen in dynamischen Sprachen sofort wirksam (von Programmierern geschätzt oder gehasst) FOOP Teil 6 8

Statische versus dynamische Typen Einiges geht nicht statisch (z.b. Array-Index prüfen, binäre Methoden mit Ersetzbarkeit) Dynamische Konzepte auch in statischen Sprachen sinnvoll (dynamische Typabfragen, Zugriff auf Typparameter) Anhänger dynamischer Sprachen überlegen selten, welche Information statisch ist alles bleibt dynamisch Andere wollen mit viel Aufwand alles statisch machen Starke Typsysteme fast immer halbentscheidbar Typkompatibilität erfordert bestimmte Typstruktur Zusatzaufwand um bestimmte Struktur herzustellen FOOP Teil 6 9

Primitive Datentypen Spezialbehandlung kleiner Zahlen in jeder Sprache Gründe: Effizienz, Semantik von Literalen Integer in Ruby normale Klasse; Auswirkungen gering: Zahlen gemischt mit anderen Objekten in Aggregaten (durch gemeinsame Oberklasse möglich) homogene Übersetzung der Generizität einfacher Erweitern von Integer praktisch kaum sinnvoll Effizientes Rechnen in statischen Sprachen wichtiger Kaum Unterschiede zw. rein objektorientierten und heterogenen Sprachen, aber oft andere praktische Verwendung FOOP Teil 6 10

Serialisierung in Java Wenn x Instanz von Serializable, automatisch durch s.writeobject(x) wobei s vom Typ ObjectOutputStream Lesen: x=s.readobject() mit s vom Typ ObjectInputStream Serialisierbare Klasse kann/soll enthalten: static final long serialversionuid=... (Version passt?) private void writeobject(objectoutputstream s) private void readobject(objectinputstream s) private void readobjectnodata() (wenn Daten fehlen) Normalerweise rekursive Aufrufe für referenzierte Objekte Volle Kontrolle durch Implementierung von Externalizable FOOP Teil 6 11

Garbage Collection (GC) Effizient und vereinfacht Programmierung wesentlich Gute Denkansätze: Objekte leben konzeptuell ewig unnötige Referenzen beseitigen Resourcen von Speicher entkoppeln Ansätze für Speicherverwaltung funktionieren bei GC kaum (Kontrolle über Speicher, Destruktoren räumen auf) Keine Garantie für genug Speicher, daher manchmal trotz Echtzeitfähigkeit wegen dyn. Speicherverwalt. ungeeignet Programme sollen auch bei ausgeschalteter GC laufen FOOP Teil 6 12

Trennung zwischen GUI und Logik Fast automatisch durch 3-schichtige Architektur im Web: Präsentation, Anwendungslogik, Datenhaltung Entsprechende Dreiteilung auch in Anwendungslogik: Steuerung, Verarbeitung, Datenzugriff MVC: Model=Verarbeitung+Datenzugriff+Datenhaltung, View=Präsentation, Controller=Steuerung Schwer wartbar wenn Controller=Steuerung+Verarbeitung (unterschiedliche Bereiche der Anwendungslogik gemischt) Gute Architektur = unterschiedliche Bereiche der Anwendungslogik getrennt halten (anwendungsspezifisch) FOOP Teil 6 13

Zukunft der OOP OOP allgegenwärtig Innovations-Charakter verloren erleben heute Aufsplittung in viele Rand- u. Detailthemen wichtige Bereiche in absehbarer Zukunft: Parallelität, Verteiltheit, Datenintegration, vielschichtige Architekturen, Cloude-Computing, komplexe Schnittstellenprotokolle in vielen dieser Bereiche derzeit mehr Fragen als Antworten Sprachunterstützung zu erwarten, sobald die wichtigsten Fragen beantwortet sind FOOP Teil 6 14