Informatik II - Tutorium 6

Ähnliche Dokumente
Informatik II Übung 6

Informatik II - Übung 06

Informatik II Übung 6 Gruppe 4

Informatik II - Übung 06. Christian Beckel

Informatik II (D-ITET) Übungsstunde 6,

Informatik II Übung 6

Informatik II - Tutorium 7

Informatik II (D-ITET) Übungsstunde 6,

Informatik II Übung 6. Pascal Schärli

Informatik II - Tutorium 5

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Algorithmen und Datenstrukturen 07

Übungsserie Nr. 6. Ausgabe: 1. April 2015 Abgabe: 15. April Hinweise

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

Algorithmen und Datenstrukturen

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmierkurs Java

Programmierung Nachklausurtutorium

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs für Anfänger

Info B VL 8: Abstrakte Klassen & Interfaces

Informatik II Übung 5 Gruppe 3

Informatik II Übung 7. Pascal Schärli

Vorkurs Informatik WiSe 15/16

II.4.1 Unterklassen und Vererbung - 1 -

Wiederholung. Klassenhierarchie:

4. Vererbung Die Klasse Object. Die Klasse Object

II.4.2 Abstrakte Klassen und Interfaces - 1 -

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

Javakurs für Anfänger

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Informatik II Übung 06. Benjamin Hepp 5 April 2017

ALP II Dynamische Datenmengen Datenabstraktion

Die abstrakte Klasse Expression:

Interfaces und Vererbung

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

Informatik II Übung 6 Gruppe 7

14 Abstrakte Klassen, finale Klassen, Interfaces

II.4.1 Unterklassen und Vererbung - 1 -

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

14 Abstrakte Klassen, finale Klassen, Interfaces

Programmieren 2 Java Überblick

1 Abstrakte Klassen, finale Klassen und Interfaces

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Schnittstellen, Vererbung & Polymorphismus für Fortgeschrittene

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

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

Informatik II - Übung 07

Softwaretechnik WS 16/17. Übungsblatt 01

Programmieren in Java -Eingangstest-

14. Java Objektorientierung

II.4.1 Unterklassen und Vererbung - 1 -

Polymorphie. 15. Java Objektorientierung II

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Teil 2-3. Vorlesung. Modul: Programmierung B-PRG Grundlagen der Programmierung II

Polymorphie. 15. Java Objektorientierung II

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

Programmieren in Java

Programmieren in Java

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

6. Globalübung (zu Übungsblatt 8)

Kapitel 5: Interfaces

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Informatik II (D-ITET) Übungsstunde 6

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

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

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

Informatik II Übung 5

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

Programmierkurs C++ Abstrakte Klassen und Methoden

Tafelübung 07 Algorithmen und Datenstrukturen

Java Einführung Vererbung und Polymorphie. Kapitel 13

14. Java Objektorientierung

Programmieren 1 09 Vererbung und Polymorphie

Vorlesung 8. Sitzung Grundlegende Programmiertechniken

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

Informatik II Übung 5 Gruppe 4

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Objekt-orientierte Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

II.4.1 Unterklassen und Vererbung - 1 -

Programmieren in Java

Meta Programming and Reflection in Java

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

Praktische Softwaretechnologie Vorlesung 4

Transkript:

Informatik II - Tutorium 6 Vincent Becker vincent.becker@inf.ethz.ch 11.04.2018 Vincent Becker 11.04.2018 1

Teilnehmer für Projekte gesucht Falls jemand gerne an Experimenten teilnimmt, ein Email an mich schreiben Dann benachrichtige ich euch bei Bedarf Völlig unverbindlich Zum Wohle der Wissenschaft ;) Vincent Becker 11.04.2018 2

Tutorium nächste Woche Wieder gehalten von Christelle Gloor Gleicher Raum, 13:00 Uhr Vincent Becker 11.04.2018 3

Übungsblatt 5 Vincent Becker 11.04.2018 4

Listen Array: Alle Plätze liegen im Speicher hintereinander 32 42 21 7 54 9 int[] a Listen: über Zeiger verkettet 32 adr 9 adr 42 adr 21 adr List l 7 adr 54 adr Varianten: Einfach, doppelt, zyklisch verkettet Vincent Becker 11.04.2018 5

