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



Ähnliche Dokumente
Kapselung und Methodenbindung: Javas Designprobleme und ihre Korrektur

Prinzipien Objektorientierter Programmierung

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java

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

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Programmieren in Java

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Objektorientierte Programmierung OOP

Java: Vererbung. Teil 3: super()

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

Java Einführung Packages

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

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

OO Softwareentwicklung

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

Kapitel 6. Vererbung

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Objektorientierte Programmierung. Kapitel 12: Interfaces

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

5. Abstrakte Klassen

Klassenbeziehungen & Vererbung

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

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Objektorientierte Programmierung

5.6 Vererbung. Vererbung

Java Einführung Abstrakte Klassen und Interfaces

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

Kapitel 6. Vererbung

Softwaretechnik (Allgemeine Informatik) Überblick

Vererbung & Schnittstellen in C#

Kapitel 6. Vererbung

Client-Server Beziehungen

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Java Einführung Methoden in Klassen

Objektorientiertes JavaScript

Einführung in die Programmierung für NF

Applet Firewall und Freigabe der Objekte

Einführung in die. objektorientierte Programmierung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Typumwandlungen bei Referenztypen

Angewandte Mathematik und Programmierung

5. Tutorium zu Programmieren

FORGE2015 HDC Session 4. Nachhaltige Infrastruktur als technologische Herausforderung. Tibor Kálmán Tim Hasler Sven Bingert

4 Vererbung, Polymorphie

Java Kurs für Anfänger Einheit 5 Methoden

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

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

Algorithmen und Datenstrukturen

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Client-Server-Beziehungen

Einführung in die Programmierung

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

Übungen zur Softwaretechnik

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

4. AuD Tafelübung T-C3

Vorkurs C++ Programmierung

Innere Klassen in Java

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

C# im Vergleich zu Java

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Verknüpfen Sie Ihr Facebook Ad-Konto mit Nosto. Diese Anleitung zeigt Ihnen, wie Sie Ihr Nosto-Konto mit dem Konto für Ihre Facebook Ads verbinden.

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

Einstieg in die Informatik mit Java

Software Engineering Klassendiagramme Einführung

SE2-10-Entwurfsmuster-2 15

EINI I. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 10/11

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Assoziation und Aggregation

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

Einführung in die Programmierung für Wirtschaftsinformatik

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Vorkurs Informatik WiSe 15/16

C/C++-Programmierung

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

Tipps und Tricks zu Netop Vision und Vision Pro

Leitfaden zur Rundumplakatierung von Ganzsäulen. 23. März media for mobile people

Factory Method (Virtual Constructor)

Klassendiagramm. (class diagram)

3. Konzepte der objektorientierten Programmierung

Java für Computerlinguisten

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Redundante Dienste Idealfall und Notfalllösungen. Präsentation von Matthias Müller

Universität Karlsruhe (TH)

J.6 Programmierung eingebetteter Systeme


Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Java Web Services Metadata JSR-181

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Transkript:

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

Gliederung Einführung: Methodenbindung und Kapselung Überschreiben paketlokaler Methoden Korrigierte Methodenauswahl Überschreiben geschützter Methoden Verfeinerung von Zugriffsrechten Zusammenfassung

Einführung Dynamische Bindung Überschreiben von geerbten Methoden Bindung zwischen Aufrufstelle und Implementierung zur Laufzeit in Abhängigkeit vom Typ des Zielobjektes Kapselung Verbergen von Implementierungsdetails Zugriffsmodi in Java: privater Zugriff (private access) paketlokaler Zugriff (default access) geschützter Zugriff (protected access) öffentlicher Zugriff (public access)

Wechselwirkungen Überschreiben von Methoden Nur zugreifbare Methoden werden überschrieben (sonst Neudefinition) Zugreifbarkeit überschriebener Methoden Überschreibende Methoden mindestens so zugreifbar wir überschriebene Methode Komplexes Zusammenspiel der Konzepte Ziel: Weitgehende Orthogonalisierung

