Scalaz Einführung für Java Programmierer Bernhard Huemer IRIAN
|
|
- Manfred Kohler
- vor 8 Jahren
- Abrufe
Transkript
1 Scalaz Einführung für Java Programmierer Bernhard Huemer
2
3 Agenda Keine Einführung in Scala Keine Einführung in Scalaz ("Haskell für Scala") Motivation Transaktionen mit Monads Type classes bzw. Ad-hoc polymorphismus ev. Arbeiten mit der Datenbank ohne* Seiteneffekte ev. Dependency Injection Funktionale APIs gestalten * Fast ohne
4 Referential transparency "An expression is said to be referentially transparent if it can be replaced with its value without changing the behavior of a program." (d.h. keine Seiteneffekte) def square(i: Int) = i * i // Bad! Referenziert auch etwas anderes als Parameter def now() = System.currentTimeMillis() Keine Reassignment von Variablen Keine Setter, keine Mutations Keine Exceptions Keine Konsolenein-/ausgabe Keine Netzwerkkommunikation...
5 Exceptions als Beispiel def f(): Int = { val y = g() try { y + y catch { case e: Exception => 1337 def f(): Int = { try { g() + g() catch { case e: Exception => 1337 def g(): Int = { throw new Exception("No!"); Checked vs. unchecked exceptions (etwas) irrelevant Compiler versichert, dass Seiteneffekte behandelt werden Besser: Sie treten gar nicht erst auf Viel zu triviales Beispiel, ich weiß!
6 Exceptions als Beispiel (2) class Cache (cacheloader: CacheLoader) { def get(key: Key): Value = { //... trait CacheLoader { def load(key: Key): Value // throws Exception! class Cache (cacheloader: CacheLoader) { def preload() { //... def get(key: Key): Value = { //... Refactoring mit oder ohne Seiteneffekte? Exceptions bei preload: Falsch/teilw. initialisierter Cache, fehlendes Exception-Handling*, etc.? Exceptions bei get: Mühsam * z.b: Applikation startet nicht mehr, weil unbenützter Cache Key nicht geladen werden kann, andere Initialisierungen werden nicht eingeleitet, etc. - Autor von Cache hat keinen Einfluss darauf!
7 Call Stack Abhängigkeit Es treten immer dann Probleme auf, wenn wir den Call Stack irgendwie ändern. Multi-threaded Umgebungen Web Services RMI oder sonstiges Remoting generell jegl. Netzwerkkommunikation...
8 "Do or do not. There is no scala.util.try[a]." - Yoda
9 scala.util.try[a] import scala.util.{try, Success, Failure def divide: Try[Int] = for { dividend <- Try(Console.readLine("Dividend:\n").toInt) divisor <- Try(Console.readLine("Divisor:\n").toInt) yield (dividend / divisor) val result: Try[Int] = /*.. */ val resultint = if (result.issuccess) { result.get else { 0 val resultint = result.getorelse(0) val resultint: Try[Int] = result.recover { case e: Exception => 0 Nicht einfach nur ein Wrapper um Exceptions Macht aus einer partiellen Funktion eine totale (d.h. gut!)
10 "... the meaning of RT expressions does not depend on context and may be reasoned about locally, while the meaning of non-rt expressions is context dependent and requires more global reasoning." (FPiS)
11 Typsystem = light-weight proof-system I was eventually persuaded of the need to design programming notations so as to 1. maximise the number of errors which cannot be made, 2. or if made, can be reliably detected at compile time. - Tony Hoare (ACM Turing Award Lecture) Typsystem kann viel mehr beweisen als "x has method f" Compile time = Build time, d.h. Unit Tests sind gut, aber nicht gut genug
12
13 Transaktionen - public void updatesomething() { /*... public List<SomeType> querysomething() { /*... */ Offene vergessen? Richtige Transaktion? Implizite Beziehung zwischen Transaktion und EntityManager Kopplung mit Transaktionsattributen (Propagation, Isolation, etc.), retry?
14 Transaktionen - BMT/Templates public void updatesomething(entitymanagerfactory emf) { transactiontemplate.execute(emf, new TransactionCallbackWithoutResult() { protected void dointransaction(entitymanager em) { updateoperation1(em); updateoperation2(em); ); Wiederverwendung in anderer Transaktion? Offene/richtige Transaktion? (teilweise..) EntityManager (o.ä.) müssen durchgereicht werden
15 Alternative: Transaktions Monad Monad = Abstraktion zur sequentiellen Ausführung von einzelnen Schritten in einem bestimmten Kontext (informell) trait Tx[+A] { // Um die Transaktion "auszuführen" und den Inhalt zu bekommen def run(em: EntityManager): A object Tx { // DSL für Transaktionen (konvertiert Funktion in Tx[A]) def transactional[a](body: EntityManager => A) = new Tx[A] { override def run(em: EntityManager) = body(em) Das ist noch kein Monad, nicht einmal informell. Ich habe unser Reiseziel nur vorweggenommen.
16 Tx[A]-"Hello World" def findallproductids() /* : Tx[List[Int]] */ = transactional { em /* : EntityManager */ => //... def findemployee(employeeid: String) = transactional { em => /*... */ So einfach wie mit Annotations - type inference :) Erstmal vollkommen ohne Abhängigkeiten/Seiteneffekte* Unmöglich falschen EntityManager zu verwenden** * Für Skeptiker unter uns: Wie etwas sinnvolles programmieren ohne Seiteneffekte? ** Tony Hoar wäre stolz auf uns!
17 Tx<A> mit Java 8 Tx<A> = Keine Proxies, keine Konfiguration, keine sonstige "Magie", eigentlich nur ein TransactionCallback<T> mit public interface Tx<T> { public T run(entitymanager em); // Nicht wirklich hilfreich, Return Type sparen wir uns nicht public static <T> Tx<T> transactional( Function<EntityManager, T> body) { return body::apply; public Tx<List<Integer>> findproductids(string searchcrit) { return transactional(em -> /*... */); public Tx<Employee> findemployee(string employeeid) { return em -> /*... */;
18 Tx[A] Ausführung def run[a](emf: EntityManagerFactory, tx: Tx[A]): A = { val em = emf.createentitymanager try { em.gettransaction.begin() val result = tx.run(em) em.gettransaction.commit() result finally { // Rollback (eventuell) und clean-up Fazit bisher: Lediglich BMTs aufgesplittet? Interpretieren des Monads verursacht Seiteneffekte Andere Form der Abstrahierung - eine Beschreibung, viele Möglichkeiten diese zu interpretieren
19 Compiler kennt jetzt Transaktionsklammern // Oh! Wir vergessen, sozusagen def findemployeename(employeeid: String) = findemployee(employeeid).name // Wäre zwar nicht so schlimm.. // ERROR: // value name is not a member of...tx[...employee] // Wir sind aber auch vergesslich! def findmanagerforemployee(employeeid: String) = // Lazy loading kann hier aber schon zu Problemen führen! findemployee(employeeid).department.manager // findemployee(employeeid).run(em).department.manager // ERROR: // value department is not a member of...tx[...employee] Transaktionskontext benötigt, um Inhalt zu bearbeiten (bzw. eine EntityManager Referenz..)
20 Tx[A] Verarbeitung (noch) unschön def findmanagerforemployee(employeeid: String) = transactional { em => findemployee(employeeid).run(em).department.manager public Tx<Employee> findmanagerforemployee(string employeeid) { return em -> findemployee(employeeid).run(em).getdepartment().getmanager(); Lesbarkeit eher suboptimal, etwas umständlich EntityManager sollten wir nicht durchreichen müssen Gesucht: Funktion mit Signatur Tx[A] => (A => B) => Tx[B]
21 Higher-order function: map trait Tx[+A] { self => // Statt "Tx.this" //.. def map[b](f: A => B) = transactional { em => f(self.body(em)) public interface Tx<T> { //.. default public <U> Tx<U> map(function<t, U> f) { return em -> f.apply(run(em)); Nicht nur bei Collections nützlich Strukturerhaltende Verarbeitung von Elementen
22 Verwendung von map() (1) def findmanagerforemployee(empid: String)/*: Tx[Employee] */ = findemployee(empid) map { employee => employee.department.manager public Tx<Employee> findmanagerforemployee(string empid) { return findemployee(empid).map( employee -> employee.getdepartment().getmanager()); Keine EntityManager, - alles wird sozusagen inferred Erstmals wirklicher Unterschied zu der BMT Lösung
23 Verwendung von map() (2) public Tx<Employee> findmanagerforemployee(string empid) { return findemployee(empid).map(employee::getdepartment).map(department::getmanager); def finddepartmentforemployee(empid: String) = for { employee <- findemployee(empid) yield employee.department.manager For comprehensions lediglich syntactic sugar
24 Verwendung von map (2) def findproductids(searchcrit: String) = transactional { em => /*... */ def findproductnames(productids: List[Int]) = transactional { em => /*... */ def findproductnamesfor(searchcrit: String) = for { productids <- findproductids(searchcriteria) yield findproductnames(productids) // od. einfacher: def findproductnamesfor(searchcrit: String) = findproductids(searchcrit) map findproductnames Kompiliert zwar, liefert aber Tx[Tx[List[String] Wir suchen: T[x] => (A => Tx[B]) => Tx[B]
25 Higher-order function: flatmap trait Tx[+A] { self => //.. def flatmap[b](f: A => Tx[B]) = transactional { em => f(self.run(em)).run(em) public interface Tx<T> { //.. default public <U> Tx<U> flatmap(function<t, Tx<U>> f) { return em -> f.apply(run(em)).run(em); Ergebnis von Tx[A] als Eingabe für Tx[B] Tx[B] ersetzt sozusagen Tx[A], führt es aber auch aus Garantiert die selbe Transaktion Garantiert der selbe EntityManager
26 Vergleich mit Java 7 public Tx<List<String>>> findproductnamesfor(final String crit) { return new Tx<List<String>>>() { public List<String> run(entitymanager em) { List<Integer> productids = findproductids(crit).run(em); // self.run(em) return findproductnames(productids).run(em); // f(..).run(em) ; Schwer zu lesen, aber nach wie vor nachvollziehbar(?) Vergleich mit BMT: Suboperationen für sich verwendbar
27 Verwendung von flatmap def findproductnamesfor(searchcrit: String) = findproductids(searchcrit) flatmap { productids => findproductnames(productids) def findproductnamesfor(searchcrit: String) = findproductids(searchcrit) flatmap findproductnames def findproductnamesfor(searchcrit: String) = for { productids <- findproductids(searchcrit) productnames <- findproductnames(productids) yield productnames Zwei Datenbankqueries in der selben Transaktion Wiederum weder EntityManager (o.ä.) - Kontext (hier Tx) wird wiederverwendet
28 Monad Definition für Scalaz implicit val txmonad = new scalaz.monad[tx] { def point[a](a: => A): Tx[A] = transactional { // EntityManger wird nicht benötigt, kann ignoriert werden. _ => a def bind[a, B](fa: Tx[A])(f: A => Tx[B]): Tx[B] = fa flatmap f Essenz: Wir hatten die Implementierung praktisch schon Gibt Zugriff zu nützlichen Monadic Functions Monad Laws beweisen sparen wir uns momentan..
29 Monadic Functions (1) // Um die Signatur zu verdeutlichen: def sequencem[m[_] : Monad, T](ms: List[M[T]]): M[List[T]] = ms.sequence def zipm[m[_] : Monad, T, U](mt: M[T], mu: M[U]): M[(T, U)] = for { t <- mt u <- mu yield (t, u) // In Bezug auf Transaktionen bedeutet das: def jointransactions[t](transactions: List[Tx[T]]): Tx[List[T]] = sequencem(transactions) def jointransactions[t, U](txT: Tx[T], txu: Tx[U]): Tx[(T, U)] = zipm(txt, txu) Kontext gibt dabei die jeweilige Semantik an
30 Monadic Functions (2) def replicatem[m[_] : Monad, A](n: Int, ma: M[A]): M[List[A]] = sequencem(list.fill(n)(ma)) Referential transparency ist ja wieder gegeben
31 Unterschiedliche Datenbanken trait Tx[+A, Tag] { def run: A def map[b](a => B): Tx[B, Tag] = //... def flatmap[b, ArgModule >: Module] (f: A => Tx[B, ArgModule]): Tx[B, Module] = //... object Tx { def transactional[a, Tag](body: EntityManager => A) = //... sealed trait Unit1 sealed trait Unit2 def txunit1[a](body: EntityManager => A) = transactional[a, Unit1](body) def txunit2[a](body: EntityManager => A) = transactional[a, Unit2](body) Tx bezieht sich nun auf bestimmte Datenbank
32 Compiler kennt nun auch Datenbankgrenzen (1) def findemployee(employeeid: String) = txunit1 { /*.. */ def saveemployee(employee: Employee) = txunit2 { /*.. */ // Wir wollen die zwei Operationen kombinieren def findandsaveemployee(employeeid: String) = findemployee(employeeid) flatmap saveemployee // Error:(..) type mismatch; // found :..Tx[Unit,..Unit2] // required:..tx[?],..unit1] // findemployee(employeeid) flatmap saveemployee // ^ Modellierung ist einem selbst überlassen - z.b. common Tx für alle?
33 Compiler kennt nun auch Datenbankgrenzen (2) // Müssen wir über verschachtelte Transaktionen machen def findandsaveemployee(employeeid: String) /*: Tx[Tx[Unit, Unit2], Unit1] */ = findemployee(employeeid) map saveemployee
34 Publikumsfrage: Funktioniert = "db1unit") private EntityManager = "db2unit") private // Employee redundant in zwei Datenbanken speichern public void saveemployee(string employeename) { em1.persist(new Employee(employeeName)); em2.persist(new Employee(employeeName)); def saveemployee(employeename: String) = ( txunit1 { em1 => em1.persist(new Employee(employeeName)), txunit2 { em2 => em2.persist(new Employee(employeeName)) ) Wie sicher ist man bei der Antwort dieser Frage?
35 Demo
36 Fazit Ziel einer jeden API: LEGO(tm) Baukasten Seiteneffekte kann man sehr gut einschränken Deferred Execution / Interpretation, wenn man Seiteneffekte benötigt Der (Scala!) Compiler ist dein Freund!
37 Q&A
38 Buchempfehlungen
39 Buchempfehlungen
40 Danke Bernhard Huemer
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,
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
Erfahrungen mit Hartz IV- Empfängern
Erfahrungen mit Hartz IV- Empfängern Ausgewählte Ergebnisse einer Befragung von Unternehmen aus den Branchen Gastronomie, Pflege und Handwerk Pressegespräch der Bundesagentur für Arbeit am 12. November
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
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
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
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
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
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?
Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert
Beamen in EEP Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert Zuerst musst du dir 2 Programme besorgen und zwar: Albert, das
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:
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
Welche Gedanken wir uns für die Erstellung einer Präsentation machen, sollen Ihnen die folgende Folien zeigen.
Wir wollen mit Ihnen Ihren Auftritt gestalten Steil-Vorlage ist ein österreichisches Start-up mit mehr als zehn Jahren Erfahrung in IT und Kommunikation. Unser Ziel ist, dass jede einzelne Mitarbeiterin
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:
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
7 Rechnen mit Polynomen
7 Rechnen mit Polynomen Zu Polynomfunktionen Satz. Zwei Polynomfunktionen und f : R R, x a n x n + a n 1 x n 1 + a 1 x + a 0 g : R R, x b n x n + b n 1 x n 1 + b 1 x + b 0 sind genau dann gleich, wenn
Zählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
Menü auf zwei Module verteilt (Joomla 3.4.0)
Menü auf zwei Module verteilt (Joomla 3.4.0) Oft wird bei Joomla das Menü in einem Modul dargestellt, wenn Sie aber z.b. ein horizontales Hauptmenü mit einem vertikalen Untermenü machen möchten, dann finden
Der lokale und verteilte Fall
Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf
Entwurf: opsi Erweiterung für Roaming Profiles
Stand: 06.09.2011 uib gmbh Bonifaziusplatz 1b 55118 Mainz Tel.:+49 6131 275610 www.uib.de info@uib.de i Inhaltsverzeichnis 1 opsi Erweiterung für 1 1.1 Vorbedingungen für die opsi Erweiterung für......................
Lehrer: Einschreibemethoden
Lehrer: Einschreibemethoden Einschreibemethoden Für die Einschreibung in Ihren Kurs gibt es unterschiedliche Methoden. Sie können die Schüler über die Liste eingeschriebene Nutzer Ihrem Kurs zuweisen oder
Grundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
Anleitung über den Umgang mit Schildern
Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder
Arbeiten mit UMLed und Delphi
Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf
Grundlagen der Künstlichen Intelligenz
Grundlagen der Künstlichen Intelligenz 22. Constraint-Satisfaction-Probleme: Kantenkonsistenz Malte Helmert Universität Basel 14. April 2014 Constraint-Satisfaction-Probleme: Überblick Kapitelüberblick
Was meinen die Leute eigentlich mit: Grexit?
Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?
Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015
Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur
sondern alle Werte gleich behandelt. Wir dürfen aber nicht vergessen, dass Ergebnisse, je länger sie in der Vergangenheit
sondern alle Werte gleich behandelt. Wir dürfen aber nicht vergessen, dass Ergebnisse, je länger sie in der Vergangenheit liegen, an Bedeutung verlieren. Die Mannschaften haben sich verändert. Spieler
Gebundene Typparameter
Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte
Erwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
Professionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
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
Objektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank
Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank Die Entscheidung Advoware über VPN direkt auf dem lokalen PC / Netzwerk mit Zugriff auf die Datenbank des zentralen Servers am anderen
Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.
Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen. Klicken Sie auf Neu anlegen, um Ihre neue Angebotseite zu erstellen..
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,
Kapitel 4 Die Datenbank Kuchenbestellung Seite 1
Kapitel 4 Die Datenbank Kuchenbestellung Seite 1 4 Die Datenbank Kuchenbestellung In diesem Kapitel werde ich die Theorie aus Kapitel 2 Die Datenbank Buchausleihe an Hand einer weiteren Datenbank Kuchenbestellung
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.:
Wir machen neue Politik für Baden-Württemberg
Wir machen neue Politik für Baden-Württemberg Am 27. März 2011 haben die Menschen in Baden-Württemberg gewählt. Sie wollten eine andere Politik als vorher. Die Menschen haben die GRÜNEN und die SPD in
VibonoCoaching Brief -No. 18
VibonoCoaching Brief -No. 18 Von Berghütten, Holzöfen und Ernährungsprotokollen. Vibono GmbH 2011-2012, www.vibono.de Falls es mit dem Abnehmen nicht so richtig klappt... Es sind meist ganz einfache Gründe,
Testen mit JUnit. Motivation
Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen
Internationales Altkatholisches Laienforum
Internationales Altkatholisches Laienforum Schritt für Schritt Anleitung für die Einrichtung eines Accounts auf admin.laienforum.info Hier erklären wir, wie ein Account im registrierten Bereich eingerichtet
WebService in Java SE und EE
Schlüsselworte Java, JAX-WS, JAX-RS, JAXB, XML. Einleitung WebService in Java SE und EE Wolfgang Nast MT AG Ratingen Es werden die Mölichkeiten von WebServices in Java SE und EE, mit SOAP und REST gezeigt.
Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers
Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des
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
Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
Ü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:
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
Programmierung in C. Grundlagen. Stefan Kallerhoff
Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger http://www.d120.de/vorkurs.
Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger http:www.d120.de/vorkurs Aufgabenblatt 3 Du findest zur Bearbeitung dieses Aufgabenblatts zu einigen Aufgaben
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
Nathan Burgener. Design by Contract. Modul SWE
NathanBurgener DesignbyContract ModulSWE NathanBurgener Inhaltsverzeichnis 1 WasistDesignbyContract...3 1.1 Überblick...3 1.2 DesignbyContractmitMethoden...4 1.3 DesignbyContractmitKlassen...5 1.4 Vererbung...6
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,
Projektmanagement in der Spieleentwicklung
Projektmanagement in der Spieleentwicklung Inhalt 1. Warum brauche ich ein Projekt-Management? 2. Die Charaktere des Projektmanagement - Mastermind - Producer - Projektleiter 3. Schnittstellen definieren
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...
Luis Kornblueh. May 22, 2014
Einführung in die Bash Luis Kornblueh KlosterCluster Team 2013/2014, Klosterschule May 22, 2014 1 / 17 Inhaltsverzeichnis Einführung in das Scripting Einfache Beispiele Kommandos ersetzen Bedingungen Tests
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
Wir arbeiten mit Zufallszahlen
Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten
Viele Bilder auf der FA-Homepage
Viele Bilder auf der FA-Homepage Standardmäßig lassen sich auf einer FA-Homepage nur 2 Bilder mit zugehörigem Text unterbringen. Sollen es mehr Bilder sein, muss man diese als von einer im Internet
Design by Contract with JML
Thema: Design by Contract with JML Proseminar: Assertions Verfasser: Literatur: Betreuer: Natalya Moriz Gary T.Leavens and Yoonsik Cheon: Design by Contract with JML Prof. Dr. Heike Wehrheim 1 Inhalt DBC
Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de
Kreativ visualisieren
Kreativ visualisieren Haben Sie schon einmal etwas von sogenannten»sich selbst erfüllenden Prophezeiungen«gehört? Damit ist gemeint, dass ein Ereignis mit hoher Wahrscheinlichkeit eintritt, wenn wir uns
Prüfung Computation, Programming
Prüfung Computation, Programming 1. Computation: Reguläre Ausdrücke [5 Punkte] Zusammenfassung reguläre Ausdrücke a Das Zeichen a. Ein beliebiges Zeichen [abc] Ein beliebiges Zeichen aus der Menge {a,
Typumwandlungen bei Referenztypen
Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei
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 Geld verdienen! Lesen Sie... Peter von Karst. Ihre Leseprobe. der schlüssel zum leben. So gehen Sie konkret vor!
Peter von Karst Mehr Geld verdienen! So gehen Sie konkret vor! Ihre Leseprobe Lesen Sie...... wie Sie mit wenigen, aber effektiven Schritten Ihre gesteckten Ziele erreichen.... wie Sie die richtigen Entscheidungen
Für uns ist es nicht nur ein Möbelstück.
WIR SIND SCHNELL in Logistik und Lieferung. WIR SIND SO FREI und liefern frei Haus zum Kunden. WIR SIND TOP in Qualität und Verarbeitung. WIR SIND UNSCHLAGBAR in Service und Reklamation. WIR SIND DIGITAL
Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])
3.7 Erstellen einer Collage Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu]) Dann Größe des Dokuments festlegen beispielsweise A4 (weitere
Software-Engineering und Optimierungsanwendungen in der Thermodynamik
Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung
Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel
Sehr vielen Mitarbeitern fällt es schwer, Serienbriefe an Kunden zu verschicken, wenn sie die Serienbrieffunktion von Word nicht beherrschen. Wenn die Kunden mit Excel verwaltet werden, genügen nur ein
Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss
Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige
1. Was ihr in dieser Anleitung
Leseprobe 1. Was ihr in dieser Anleitung erfahren könnt 2 Liebe Musiker, in diesem PDF erhaltet ihr eine Anleitung, wie ihr eure Musik online kostenlos per Werbevideo bewerben könnt, ohne dabei Geld für
1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.
Der Serienversand Was kann man mit der Maske Serienversand machen? 1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden. 2. Adressen auswählen,
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
trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005
trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005 2 Inhalt 1. Anleitung zum Einbinden eines über RS232 zu steuernden Devices...3 1.2 Konfiguration
AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung
AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung Problem: Um AutoCAD abwechselnd auf mehreren Rechnern einsetzen zu können konnte man bis AutoCAD 2000 einfach den Dongle umstecken. Seit AutoCAD 2000i
Informationsblatt Induktionsbeweis
Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln
Statuten in leichter Sprache
Statuten in leichter Sprache Zweck vom Verein Artikel 1: Zivil-Gesetz-Buch Es gibt einen Verein der selbstbestimmung.ch heisst. Der Verein ist so aufgebaut, wie es im Zivil-Gesetz-Buch steht. Im Zivil-Gesetz-Buch
ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele
ONLINE-AKADEMIE Ziele Wenn man von Menschen hört, die etwas Großartiges in ihrem Leben geleistet haben, erfahren wir oft, dass diese ihr Ziel über Jahre verfolgt haben oder diesen Wunsch schon bereits
.NET Code schützen. Projekt.NET. Version 1.0
.NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll
Zwischenablage (Bilder, Texte,...)
Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen
Kapitel MK:IV. IV. Modellieren mit Constraints
Kapitel MK:IV IV. Modellieren mit Constraints Einführung und frühe Systeme Konsistenz I Binarization Generate-and-Test Backtracking-basierte Verfahren Konsistenz II Konsistenzanalyse Weitere Analyseverfahren
Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6
Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in
Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen
Grundlagen der Programmierung Prof. H. Mössenböck 3. Verzweigungen If-Anweisung n > 0? j n if (n > 0) x = x / n; ohne else-zweig x x / n j max x x > y? n max y if (x > y) max = x; else max = y; mit else-zweig
Gutes Leben was ist das?
Lukas Bayer Jahrgangsstufe 12 Im Hirschgarten 1 67435 Neustadt Kurfürst-Ruprecht-Gymnasium Landwehrstraße22 67433 Neustadt a. d. Weinstraße Gutes Leben was ist das? Gutes Leben für alle was genau ist das
Anleitung zu GermanLegal 1.3
Anleitung zu GermanLegal 1.3 Was sind permanente Rechnungen? In Deutschland macht man sich normalerweise über solche Dinge keine Gedanken. Wer als ISP WHMCS nutzt, muss dies aber. WHMCS erlaubt ungehinderte
Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016
L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele
Jeder ist ein Teil vom Ganzen Inklusion ändert den Blick
Jeder ist ein Teil vom Ganzen Inklusion ändert den Blick Inklusion ist ein schweres Wort. Wenige Menschen wissen, was es bedeutet. Das wollen wir ändern. Inklusion ist eine wichtige Idee. Was ist Inklusion?
Geld Verdienen im Internet leicht gemacht
Geld Verdienen im Internet leicht gemacht Hallo, Sie haben sich dieses E-book wahrscheinlich herunter geladen, weil Sie gerne lernen würden wie sie im Internet Geld verdienen können, oder? Denn genau das
Auswertung des Jahresabschlusses Bilanzanalyse 2
KA11 Unternehmensergebnisse aufbereiten, bewerten und nutzen Auswertung des Jahresabschlusses Bilanzanalyse 2 Kennzahlen zur Bilanzanalyse Die aufbereitete Bilanz kann mit Hilfe unterschiedlicher Kennzahlen
Holiday plans: ein Gespräch über Urlaubspläne
1. Hören Sie den Dialog und beantworten Sie die folgenden Fragen: a) Wohin fahren Ralf und Bettina auf Urlaub? b) Wann wird Bettina nach Argentinien reisen? c) Wann hat sie Schule? d) Wann hat sie frei?
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
Java Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
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
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Virtuelle COM-Schnittstelle umbenennen
Virtuelle COM-Schnittstelle umbenennen COM-Nummer eines USB/Seriell-Wandlers verändern Wenn man ein Gerät mit einem USB/Seriell-Wandler neu anschließt, wird meist eine neue virtuelle COM- Schnittstelle
Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7
Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
Vererbung & Schnittstellen in C#
Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung
Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.
040304 Übung 9a Analysis, Abschnitt 4, Folie 8 Die Wahrscheinlichkeit, dass bei n - maliger Durchführung eines Zufallexperiments ein Ereignis A ( mit Wahrscheinlichkeit p p ( A ) ) für eine beliebige Anzahl