Tagesprogramm

Ähnliche Dokumente
Objektorientierung III

Zusatzmaterial DIE KLASSE OBJECT. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Interfaces und Vererbung

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Kopieren und Vergleichen

Kopieren und Vergleichen

4. Vererbung Die Klasse Object. Die Klasse Object

Listing 1: Cowboy. Listing 2: Woody

Abschnitt 17: Beispiel: Die Klasse String (Teil 2), das Interface Comparable<T>

Die abstrakte Klasse Expression:

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

12 Abstrakte Klassen, finale Klassen und Interfaces

Test 3 in Programmkonstruktion. 1. Single-Choice-Aufgaben zu Datenstrukturen. 2. Multiple-Choice-Aufgaben zu Interfaces. Aufgabe 1.1. Aufgabe 1.2.

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

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

3. Übungsbesprechung Programmkonstruktion

Die Klasse java.lang.object. Thorsten Treffer

Syntax. int a; public A() {...} public void F() {...} }

Liste Programmieren Java Überblick

Tag 8 Repetitorium Informatik (Java)

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

Einführung in die Programmierung. 8.0 Vererbung. Thomas R. Gross. Department Informatik ETH Zürich

Java I Vorlesung 6 Referenz-Datentypen

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

13 Polymorphie. Problem:

Vorkurs Informatik WiSe 15/16

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs für Anfänger

Software Entwicklung 1

Referenztyp. Elementare Typen und Referenztypen im Vergleich. Kapitel 4 KAPITEL 4

Informatik II Musterlösung

Hashtags - Klausuraufgaben

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Javakurs für Anfänger

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Algorithmen und Datenstrukturen

Ausdrücke der Programmiersprache Java

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

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Ausnahmebehandlung in Java

Programmieren in Java

Probeklausur: Programmierung WS04/05

Programmieren 2 Java Überblick

Objektorientierung (OO)

Nachtragstest in Programmkonstruktion 1. Phase. 1. Multiple-Choice-Aufgaben

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Eingeben, Ausgeben, Übergeben, Zurückgeben

Funk%onale*Programmierung* op%mal*nutzen* Michael*Sperber*

Programmieren in Java

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

13 Polymorphie. Problem:

JAVA 05: Objektorientierte Konzepte

Prüfung Softwareentwicklung II (IB)

Programmieren in Java

Objektorientierte Programmierung

1 Klassen und Objekte

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Vorlesung Programmieren

Informatik II Übung 6

> Vererbung, Die Austauschbarkeit

Enum-Klassen. Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: :36. Enum-Klassen 1/12

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Info B VL 14: Java Collections/Reflections

Softwareentwicklung II (IB) Enum-Klassen. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Tafelübung 07 Algorithmen und Datenstrukturen

SWE1 / Übung 9 ( )

Klassen und ihre Beziehungen II: Einfache Vererbung und Abhängigkeit

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Kapitel 5: Interfaces

Vererbung und Traits

Softwaretechnik WS 16/17. Übungsblatt 01

Vererbung. Martin Wirsing. Ziele. Vererbung

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

1 Einleitung Generizität Syntax... 2

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

Alles ist objektorientiert! Kurzer Rückblick

Zugriff auf Attribute eines Objekts. Objekte in Java. Referenztypen. Arrays und Klassen

1 Polymorphie (Vielgestaltigkeit)

Programmieren in Java

II.4.1 Unterklassen und Vererbung - 1 -

Universität Karlsruhe (TH)

Einführung in das Programmieren Probeklausur Lösungen

CS1005 Objektorientierte Programmierung

Dynamische Typinformation A01 OOP. Dynamische Typinformation

Beispiel für überladene Methode

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Übungsstunde 9. Einführung in die Programmierung I

Einführung in die Programmierung I. 8.0 Vererbung. Thomas R. Gross. Department Informatik ETH Zürich

5. Grundkonzepte der Objektorientierung (3): Vererbung Polymorphismus dynamisches Binden

Spezielle Sprachelemente

Objektorientierte Programmierung

Graphalgorithmen. Graphen

Datenstrukturen in Java

Pakete Software Entwicklung 1

Transkript:

1 2015-12-14 Tagesprogramm Methoden von Object tostring instanceof, class, getclass und Cast equals und hashcode

2 2015-12-14 Methoden von Object Object java.lang.object ist die oberste Oberklasse aller Klassen Methoden von Object sind in jeder Klasse vorhanden: public String tostring() {...} public boolean equals(object other) {...} public int hashcode() {...} public Class<?> getclass() {...} clone, finalize, wait, notifyall,...

3 2015-12-14 tostring tostring public String tostring() {...} wenn x Objekt eines Referenztyps, dann "Text" + x entspricht "Text" + x.tostring() System.out.print(x) entspricht System.out.print(x.toString()) Implementierung in Object liefert wenig Information sollte abhängig von Objektverwendung überschrieben werden Achtung: aus x.tostring().equals(y.tostring()) folgt nicht x.equals(y)

