Mittwoch Informatik II, 1. Teil

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Kapselung , toString , equals , Java API
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Verteilte Software - Java - Prozedurale Programmierung 1
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Objekte und Arbeitsspeicher
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
DO...WHILE Anweisung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die OOP in Java
Java-AG Ausnahmebehandlung Gerhard Gröger.
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Dienstag Informatik 1 Tag 2
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Freitag Informatik II, 3. Teil Repetition und Prüfungstipps
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Robuste Programme durch Ausnahmebehandlung
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs Übung Besprechung der Hausaufgabe
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Java Programme nur ein bisschen objektorientiert.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
 Präsentation transkript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Aufgabe Sind folgende Ausdrücke realisierbar mit diesen Syntaxdiagrammen? X2 ∼ (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

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

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

Stack push pop Informatik I/II PVK

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

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

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

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

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

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

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

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

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