CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik)

Größe: px
Ab Seite anzeigen:

Download "CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik)"

Transkript

1 Prof. Dr. Th. Letschert CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik) Vorlesung 4 Th Letschert FH Gießen-Friedberg

2 Nebenläufige und verteilte Programme 2

3 : Thread-Pools Motivation: Möglichkeiten und Grenzen von Thread-Pools Szenario einer Thread-Pool-Verwendung Weitgehend unabhängige Aufgaben wollen erledigt sein Jeder Aufgabe wird ein zur Erledigung ein Thread zugewiesen Pool verhindert Überlastung des Systems: Zuweisung von Aufgaben an Threads wird begrenzt manche Aufgaben müssen auf Erledigung erst einmal warten unproblematisch bei unabhängigen Aufgaben Problem Pools sind nicht geeignet wenn die Aufgaben Teil eines Gesamtalgorithmus sind und nur alle oder keine Aufgabe erledigt werden kann Pool muss groß genug sein um alle Threads aktivieren zu können 3

4 : Thread-Pools Motivation: Grenzen von Thread-Pools Beispiel Fibonacci-Zahlen parallel / rekursiv import java.util.concurrent.executor; import java.util.concurrent.executors; public class FibonacciExecutor { private static Executor ex = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors()*4); private static class FibTask implements Runnable { private int x; private long result; private boolean available = false; public FibTask(int x) { this.x = x; synchronized long getresult() throws InterruptedException { while (!available) { wait(); return result; private synchronized void setresult(long res) { result = res; available = true; notify(); public void run() { if (x < 2) setresult(1); else { FibTask fiba = new FibTask(x - 1); ex.execute(fiba); FibTask fibb = new FibTask(x - 2); ex.execute(fibb); try { setresult(fiba.getresult() + fibb.getresult()); catch (InterruptedException e) { e.printstacktrace(); 4

5 : Thread-Pools Deadlock bei der Berechnung von fib(6) Pool enthält 8 Threads, alle warten auf das Ergebnis eines Sub-Threads. Das wird nie kommen, denn es müssten weitere Threads gestartet werden, aber der Pool ist ausgeschöpft! 6 PoolThreads warten! können nicht erzeugt werden! 5

6 : Framework nutzen ForkJoin Framework JDK 7 bietet die notwendigen Bibliotheken (OpenJDK/JDK 7, ab Milestone M5, 2009/11/12 (build b76)) oder JDK 6 + jsr166y.jar Projekt mit JRE-7 anlegen 6

7 : Framework nutzen ForkJoin Framework JDK 7 bietet die notwendigen Bibliotheken (OpenJDK/JDK 7, ab Milestone M5, 2009/11/12 (b76)) oder JDK 6 + jsr166y.jar 7

8 : Beispiel RecursiveAction import java.util.concurrent.forkjoinpool; import java.util.concurrent.recursiveaction; public class FibSolver extends RecursiveAction { private static final long serialversionuid = 1L; private int res; private int x; Available Processors: 2 Pool size: Instanzen problemlos in einem Pool der Größe 8 public FibSolver(int x) { this.x = x; int getres() { return protected void compute() { if (x < 2) { res = 1; else { FibSolver fib1 = new FibSolver(x 1); FibSolver fib2 = new FibSolver(x 2); invokeall(fib1, fib2); res = fib1.getres() + fib2.getres(); public static void main(string[] args) { final int threadcount = Runtime.getRuntime().availableProcessors() * 4; System.out.println("Available Processors: "+ Runtime.getRuntime().availableProcessors()); System.out.println("Pool size: " + Runtime.getRuntime().availableProcessors() * 4); ForkJoinPool pool = new ForkJoinPool(threadCount); FibSolver fib = new FibSolver(10); pool.invoke(fib); System.out.println(fib.getRes()); NVP 4 8

9 Concurrency JSR-166 Interest Site: interest/ / JSR-166 Bestandteil des JSR-166 Frameworks von Doug Lea API-Spec: Geeignet für Algorithmen die aus vielen gleichzeitig auszuführenden Teilaktionen bestehen die unabhängig voneinander (parallel) bearbeitet werden können und die keinerlei Synchronisations-Code / blockierende Aktionen enthalten (nicht verboten, aber nicht sinnvoll)) Typische Anwendungen: Parallelverarbeitung Teile-und-Herrsche (divide and conquer) Algorithmen Parallele Algorithmen auf Arrays Axiom: Sprachmittel für nebenläufige Anwendungen sind ungeeignet für parallele Anwendungen, auch wenn die elementaren Konstrukte gleich sind. 9

10 Recursive Action / Task RecursiveAction Basisklasse für ergebnislose parallele Berechnungen mit gegenseitig unabhängigen Sub-Berechnungen gleicher Art Ableitungen implementieren void compute() Sub-Berechnungen werden als Instanzen der Ableitung instanziiert und mit invokeall parallel berechnet ForkJoinTask ForkJoinTask invokeall invokeall RecursiveAction RecursiveAction compute compute RecursiveTask RecursiveTask 10

11 Recursive Action Beispiel public class FibAction extends RecursiveAction { private static final long serialversionuid = 1L; private int res; private int x; public FibAction(int x) { this.x = x; public int getres() { return protected void compute() { if (x < 2) res = 1; else { FibAction fib1 = new FibAction(x 1); FibAction fib2 = new FibAction(x 2); invokeall(fib1, fib2); res = fib1.getres() + fib2.getres(); ForkJoinTask ForkJoinTask invokeall invokeall RecursiveAction RecursiveAction RecursiveTask void compute(): RecursiveTask compute(): void FibAction FibAction void compute(): compute(): void 11

12 Recursive Action / Task RecursiveTask Basisklasse für parallele Berechnungen mit Ergebnis mit gegenseitig unabhängigen Sub-Berechnungen gleicher Art Ableitungen implementieren void compute() Sub-Berechnungen werden als Instanzen der Ableitung instanziiert mit invokeall parallel berechnet und mit join abgholt ForkJoinTask ForkJoinTask invokeall invokeall join join RecursiveAction RecursiveAction RecursiveTask RecursiveTask : V compute() compute() :V 12

13 ForkJoinTask ForkJoinTask invokeall invokeall join join Recursive Task Beispiel 1 : invokeall import java.util.concurrent.forkjoinpool; import java.util.concurrent.recursivetask; public class FibTask extends RecursiveTask<Integer> { private static final long serialversionuid = 1L; private int x; RecursiveAction RecursiveAction public FibTask(int x) { this.x = protected Integer compute() { if (x <= 2) { return 1; else { FibTask fib1 = new FibTask(x 1); FibTask fib2 = new FibTask(x 2); invokeall(fib1, fib2); return fib1.join() + fib2.join(); public static void main(string[] args) { final int threadcount = Runtime.getRuntime().availableProcessors() * 4; RecursiveTask V RecursiveTask : V compute() compute() :V FibTask FibTask void compute(): compute(): void ForkJoinPool pool = new ForkJoinPool(threadCount); FibTask fib = new FibTask(10); pool.invoke(fib); System.out.println(fib.join()); 13

14 Recursive Task Beispiel 2 : fork / join public class FibTaskFJ extends RecursiveTask<Integer> { private static final long serialversionuid = 1L; private int x; public FibTaskFJ(int x) { this.x = protected Integer compute() { if (x <= 2) { return 1; else { V RecursiveAction RecursiveAction FibTask fib1 = new FibTask(x 1); fib1.fork(); // asynchrone Aktivierung FibTask fib2 = new FibTask(x 2); fib2.fork(); // asynchrone Aktivierung fib1.join(); fib2.join(); try { return fib1.get(25, TimeUnit.MILLISECONDS) + fib2.get(25, TimeUnit.MILLISECONDS); catch (InterruptedException e) { catch (ExecutionException e) { catch (TimeoutException e) { return null; Future Future get get ForkJoinTask ForkJoinTask invokeall invokeall fork fork join join RecursiveTask RecursiveTask : V compute() compute() :V V FibTask FibTask void compute(): compute(): void 14

15 Teile-und-Herrsche Algorithmen Rekursion: Ganz allgemeine Lösungsstrategie: Die Lösung des Gesamt-Problems wird auf die Lösung eines oder mehrerer Teilprobleme reduziert. Induktive Algorithmen: Einfache Form der Rekursion: Algorithmus wird über die Struktur einer induktiven Menge definiert Beispiel: Fakultät Induktive Menge natürliche Zahlen: Basis 0, Induktionsschritt n n+1 Berechnung: Basis 1, Induktiver Berechnungs-Schritt fak(n) fak(n-1) Teile-und-Herrsche Algorithmen: Rekursive Algorithmen die nicht (unbedingt) induktiv sind 15

16 Teile-und-Herrsche Algorithmen Beispiel: Sortieren mit Verschmelzen / Mischen (Mergesort) Sortieren durch rekursives Sortieren von teilsequenzen und anschließendes Mischen Mergesort ist kein induktiver Algorithmus Eine sortierte Folge der Länge n+1 wird (bei diesem Verfahren) nicht aus einer sortierten Folge der Länge n-1 konstruiert. 16

17 Teile-und-Herrsche Beispiel Mergesort private static void mergesort(int[] a, int l, int r) { if (l >= r) return; int m = (l + r) / 2; mergesort(a, l, m); mergesort(a, m + 1, r); merge(a, l, m, r); sequentieller Algorithmus private static class MergeSortAction extends RecursiveAction { private static final long serialversionuid = 1L; private int[] a; private int l; private int r; public MergeSortAction(int[] a, int l, int r) { this.a = a; this.l = l; this.r = protected void compute() { if (l >= r) return; int m = (l + r) / 2; MergeSortAction msl = new MergeSortAction(a, l, m); MergeSortAction msr = new MergeSortAction(a, m + 1, r); invokeall(msl, msr); merge(a, l, m, r); paralleler Algorithmus 17

18 Teile-und-Herrsche Algorithmen Beispiel: Rucksack-Problem (knapsack problem) Aus einer Menge von Gegenständen soll eine Auswahl so in ein Behältnis gepackt werden, dass dessen Fassungsvermögen exakt (oder möglichst gut) ausgenutzt wird. Das Rucksack-Problem ist nicht mit einem induktiven Algorithmus lösbar: Aus einer Lösung für das Fassungsvermögen n kann keine Lösung für das Fassungsvermögen n+1 konstruiert werden Aus einer Lösung für eine Kollektion von n Gegenständen kann keine kann keine Lösung für eine Kollektion von n+1 Gegenständen konstruiert werden Rucksack-Problem als Problem über natürlichen Zahlen Gegeben Eine Sequenz s von natürlichen Zahlen (Gegenstände und ihr Gewicht) Ein Zahl K (das Fassungsvermögen) Gesucht Eine Teilsequenz s' von s derart, dass die Summe der Elemente von s' gleich K ist 18

19 Teile-und-Herrsche Algorithmen Beispiel Teile-und-Herrsche Algorithmus für das Rucksack-Problem def knap(s,k): if k = 0 : return [[]] elseif (k!= 0) and (s = []) : return [] elseif (k = s0) : return [[k]] return knap(tail(s),k) + map(x -> [head(s)] + x, s: Sequenz (Liste) von Zahlen k: Fassungsvermögen knap: nimm Zahlen aus s bilde damit eine Folge der Summe gleich k ist head: Listen-Kopf tail: Listen-Rest +: Zusammenfügen von Listen knap(tail(s),k-head(s))) k = 0: eine Lösung, die leere Kollektion s leer, k!= 0 : keine Lösung s = [k, ] : eine Lösung, [k] sonst Ergebnis: Alle Lösungen für den Rest von s plus Bei allen Lösungen für den Rest von s mit einem um das erste Element von s reduziertem Fassungsvermögen wird das erste Element hinzugefügt. Das ist eine ineffiziente Lösung. Die Effizienz kann mit einer Tabellierung der Zwischenergebnisse erheblich verbessert werden. Diese Technik nennt sich dynamische Programmierung. 19

20 Knapsack Algorithmus als RecursiveTask static class KnapSolver extends RecursiveTask<List<List<Integer>>> { private List<Integer> s; private Integer k; public KnapSolver(List<Integer> s, Integer k) { this.s = s; this.k = protected List<List<Integer>> compute() { if (k == 0) { // eine Lösung, die leere liste List<List<Integer>> res = new LinkedList<List<Integer>>(); res.add(new LinkedList<Integer>()); return res; if (k!= 0 && s.isempty()) { // keine Lösung return new LinkedList<List<Integer>>(); if (k == s.get(0)) { // eine Lösung: [k] List<List<Integer>> res = new LinkedList<List<Integer>>(); List<Integer> l = new LinkedList<Integer>(); l.add(k); res.add(l); return res; //knap(tail(s),k) List<Integer> tail_s = new LinkedList<Integer>(); tail_s.addall(s); tail_s.remove(0); //List<List<Integer>> resa = knapa(tail_s, k); KnapSolver ksa = new KnapSolver(tail_s, k); ksa.fork(); //knap(tail(s),k head(s))) KnapSolver ksb = new KnapSolver(tail_s, k s.get(0)); ksb.fork(); ksa.join(); ksb.join(); List<List<Integer>> resa = null; List<List<Integer>> resb = null; try { resa = ksa.get(); resb = ksb.get(); catch (InterruptedException e) { e.printstacktrace(); catch (ExecutionException e) { e.printstacktrace(); // map for(list<integer> l: resb) { l.add(s.get(0)); // + List<List<Integer>> res = new LinkedList<List<Integer>>(); res.addall(resa); res.addall(resb); return res; 20

21 Map-Reduce Algorithmen / Map-Funktion Map-Funktion: Anwenden einer Abbildungs- (Map) -Funktion auf alle Elemente einer Kollektion def knap(s,k): if k == 0 : return [[]] elseif (k!= 0) and (s == []) : return [] map-funktion elseif (k = s0) : return [[k]] return knap(tail(s),k) [ ] m m [ ] knap(tail(s),k-head(s))) m + map(x -> [head(s)] + x, map-funktion im KnapsackAlgorithmus 21

22 Map-Reduce Algorithmen / Map-Funktion Map-Funktion in Java: public interface FunT2T<T> { T apply (T x); public static <T> List<T> map (FunT2T<T> f, List<T> l) { List<T> res = new LinkedList<T>(); for (T x : l) { res.add(f.apply(x)); return res; public static void main(string[] args) { List<Integer> l = Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,0); l = map(new FunT2T<Integer>() public Integer apply(integer x) { return 2*x;, l); for (int i: l) { System.out.print(i+" "); System.out.println(); 22

23 Map-Reduce Algorithmen / Reduce-Funktion Reduce: Reduziere mit einer reduce-funktion eine Kollekion auf ein einziges Element Beispiel Summenbildung: [1, 2, 3, 4,5] wird mit der Funktion '+' zu 15 reduziert public interface FunTxT2T<T> { T apply (T x, T y); public static <T> T reduce (FunTxT2T<T> f, List<T> l, T start) { T res = start; for (T x : l) { res = f.apply(x, res); return res; public static void main(string[] args) { System.out.println( reduce( new FunTxT2T<Integer>() public Integer apply(integer x, Integer y) { return x+y;, Arrays.asList(new Integer[]{1,2,3,4,5), 0)); 15 23

24 Map-Reduce Kombination aus Map- und Reduce-Funktion Map / Reduce: Muster einer Kontrollstruktur Alle Elemente einer Datenstruktur werden mit einer Map-Funktion m transformiert alle (transformierten ) Elemente mit einer Reduce-Funktion r zusammengefasst map reduce m [ ] m [ ] r m 24

25 Map-Reduce Map-Funktionen können parallel abgearbeitet werden Das Map/Reduce Muster wird meist mit verteilten Rechnern verbunden - viele Maschinen sind gleichzeitig mit einer map-funktion beschäftigt Google hält ein Patent auf eine map/reduce-variante - System and method for efficient large-scale data processing Apache Hadoop Map/Reduce-System ähnlich dem von Google patentierten Das Map/Reduce-Muster kann natürlich auch unverteilt auf Multicore-Systemen realisiert werden... mit Hilfe des s (map parallel, reduce sequentiell) 25

26 Map-Reduce : Map parallelisieren private static class Mapper<T> extends RecursiveAction { private static final long serialversionuid = 1L; private List<T> l; private FunT2T<T> f; private int index; public Mapper(FunT2T<T> f, List<T> l, int index) { this.l = l; this.f = f; this.index = protected void compute() { if (index >= l.size()) { return; l.set(index, f.apply(l.get(index))); Mapper<T> mapper = new Mapper<T>(f, l, index+1); mapper.fork(); mapper.join(); public static <T> List<T> map (final FunT2T<T> f, final List<T> l) { ForkJoinPool pool = new ForkJoinPool(2); pool.submit(new Mapper<T>(f, l, 0)); return l; 26

27 - parallel array ParallelArray / Package extra166y ParallelArray Paralleles arbeiten auf Arrays und anderen Datenkollektionen erfordert Java extra166y und jsr166y download : 27

28 - parallel array ParallelArray Beispiel package test; import jsr166y.forkjoinpool; import extra166y.parallelarray; public class PA { private final static int threadcount = Runtime.getRuntime().availableProcessors() * 4; private final static ForkJoinPool pool = new ForkJoinPool(threadCount); static Double[] a = new Double[]{ 0.1, 0.4, 0.1, 0.4, 0.5, 0.6, 0.7, 3.2, 3.3, 3.2, 3.3, 3.4, 3.5, 3.8, 2.3, 2.2, 2.3, 2.2, 2.3, 2.4, 2.9, 1.4, 1.1, 1.4, 1.1, 1.2, 1.3, 1.0, ; public static void main(string[] args) { ParallelArray<Double> pa = ParallelArray.createUsingHandoff(a, pool); pa.sort(); for (double d : a) { System.out.print(d + " "); System.out.println(); 28

29 - parallel array ParallelArray : Filter Filtern: Eine Kollektion kann mit einen Filterausdruck gefiltert werden Beispiel: package test; import jsr166y.*; import extra166y.*; public class PA { static ForkJoinPool pool = new ForkJoinPool(); static Double[] a = new Double[]{ 2.3, 1.2, 0.3, 2.2, 3.3, 4.4, 5.9, ; public static void main(string[] args) { ParallelArray<Double> pa = ParallelArray.createUsingHandoff(a, pool); ParallelArrayWithFilter<Double> fpa = pa.withfilter(new Ops.Predicate<Double>() public boolean op(double x) { return x < 2; ); Ausgabe: sortierte Folge der Werte kleiner 2 for (double d : fpa.all().sort()) { System.out.print(d + " "); System.out.println(); 29

30 - parallel array ParallelArray : Mapping Mapping: Eine Kollektion kann mit einer Map-Operation modifiziert werden Beispiel: package test; import jsr166y.forkjoinpool; import extra166y.parallelarray; import extra166y.parallelarraywithmapping; import extra166y.ops.op; public class PAF { private final static ForkJoinPool pool = new ForkJoinPool(); static Double[] a = new Double[]{ 2.3, 1.2, 0.3, 2.2, 3.3, 4.4, 5.9, 0.1, 0.4, 0.1, 0.4, 0.5, 0.6, 0.7, 3.2, 2.3, 1.2, 0.3, 3.4, 2.5, 1.8, 6.4, 5.1, 4.4, 3.1, 2.2, 1.3, 0.0 ; public static void main(string[] args) { ParallelArray<Double> pa = ParallelArray.createUsingHandoff(a, pool); ParallelArrayWithMapping<Double, Double> mpa = pa. replacewithmapping(new Op<Double, Double>() public Double op(double x) { return x*10; ); Ausgabe: sortierte Folge der 10-fachen Werte for (double d : mpa.all().sort()) { System.out.print(d + " "); System.out.println(); 30

31 - parallel array ParallelArray : Reduktion Reduktion der Kollektion auf einen Wert mit Spezialfunktion max / min / summary (statistische Übersicht) Beispiel: package test; import jsr166y.forkjoinpool; import extra166y.parallelarray; public class PA { private final static ForkJoinPool pool = new ForkJoinPool(); static Double[] a = new Double[]{ ; public static void main(string[] args) { ParallelArray<Double> pa = ParallelArray.createUsingHandoff(a, pool); System.out.println(pa.max()); System.out.println(pa.min()); System.out.println(pa.summary()); 31

32 - parallel array ParallelArray : Reduktion Reduktion der Kollektion auf einen Wert Beispiel: mit Spezialfunktion max / min package test; import jsr166y.forkjoinpool; import extra166y.parallelarray; import extra166y.ops.reducer; public class PA { private final static ForkJoinPool pool = new ForkJoinPool(); static Double[] a = new Double[]{ ; public static void main(string[] args) { ParallelArray<Double> pa = ParallelArray.createUsingHandoff(a, pool); double sum = pa.reduce(new public Double op(double x, Double y) { return x+y;, 0.0); System.out.println(sum); 32

33 - parallel array ParallelArray Filter- / Abbildungs- / Reduktions-Algorthmen können in einem Ausdruck kombiniert werden. Beispiel : finde große Primzahlen in einem Array: public static void main(string[] args) { ParallelArray<Long> pa = ParallelArray.createUsingHandoff(a, pool); System.out.println( pa.withfilter(islarge).withmapping(computefactors ).all().withfilter(isoneelemented ).all() ); islarge: prüft ob die Zahl groß ist computefactors: berechnet die Primfaktoren isoneelemented: test ob die Liste der Primfaktoren genau ein Element hat. 33

34 - parallel array ParallelArray Alle Operationen können kombiniert werden Insgesamt: Map / Filter / Reduce - Framework mit datenparalleler Implementierung 34

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,

Mehr

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Rekursion Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Aufgabe 1: Potenzfunktion Schreiben Sie eine Methode, die

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Lösungsvorschläge. zu den Aufgaben im Kapitel 4 Lösungsvorschläge zu den Aufgaben im Kapitel 4 Aufgabe 4.1: Der KNP-Algorithmus kann verbessert werden, wenn in der Funktion nexttabelle die Zuweisung next[tabindex] = ruecksprung; auf die etwas differenziertere

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse Übung 05: Arrays Abgabetermin: xx.xx.xxxx Name: Name, Vorname Matrikelnummer: 0XXXXXX Gruppe: G1 (Prähofer) G2 (Wolfinger) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Musterlösungen zur Klausur Informatik 3

Musterlösungen zur Klausur Informatik 3 Musterlösungen zur Klausur Informatik 3 Justus-Liebig-Universität Gießen Wintersemester 2003/2004 Aufgabe 1 (6 Punkte) Man kreuze bei den folgenden Deklarationen und Definitionen jeweils an, ob sie aus

Mehr

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Aufgabenblatt Nr. 5 Generizität und TicTacToe Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Schedulingund Thread-Ausführer

Schedulingund Thread-Ausführer Schedulingund Thread-Ausführer Scheduling Ein Scheduler arbeitet Programmstücke nach einer festen Zeitspanne oder zu einer fixen Zeitpunkt wiederholt oder einmal ab. Notwendigkeiten für Scheduling sind

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Dateien lesen und schreiben 2 Übersicht der heutigen Inhalte File Streams try-with-resources Properties csv-dateien 3 Klasse File Die Klasse java.io.file bietet Unterstützung im Umgang

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

5. Abstrakte Klassen

5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Programmieren I. Kapitel 7. Sortieren und Suchen

Programmieren I. Kapitel 7. Sortieren und Suchen Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren

Mehr

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Typdeklarationen. Es gibt in Haskell bereits primitive Typen: Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,

Mehr

14.4.2016. Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

14.4.2016. Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt 14.4.2016 Technische Hochschule Georg Agricola WORKSHOP TEIL 3 IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt Inhaltsverzeichnis 1. Kurzfassung zur Projekterstellung... 2 2. Morse-Tabelle...

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Scala kann auch faul sein

Scala kann auch faul sein Scala kann auch faul sein Kapitel 19 des Buches 1 Faulheit Faulheit ( lazy evaluation ) ist auch in C oder Java nicht unbekannt int x=0; if(x!=0 && 10/x>3){ System.out.println("In if"); } Nutzen der Faulheit?

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff Die Java Stream API Funktionale Programmierung mit der Stream API des JDK 1.8 Prof. Dr. Nikolaus Wulff Funktionale Programmierung Neben der Collection API mit default Methoden ist als weitere Neuerung

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Test-Driven Design: Ein einfaches Beispiel

Test-Driven Design: Ein einfaches Beispiel Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

U08 Entwurfsmuster (II)

U08 Entwurfsmuster (II) U08 Entwurfsmuster (II) Inhalt der Übung Diskussion und Implementierung von Entwurfsmustern Übungsaufgaben Aufgabe 1 (Queue) Gegeben ist das folgende Analysemodell einer Warteschlange (Queue): Eine Warteschlange

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein. Aufgabe 10 Binäre Bäume a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge, 28, 35, 31, 9, 4,, 17, 37, 25 ein. 1. Einfügen von : 3. Einfugen von 35: 2. Einfügen von 28: 28 28 10. Einfügen

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

Probeklausur Softwareengineering SS 15

Probeklausur Softwareengineering SS 15 Probeklausur Softwareengineering SS 15 Hinweis: Die Bearbeitungsdauer entspricht dem Punktewert. Aufgabe 1 (10 min) Beschreiben Sie das Vorgehensmodell Test-Driven-Development (TDD) a) Erläutern Sie das

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Java-Programmierung. Remote Method Invocation - RMI

Java-Programmierung. Remote Method Invocation - RMI Java-Programmierung Remote Method Invocation - RMI Entwicklungsmethoden Sockets Entwurf verteilter Anwendungen ist relativ aufwändig, da zunächst ein Kommunikationsprotokoll entwickelt werden muss aufwändig

Mehr

Suchen und Sortieren

Suchen und Sortieren (Folie 69, Seite 36 im Skript) 5 6 1 4 Als assoziatives Array geeignet Schlüssel aus geordneter Menge Linke Kinder kleiner, rechte Kinder größer als Elternknoten Externe und interne Knoten Externe Knoten

Mehr

Nebenläufige und verteilte Programme CS2301

Nebenläufige und verteilte Programme CS2301 Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Netze mit aktiven und reaktiven Knoten Produzent Konsument: aktiv / passiv / reaktiv

Mehr

7. Übung zu Algorithmen und Datenstrukturen

7. Übung zu Algorithmen und Datenstrukturen 7. Übung zu Algorithmen und Datenstrukturen Dynamisches Programmieren Greedy Algorithms Exceptions 1 Dynamische Programmierung nutzt gezielt aus, dass man bei manchen Problemen den Rechenaufwand extrem

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Übungen zu Softwaretechnik

Übungen zu Softwaretechnik Prof. Dr. Dr. h.c. M. Broy Lösungsblatt 11 Dr. H. Ehler, S. Wagner 23. Januar 2004 Übungen zu Softwaretechnik Aufgabe 16 Qualitätseigenschaften Broker-Pattern Beurteilen Sie das in Aufgabe 15 benutzte

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7 Java Einführung Umsetzung von Beziehungen zwischen Klassen Kapitel 7 Inhalt Wiederholung: Klassendiagramm in UML Java-Umsetzung von Generalisierung Komposition Assoziationen 2 Das Klassendiagramm Zweck

Mehr

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: AVL-Bäume Analyse (Folie 85, Seite 39 im Skript) Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: 0 falls n = 0 F n = 1 falls

Mehr

Java Projekt: Tic Tac Toe + GUI

Java Projekt: Tic Tac Toe + GUI Java Projekt: Tic Tac Toe + GUI Rechnerpraktikum aus Programmierung im WS 2005/06 unter der Leitung von Dr. Michael Hahsler Tadeh Amirian (h0253821) 10.01.2006 1) Problemdefinition Beim TicTacToe Spiel

Mehr

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2 Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2 von Christoph Knabe http://public.beuth-hochschule.de/~knabe/ Ch. Knabe: Operationalisierbare Qualitätskriterien

Mehr

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15 Übersicht Schleifen Schleifeninvarianten Referenztypen, Wrapperklassen und API CoMa I WS 08/09 1/15 CoMa I Programmierziele Linux bedienen Code umschreiben strukturierte Datentypen Anweisungen und Kontrollstrukturen

Mehr

Technische Universität München SS 2006 Fakultät für Informatik 12. Oktober 2006 Prof. Dr. A. Knoll. Aufgabe 1 Transferfragen (Lösungsvorschlag)

Technische Universität München SS 2006 Fakultät für Informatik 12. Oktober 2006 Prof. Dr. A. Knoll. Aufgabe 1 Transferfragen (Lösungsvorschlag) Technische Universität München SS 2006 Fakultät für Informatik 12. Oktober 2006 Prof. Dr. A. Knoll Lösungsvorschläge der Klausur zu Einführung in die Informatik II Aufgabe 1 Transferfragen (Lösungsvorschlag)

Mehr

Design Patterns SS 2014 Hausaufgabe 5

Design Patterns SS 2014 Hausaufgabe 5 Die Aufgaben müssen von jedem Teilnehmer einzeln bearbeitet und abgegeben werden. Die Abgabe muss bis spätestens Montag 26.05.2014 um 23:59 Uhr über unser Hausaufgabenverwaltungssystem https://se.cs.uni-kassel.de/hms/

Mehr

Beispiel: DB-Mock (1/7)

Beispiel: DB-Mock (1/7) Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau

Mehr

Themen. Web Service - Clients. Kommunikation zw. Web Services

Themen. Web Service - Clients. Kommunikation zw. Web Services Themen Web Service - Clients Kommunikation zw. Web Services Bisher: Implementierung einer Java Anwendung und Bereitstellung durch Apache Axis unter Apache Tomcat Java2WSDL Erzeugen einer WSDL-Datei zur

Mehr

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln Daten verstecken und kapseln Sichtbarkeitsmodifikatoren: public Klasse, Variable oder Methode überall sichtbar und damit auch überall benutztbar. private private-variable sind nur in den Methoden sichtbar,

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b AGROPLUS Buchhaltung Daten-Server und Sicherheitskopie Version vom 21.10.2013b 3a) Der Daten-Server Modus und der Tresor Der Daten-Server ist eine Betriebsart welche dem Nutzer eine grosse Flexibilität

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Softwaretechnologie - Wintersemester 2012/2013 - Dr. Günter Kniesel

Softwaretechnologie - Wintersemester 2012/2013 - Dr. Günter Kniesel Übungen zur Vorlesung Softwaretechnologie - Wintersemester 2012/2013 - Dr. Günter Kniesel Übungsblatt 10 - Lösungshilfe Aufgabe 1. CRC-Karten (7 Punkte) Es geht um die Modellierung der folgenden Bibliotheks-Anwendung:

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

EndTermTest PROGALGO WS1516 A

EndTermTest PROGALGO WS1516 A EndTermTest PROGALGO WS1516 A 14.1.2016 Name:................. UID:.................. PC-Nr:................ Beachten Sie: Lesen Sie erst die Angaben aufmerksam, genau und vollständig. Die Verwendung von

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Cluster-Praktikum Sommersemester 2007 Transparent Replizierte Objekte in JavaParty Institut für Programmstrukturen und Datenorganisation

Mehr

2.2 Prozesse in Java

2.2 Prozesse in Java 2.2 Prozesse in Java! Java sieht kein Schlüsselwort für Prozesse vor, sondern bestimmte Klassen und Schnittstellen. Mit anderen Worten: der Prozessbegriff wird mit Mitteln der Objektorientierung eingeführt.

Mehr