informatik i/ii pvk mittwoch informatik ii, 1. teil

35
Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Upload: gretel-schubert

Post on 06-Apr-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK

MittwochInformatik II, 1. Teil

Page 2: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Ablauf heute

Allgemeines zu Java Unterschiede zwischen Java und C++ (Mehrfach)-Vererbung Exceptions Wurzelbäume Syntaxdiagramme, Parser Stack und Listen Binärbaum

Page 3: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 3

Programmieren mit Java Java-Syntax ähnelt der von C++ stark

Praktisch, weil man sich nicht viel mehr merken muss... … aber auch gefährlich, weil man was verwechseln

kann. Da Java-Programme nur auf einer virtuellen Maschine

(VM) laufen, gibt es eine kleine Effizienzeinbusse. Java ist rein objektorientiert Kompilieren: javac HelloWorld.java

Datei heisst immer wie die darin enthaltende Klasse Ausführen: java HelloWorld

Kein Linken notwendig

Page 4: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 4

Unterschiede zu C++

Keine Templates, structs, unions, pointer,

Mehrfachvererbung, Präprozessor, Operatorenüberladung, goto, .h Dateien, Destruktoren, friends

Stattdessen Alles sind Klassen, Interfaces, final, Garbage-

Collector, Threads

Page 5: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 5

Unterschiede zu C++

Da wir Klassendeklaration und Implementation nicht trennen, wird jede Funktion gleich an Ort und Stelle implementiert (in der Klasse)

char ist 2 Byte (Unicode)

Bitgrössen der Basistypen unabhängig von Architektur Arrays müssen nicht konstant sein Hüllenklassen. Bsp.: int → Integer instanceof um Datentyp zu prüfen

import statt include boolean statt bool

Page 6: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 6

Weiteres zu Java

Ausgebautes System für die Verwendung von Exceptions

Internetfähige Applets Einschränkungen bei impliziter Typenumwandlung

float → int gibt eine Fehlermeldung Strings vergleichen: s1.equals(s2) static Methode greift nur auf andere static

Methoden und static Variablen zu Plattformunabhängig

Page 7: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 7

Weiteres zu Java

Obwohl keine Pointer: Immer call-by-reference und this existiert auch

Globale Variablen sind immer static In Java gibt es immer Referenzen d.h. wir arbeiten

immer mit Adressen und nie mit den Werten selbst Vergleichen von zwei Referenzvariablen vergleicht

die Adresse und nicht deren Wert!

Person p = new Person(„Stefan“);

Person q = new Person(„Stefan“);

p == q // ergibt false

Page 8: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 8

package

Jede Klasse gehört einem Paket an Am Anfang jeder Datei: package myPackage; Falls nichts angegeben: package unnamed;

Gibt man weder public noch private an, so sind Variablen und Methoden im Package sichtbar und zugreifbar

Man kann ein ganzes Paket mit import java.io.* einfügen

Pro Datei darf nur eine Klasse public sein

Page 9: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 9

Vererbung

Funktioniert fast gleich wie in C++

class Car extends Vehicle { … } Es gilt: Car c; Vehicle v; … v = c; c = v; geht aber nicht (Polymorphismus)

Java hat auch abstrakte Klassen

abstract class GeoObj {

abstract double area(); }

Page 10: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 10

Mehrfachvererbung

Java bietet keine Mehrfachvererbung an und entgeht so dem „diamond inheritance problem“

Jedoch gibt es Interfaces (= Abstrakte Klassen deren Methoden alle abstrakt sind)

interface Vehicle { … } Das Interface wird dann von anderen Klassen

implementiert

class Circle implements GeoObj { … }

Page 11: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 11

Interfaces

Interfaces können sich gegenseitig erweitern

interface Z extends A, B, C { … } Und bei class Y extends X implements Z, A

wird bei Konflikten jeweils der Klasse (Y) der Vortritt gegeben

Während man nur von einer Klasse erben kann, kann man dafür mehrere Interfaces implementieren

Page 12: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 12

Aufgabe

interface A { }

abstract class B implements A { }

