Informatik I/II PVK

Werbung
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
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
Informatik I/II PVK
3
Unterschiede zu C++

Keine


Templates, structs, unions, pointer,
Mehrfachvererbung, Präprozessor,
Operatorenüberladung, goto, .h Dateien,
Destruktoren, friends
Stattdessen

Alles sind Klassen, Interfaces, final, GarbageCollector, Threads
Informatik I/II PVK
4
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
Informatik I/II PVK
5
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
Informatik I/II PVK
6
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
Informatik I/II PVK
7
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
Informatik I/II PVK
8
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(); }
Informatik I/II PVK
9
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 { … }
Informatik I/II PVK
10
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
Informatik I/II PVK
11
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
A
B
C
E
F
d
a
b
c
e
f
=
=
=
=
=
=
new D();
d;
d;
d;
d;
d;
E
A
B
C
D
F
e
a
b
c
d
f
=
=
=
=
=
=
new E();
e;
e;
e;
e;
e;
Informatik I/II PVK
A
B
C
D
E
F
a
b
c
d
e
f
=
=
=
=
=
=
new
(B)
(C)
(D)
(E)
(F)
D();
a;
a;
a;
a;
a;
12
Lösung zu vorherigen Slide
D
A
B
C
E
F

d
a
b
c
e
f
=
=
=
=
=
=
new D();
d; // geht
d; // geht
d; // geht
d; // geht nicht
d; // geht nicht
A a
B b
C c
D d
E e
F f
=
=
=
=
=
=
new
(B)
(C)
(D)
(E)
(F)
E e
A a
B b
C c
D d
F f
D();
a; //
a; //
a; //
a; //
a; //
=
=
=
=
=
=
new E();
e; // geht
e; // geht
e; // geht nicht
e; // geht nicht
e; // geht nicht
geht
geht
geht
geht nicht
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))
Informatik I/II PVK
13
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
}
}
Informatik I/II PVK
14
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
}
Informatik I/II PVK
15
Exceptions 2

Alle Ausnahmen erben von Throwable


Laufzeitfehler müssen nicht abgefangen werden, alle
andern schon



Mit catch(Throwable e) fängt man alle Ausnahmen
ab
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
Informatik I/II PVK
16
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
Informatik I/II PVK
17
Wurzelbäume

Wurzelbäume sind rekursive Konstrukte
A
A
B
B
D
D
C
E
F
C
E
F
G
G
Auch ein Wurzelbaum
Eingerückte Form, sieht
schon fast aus wie Quelltext
Informatik I/II PVK
18
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)))
Informatik I/II PVK
19
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
H
K
A
N
Q
V
T
O
Informatik I/II PVK
J
F
G
20
Syntaxbaum

Wir können eine Anweisung in einen Baum schreiben

{ if ( a == b ) a++; else a=a-2; }
{
if
(
}
Anweisung
Ausdruck
a == b
)
Anweisung
a++
else
Anweisung
Variable = Ausdruck
a-2
Informatik I/II PVK
21
Syntaxdiagram

Beschreibung zur Generierung einer bestimmten
Syntax
Ausdruck
Term
Term
Term
+
Faktor
*
Faktor
int_const
Faktor
(
Ausdruck
Informatik I/II PVK
)
22
Aufgabe

Sind folgende Ausdrücke realisierbar mit diesen Syntaxdiagrammen?
∼ (X1 OR ∼ X2 )
X2
(~X1)
(X1 OR X2 ) AND (∼ X1 )
(X2 ) OR (∼ X1 OR X2 )
(X1 ) AND (∼ X1 OR ∼ X2 ) AND (X2 )
Informatik I/II PVK
23
Lösung zu vorherigen Slide

Nur
(X1 OR X2 ) AND (∼ X1 ) und (X1 ) AND (∼ X1 OR ∼ X2 ) AND (X2 )
sind gültige Ausdrücke
Informatik I/II PVK
24
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();
}
Informatik I/II PVK
25
Stack
push
pop
Informatik I/II PVK
26
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
Informatik I/II PVK
27
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

last

sublist gibt die Teilliste ab einem bestimmten Wert zurück

valueAt gibt den Wert an einer bestimmten Stelle zurück

index

remove
gibt die Summe von allen Werten zurück
gibt das letzte Element der Liste zurück
gibt den Index des ersten Elements zurück,
welches einen bestimmten Wert hat
löscht Element an bestimmter Position
Informatik I/II PVK
28
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)
Informatik I/II PVK
29
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
back
Data
left
right
Informatik I/II PVK
30
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
10
log(n) Schritte für gutartige Bäume

5
14
Wann ist der Baum nicht gutartig?
1
Informatik I/II PVK
12
15
31
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);
}
Informatik I/II PVK
32
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
Informatik I/II PVK
33
Lösung zu vorherigen Slide
20
20
12
9
17
13

32
28
13
47
39
28
9
52
32
17
28
13
47
39
9
52
32
17
47
39
52
Rest der Lösung in SearchTreeErase.java
Informatik I/II PVK
34
Morgen

Achtung Raumwechsel

Ab morgen im HG E33.1
Informatik I/II PVK
35
Herunterladen