Übung zur VL Grundlagen der Übung zur VL

Werbung
Verkettete Liste
Node c
c.item
c.next
Übung zur VL „Grundlagen der Übung
zur VL Grundlagen der
Programmierung“
g
g
= new Node();
= "Carol";
Carol ;
= null;
Node b = new Node();
b.item = "Bob";
b.next = c;
Node a
a.item
a next
a.next
Node a
Node b
Node c
= new Node();
= "Alice";
= b;
C4
CA
C0
9. Übung
9. Übung
Dr. Zubow
a
b
c
Alice
i
Bob
Carol
null
ll
addr Value
C0 "Carol"
C1
null
C2
C3
C4 "Alice"
C5
CA
C6
C7
C8
C9
CA
"Bob"
CB
C0
CC
CD
CE
CF
Hauptspeicher
Traversierung einer verketteten Liste
Null‐terminierte und zirkulär
verkettete Liste
first
N ll
Null‐terminierte
i i
verkettete
k
Li
Liste
Im Falle einer null‐terminierten verketteten
Liste:
for (List x = first; x != null; x = x.next) {
System out println(x name);
System.out.println(x.name);
}
first
zirkulär verkettete Liste
x
first
Alice
Bob
Carol
null
% java List
Alice
Bob
Carol
Traversierung einer verkettete Liste
Im Falle einer zirkulär verketteten Liste
Löschen & Einfügen
& Einfügen
Löschen
if (first != null) {
// if list is not empty
x = first;
do {
System out println(x name);
System.out.println(x.name);
x = x.next;
} while (x != first);
}
Alice
y
z
x
y
z
x
y
x
y
Einfügen
x
first
x
Bob
% java List
Alice
Bob
Carol
Carol
Invertieren einer verketteten Liste
t
Binärer Baum in Java
Baum in Java
Java Implementierung eines binären Baums von Strings
Java Implementierung
von Strings
Invertieren
reverse
first
second
– Eine Referenz auf einen String.
– Eine Referenz auf den linken Tree.
– Eine Referenz auf den rechten Tree.
public class Tree {
private String s;
private Tree left;
private Tree right;
}
Verkettete Strukturen
•
•
Reale Welt
Modell
Abstraktion
Jede der 3 Methoden f(), g() bzw. h() ist dazu geeignet, eine oder mehrere
der Datenstrukturen A,B,C,D nach einem Wert key zu durchsuchen.
Bestimmen sie zu jeder der Datenstrukturen A,B,C,D jeweils die Funktion
(f(), g(), oder h()),die zum Durchsuchen dieser Datenstruktur und dem
yg g
sind.
Auffinden des Wertes key geeignet
Der Hilfs‐Typ Node ist wie folgt definiert:
public class Node {
public int key;
public Node left, right;
}
public boolean f(int key)
{
Node x = start;
while
hil (x != null)
( !
ll) {
if (x.key == key)
return true;
x = x.right;
}
return false;
}
public boolean g(int key)
{
Node x = start;
while
hil (x != null)
( !
ll) {
if (x.key == key) return true;
if (x.key > key) x = x.left;
else x = x.right;
}
return false;
}
public boolean h(int key)
{
Node x = start; while
hil (true)
(t ) {
x = x.right;
if (x.key == key) return true; if (x == start) break;
}
return false;
}
Schnappi (20kg launisch): Hund
Schnappi (20kg, launisch): Hund Munchkin (1kg, langsam): Schildkröte
Kitty (8kg, schläfrig): Katze
Reale Entitäten
Instanzenmodell
Klassifikation
Klassifikation
Abstraktion
Tier
+ name
+ gewicht
Katze
+ reinlich
reinlich
Hund
+ sabbert
sabbert
Schildkröte
+ speed
speed
Objekte in Java
Objekte in Java
Java Collections
Java Collections
• Beziehungen zwischen Klassen
–
–
–
–
Vererbung (inheritance relationships)
Schnittstellen (interfaces)
(
)
Packaging
I
Innere Klassen (inner
Kl
(i
classes)
l
)
• Subklassen und Vererbung
Collection = represents a group of objects, known as its elements.
Set = A collection that contains no duplicate elements.
List = An ordered collection (also known as a sequence).
Map = An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
at most one value.
SortedMap = A map that further guarantees that it will be in ascending key order, sorted according to the natural ordering of its keys.
– Kl
Klassen in Java liegen in einer Klassenhirarchie
i J
li
i i
Kl
hi
hi vor
– Ein Klasse kann als Subklasse einer anderen Klassen mit Hilfe des Schlüsselwortes extends deklariert werden
des Schlüsselwortes extends
deklariert werden
– Eine Subklasse erbt Variablen und Methoden der Superklasse und kann diese verwenden, als wären sie selbst in der Subklasse deklariert
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
class Animal {
float weight;
void eat() { ... }
}
class Mammal extends Animal { // Säugetier
int heartRate;
// inherits weight
...
void breathe()
() { // atmen
...
}
// i
inherits
h it eat()
t()
}
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Eine Katze ist vom Typ Säugetier, welches wiederum vom Typ Tier ist
– Objekte vom Typ Katze erben alle Charakteristiken von Objekten des Typs Säugetier und Tier
b k
d
d
– Eine Katze besitzt jedoch zusätzliche Eigenschaften (p rr() Methode und longHair Variable)
(purr()‐Methode und longHair‐Variable)
Animal
Mammal
Cat
Klassenhierarchie
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Eine Klasse kann max. eine andere erweitern (single inheritance) Æ Lösung über Interfaces (später)
inheritance) Æ
Lösung über Interfaces (später)
– Eine Klasse kann ferner weiter erweitert werden (Vererbung als Spezialisierung)
als Spezialisierung)
class Cat extends Mammal {
boolean longHair;
// inherits weight and heartRate
...
void p
purr()
() { // schnurren
...
}
// i
inherits
h it eat()
t() and
d b
breathe()
th ()
}
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Eine Subklasse erbt alle Elemente (Variablen/ Methoden) der Superklasse (Ausnahme: private deklarierte Elemente)
– Instanzen des Subtyps können überall dort verwendet d
b
k
b ll d
d
werden, wo Instanzen des Supertyps erwartet werden:
C t simon
Cat
i
= new C
Cat();
t()
Animal creature = simon;
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
• Subklassen und Vererbung
– Verdeckte Variablen (shadowed variables)
Verdeckte Variablen (shadowed variables)
class Animal
float weight;
class Mammal
class
Mammal
float weight;
Inherited scope
Instance Instance
scope
Local scope
Objekte in Java
Objekte in Java
foodConsumption() {{
foodConsumption()
float weight;
...
weight = ...;;
weight }
– Verdeckte Variablen (shadowed variables)
Verdeckte Variablen (shadowed variables)
class IntegerCalculator {
int sum;
}
class
l
D
DecimalCalculator
i lC l l t
extends
t d I
IntegerCalculator
t
C l l t
{
double sum;
...
// Zugriff auf sum der Superklasse
int s = super.sum;
}
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Verdeckte Variablen (shadowed variables)
(
)
class Animal
eat()
sleep()
reproduce()
DecimalCalculator dc = new DecimalCalculator();
IntegerCalculator ic = dc;
int s = ic.sum; //Zugriff auf IntegerCalculator
– Überschriebene Methoden (overriding methods)
• SSubklasse kann eine Methode definieren, welche die exakt gleiche bkl
k
i M h d d fi i
l h di
k l i h
Methodensignatur wie eine Methode in der Superklasse hat
• Die Methode in der Subklasse „überschreibt“ die Methode der Superklasse (ersetzt die Implementierung)
• Ermöglicht das Verhalten von Objekten zu verändern (Æ Subtyp‐
Polymorphie)
overrides
overrides
class Mammal
reproduce()
class Cat
sleep()
l
()
huntMice()
purr()
Cat simon
eat()
reproduce()
sleep()
huntMice()
purr()
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Überschriebene Methoden (overriding
(
g methods))
• Existieren mehrere Implementationen einer Methode in der Vererbungshierarchie eines Objektes, dann wird die M h d d
Methode der speziellsten Klasse gewählt
i ll
Kl
ähl
– … unabhängig davon, ob über einen weniger speziellen Typ g g
zugegriffen wird
Cat simon = new Cat();
Animal creature = simon;
...
creature.sleep(); // accesses Cat sleep()
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Überschriebene Methoden
Überschriebene Methoden
• Werden zur Laufzeit (Æ überladene Methoden zur Compilezeit) ausgewählt
• Casting hat einen Einfluss auf die Auswahl von überladenen, nicht aber überschriebenen Methoden
• Statische Methoden
Statische Methoden werden nicht dynamisch zur Laufzeit werden nicht dynamisch zur Laufzeit
ausgewählt (Æ Compilezeit) – eine statische Methode einer Superklasse kann durch eine andere statische M. einer Subklasse üb d kt
überdeckt werden (Ausnahme: final)
d (A
h
fi l)
• Mit Hilfe von final kann das Überschreiben einer Methode verhindert werden (von final deklarierten Klassen kann hingegen nicht geerbt werden, z.B. java.lang.String)
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Spezielle Referenzen: this und super
• Zugriff auf die Bestandteile des aktuellen Objektes bzw. der Superklasse
• super um auf Bestandteile der Superklasse zuzugreifen
• Häufiger Anwendungsfall: Überschreibende Methode (der Subklasse) führt einige vorgelagerte Aufgaben durch, bevor sie die auf die überschriebene Methode (der Superklasse) verweist
Superklasse) verweist
class Animal {
void eat(Food f) throws InedibleException {
// consume food
}
}
class Herbivore extends Animal {
void eat(Food f) throws InedibleException {
// check if edible
super.eat(f);
}
}
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Spezielle Referenzen: this und super
• super veranlasst die Suche nach Variablen/Methoden in der veranlasst die Suche nach Variablen/Methoden in der
unmittelbaren Superklasse zu beginnen
• Die geerbte Variable/Methode kann sich in der unmittelbaren bzw. einer weiter entfernten Superklasse befinden
weiter entfernten Superklasse befinden
– Casting
• Mit Hilfe eines cast wird dem Compiler explizit mitgeteilt, dass der Typ einer Objektreferenz verändert werden soll
einer Objektreferenz verändert werden soll
• Wird zur Compile‐ und Laufzeitzeit überprüft (Æ ClassCastException)
• Lediglich das „casten“ von Objekten der selben Vererbungshierarchie ist erlaubt (Æ Interfacekonzept)
erlaubt (Æ
• Ein cast hat lediglich Einfluss auf die Referenz – die jeweiligen Objekte bleiben unverändert (es wird lediglich die Sicht des Compilers bzw. der Laufzeit auf ein Objekt verändert)
j
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Casting ‐ Einfluss auf Variablen und überladene Methoden
– Castingg
• Wird benötigt, um den Typ einer Referenz spezieller zu machen:
Animal creature = ...
Cat simon = ...
creature = simon; //OK (-> implicit upcasting)
//simon = creature; //Failed
//Failed, incompatible types
simon = (Cat) creature; //OK (-> downcasting)
((Animal)simon).weight
class Animal
float weight;
class Mammal
class Cat
float weight;
float weight;
simon weight
simon.weight
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Casting – kein Einfluss auf überschrieben Methoden
class Animal
sleep();
class Mammal
((Animal)simon).sleep()
simon.sleep()
class Cat
sleep();
Objekte in Java
Objekte in Java
• Subklassen und Vererbung
– Superklassen‐Konstruktoren
• Anweisung super() ruft explizit den Konstruktor der Superklasse auf
f
l
k
kl
f
• Notwendig, da Java implizit nur den Standardkonstruktor aufruft
class Person {
Person(String name) {...}
}
class Doctor extends Person {
Doctor(String name, String speciality) {
super(name);
// process additional work
}
}
Herunterladen