Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mittwoch Informatik II, 1. Teil

Ähnliche Präsentationen


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

1 Mittwoch Informatik II, 1. Teil
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 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

4 Unterschiede zu C++ Keine Stattdessen
Templates, structs, unions, pointer, Mehrfachvererbung, Präprozessor, Operatorenüberladung, goto, .h Dateien, Destruktoren, friends Stattdessen Alles sind Klassen, Interfaces, final, Garbage- Collector, Threads 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 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 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 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 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(); } 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 { … } 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 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; Informatik I/II PVK

13 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)) 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 } 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 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 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 Informatik I/II PVK

18 Wurzelbäume Wurzelbäume sind rekursive Konstrukte A B D C E F G
Eingerückte Form, sieht schon fast aus wie Quelltext B C D E F G Auch ein Wurzelbaum 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))) 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 H A Q T J F G K N O 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 Informatik I/II PVK

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

23 Aufgabe Sind folgende Ausdrücke realisierbar mit diesen Syntaxdiagrammen? X ∼ (X1 OR ∼ X2 ) (~X1) (X2 ) OR (∼ X1 OR X2 ) (X1 OR X2 ) AND (∼ X1 ) (X1 ) AND (∼ X1 OR ∼ X2 ) AND (X2 ) Informatik I/II PVK

24 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

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(); Informatik I/II PVK

26 Stack push pop 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 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 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) 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 back Data left right 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 1 12 15 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); 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 Informatik I/II PVK

34 Lösung zu vorherigen Slide
Rest der Lösung in SearchTreeErase.java 20 20 28 12 32 13 32 13 32 9 17 28 47 9 17 28 47 9 17 47 13 39 52 39 52 39 52 Informatik I/II PVK

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


Herunterladen ppt "Mittwoch Informatik II, 1. Teil"

Ähnliche Präsentationen


Google-Anzeigen