Javas Methodenauswahlalgorithmus class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit 3. Festlegung des Aufrufmodus (virtual/nonvirtual) class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit 3. Festlegung des Aufrufmodus (virtual/nonvirtual) Dynamisch: 4. Bestimmung des Zielobjektes class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit 3. Festlegung des Aufrufmodus (virtual/nonvirtual) Dynamisch: 4. Bestimmung des Zielobjektes 5. Lokalisierung einer Methode mit passender Signatur, abhängig vom Typ des Zielobjekts class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Javas Methodenauswahlalgorithmus Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit 3. Festlegung des Aufrufmodus (virtual/nonvirtual) Dynamisch: 4. Bestimmung des Zielobjektes 5. Lokalisierung einer Methode mit passender Signatur, abhängig vom Typ des Zielobjekts class T { protected void m( ) {... class S extends T { public void m( ) {... class U extends S { T v = new U( ); v.m( );

Anforderungen Auswahl der statisch gefundenen Methode oder einer diese überschreibende Zugreifbarkeit der dynamisch ausgewählten Methode für den Aufrufer

Probleme paketlokaler Methoden package PT; public class T { void m( ) {... package PS; public class S extends PT.T { public void m( ) {... T v = new PS.S( ); v.m( );

Probleme paketlokaler Methoden package PT; public class T { void m( ) {... package PS; public class S extends PT.T { public void m( ) {... T v = new PS.S( ); v.m( ); T:m und S:m sind verschiedene Methoden gleicher Signatur

Probleme paketlokaler Methoden package PT; public class T { void m( ) {... package PS; public class S extends PT.T { public void m( ) {... T v = new PS.S( ); v.m( ); T:m und S:m sind verschiedene Methoden gleicher Signatur Statische Deklaration ist T:m

Probleme paketlokaler Methoden package PT; public class T { void m( ) {... package PS; public class S extends PT.T { public void m( ) {... T v = new PS.S( ); v.m( ); T:m und S:m sind verschiedene Methoden gleicher Signatur Statische Deklaration ist T:m Dynamisch wird S:m ausgewählt

Korrigiertes Auswahlverfahren Dynamisch ausgewählte Methode muß statische Deklaration überschreiben Dadurch konzeptionell Vereinheitlichung von privaten und nicht privaten Methoden Höhere Orthogonalität Statisch: 1. Bestimmung der statischen Deklaration 2. Prüfung der Zugreifbarkeit 3. entfällt Dynamisch: 4. Bestimmung des Zielobjektes 5. Lokalisierung einer Methode mit passender Signatur, die die statische Deklaration überschreibt

Probleme geschützter Methoden package PT; public class T { protected void m( ) {... class C { public void foo( ) { T v = new PS.S( ); v.m( ); package PS; public class S extends PT.T { protected void m( ) {...

Probleme geschützter Methoden package PT; public class T { protected void m( ) {... class C { public void foo( ) { T v = new PS.S( ); v.m( ); package PS; public class S extends PT.T { protected void m( ) {... S:m überschreibt T:m

Probleme geschützter Methoden package PT; public class T { protected void m( ) {... class C { public void foo( ) { T v = new PS.S( ); v.m( ); package PS; public class S extends PT.T { protected void m( ) {... S:m überschreibt T:m Statische Deklaration ist T:m, zugreifbar für C

Probleme geschützter Methoden package PT; public class T { protected void m( ) {... class C { public void foo( ) { T v = new PS.S( ); v.m( ); package PS; public class S extends PT.T { protected void m( ) {... S:m überschreibt T:m Statische Deklaration ist T:m, zugreifbar für C Dynamisch wird S:m ausgewählt, nicht zugreifbar für C

Überschreiben geschützter Methoden Überschreiben von geschützten Methoden in anderen Paketen nur mit öffentlichen Methoden package PT; public class T { protected void m( ) {... class C { public void foo( ) { T v = new PS.S( ); v.m( ); Aufweichen der Kapselung package PS; public class S extends PT.T { public void m( ) {...

Verfeinerte Zugriffsrechte Trennung des Zugriffs für Subklassen und Paket Wiedereinführung des Zugriffsmodus privat geschützt (private protected) Zugriff nur für Sub- und Superklassen package PT; public class T { private protected void m( ) {... package PS; public class S extends PT.T { private protected void m( ) {...

Zusammenfassung Komplexes Zusammenspiel von Kapselung und Methodenauswahl Widersprüche in Sprachspezifikation Fehler in Compilern Korrigiertes und vereinfachtes Auswahlverfahren Keine Unterscheidung zw. virtual und nonvirtual Höhere Orthogonalität Verfeinerte Zugriffsmodi Überschreiben geschützter Methoden Zusätzlicher Modus privat geschützt

Ausblick Arbeitsumfeld DFG-Projekt Lopex Spezifikation und Verifikation von Java Programmen Erstellung einer Hoare-Logik für Java Weitere Informationen www.informatik.fernuni-hagen.de/pi5/publications.html Peter.Mueller@fernuni-hagen.de Arnd.Poetzsch-Heffter@fernuni-hagen.de