Faustregeln zu Zusicherungen

Ähnliche Dokumente
Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Arten von Klassen-Beziehungen

Arten von Klassen-Beziehungen

Klassen und Konstruktoren in Java

Objektorientierte Programmierung

Ersetzbarkeit und Verhalten

Client-Server-Beziehungen

Paket umfaßt alle Dateien bzw. Klassen im selben Ordner. Kürzer durch Import-Deklaration (am Dateianfang)

Ersetzbarkeit und Verhalten

Das Ersetzbarkeitsprinzip

Das Ersetzbarkeitsprinzip

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

Client-Server-Beziehungen

Geschachtelte Klassen

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

Programmierung Nachklausurtutorium

Algorithmen und Datenstrukturen

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

OOP. Tagesprogramm. Zusicherungen Zusicherungen und Ersetzbarkeit

4. Vererbung Die Klasse Object. Die Klasse Object

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

Programmieren in Java

Kapitel 4: Klassen und Unterklassen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Zusicherungen A01 OOP. Zusicherungen

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

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

Einstieg in die Informatik mit Java

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

Vorkurs Informatik WiSe 15/16

Programmierparadigmen

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

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

Einführung in die Programmiersprache Java II

Tafelübung 07 Algorithmen und Datenstrukturen

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Einstieg in die Informatik mit Java

Programmieren in Java

Software Entwicklung 1

6. Globalübung (zu Übungsblatt 8)

II.4.1 Unterklassen und Vererbung - 1 -

II.4.1 Unterklassen und Vererbung - 1 -

Einführung in die Programmiersprache Java II

Objektorientierte Konzepte

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

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

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

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

Innere Klassen in Java

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

Java Grundlagen 2 - OOP

Info B VL 11: Innere Klassen/Collections

Vererbung, Polymorphie

II.4.5 Generische Datentypen - 1 -

Algorithmen und Datenstrukturen 07

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Objektorientierte Programmierung Studiengang Medieninformatik

II.4.1 Unterklassen und Vererbung - 1 -

Programmierparadigmen A01 OOP. Programmierparadigmen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Vererbung Was versteht man unter dem Begriff Vererbung?

Kapitel 1 - Widerholungsfragen

Propädeutikum Programmierung in der Bioinformatik

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

Vererbung. Was versteht man unter dem Begriff Vererbung?

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

Humboldt-Universität zu Berlin Wintersemester 2010/11 Institut für Informatik Grundlagen der Programmierung. 6. Übungsblatt

14. Java Objektorientierung

Einführung in die Systemprogrammierung

Objektorientierte Programmierung Studiengang Medieninformatik

2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen

Klassenbeziehungen & Vererbung

Vererbung und Polymorphie

Java Einführung Vererbung und Polymorphie. Kapitel 13

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Algorithmen und Datenstrukturen 06

Objektorientierte Programmierung. Kapitel 14: Interfaces

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

Zweck: sequentieller Zugriff auf Elemente eines Aggregats. mehrere Abarbeitungen des Aggregatinhalts

1. Abstrakte Klassen

II.4.1 Unterklassen und Vererbung - 1 -

Vererbung, Polymorphismus

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

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Einstieg in die Informatik mit Java

Transkript:

Faustregeln zu Zusicherungen Zusicherungen sollen stabil sein (vor allem an Wurzel der Typhierarchie) keine unnötigen Details festlegen explizit im Programm stehen unmissverständlich formuliert sein während Programmentwicklung ständig überprüft werden Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 1

Abstrakte Klassen Polygon ւ ց Triangle Square Hexagon public abstract class Polygon { public abstract void draw(); // draw polygon on screen public class Triangle extends Polygon { public void draw() {... // draw triangle on screen Zusicherungen auf abstrakten Methoden besonders wichtig! Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 2

Interfaces Interfaces für Untertyprelationen sehr gut geeignet interface X interface Y ցւ interface Z class A ց class B Abstrakte Klassen gegenüber Interfaces nur dann zu bevorzugen, wenn Code vererbt werden soll Zusicherungen auf Interfaces besonders wichtig! Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 3

Abstr. Klassen u. Interfaces verwenden Implementierungen oft nur in Klassen ohne Unterklassen abstrakte Klassen und Interfaces eher stabil Parametertypen sollen stabil sein sie sollen nicht mehr ausdrücken, als nötig (keine unnötigen Abhängigkeiten) abstrakte Klassen bzw. Interfaces leicht hinzuzufügen (z.b. verwendbar als Parametertypen für jeden Bedarf) Zusicherungen auf abstrakten Einheiten besonders wichtig Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 4

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 Programmiertechniken, Vererbung und Sichtbarkeit 5

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 Programmiertechniken, Vererbung und Sichtbarkeit 6

Beispiel: Untertypen versus Vererbung LargeSet Bag Collection SmallSet Bag Collection SmallSet Set LargeSet reine Vererbungsbeziehung Untertypbeziehung Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 7

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 Programmiertechniken, Vererbung und Sichtbarkeit 8

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 Programmiertechniken, Vererbung und Sichtbarkeit 9

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

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

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

Vererbung, 4. Beispiel public class A { public void foo() { fooy(1); protected void fooy (int y) { if (...) {... else {...; x = y;... public class B extends A { public void foo() { fooy(2); Objektorientierte Programmiertechniken, 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 Programmiertechniken, Vererbung und Sichtbarkeit 14

Final Überschreiben einer Methode verhinderbar: public final method (... ) {... final Methoden sollen meist vermieden werden Ableitung einer Unterklasse verhinderbar: public final class FinalClass {... public final class FinClass extends NonFinClass {... in einigen oo Programmierstilen sind final Klassen häufig: Instanzen werden nur von final Klassen erzeugt dadurch Ersetzbarkeit einfacher zuzusichern Objektorientierte Programmiertechniken, 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 Programmiertechniken, 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 Programmiertechniken, 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 Programmiertechniken, 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 Programmiertechniken, Vererbung und Sichtbarkeit 19

Anwendung der Sichtbarkeitskontrolle Public: für allgemeine Verwendung benötigte Methoden, Konstruktoren und Konstanten; Variablen verpönt Private: alles, was außerhalb der Klasse nicht verständlich zu sein braucht; ideal für Variablen Protected: nicht für allgemeine Verwendung gedachte Methoden, Konstruktoren und Konstanten (möglichst keine Variablen) wenn in Unterklassen tatsächlich benötigt Default: nur bei tatsächlichem Bedarf für enge Zusammenarbeit zwischen Klassen im Paket, möglichst keine Variablen Objektorientierte Programmiertechniken, Vererbung und Sichtbarkeit 20