4 2015-12-14 tostring Aufgabe: Wozu tostring in Object? Man kann in jeder Klasse Methoden zur Erzeugung von Strings einführen. Warum ist dennoch tostring in Object und daher in jeder Klasse vorhanden? A B C D Um Programmierer(inne)n das Schreiben von tostring zu ersparen. Um die spezielle Semantik von + zu ermöglichen. Um eine einheitliche Namensgebung zu erreichen. Um Abstraktion auf die Verwendung von Strings auszudehnen.

5 2015-12-14 instanceof, class, getclass und Cast instanceof Adding x = new IntTree(); System.out.println(x instanceof Adding); true System.out.println(x instanceof Removing); false System.out.println(x instanceof IntContainer); true System.out.println(x instanceof IntTree); true System.out.println(null instanceof IntTree); false Adding HasElem IntContainer Removing IntTree IntQueueElem

6 2015-12-14 instanceof, class, getclass und Cast class und getclass Adding x = new IntTree(); System.out.println(x.getClass().getName()); IntTree System.out.println(IntTree.class.getName()); IntTree System.out.println(Adding.class.getName()); Adding System.out.println(x.getClass().equals(IntTree.class)); System.out.println(x.getClass().equals(Adding.class)); Adding HasElem IntContainer Removing IntTree IntQueueElem

7 2015-12-14 instanceof, class, getclass und Cast Cast auf Referenztypen Adding x = new IntTree(); System.out.println(x.empty());... Compilationsfehler System.out.println(((IntTree)x).empty()); true System.out.println(((IntQueueElem)x).empty());... Laufzeitfehler System.out.println(((IntContainer)x).empty()); true System.out.println(((IntContainer)null); null Adding HasElem IntContainer Removing IntTree IntQueueElem

8 2015-12-14 instanceof, class, getclass und Cast Aufgabe: Verwendung von Casts Erfahrene Programmierer(innen) meiden die Verwendung von Casts auf Referenztypen. Deren Verwendung gilt als schlechter Programmierstil. Warum ist das so? A B C D Weil Casts leicht zu Fehlern im Programm führen. Weil Casts das Erkennen von Fehlern im Programm erschweren. Weil Casts Prüfungen durch den Compiler ausschalten. Weil es heute bessere Alternativen zu Casts gibt.

9 2015-12-14 equals und hashcode equals public boolean equals(object other) {...} in Object definiert durch return this == other; muss für inhaltliche Vergleiche überschrieben werden Bedingungen: wenn x!= null dann x.equals(null) == false wenn x!= null dann x.equals(x) wenn x!= null && y!= null dann x.equals(y) == y.equals(x) wenn x.equals(y) && y.equals(z) dann x.equals(z) wenn x und y unverändert dann liefern wiederholte Aufrufe von x.equals(y) gleiche Ergebnisse

10 2015-12-14 equals und hashcode Typische Implementierung von equals @Override public boolean equals(object other) { if (this == other) { // nicht immer notwendig return true; } if (other == null // immer notwendig! this.getclass().equals(other.getclass())) { return false; } ClassName that = (ClassName)other; // ClassName ist Name der aktuellen Klasse //...Vergleich der Inhalte von this und that... }

11 2015-12-14 equals und hashcode Aufgabe: Wozu equals? Wozu benötigt man equals, obwohl es für Vergleiche auch == gibt? A B C D Vergleiche mit == sind nur auf elementaren Typen sinnvoll. Bei einem Vergleich mit == wird im Hintergrund equals aufgerufen. Das System kann nicht wissen, wann zwei Objekte als gleich angesehen werden sollen, und Operatoren kann man nicht selbst programmieren. Gleichheit (equals) und Identität (==) sind nicht dasselbe.

12 2015-12-14 equals und hashcode hashcode public int hashcode() {...} gibt eine aus dem Objektinhalt errechnete (fast beliebige) Zahl zurück wird von einigen Datenstrukturen (z.b. HashMap) benötigt Bedingungen: wenn x.equals(y) dann x.hashcode() == y.hashcode() wenn x unverändert dann liefern wiederholte Aufrufe von x.hashcode() gleiche Ergebnisse wenn equals überschrieben dann auch hashcode überschrieben Achtung: aus x.hashcode() == y.hashcode() folgt nicht x.equals(y)

13 2015-12-14 equals und hashcode Aufgabe: Gefahren vermeiden Sprachkonstrukte wie Casts, aber auch instanceof und getclass() gelten als gefährlich. Deren Verwendung ist nach Möglichkeit zu vermeiden. Suchen Sie in Gruppen zu 2 bis 3 Personen Antworten auf folgende Frage: In welchen Fällen (Beispiele) ist die Verwendung dieser Sprachkonstrukte vermeidbar, in welchen nicht?