Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik I/II PVK Mittwoch Informatik II, 1. Teil."—  Präsentation transkript:

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

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

3 Informatik I/II PVK3 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

4 Informatik I/II PVK4 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

5 Informatik I/II PVK5 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

6 Informatik I/II PVK6 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

7 Informatik I/II PVK7 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

8 Informatik I/II PVK8 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

9 Informatik I/II PVK9 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(); }

10 Informatik I/II PVK10 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 { … }

11 Informatik I/II PVK11 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

12 Informatik I/II PVK12 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;

13 Informatik I/II PVK13 Lösung zu vorherigen Slide D d = new D(); A a = d; // geht B b = d; // geht C c = d; // geht E e = d; // geht nicht F f = d; // geht nicht E e = new E(); A a = e; // geht B b = e; // geht C c = e; // geht nicht D d = e; // geht nicht F f = e; // geht nicht A a = new D(); B b = (B) a; // geht C c = (C) a; // geht D d = (D) a; // geht E e = (E) a; // geht nicht F 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))

14 Informatik I/II PVK14 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 }

15 Informatik I/II PVK15 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 }

16 Informatik I/II PVK16 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

17 Informatik I/II PVK17 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

18 Informatik I/II PVK18 Wurzelbäume Wurzelbäume sind rekursive Konstrukte A BC FGED Auch ein Wurzelbaum A B D C E F G Eingerückte Form, sieht schon fast aus wie Quelltext

19 Informatik I/II PVK19 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)))

20 Informatik I/II PVK20 Lösung zu vorherigen Slide 2(76(11(41,7,25(13)),7(16(54,17))),79(87(1,23(5,3)),65)) S RPV F G JTQAH KNO

21 Informatik I/II PVK21 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

22 Informatik I/II PVK22 Syntaxdiagram Beschreibung zur Generierung einer bestimmten Syntax Term + Ausdruck Faktor * Term int_const Ausdruck ) Faktor (

23 Informatik I/II PVK23 Aufgabe Sind folgende Ausdrücke realisierbar mit diesen Syntaxdiagrammen? X 2 (X 1 OR X 2 ) (~X 1 )(X 2 ) OR ( X 1 OR X 2 ) (X 1 OR X 2 ) AND ( X 1 )(X 1 ) AND ( X 1 OR X 2 ) AND (X 2 )

24 Informatik I/II PVK24 Lösung zu vorherigen Slide Nur (X 1 OR X 2 ) AND ( X 1 ) und (X 1 ) AND ( X 1 OR X 2 ) AND (X 2 ) sind gültige Ausdrücke

25 Informatik I/II PVK25 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(); }

26 Informatik I/II PVK26 Stack push pop

27 Informatik I/II PVK27 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

28 Informatik I/II PVK28 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

29 Informatik I/II PVK29 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)

30 Informatik I/II PVK30 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

31 Informatik I/II PVK31 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?

32 Informatik I/II PVK32 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); }

33 Informatik I/II PVK33 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

34 Informatik I/II PVK34 Lösung zu vorherigen Slide Rest der Lösung in SearchTreeErase.java

35 Informatik I/II PVK35 Morgen Achtung Raumwechsel Ab morgen im HG E33.1


Herunterladen ppt "Informatik I/II PVK Mittwoch Informatik II, 1. Teil."

Ähnliche Präsentationen


Google-Anzeigen