Wie kann man eine Liste realisieren? public class List { public int ; public List ; public List(int, List ) { this. = ; mylist this. = ; 76 15 22 3 32 Vincent Becker 11.04.2018 6

List Methoden (rekursiv) mylist 76 15 22 3 32 add(list list, int ) Erstellen einer neuen Liste mit gegebenem Wert, die alte Liste wird angehängt mylist mylist2 23 76 15 22 3 32 public static List add(list list, int ) { return new List(, list); Vincent Becker 11.04.2018 7

List Methoden (rekursiv) size(list list) 1 + Grösse der Restliste mylist 76 15 22 3 32 1 + size public static int size(list list) { if (list == null) return 0; return size(list.) + 1; sum(list list) Value + Summe der Restliste last(list list) Prüfen ob list. null ist, wenn nicht last auf Restliste anwenden Vincent Becker 11.04.2018 8

U5.A4 Dynamischer Stack als Liste implementiert + Kein Kopieren beim Erreichen der Kapazität mehr nötig + Push und Pop einfach realisierbar public class Stack { private List list; public Stack() { list = null; public void push(int number) { list = Lists.add(list, number); public int pop() throws EmptyStackException { if (list == null) throw new EmptyStackException(); int res = list.; list = list.; return res; Vincent Becker 11.04.2018 9

Java Vererbung & Interfaces Gliederung Beispiel Person-Klasse Inheritance (Vererbung) Type compatibility Polymorphism instanceof Visibility rules Constructor and super() Final methods and class Abstract classes and methods Interfaces Abstract classes vs. interfaces Vincent Becker 11.04.2018 10

Class Person Person Name Age Address PhoneNumber tostring() getname() getage() getaddress() getphonenumber() setaddress(newaddress) setphonenumber(newphonenumber) Attributes Accessors Mutators Getter and Setter Methods Vincent Becker 11.04.2018 11

Class Person - Implementierung public class Person { private String m_name; private int m_age; private String m_address; private String m_phone; public Person(String name, int age, String address, String phone) { m_name = name; m_age = age; m_address = address; m_phone = phone; public String tostring() { return getname() + " is " + getage() + "old and lives in " + getaddress(); public String getname() { return m_name; public int getage() { return m_age; public String getaddress() { return m_address; public String getphonenumber() { return m_phone;... Vincent Becker 11.04.2018 12

Class Student eine Erweiterung von Person Wie würde man einen Studenten modellieren? Was hat ein Student, was eine Person im Allgemeinen nicht hat? Person Name Age Address PhoneNumber Student Name Age Address PhoneNumber Legi tostring() getname() getage() getaddress() getphonenumber() setaddress(newaddress) setphonenumber(newphonenumber) tostring() getname() getage() getaddress() getphonenumber() getlegi() setaddress(newaddress) setphonenumber(newphonenumber) Vincent Becker 11.04.2018 13

Class Student Student erweitert ein bestehendes Konzept, die Person enthält ein zusätzliches Feld: m_legi mit Getter: getlegi() public class Student extends Person { private String m_legi; public Student(String name, int age, String address, String phone, String legi){ super(name, age, address, phone); m_legi = legi; public String tostring() { return getname() + " is " + getage() + "old, lives in " + getaddress() + " and has legi-nr.: " + getlegi(); public String getlegi() { return m_legi; Vincent Becker 11.04.2018 14

Class Student Student definiert einen Konstruktor ruft Basisklassenkonstruktor mit super auf public class Student extends Person { private String m_legi; public Student(String name, int age, String address, String phone, String legi){ super(name, age, address, phone); m_legi = legi; @Override public String tostring() { return getname() + " is " + getage() + "old, lives in " + getaddress() + " and has legi-nr.: " + getlegi(); public String getlegi() { return m_legi; Vincent Becker 11.04.2018 15

Class Student Student definiert die Methode tostring() neu public class Student extends Person { private String m_legi; public Student(String name, int age, String address, String phone, String legi){ super(name, age, address, phone); m_legi = legi; @Override public String tostring() { return getname() + " is " + getage() + "old, lives in " + getaddress() + " and has legi-nr.: " + getlegi(); public String getlegi() { return m_legi; Vincent Becker 11.04.2018 16

Vererbung Student erbt von Person Student kann: Neue Attribute hinzufügen m_legi Neue Methoden hinzufügen getlegi() Bestehende Methoden überschreiben (override) tostring() Student kann nicht: Attribute entfernen Methoden entfernen Vincent Becker 11.04.2018 17

Warum Vererbung? Besseres Design & Struktur Abstraktion der realen Welt, Modellierung von ist ein - Beziehungen z.b. Student peter peter ist ein Student und peter ist ein Person Wiederverwendung von Code Bessere Wartbarkeit Vincent Becker 11.04.2018 18

Static & Dynamic Cast Person Student Employee Person p = new Person(...); Student s = new Student(...); Employee e = new Employee(...); Person ps = s ok Person pe = e ok Student sp = p compile error Student sps = ps compile error Student dsps = (Student) ps ok Employee deps = (Employee) ps runtime error Vincent Becker 11.04.2018 19

Static & Dynamic Cast Person Student Employee Person p = new Person(...); Student s = new Student(...); Employee e = new Employee(...); p instanceof Person true p instanceof Student false s instanceof Person true s instanceof Student true Vincent Becker 11.04.2018 20

Die Klasse Object in Java Ist die Oberklasse aller Klassen in Java, auch von selbst programmierten Klassen Basistypen wie int nicht enthalten, da keine Klassen Wird eine Klasse definiert, erbt sie implizit von Object public class MyClass {... Ist äquivalent zu public class MyClass extends Object {... Vincent Becker 11.04.2018 21

Die Klasse Object Object Person Student Employee Quelle: sun.com Vincent Becker 11.04.2018 22

Visibility private Attribute Auf private Attribute der Oberklasse kann in der Unterklasse nicht zugegriffen werden, genauso wie in jeder anderen Klasse protected Attribute Protected Attribute sind sichtbar in den Unterklassen und in den Klassen im selben Package, aber nicht darüber hinaus public Attribute Überall sichtbar Vincent Becker 11.04.2018 23

Final Methoden und Klassen Eine Unterklasse kann die Methoden der Oberklasse verwenden oder die Methoden der Oberklasse überschreiben (override) Eine mit final deklarierte Methode in der Oberklasse kann in der Unterklasse nicht überschrieben werden Von einer mit final deklarierten Klasse kann nicht geerbt werden z.b. Integer, Character Vincent Becker 11.04.2018 24

Abstrakte Klassen abstract Methode Eine Methode die alle Unterklassen implementieren müssen In C++ war das eine rein virtuelle Methode class myclass { public: virtual void vfunc() = 0; //pure virtual function ; abstract Klasse Eine Klasse mit mindestens einer abstrakten Methode Wird eine abstrakte Methode in der Unterklasse nicht implementiert, kommt es zu einem Compilerfehler Vincent Becker 11.04.2018 25

Interfaces (Schnittstellen) Deklariert Methodensignaturen, die von einer implementierenden Klasse implementiert werden müssen Eine Klasse kann mehrere Interfaces implementieren Eine implementierende Klasse muss alle Methodendeklarationen des Interfaces implementieren Neuerung in Java 8: default erlaubt Implementierung im Interface Also ähnlich zu einer abstrakten Klasse Vincent Becker 11.04.2018 26

abstract class vs. interface Abstract class Kann vollständige Implementierungen enthalten und/oder abstrakte Methoden Interface In der Regel sind keine Implementierungen enthalten (Ausnahme: default in Java8) Methoden können protected sein Attribute, Konstanten, Alle Methoden sind implizit public Nur Konstanten (public static final) http://docs.oracle.com/javase/tutorial/java/iandi/index.html Vincent Becker 11.04.2018 27

Beispiel Interface IStack public interface IStack { int size(); void push(object obj); Object pop(); Object peek(); boolean empty(); public class MyStack implements IStack { private int size; public int size() { return size; public void push(object obj) {...... Vincent Becker 11.04.2018 28

Beispiel Abstrakte Klasse BaseStack public abstract class BaseStack implements IStack { public abstract int size(); public abstract void push(object obj); public abstract Object pop(); public Object peek(){ Object top = pop(); push(top); return top; public boolean empty() { return size() == 0; public class MyStack extends BaseStack { private GenericList first; @Override public Object peek() { return first.;... Vincent Becker 11.04.2018 29

public class A { public void dosomething() { System.out.println("A"); public class B extends A { @Override public void dosomething() { System.out.println("B"); A a = new A(); B b = new B(); A ab = new B(); a.dosomething(); b.dosomething(); ab.dosomething(); Was ist die Ausgabe? A B B A B A B A B Vincent Becker 11.04.2018 30

Übungsblatt 6 Vincent Becker 11.04.2018 31

U6.A1 Modellierungsdiagramm mittels UML: Unified Modeling Language http://de.wikipedia.org/wiki/klassendiagramm Vincent Becker 11.04.2018 32

U6.A2 Fabrikmethode Folgendes Szenario: 1. Programmierer Listenpro implementiert verschiedene Listen, die alle das Interface IList verwirklichen 2. Programmierer Listenuser benutzt Listen, will aber nichts über die Funktionsweise wissen 3. Wenn Listenpro eine neue Implementierung schreibt, muss Listenuser im Code alle Zeilen mit new ListA() auf new ListB() umschreiben. Das ist nervig! 4. Listenpro hat eine bessere Lösung und stellt eine Fabrikmethode zur Verfügung, z.b. Factory.giveMeNewList(), die immer ein Objekt der neuesten Implemenierung liefert. Vincent Becker 11.04.2018 33

U6.A3 Generische Listen Eine generische Liste handhabt nicht mehr nur Objekte eines bestimmten Typs, sondern Instanzen der Klasse Object, und damit Instanzen aller Klassen Hier muss eine Utility-Klasse erstellt werden, indem IListUtils implementiert wird Achtung: Diesmal wird die Utility-Klasse instanziiert und ist nich mehr static Vincent Becker 11.04.2018 34

U6.A3 GeometricObject <<interface>> Comparable Schreibt smallerthan vor implements <<abstract>> GeometricObject Schreibt area() vor, kann smallerthan implementieren extends extends Rectangle Triangle Müssen beide area() auf ihre Weise implementieren Vincent Becker 11.04.2018 35

U6.A4 Wieder ein Stack Kombination Listen und Arrays zur Implementierung eines dynamischen Stacks Eine Liste von Arrays Fortgeschrittene Aufgabe, wer sie lösen kann, kann sehr wahrscheinlich genug für die Prüfung (im Programmierteil) Vincent Becker 11.04.2018 36

viel Spass! Vincent Becker 11.04.2018 37