interface C extends A { }

class D extends B implements C { }

class E extends B { }

public class F implements C { }

D d = new D();A a = d;B b = d;C c = d;E e = d;F f = d;

E e = new E();A a = e;B b = e;C c = e;D d = e;F f = e;

A a = new D();B b = (B) a;C c = (C) a;D d = (D) a;E e = (E) a;F f = (F) a;

Page 13: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 13

Lösung zu vorherigen Slide

D d = new D();A a = d; // gehtB b = d; // gehtC c = d; // gehtE e = d; // geht nichtF f = d; // geht nicht

E e = new E();A a = e; // gehtB b = e; // gehtC c = e; // geht nichtD d = e; // geht nichtF f = e; // geht nicht

A a = new D();B b = (B) a; // gehtC c = (C) a; // gehtD d = (D) a; // gehtE e = (E) a; // geht nichtF f = (F) a; // geht nicht

Im dritten Stapel sind dynamic casts (es wird erst bei Laufzeit festgestellt von welchem Typ eine Variable wirklich ist (in diesem Fall D))

Page 14: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 14

super Mit super kann man auf eine Funktion der Basisklasse

zugreifen Wird also z.B. super in einem Konstruktor aufgerufen, so

ruft man den Konstruktor der Basisklasse auf Praktisch: Wir müssen nicht den ganzen

Klassenhierarchiebaum kennen um eine Funktion einer Basisklasse aufzurufen

class A extends B {

public func() {

super(); // ruft func() von B oder höher

auf

}

}

Page 15: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 15

Exceptions

Ausnahmen werden in try Blöcken ausgelöst Können mit catch abgefangen und behandelt werden Dabei wird unterschieden welche Art von Ausnahme

aufgetreten ist

Bsp.: try {

// Versuche in Datei zu schreiben

}

catch (IOException e) {

// Behandle Fehler

}

Page 16: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 16

Exceptions 2

Alle Ausnahmen erben von Throwable Mit catch(Throwable e) fängt man alle Ausnahmen

ab Laufzeitfehler müssen nicht abgefangen werden, alle

andern schon Ausser die eigene Funktion löst die selbe Ausnahme

aus, gibt den Fehler weiter public func( … ) throws java.io.IOException { }

Man kann auch eigene Ausnahmen definieren und auslösen

Page 17: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 17

Graphen

Graphen bestehen aus Knoten und Kanten Eine Kante verbindet genau zwei Knoten

Zusammenhängend Planar

Ein Baum hat keine Zyklen Es gibt immer nur genau einen Weg von einem

Knoten zu einem anderen Anzahl der Knoten = 1 + Anzahl der Kanten

Page 18: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 18

Wurzelbäume

Wurzelbäume sind rekursive Konstrukte

A

B C

F GED

Auch ein Wurzelbaum

AB

DC

EFG

Eingerückte Form, sieht schon fast aus wie Quelltext

Page 19: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 19

Aufgabe

Schreibe folgenden Baum in Linksklammerdarstellung

Schreibe folgende Linksklammerdarstellung als Baum

S(R(H(K)),P(A(N,O),Q,T),V(J,F(G)))

Page 20: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 20

Lösung zu vorherigen Slide

2(76(11(41,7,25(13)),7(16(54,17))),79(87(1,23(5,3)),65))

S

R P V

F

G

JTQAH

K N O

Page 21: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 21

Syntaxbaum

Wir können eine Anweisung in einen Baum schreiben

{ if ( a == b ) a++; else a=a-2; }

Anweisung{ }

if ( Ausdruck ) Anweisung else Anweisung

a == b a++ Variable = Ausdruck

a-2

Page 22: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 22

Syntaxdiagram

Beschreibung zur Generierung einer bestimmten Syntax

Term

Term +

Ausdruck

Faktor

Faktor *

Term

int_const

Ausdruck )

Faktor

