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

Ähnliche Dokumente
Arten des universellen Polymorphismus

Arten des universellen Polymorphismus

Arten des universellen Polymorphismus

OOP. Tagesprogramm. Generizität

Arten von Klassen-Beziehungen

Klassen und Konstruktoren in Java

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Faustregeln zu Zusicherungen

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

Dynamische Typinformation A01 OOP. Dynamische Typinformation

OOP. Tagesprogramm. Dynamische Typinformation. Homogene Übersetzung der Generizität. Generizität und Typumwandlungen

Objektorientierte Programmierung

Arten von Klassen-Beziehungen

Gebundene Typparameter

Das Ersetzbarkeitsprinzip

Objektorientierte Konzepte

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

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Das Ersetzbarkeitsprinzip

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Vorlesung Inf-B

II.4.5 Generische Datentypen - 1 -

ALP II Dynamische Datenmengen

3. Übungsbesprechung Programmkonstruktion

Ersetzbarkeit und Verhalten

Programmiermethodik 3. Klausur Lösung

Algorithmen und Datenstrukturen

Java I Vorlesung Generics und Packages

II.4.4 Exceptions - 1 -

Software Entwicklung 1

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

Software Entwicklung 1

Einstieg in die Informatik mit Java

Client-Server-Beziehungen

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder

Info B VL 11: Innere Klassen/Collections

II.4.6 Collections - 1 -

Programmieren in Java

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Programmieren in Java

Theorie zu Übung 8 Implementierung in Java

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Tutoraufgabe 1 (Collections):

Interfaces und Generics

Einstieg in die Informatik mit Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

II.4.1 Unterklassen und Vererbung - 1 -

II.4.1 Unterklassen und Vererbung - 1 -

Vorlesung 08: Vergleichen und Schranken. Peter Thiemann SS 2011

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

Programmieren in Java -Eingangstest-

Programmieren in Java

Software Entwicklung 1

Kapitel 5: Iterierbare Container

Ausnahmebehandlungen am Beispiel

Programmierparadigmen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Universität Karlsruhe (TH)

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

Ausnahmebehandlung in Java

Programmiermethodik 1. Klausur

Programmiermethodik 2. Klausur Lösung

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

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

Programmierparadigmen A01 OOP. Programmierparadigmen

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

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

II.4.1 Unterklassen und Vererbung - 1 -

Kapitel 18: Java ein paar Kleinigkeiten zum Schluss. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Kapitel 4: Klassen und Unterklassen

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

Einstieg in die Informatik mit Java

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

Programmierkurs Java

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

14. Java Objektorientierung

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

Ausnahmebehandlung in Java

Propädeutikum Programmierung in der Bioinformatik

Neuere Sprachelemente in Java

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Programmieren 2 16 Java Collections und Generizität

4. Vererbung Die Klasse Object. Die Klasse Object

Programmieren in Java

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

Repetitorium Informatik (Java)

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Beispiel: die Klasse Brüche

Implementieren von Klassen

Transkript:

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, Sichtbarkeit und Generizität 1

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, Sichtbarkeit und Generizität 2

Anwendung der Sichtbarkeitskontrolle 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, Sichtbarkeit und Generizität 3

Arten des universellen Polymorphismus enthaltender Polymorphismus durch Untertypbeziehungen: Ersetzbarkeit: ev. unvorhersehbare Wiederverwendung kann Clients von lokalen Codeänderungen abschotten nicht immer verwendbar (kovariante Probleme) parametrischer Polymorphismus = Generizität: kaum Einschränkungen (auch für kovariante Probleme) keine Ersetzbarkeit: nur vorhersehbare Wiederverwend. Parameteränderung wirkt sich auf Clients aus Generizität und Untertypbeziehungen kombinierbar Eigenschaften ergänzen einander Objektorientierte Programmierung, Sichtbarkeit und Generizität 4

