Arten von Klassen-Beziehungen

Ähnliche Dokumente
Faustregeln zu Zusicherungen

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

Arten von Klassen-Beziehungen

Das Ersetzbarkeitsprinzip

Geschachtelte Klassen

1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen?

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Algorithmen und Datenstrukturen

Ersetzbarkeit und Verhalten

Client-Server-Beziehungen

Einstieg in die Informatik mit Java

Einführung in C# Teil 3. Matthias Nübling

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Innere Klassen in Java

Einstieg in die Informatik mit Java

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmieren in Java

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

6. Globalübung (zu Übungsblatt 8)

Repetitorium Informatik (Java)

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik

Tafelübung 07 Algorithmen und Datenstrukturen

4. Vererbung Die Klasse Object. Die Klasse Object

Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

II.4.1 Unterklassen und Vererbung - 1 -

Vererbung, Polymorphismus

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung, Polymorphie

Vererbung und Polymorphie

Klassenbeziehungen & Vererbung

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Tag 8 Repetitorium Informatik (Java)

Info B VL 11: Innere Klassen/Collections

Kapitel 4: Klassen und Unterklassen

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Informatik II. Woche 13, Giuseppe Accaputo

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Einstieg in die Informatik mit Java

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

3 Objektorientierte Konzepte in Java

Java Einführung Vererbung und Polymorphie. Kapitel 13

Implementieren von Klassen

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Allgemeines - Prinzipien

Statische Methoden, Vererbung, Benutzereingabe

Algorithmen und Datenstrukturen 06

Einstieg in die Informatik mit Java

Arten des universellen Polymorphismus

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Programmieren in Java

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Tag 7 Repetitorium Informatik (Java)

Objektorientierte Programmierung

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Einführung in die Programmiersprache Java II

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Javakurs für Anfänger

Teil 2: OOP und JAVA (Vorlesung 11)

Objektorientierung (OO)

3 Objektorientierte Konzepte in Java

Kapitel 1 - Widerholungsfragen

Klassenvariablen, Klassenmethoden

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Statische Methoden, Vererbung, Benutzereingabe

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Programmierparadigmen

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Objektorientierte Programmierung Studiengang Medieninformatik

7. Übung Informatik II - Objektorientierte Programmierung

5.6 Vererbung. Vererbung

Tücken der dynamischen Bindung

Javakurs für Anfänger

Algorithmen und Datenstrukturen

Beispiel für überladene Methode

Geschachtelte Klassen

Einstieg in die Informatik mit Java

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Javakurs für Anfänger

Programmierung und Angewandte Mathematik

PPK2 Java Klassen, Packages Seite 1 von 17. Konstruktoren. private static int objcount=0; public Konstruktoren() { name="konstruktor-"+objcount++; }

Transkript:

Arten von Klassen-Beziehungen Untertypbeziehung: Ersetzbarkeit Vererbung von Code aus Oberklasse irrelevant Vererbungsbeziehung: Klasse entsteht durch Abänderung anderer Klassen Ersetzbarkeit irrelevant Reale-Welt-Beziehung: Beziehung zw. Einheiten im Entwurf intuitiv klar, ohne Details zu kennen oft zu Untertypbeziehung weiterentwickelbar Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 1

Untertypen versus Vererbung in Java Untertypbeziehung setzt Vererbung voraus Vererbung setzt Untertypbeziehung voraus, soweit vom Compiler überprüft daher Untertyp- und Vererbungsbeziehung nur durch (nicht vom Compiler überprüfte) Zusicherungen unterscheidbar trotzdem oft einfach erkennbar, was angestrebt wird: Vererbung: Ähnlichkeiten im Code ausgenützt Untertypen: ersetzbares Verhalten beschrieben Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 2

Beispiel: Untertypen versus Vererbung LargeSet Bag Collection SmallSet Bag Collection SmallSet Set LargeSet reine Vererbungsbeziehung Untertypbeziehung Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 3

Untertypen versus Vererbung (Tip) Vererbung = direkte Codewiederverwendung (sichtbar) Untertypbeziehung = indirekte Codewiederverwendung (manchmal nicht gleich sichtbar) Untertypen bedeuten oft weniger direkte Codewiederverwendung als Vererbung, da Zusicherungen berücksichtigt indirekte Codewiederverwendung langfristig viel wichtiger als direkte (lokale Programmänderungen möglich) Tip: immer auf Ersetzbarkeit achten, direkte Wiederverwendung nur wenn Zusicherungen (zufällig) passen jede Vererbungsbeziehung soll Untertypbeziehung sein Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 4

Direkte Codewiederverwendung direkte Codewiederverwendung durch Vererbung ist auch wichtig (solange Untertypbeziehung nicht verletzt): Code nur einmal geschrieben Änderungen nur an einer Stelle durch Möglichkeit des Überschreibens kaum Nachteile Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 5