(

Page 23: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 23

Aufgabe

Sind folgende Ausdrücke realisierbar mit diesen Syntaxdiagrammen?

X2 (X∼ 1 OR X∼ 2 )

(~X1) (X2 ) OR ( X∼ 1 OR X2 )

(X1 OR X2 ) AND ( X∼ 1 ) (X1 ) AND ( X∼ 1 OR X∼ 2 ) AND (X2 )

Page 24: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 24

Lösung zu vorherigen Slide

Nur

(X1 OR X

2 ) AND ( X∼

1 ) und (X

1 ) AND ( X∼

1 OR X∼

2 ) AND (X

2 )

sind gültige Ausdrücke

Page 25: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 25

Parser Ein Parser kontrolliert die Syntax des Quellcodes

static char c;

void int_const() { c = getCharacter(); }

void Ausdruck() { Term();

while (c == '+') { c = getCharacter(); Term(); }

}

void Term() { Faktor();

while (c == '*') { c = getCharacter(); Faktor(); }

}

void Faktor() {

if (c>='0' && c<='9') int_const();

else if (c == '(') { c = getCharacter(); Ausdruck();

if (c == ')') c = getCharacter(); else Fehler(); }

else Fehler();

}

Page 26: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 26

Stack

push

pop

Page 27: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 27

Zyklische Listen

Wir können auch in Java verkettete Listen aufbauen class ListElem {

int value; // oder sonst welche Daten

ListElem next; // Zeigt auf nächstes

Element der Liste

} Mit einem ListElem back; könnten wir auch

rückwärts durch die Liste gehen

Page 28: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 28

Aufgabe

Schreibe rekursive Implementation der Funktionen add fügt ein Element an den Anfang der Liste ein

size gibt die Länge der Liste zurück

sum gibt die Summe von allen Werten zurück

last gibt das letzte Element der Liste zurück

sublist gibt die Teilliste ab einem bestimmten Wert zurück

valueAt gibt den Wert an einer bestimmten Stelle zurück

index gibt den Index des ersten Elements zurück, welches einen bestimmten Wert hat

remove löscht Element an bestimmter Position

Page 29: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 29

Aufgabe

Programmiere einen Stack, der diese Liste verwendete und implementiere

push fügt dem Stack ein Element hinzu pop nimmt das oberste Element des Stacks weg peek gibt das oberste Element des Stacks

zurück empty bestimmt, ob Stack leer ist size gibt die Grösse des Stacks zurück

(Lösung in LinkedList&Stack.java)

Page 30: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 30

Binärbäume

class BaumElem {

int value; // Oder sonstige Daten

BaumElem left, right, back;

} Mit zusätzlichen BaumElem back; könnten wir den Baum

nicht nur runter, sondern wieder hoch

Data

back

left right

Page 31: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 31

Binärer Suchbaum

Jeder Knoten des Baumes hat ein Attribut Wir wollen einen Baum der geordnet ist und zwar

Von jedem Knoten aus, soll der linke Unterbaum nur Elemente mit kleinerem Attribut beinhalten

Und der rechte Unterbaum nur Elemente, die grösser sind als der Knoten

Suchen dauert jetzt nur noch

log(n) Schritte für gutartige Bäume Wann ist der Baum nicht gutartig?

10

5 14

12 151

Page 32: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 32

Einfügen in Binärbaum

void insert (int data, BaumElem b, BaumElem prev)

{

if (b == null) {

b = new BaumElem();

b.value = data; b.back = prev;

}

else if (data < b.value))

insert(data, b.left, b);

else

insert(data, b.right, b);

}

Page 33: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 33

Aufgabe

Lösche in diesem Binärbaum 15, 12 und 20 und ersetze den Knoten jeweils mit dem kleinsten Element vom rechten Teilbaum.

Implementiere die Funktion erase(int data, BaumElem b) welche genau das macht

Page 34: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 34

Lösung zu vorherigen Slide

Rest der Lösung in SearchTreeErase.java

20

12 32

28 47

39 52

179

13

20

13 32

28 47

39 52

179

28

13 32

47

39 52

179

Page 35: Informatik I/II PVK Mittwoch Informatik II, 1. Teil

Informatik I/II PVK 35

Morgen

Achtung Raumwechsel Ab morgen im HG E33.1