Generische Interfaces interface Collection<A> { void add (A elem); Iterator<A> iterator(); interface Iterator<A> { A next(); boolean hasnext(); Verwendungsbeispiele: Collection<String> Collection<Integer> (enthält void add (String elem)) (enthält void add (Integer elem)) Objektorientierte Programmierung, Sichtbarkeit und Generizität 5

Generische Klassen public class List<A> implements Collection<A> { protected class Node { A elem; Node next = null; Node (A elem) { this.elem = elem; protected Node head = null, tail = null; protected class ListIter implements Iterator<A> { protected Node p = head; public boolean hasnext() { return p!= null; public A next() { if (p == null) return null; A elem = p.elem; p = p.next; return elem; public void add (A x) { if (head == null) tail = head = new Node(x); else tail = tail.next = new Node(x); public Iterator<A> iterator() {return new ListIter(); Objektorientierte Programmierung, Sichtbarkeit und Generizität 6

Verwendung generischer Klassen class ListTest { public static void main (String[] args) { List<Integer> xs = new List<Integer>(); xs.add (new Integer(0)); Integer x = xs.iterator().next(); List<String> ys = new List<String>(); ys.add ("zerro"); String y = ys.iterator().next(); List<List<Integer>> zs = new List<List<Integer>>(); zs.add(xs); // zs.add(ys);! Compiler meldet Fehler! List<Integer> z = zs.iterator().next(); Objektorientierte Programmierung, Sichtbarkeit und Generizität 7

Generische Methoden interface Comparator<A> { int compare (A x, A y); class Collections { public static <A> A max (Collection<A> xs, Comparator<A> c ) { Iterator<A> xi = xs.iterator(); A w = xi.next(); while (xi.hasnext()) { A x = xi.next(); if (c.compare (w, x) < 0) w = x; return w; Objektorientierte Programmierung, Sichtbarkeit und Generizität 8

Verwendung generischer Methoden List<Integer> xs =...; List<String> ys =...; Comparator<Integer> cx =...; Comparator<String> cy =...; Integer rx = Collections.max (xs, cx); String ry = Collections.max (ys, cy); //... rz = Collections.max (xs, cy);! Fehler! Objektorientierte Programmierung, Sichtbarkeit und Generizität 9

Anwendungsfälle für Generizität gleich strukturierte Klassen oder Methoden erwartete Änderungen (= gleich strukturierte Versionen) in Spezialfällen verwendbar, wo Untertypen versagen (da Ersetzbarkeit für Generizität nicht nötig) zur Vermeidung des Overheads von dynamischem Binden (aber: nur selten und nur wenig bessere Effizienz und viele Nachteile durch Verzicht auf Ersetzbarkeit) Verwendung wirkt natürlich (durch latente Erfahrung) ABER: Generizität garantiert keine Ersetzbarkeit Objektorientierte Programmierung, Sichtbarkeit und Generizität 10

Gleich strukturierte Klassen, Methoden typisch: Containerklassen und zugreifende Methoden (leicht als solche zu erkennen) Einsatz von Generizität billig auf Verdacht verwenden Trick bei Refaktorisierung (Hinzufügen von Generizität): ursprüngliche Klasse erbt von neuer generischer Klasse class Alt {...T... class Neu<A> {...A... class Alt extends Neu<T> { üblicher Programmcode enthält wenige generische Klassen, verwendet aber viele (da zahlreiche typische Containerklassen vordefiniert) Objektorientierte Programmierung, Sichtbarkeit und Generizität 11

Abfangen erwarteter Änderungen gleiche Struktur von Klassen und Methoden in unterschiedlichen Programmversionen auch für Klassen, die nicht offensichtlich Container sind bei Verdacht, dass Typen sich in neuen Versionen ändern: Typparameter verwenden bei Typänderungen trotzdem Änderungen der Aufrufe statt direkt auf generische Klassen eher auf nichtgenerische Unterklassen davon zugreifen (nur unterste Ebene) class Example<A> {... class MyExample extends Example<Something> { Objektorientierte Programmierung, Sichtbarkeit und Generizität 12