Vererbung, 1. Beispiel class A { public void foo() {... class B extends A { private boolean b; public void foo() { if (b) {... else { super.foo();... Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 6

Vererbung, 2. Beispiel class A { public void foo() { if (...) {... else {...; x = 1;... class B extends A { public void foo() { if (...) {... else {...; x = 2;... Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 7

Vererbung, 3. Beispiel class A { public void foo() { if (...) {... else { foox(); protected void foox() {...; x = 1;... class B extends A { protected void foox() {...; x = 2;... Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 8

Vererbung, 4. Beispiel class A { public void foo() { fooy(1); protected void fooy (int y) { if (...) {... else {...; x = y;... class B extends A { public void foo() { fooy(2); Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 9

Variablen in Java Instanzvariablen (über Instanz zugreifbar): int x = 2, y[] = new int[32], z; Klassenvariablen (über Klasse zugreifbar): static int maxradius = 1023; Konstanten (nicht schreibbar): static final int MAX_SIZE = 1024; final int sizeofthis = MAX_SIZE - n; Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 10

Methoden in Java Instanzmethoden (über Instanz zugreifbar): void foo (String[] args) {... dynamisches Binden statische Methoden (über Klasse zugreifbar): static void main (String[] args) {... kein dynamisches Binden static initializer (zur Initialisierung von Klassenvariablen): static {... Code nur einmal ausgeführt Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 11

Konstruktoren in Java Default-Konstruktor, falls kein expliziter Konstruktor: class Classname { // public Classname() {;... super(...) führt Konstruktor der Oberklasse aus this(...) führt anderen Konstruktor derselben Klasse aus Konstruktor beginnt nicht mit super(...) oder this(...): super() implizit am Anfang des Konstruktors eingefügt Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 12

Überladen class Circle { private int r; Circle(int r) { this.r = r; // 1 Circle(Circle c) { this.r = c.r; // 2 Circle() { r = 1; // 3...... Circle a = new Circle(2); // Konstruktor 1 Circle b = new Circle(a); // Konstruktor 2 Circle c = new Circle(); // Konstruktor 3 Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 13

Verdecken versus Überschreiben Variablen gleichen Namens in Ober- und Unterklasse: Variable in Unterklasse verdeckt Variable in Oberklasse verdeckte Variable zugreifbar: super.var ((Oberklasse)this).var Methoden gleichen Namens in Ober- und Unterklasse: Unterklassenmethode überschreibt Oberklassenmethode überschriebene Methode zugreifbar: super.method(...) kein Zugriff über ((Oberklasse)this).method(...) Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 14

Final Überschreiben einer Methode verhinderbar: final method (... ) {... final Methoden sollen meist vermieden werden Ableitung einer Unterklasse verhinderbar: final class FinalClass {... final class FinClass extends NonFinalClass {... in einigen oo Programmierstilen sind final Klassen häufig: Instanzen werden nur von final Klassen erzeugt dadurch Ersetzbarkeit einfacher zuzusichern Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 15

Statische geschachtelte Klassen gehören zu umschließender Klasse selbst class EnclosingClass {... static class StaticNestedClass {...... nur Klassenvariablen und statische Methoden umschließender Klasse zugreifbar Erzeugung: new EnclosingClass.StaticNestedClass() Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 16

Innere Klassen gehören zu Instanzen umschließender Klasse class EnclosingClass {... class InnerClass {...... nur Instanzvariablen und Instanzmethoden umschließender Klasse direkt zugreifbar Erzeugung: a.new InnerClass() (wobei a eine Instanz von EnclosingClass ist) Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 17

Pakete eine public Klasse pro Datei Paket umfaßt alle Dateien bzw. Klassen im selben Ordner explizite Paketdeklaration: package paketname; Aufruf von foo() in der Datei myclasses/test/aclass.java: myclasses.test.aclass.foo() Kürzer durch Import-Deklaration (am Dateianfang) import myclasses.test;... test.aclass.foo()... import myclasses.test.aclass;... AClass.foo()... import myclasses.test.*;... AClass.foo()... Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 18

Sichtbarkeit public protected default private lokal sichtbar ja ja ja nein global sichtbar ja nein nein nein lokal vererbbar ja ja ja nein global vererbbar ja ja nein nein lokal = im selben Paket, auch außerhalb der Klasse global = auch außerhalb des Pakets Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 19

Anwendung der Sichtbarkeit Public: Bei der Verwendung der Klasse und deren Instanzen benötigte Methoden, Konstanten und (selten) Variablen Private: Methoden und Variablen, die nur innerhalb der Klasse verwendet werden sollen vor allem, wenn Bedeutung außerhalb der Klasse nicht klar Protected: Methoden und Variablen für Verwendung nicht benötigt, aber hilfreich bei Erweiterungen der Klasse Default: Eng zusammenarbeitende Klassen im selben Paket sollen auf Methoden und Variablen zugreifen können, die sonst privat wären Objektorientierte Programmierung Klassen, Vererbung und Sichtbarkeit 20