Nebenläufig. Erste Experimente. Sprache samt Zubehör. Concurrent Programming mit Clojure

Größe: px
Ab Seite anzeigen:

Download "Nebenläufig. Erste Experimente. Sprache samt Zubehör. Concurrent Programming mit Clojure"

Transkript

1 Concurrent Programming mit Clojure 112 Nebenläufig Die Welt der Programmiersprachen hat seit zwei Jahren eine neue Bewohnerin: Die funktionale Sprache Clojure spezialisiert sich auf Programme mit Multithreading und bietet dank Java-Verwandtschaft trotz ihres jugendlichen Alters eine umfangreiche Bibliotheken-Landschaft. Stefan Kamphausen Ina Van, 123rf.com Mit Intels Core-Mikroarchitektur sind Rechner mit mehreren CPUs oder Prozessorkernen in Firmen und Privatwohnungen massenhaft angekommen. Dieser Entwicklung muss sich die aktuelle Generation von Programmierern stellen. Programme, die in mehreren Threads laufen, sind die Antwort. Derzeit entstehen Bibliotheken, die notwendige Funktionen in bekannten Programmiersprachen nachrüsten, es tauchen aber auch ganz neue Programmiersprachen auf, die diese Fähigkeit mitbringen. Ein neuer Spieler auf dem Feld der Werkzeuge ist die Programmiersprache Clojure [1]. Die Grundzüge, die Sprachdesign und Motivation gleichermaßen beschreiben, sind schnell zusammengefasst: Concurrent Programming und die Java Virtual Machine. Concurrent Programming nennt man das in einem Umfeld, in dem separate Programme oder Thread s zusammenwirken und auf Ressourcen zugreifen, die sie sich teilen müssen. Dabei dürfen keine inkonsistenten Zustände durch die konkurrierenden Zugriffe entstehen. Clojure begegnet dem durch einen funktionalen Ansatz, spezielle Datenstrukturen und sichere Zugriffsmechanismen auf die Ressourcen. Eine Plattform, die das Ausführen mehrerer Threads explizit unterstützt, ist die Java Virtual Machine (JVM), die es in Versionen für viele Betriebssysteme gibt. Zudem existiert bereits eine stattliche Menge an Bibliotheken in Java, die in Clojure sofort und ohne Integrationsaufwand verwendbar sind. Clojure erzeugt beim Kompilieren Java-Bytecode, sogar».class«-dateien lassen sich erstellen. Die JVM als Zielplattform ist kein Implementations-Detail, sondern ein Feature. Sprache samt Zubehör Der Erfinder von Clojure, Rich Hickey, stellt Clojure unter der Eclipse Public License 1.0 zum Download bereit. Wer Clojure unkompliziert testen möchte, lädt»clojure_1.0.0.zip«von [2] herunter, entpackt es in einem beliebigen Verzeichnis und startet zum interaktiven die Read Eval Print Loop (siehe Kasten REPL ). Aus Komfortgründen empfiehlt sich die Integration von Clojure in eine IDE. Lösungen für Netbeans [3], Emacs ([4], [5]), Vim [6] und Eclipse [7] sind verfügbar. Wer die aktive Entwicklung von Clojure verfolgen möchte, begibt sich zu Github [8]. Erste Experimente Clojure startet nach der Eingabe von»java jar clojure.jar clojure.lang.main«in einem Terminal und präsentiert dem Anwender einen Prompt, an dem er Befehle eingeben kann, die er mit der [Return]-Taste abschickt. Größere Mengen an Quellcode schreibt der Programmierer besser in einer separaten Datei, deren Inhalt er dann an der REPL mit Copy & Paste einfügt. Es gibt auch einen Befehl, um eine ganze Datei zu kompilieren und ihren Inhalt zu laden:»(load file "file.clj")«. In alter Tradition ist Hello World das erste Beispiel: user=> (println "Hello World") Hello World nil user=> In diesem kurzen Codestück zeigen sich bereits wichtige Eigenschaften von Clojure. Zum einen ist das die Lisp-artige Syntax. Neueinsteigern sei versichert, dass die Klammern in der Regel nach wenigen Tagen nicht mehr stören und später unverzichtbar erscheinen. Befehle in Clojure werden in runden Klammern eingefasst, das erste Element einer Liste von Elementen in einem Klammernpaar ist der Befehl, alle folgenden Elemente sind

2 REPL Das Akronym REPL steht für Read Eval Print Loop. Es bezeichnet eine interaktive Sitzung, in der der Anwender Befehle eintippt, ähnlich wie bei einer Shell. Die Reader-Komponente nimmt diese entgegen und baut daraus interne Codestrukturen, die im Evaluations- Schritt ausgeführt werden. Das Resultat des eingegebenen Ausdrucks erscheint dann in der Sitzung (Print), und das Ganze beginnt von vorn (Loop). dessen Argumente. In diesem Beispiel lautet der Name des Befehls»println«, was»system.out.println«in Java entspricht, und das einzige Argument ist der String»Hello World«. Darunter ist die Ausgabe zu sehen. In der dritten Zeile gibt Clojure»nil«aus, was»null«in Java entspricht, um danach wieder einen neuen Prompt anzubieten. Dabei ist»nil«der Rückgabewert des Befehlsaufrufs. Nebenwirkungen Wer bisher vor allem mit Sprachen wie C, Perl, Java oder Python entwickelt hat, ist gewohnt, die meisten Anweisungen wegen ihres Seiteneffekts zu verwenden. Ein»printf("Hello");«in C erzeugt als Seiteneffekt eine Ausgabe, hat aber auch einen Rückgabewert: die Anzahl der ausgegebenen Zeichen. In der funktionalen Programmierung interessiert nur der Rückgabewert; eine Funktion bekommt Argumente übergeben und bestimmt ausschließlich anhand dieser Argumente ihr Resultat. Das folgende Beispiel zeigt die Definition einer Funktion (»defn«) mit Namen»add«, die zwei Argumente (»x«und»y«) entgegennimmt und als Resultat deren Summe zurückgibt. user=> (defn add [x y] (+ x y)) #'user/add user=> (add 2 3) 5 user=> (add (add 1 2) 3) 6 Offensichtlich verwendet diese Funktion keine globalen Variablen bei der Berechnung, sie erzeugt keine Ausgabe während ihrer Arbeit und schreibt auch nicht in Dateien oder Datenbanken sie ist rein funktional. Solche Seiteneffekt-freien Funktionen erzeugen auch bei parallelen Aufrufen aus mehreren Threads mit Sicherheit keine Konflikte. Rein funktionale Sprachen werden oft mit dem Argument geschmäht, sie könnten allenfalls zum Aufheizen der CPU dienen, aber nicht bei der Bewältigung realer Aufgaben helfen. Ein Computerprogramm muss Seiteneffekte erzielen, beispielsweise Ausgaben anzeigen oder in eine Datenbank schreiben, sonst hat es für den Anwender keinen Effekt. Diesen Anspruch erfüllt Clojure mit mehreren Mitteln. Zunächst interagiert es direkt mit Java. Clojure kann einfache alte Java-Objekte instanziieren und auf ihnen Methoden aufrufen. Die Syntax dafür beschränkt sich im Wesentlichen auf einen Punkt. Des Weiteren gestattet Clojure auch nicht-funktionale Bestandteile, der Programmierer muss lediglich Abbildung 1: Emacs mit Quellcode (oben) und einer REPL mit einigen Befehlen (unten). an manchen Stellen darauf achten, dass er keine Seiteneffekte erzeugt. Wesentlich sind dabei die von Clojure bereitgestellten Datenstrukturen: Ohne weitere Angabe bleiben Daten in Clojure unveränderlich. Sind jedoch sich ändernde Zustände erwünscht, existieren vier verschiedene Arten von indirekten Referenzen, die in unterschiedlichen Anwendungsfällen das Ändern erlauben. Es gibt Referenztypen für Daten, die pro Thread eindeutig sind, für Daten mit nur einem Wert und synchroner Änderung sowie für Daten mit nur einem Wert und asynchroner Änderung. Zudem gibt es ein Transaktionssystem, das den synchronen Zugriff auf mehrere Daten im Speicher steuert, ähnlich, wie es eine Transaktion für ein Datenbanksystem leistet. Von diesen vier Typen verwendet das Beispiel, das dieser Artikel weiter unten beschreibt, drei: Vars, Refs und Agents. Apfelmännchen Listing 1 enthält den Code zum Berechnen einer Mandelbrot-Menge mit mehreren Threads und zum Anzeigen des Resultats. Abbildung 1 zeigt eine Emacs- Sitzung mit diesem Beispielcode. Zunächst definiert der Befehl»ns«einen neuen Namespace und importiert einige Java-Klassen. Namespaces in Clojure sind Java-Namespaces. Der zweite Ausdruck definiert einige Parameter, die dafür sorgen, dass das Programm eine hübsche Anzeige erstellt. Die Verwendung von»def«in Zeile 6 sorgt dafür, dass Clojure eine globale Variable, hier mit dem Namen»param«, anlegt. Solche Typen heißen in Clojure Var, sie sind die ersten speziellen Typen im Beispiel. An diese Var bindet Clojure eine (Hash)-Map in geschweiften Klammern. Diese Bindung ist der Root-Wert, jeder Thread kann eine eigene Bindung verwenden. In der Map benutzt das Programm Keywords, erkennbar am führenden Doppelpunkt, als besonders effiziente Schlüssel. Anschließend definiert das Listing die Funktionen»scale range«,»size range«,»color log scale«,»color value«und»mandelbrot iterations«. Die Argumente einer Funktion folgen, nach einem optionalen Docstring, dem Funktionsnamen in eckigen Klammern die Syntax für Linux-Magazin 01/10 Clojure 113

3 114 einen Vektor. Der Befehl»range«liefert eine Sequence zurück, deren Inhalte aber nicht sofort festliegen, sondern erst in dem Moment entstehen, in dem ein Programmteil tatsächlich darauf zugreift. Sequences sind eine Abstraktion in Clojure, die den Zugriff auf verschiedenste Datenstrukturen vereinheitlichen, beispielsweise auf Vektoren und Maps, aber Listing 1:»mandelbrot.clj«auch auf Dateien, XML-Dateien oder Datenbank-Ergebnisse. Für Sequences gilt Lazy Evaluation, sodass sie ihre Werte erst im Moment des Zugriffs realisieren. Auf diese Weise sind auch unendliche Sequences möglich, solange das Programm nur endlich viele Werte anfordert. Die beiden Color-Funktionen sorgen für eine gute Darstellung. Die Funktion»mandelbrot iterations«enthält die einfache Rechnung der iterativen Funktion zur Berechnung der Mandelbrot-Menge im Raum der komplexen Zahlen. Sie besteht aus grundlegender Mathematik, expliziten Typumwandlungen für eine höhere Geschwindigkeit und einem Schleifenkonstrukt»loop... recur«. In einer solchen Schleife definiert Clojure 001 (ns de.linuxmagazin.cpu heizung 002 (:import (java.awt Color Dimension) 003 (java.awt.image BufferedImage) 004 (javax.swing JPanel JFrame))) (def param {:size :max abs val :max iter :xmin :ymin :xmax :ymax 1.0}) (defn scale range [x min max steps] 015 (+ min (* x (/ ( max min) steps)))) (defn size range [] 018 (range 0 (param :size))) (defn color log scale 021 "Skalierung des Iterations Wertes." 022 [n max n] 023 (max (* (/ (Math/log (* n (/ max n))) 025 (Math/log 255))) )) (defn color value 029 "Berechnung des Farbwertes." 030 [iter] 031 (int 032 ( (color log scale iter (param :max iter))))) (defn mandelbrot iterations 036 "Naive Implementation der Mandelbrot Iteration. 037 Enthält Typ Hinweise für den Compiler." 038 [x0 y0 max abs max iterations] 039 (let [x0 (float x0) 040 y0 (float y0) 041 max iter (int max iterations)] (loop [x (float x0) 044 y (float y0) 045 iter (int 0)] 046 (if (== iter max iter) (let [x1 (+ x0 ( (* x x) (* y y))) 049 y1 (+ y0 (* (float 2) (* x y))) 050 abs (+ (* x1 x1) (* y1 y1))] 051 (if (< abs max abs) 052 (recur x1 y1 (+ iter (int 1))) 053 iter)))))) (defn mandelbrot line 056 "Berechne eine Zeile der Mandelbrot Menge. 057 Achtung das Resultat ist lazy." 058 [x] 059 (map (fn [pxy] 060 (let [y (scale range 061 pxy 062 (param :ymin) 063 (param :ymax) 064 (param :size))] 065 (mandelbrot iterations 066 x y 067 (param :max abs val) 068 (param :max iter)))) 069 (size range))) (def world (ref (vec (repeat (param :size) [])))) (defn make world image [] 074 (let [img (new BufferedImage 075 (inc (param :size)) 076 (inc (param :size)) 077 BufferedImage/TYPE_INT_ARGB)] 078 (doseq [pxy (size range)] 079 (let [line (world pxy)] 080 (when (not (empty? line)) 081 (doseq [pxx (size range)] 082 (.setrgb img 083 pxx 084 pxy 085 (.getrgb 086 ( Color. 087 (color value (line pxx)) 088 (color value (line pxx)) ))))))) 090 img)) (defn repaint world img [g] 094 (.drawimage g (make world image) 0 0 nil)) (def world agent (agent {})) (defn mandelbrot parallel [] 099 (let [frame (JFrame. "Fractal Multi Threaded") 100 panel (proxy [JPanel] [] 101 (paintcomponent 102 [g] 103 (proxy super paintcomponent g) 104 (repaint world img g) 105 ))] 106 (dosync 107 (ref set world 108 (vec (repeat (param :size) [])))) (.setpreferredsize 111 panel 112 (Dimension. (param :size) (param :size))) (doto frame 115 (.add panel) 116 (.pack) 117 (.setvisible true)) ;; The Meat 120 (dorun 121 (pmap (fn [pxx] 122 (let [x (scale range 123 pxx 124 (param :xmin) 125 (param :xmax) 126 (param :size)) 127 newline (vec (mandelbrot line x))] (dosync 130 (alter world 131 (fn [state] 132 (assoc state pxx newline)))) (send off world agent 135 (fn [_] 136 (.repaint panel))))) 137 (size range))) panel))

4 an der Stelle von»loop«einen Einstiegspunkt mit Variablenwerten und springt bei»recur«mit den dort angegebenen neuen Werten wieder zurück. Das entspricht einer Rekursion, schützt aber vor Stack-Überläufen. Schließlich berechnet die Funktion»mandelbrot line«ab Zeile 55 die Werte der Mandelbrot-Menge für eine Zeile von Bildpunkten. Beachtenswert sind hier der Befehl»let«, der lokale Variablen anlegt, sowie der Befehl»map«, der in der funktionalen Programmierung häufig auftaucht. Der Aufruf von»map«sorgt dafür, dass Clojure eine Funktion, im Beispiel anonym erzeugt mit»fn«, auf jedes Element einer Sequence, hier generiert durch»size range«, anwendet. Referenzen Der in Zeile 71 folgende Ausdruck enthält eine weitere spezielle Datenstruktur: eine Ref. Der Befehl»repeat«wiederholt sein zweites Argument (den leeren Vektor»[]«) so oft, wie im ersten Argument angegeben. Auf dieses Resultat erzeugt dann»ref«eine besondere Referenz, und Clojure bindet sie dann an die Var»world«. In»world«speichert das Programm später die errechneten Werte. Für Clojure sind Daten aber wie gesagt unveränderlich. Es stellt sich die Frage, wie das Programm die Werte dort speichern kann. Refs sind eine Besonderheit von Clojure, die kompliziertes Locking der Daten durch ein elegantes Transaktions-System ersetzt. Eine Transaktion verändert den Zustand mehrerer Refs in einem Thread, andere Threads bekommen immer einen konsistenten Zustand zu sehen. Ab Zeile 73 folgen zwei Funktionen, die direkt Java-Klassen verwenden und das Abbild der»world«in einen Grafik-Kontext zeichnen. Die Funktion»make world image«demonstriert die Instanziierung eines Objekts der Klasse»BufferedImage«mit dem Befehl»new«für Java-Programmierer vertraut. Der Befehl»inc«liefert sein Argument um 1 erhöht zurück,»doseq«realisiert alle Werte der übergebenen Sequence, die ja lazy sein kann, um die hier gewollten Seiteneffekte zu bewirken.»when«funktioniert wie ein»if«, nur ohne»else«. Einen Aufruf einer Java-Methode auf dem Objekt»img«zeigt der Befehl».setRGB«. Das ist fast das Gleiche wie in nativem Java-Code, nur dass die Methode vor dem Objekt steht. Bei der Erzeugung eines Color-Objekts zeigt das Beispiel etwas syntaktischen Zucker: Statt»(new Objekt)«erlaubt Clojure auch das kürzere»(objekt.)«mit einem Punkt hinter dem Namen der Klasse. Agents Der Ausdruck in Zeile 96 zeigt die dritte besondere Datenstruktur von Clojure in diesem Beispiel: den Agent. Clojure er Linux-Magazin 01/10 Clojure 115 Anzeige

5 116 F Abbildung 2: Das Programm lastet bei der Berechnung zwei Prozessorkerne aus. E Abbildung 3: Das Resultat von Closures Arbeit: Eine grafische Darstellung der Mandelbrot-Menge. zeugt Agents, wenn es den Befehl»agent«findet, in diesem Falle einen Agent auf eine leere Map. Agents sind ein anderer Referenztyp und erlauben es, einen Wert asynchron zu ändern. An den Agent schickt ein Programmteil eine Funktion, die dann zu einem späteren Zeitpunkt und in einem separaten Thread ausgeführt wird. In diesem Beispiel verwendet das Programm einen Agent, um asynchron das Neuzeichnen der Welt zu signalisieren. Malerei Nach dieser Vorbereitung folgt nun die Funktion, die alles zusammenbaut. In der Funktion»mandelbrot parallel«erzeugt das Programm zunächst einen Jframe und ein Jpanel, für das es die Methode»paintComponent«implementiert, was der Befehl»proxy«ermöglicht. Die Welt, gespeichert in der Ref»world«, darf das Programm nicht direkt manipulieren, also erzeugt es mit»dosync«eine Transaktion, in der der Befehl»ref set«der Welt eine neue Liste von leeren Vektoren zuweist (Zeile 107). Danach bekommt das Panel die im Parameter-Satz definierte Größe zugewiesen. Maps sind Funktionen ihrer Schlüssel, das macht den Quelltext kompakt. Eine weitere kompakte Schreibweise erlaubt»doto«(zeile 114): Es ruft auf dem ersten Argument, einem Java-Objekt, alle darauf folgenden Methoden auf. Ab Zeile 119 folgt das Herzstück dieses Programms. Mit»dorun«bewirkt der Programmierer Seiteneffekte. Die komplette Parallelisierung des Algorithmus steckt in dem p von»pmap«in Zeile 121. Hier handelt es sich um den oben beschrieben Befehl»map«, der sich aber automatisch auf die vorhandenen CPUs oder Kerne verteilt. Wie das auf einem Notebook mit zwei Cores (Intel Core2 Duo 1,8 GHz, 2 GByte RAM) während der Berechnung aussieht, zeigt die Abbildung 2. Obwohl durch den zweiten Kern kein großer Gewinn zu erwarten ist, da ja das wiederholte Zeichnen des Jpanel schon einen zweiten Thread beschäftigt, sinkt die Zeit für die Berechnung durch»pmap«von rund 5 Sekunden auf etwa 4. Die anonyme Funktion (»fn«), die hier in»pmap«zur Anwendung kommt, verändert»world«in einer Transaktion (»dosync«), indem sie»alter«aufruft. Dieses»alter«nimmt eine Funktion entgegen, die keine Seiteneffekte hat. Dafür muss der Programmierer sorgen. Hintergrund dieser Anforderung ist das Transaktionsmodell, das die Funktion unter Umständen mehrfach ausführt. Der Rückgabewert dieser Funktion ist der neue Wert der Ref. In diesem Falle schreibt»assoc«dazu die vorher neu berechnete Zeile (»newline«) in den aktuellen Zustand (»state«) der Welt und liefert diese neue Welt zurück. Nach dieser Manipulation von»world«in einer Transaktion kann der Agent das Signal bekommen, die Welt neu zu zeichnen (»send off«). Das Resultat zeigt die Abbildung 3. Neues und Bewährtes Clojure ist neu und bringt zwei wesentliche Features mit: Unterstützung für Concurrency direkt in der Sprache und eine enge Verwandschaft mit Java. Das erste macht die Sprache interessant und gut geeignet für die nächsten Generationen von Prozessoren, das zweite gibt Clojure die Chance, produktiv eingesetzt zu werden. Der Einstieg scheint nicht leicht, ist aber einfacher, als mancher denkt ([9], [10]). Die interaktive Entwicklung an der REPL hilft dabei. Während der Erstellung dieses Artikels hat Clojure ihren zweiten Geburtstag gefeiert. In diesen beiden Jahren hat die Sprache sowohl in der Java- als auch in der Lisp-Community einige Aufmerksamkeit erregt. Ob sie sich durchsetzen kann, wird sich bis zum vierten Geburtstag sicherlich zeigen. Herzlichen Glückwunsch, Clojure! (mhu) n Infos [1] Clojure-Webseite: [ www. clojure. org] [2] Clojure-1.0-Download: [ clojure. googlecode. com/ files/ clojure_ zip] [3] Enclojure für Netbeans: [ www. enclojure. org/] [4] Clojure-Mode, Swank-Backend: [ github. com/ jochu/] [5] SLIME: [ common lisp. net/ project/ slime/] [6] Vim Clojure: [ kotka. de/ projects/ clojure/ vimclojure. html] [7] Counterclockwise: [ code. google. com/ p/ counterclockwise/] [8] Clojure und Contrib auf Github: [ github. com/ richhickey] [9] Ausführlicher Artikel für Einsteiger: [ java. ociweb. com/ marks/ clojure/ article. html] [10] Clojure-Vorträge als Videos: [ clojure. blip. tv] Der Autor Stefan Kamphausen ist Physiker und hat eine Vorliebe für Sprachen der Lisp-Familie. Derzeit arbeitet er an einem Buch zum Thema Clojure.

Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt

Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt Informatik Seminar WS 2009/2010 Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt Lisp in der JVM Michael Krüger (inf6065) 1 Übersicht 1. Hintergrund 2. Designziele 3. Spracheigenschaften 4. Klassenanalyse

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

Erste Java-Programme (Scopes und Rekursion)

Erste Java-Programme (Scopes und Rekursion) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 04.10.2016 Technische Universität Braunschweig, IPS Überblick Organisatorisches Hello! 04.10.2016 Dr. Werner Struckmann / Stephan Mielke,

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Kurze Wiederholung: while Sammeltypen (kurz

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Es können ganze Programmteile aufgenommen werden. Mithilfe von Funktionen kann man denselben

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.

Mehr

Alles außer Java! JVM-Sprachen sagen Happy Birthday

Alles außer Java! JVM-Sprachen sagen Happy Birthday JUGS 20 Jahre Java Alles außer Java! JVM-Sprachen sagen Happy Birthday Jan-Paul Buchwald BeOne Stuttgart GmbH 15 Jahre JVM Sprachen Jython Rhino 2001: JRuby Groovy Scala 2007: Clojure 1992 2002 2012 1992:

Mehr

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke Java 1 Markus Reschke 06.10.2014 Überblick Einführung in die Programmierung zur Vereinfachung des Einstiegs ins Studium Erstellung von ausführbaren Programmen für den Computer Denk- und Vorgehensweisen

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Übungsblatt 1. Java Vorkurs (WS 2017)

Übungsblatt 1. Java Vorkurs (WS 2017) Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Einführung Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 04.10.2017 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello World 04.10.2017 Dr. Werner Struckmann

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen Variablen Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Variablen dienen zur Speicherung von Daten. Um Variablen

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

WS2018/ Oktober 2018

WS2018/ Oktober 2018 Einführung in die Programmierung Ronja Düffel WS2018/19 05. Oktober 2018 Rückblick Datentypen bool Zahlen (int und float) string Variablen Kontrollstrukturen Verzweigungen (if...: und if...else:) Schleifen

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

7. Übung Informatik II - Objektorientierte Programmierung

7. Übung Informatik II - Objektorientierte Programmierung 7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

13. Funktionale Konzepte in Java

13. Funktionale Konzepte in Java Funktionale vs. Imperative Programmierung 13. Funktionale Konzepte in Java Funktionale Programmierung, Lambda Ausdrücke, Datenströme, Pipelines Imperative Konzepte Ausführen von Anweisungen Zustand (z.b.

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Praktische Informatik 1

Praktische Informatik 1 Praktische Informatik 1 Imperative Programmierung und Objektorientierung Karsten Hölscher und Jan Peleska Wintersemester 2011/2012 Session 2 Programmierung Begriffe C/C++ Compiler: übersetzt Quellcode

Mehr

Übungszettel 2a - Python

Übungszettel 2a - Python Vorsemesterkurs Informatik Übungsaufgaben Übungszettel 2a - Python Aufgabe 1: Python starten Teilaufgaben (a)-(c) beziehen sich auf das Arbeiten unter den Systemen, die auf den RBI-Rechnern installiert

Mehr

Programmiersprache. Emily & rica

Programmiersprache. Emily & rica Programmiersprache Emily & rica inhaltsangabe Programmiersprache Def inition/funktion Arten Gängige Algorithmus/Syntax Compiler, Interpreter Def inition Unterscheidung Vor- und Nachteile Compiler/ Interpreter

Mehr

Guile Die Erweiterungssprache des GNU-Projekts

Guile Die Erweiterungssprache des GNU-Projekts Guile Die Erweiterungssprache des GNU-Projekts Matthias Köppe Otto-von-Guericke-Universität Magdeburg Magdeburger Linux User Group e. V. 19. Mai 2001 Überblick Guile als Erweiterungssprache Guile als Scheme-Implementierung

Mehr

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Lisp 1958 von John McCarthy erfunden Funktionales Programmierparadigma

Mehr

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

11. Funktionale Konzepte in Java

11. Funktionale Konzepte in Java Funktionale vs. Imperative Programmierung 11. Funktionale Konzepte in Java Funktionale Programmierung, Lambda Ausdrücke, Datenströme, Pipelines Imperative Konzepte Ausführen von Anweisungen Zustand (z.b.

Mehr

Scala & Lift. Ferenc Lajko 04.02.2010

Scala & Lift. Ferenc Lajko 04.02.2010 Scala & Lift Ferenc Lajko 04.02.2010 Gliederung 1. Scala 1.1. Allgemein 1.2. Merkmale 1.3. Unterschiede zu Java 1.4. Code-Beispiel 1.5. Vorteile zu anderen Sprachen 2. Lift 2.1. Allgemein 2.2. Idee 2.3.

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. August 2009 1/17 Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe Prof. G. Kemnitz

Mehr

Fragen zur OOP in Java

Fragen zur OOP in Java - 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...

Mehr

Elementare Konzepte von

Elementare Konzepte von Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)

Mehr

Programming 101. Carl Herrmann IPMB & DKFZ

Programming 101. Carl Herrmann IPMB & DKFZ Programming 101 Carl Herrmann IPMB & DKFZ Programmieren Kommandozeile Einfache Befehle Shell Skript aneinanderketten von Befehlen Schleifen Programmiersprache Komplexere Aufgaben Gemeinsamkeiten Alle Programmiersprachen

Mehr

Zahlen raten. Al Sweigart, Eigene Spiele programmieren Python lernen, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm

Zahlen raten. Al Sweigart, Eigene Spiele programmieren Python lernen, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm D3kjd3Di38lk323nnm 33 3 Zahlen raten In diesem Kapitel schreiben Sie ein Zahlenratespiel (»Guess The Number«). Der Computer denkt sich eine Geheimzahl von 1 bis 20 aus und bittet den Benutzer, sie zu erraten.

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Ein kleiner Blick auf die generische Programmierung

Ein kleiner Blick auf die generische Programmierung TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen

Mehr

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen. Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen. Wir wollen uns heute dem Thema Variablen widmen und uns damit beschäftigen, wie sich

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Agenda Elementare Einführung C Programm Syntax Datentypen, Variablen und Konstanten Operatoren und Ausdrücke Kontrollstrukturen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Freie Markierung Die Templating-Engine FreeMarker im Einsatz

Freie Markierung Die Templating-Engine FreeMarker im Einsatz Freie Markierung Die Templating-Engine FreeMarker im Einsatz Stefan Reinhold stefan.reinhold@it-informatik.de www.it-informatik.de 1 Was ist eine Templating Engine? Zusammenführen von Vorlagen und Daten

Mehr

Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung

Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung Die Scala Entwicklungsumgebung 1 Was ist drin? Die Scala-Entwicklungsumgebung enthält Die Scala-Shell: scala Zwei Compiler: scalac und fsc (Fast Scala Compiler) Die API Die Laufzeitumgebung Den Scala-Basar

Mehr

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic THE GO PROGRAMMING LANGUAGE Part 1: Michael Karnutsch & Marko Sulejic Gliederung Geschichte / Motivation Compiler Formatierung, Semikolons Variablen, eigene Typen Kontrollstrukturen Funktionen, Methoden

Mehr

Kapitel 1: Die ersten Schritte 1

Kapitel 1: Die ersten Schritte 1 Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte 1 Starten Sie Eclipse. Importieren Sie das Eclipse-Projekt scenarios-chapter-1. Gehen Sie in den Unterordner

Mehr

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 Rekursion: Beispiele Bier trinken 8-Damen-Problem ipod Shuffle für alle Mitarbeiter Karten

Mehr

Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/ Gültigkeitsbereich Funktionen Erinnerung: Python ist eine interpretierte Sprache! Funktionen müssen definiert sein, bevor sie aufgerufen werden können. T. Neckel Einführung in die wissenschaftliche Programmierung

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs Grundlagen Felix Döring, Felix Wittwer 24. April 2017 Python-Kurs Gliederung 1. Scriptcharakter 2. Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren 3.

Mehr

Methoden und Funktionen in Scala

Methoden und Funktionen in Scala Methoden und Funktionen in Scala Kapitel 11 und 12 des Buches 1 Jede Methode hat einen Typ Für die folgende Methode def square(v: Int) = v*v erhalten wir von der Scala-Shell die Rückmeldung square: (Int)Int

Mehr

WS2017/ Oktober 2017

WS2017/ Oktober 2017 Einführung in die Programmierung Ronja Düffel WS2017/18 09. Oktober 2017 Rückblick Datentypen bool Zahlen (int und float) string Variablen Kontrollstrukturen Verzweigungen (if...: und if...else:) Schleifen

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches

Mehr

Java Referenzdatentypen genauer betrachtet

Java Referenzdatentypen genauer betrachtet Informatik 1 für Nebenfachstudierende Grundmodul Java Referenzdatentypen genauer betrachtet Kai-Steffen Hielscher Folienversion: 23. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme Referenzdatentypen

Mehr

Crashkurs Python und Sage U23 Krypto-Mission

Crashkurs Python und Sage U23 Krypto-Mission Crashkurs Python und Sage -Mission florob Simon e.v. http://koeln.ccc.de 4. Oktober 2015 Anfang Übersicht Sage Computer-Algebra-System, wie MatLab oder Mathematica sagemath.org Python interpretierte Programmiersprache

Mehr

Objektorientiertes Programmieren (Java)

Objektorientiertes Programmieren (Java) Grundlagen Objektorientiertes Programmieren (Java) Java folgt gewissen Rechtschreibregeln die Syntax. Diese besagt, dass hinter jeden Befehl ein Semikolon( ; ) stehen muss, damit der Computer weiß, dass

Mehr

Workshop Einführung in die Sprache Haskell

Workshop Einführung in die Sprache Haskell Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig

Mehr

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave Fachhochschule Südwestfalen Wir geben Impulse Kontrollstrukturen und Schleifen in Octave Einführung Inhalt m-files Script-Files Function-Files Ein- Ausgabe von Variablen oder Ergebnissen For-Schleife While-Schleife

Mehr

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.

Mehr

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Software Engineering I (IB) Node.js. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Software Engineering I (IB) Node.js. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Software Engineering I (IB) Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 15.11.2018 08:01 Inhaltsverzeichnis JavaScript auf dem Server!?............................ 1 Hello

Mehr

Klassenvariablen, Klassenmethoden

Klassenvariablen, Klassenmethoden Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden

Mehr

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung

Mehr

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

2 Programmieren in Java I noch ohne Nachbearbeitung

2 Programmieren in Java I noch ohne Nachbearbeitung 1 2 Programmieren in Java I noch ohne Nachbearbeitung 2.1 Was sind Programme? Eingabe = Verarbeitung = Ausgabe Die Eingabe kann sein Konstanten im Quelltext; Kommandozeilenparameter oder interaktive Eingabe

Mehr

Hello World! Eine Einführung in das Programmieren Das erste Programm

Hello World! Eine Einführung in das Programmieren Das erste Programm Hello World! Eine Einführung in das Programmieren Das erste Programm Görschwin Fey Institute of Embedded Systems Hamburg University of Technology Slide 2 Betriebssystem Funktion Anwendung Gerätesteuerung

Mehr

Bash-Skripting Linux-Kurs der Unix-AG

Bash-Skripting Linux-Kurs der Unix-AG Bash-Skripting Linux-Kurs der Unix-AG Sebastian Weber 13.06.2012 Was ist ein Bash-Skript? Skript muss mit chmod +x ausführbar gemacht sein Aneinanderreihung von Befehlen normale Befehle nutzbar Sebastian

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 18 Einstieg in die Informatik mit Java Klassenvariablen, Klassenmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden

Mehr

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und 17.6.2008 Organisatorisches Um auf die Mailingliste aufgenommen zu werden schicke einfach eine

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3 Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

pue13 January 28, 2017

pue13 January 28, 2017 pue13 January 28, 2017 1 Aufgabe 1 (Klammern und Anweisungsblöcke) Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern

Mehr

1 Berechnung von Summen (ca = 10 Punkte)

1 Berechnung von Summen (ca = 10 Punkte) Einführung in die wissenschaftliche Programmierung Klausur 26.02.2013 Seite 1/8 Name, Vorname, Unterschrift: Matrikelnummer: 1 Berechnung von Summen (ca. 5 + 4 + 1 = 10 Punkte) Gegeben sind natürliche

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung

Mehr

Java für Fortgeschrittene Proseminar im Sommersemester 2009 Funktional programmieren auf der JVM: Clojure

Java für Fortgeschrittene Proseminar im Sommersemester 2009 Funktional programmieren auf der JVM: Clojure Java für Fortgeschrittene Proseminar im Sommersemester 2009 Funktional programmieren auf der JVM: Clojure Florian Zacherl Technische Universität München 19.05.2009 Zusammenfassung Clojure ist eine dynamische,

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017

Mehr

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23

Hallo Haskell. (Funktionale Programmierung) Prof. Dr. Oliver Braun. Letzte Änderung: :08. Hallo Haskell 1/23 Hallo Haskell (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Hallo Haskell 1/23 Glasgow Haskell Compiler (GHC) der Haskell-Compiler ist der GHC Sie installieren ihn

Mehr

III.1 Prinzipien der funktionalen Programmierung - 1 -

III.1 Prinzipien der funktionalen Programmierung - 1 - 1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung

Mehr

PYTHON. 04 Funktionen II, Module

PYTHON. 04 Funktionen II, Module PYTHON 04 Funktionen II, Module Funktionen Funktionen enthalten Programm-Teile können später im Programm aufgerufen werden können beliebig oft aufgerufen werden (und man muss nur die Funktion aufrufen,

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 - n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Scala. Funktionale (Zustandslose) Objekte

Scala. Funktionale (Zustandslose) Objekte Scala Funktionale (Zustandslose) Objekte Agenda Was sind Funktionale Objekte? veränderliche Objekte vs. unveränderliche Objekte Klassen Parameter Konstruktoren Private Member Methoden und Operatoren Overriding

Mehr

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München Informatik 1 Sommersemester 2011 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Einführung in Grundkonzepte der Informatik; Einführung in Denkweisen der Informatik;

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Objektorientiertes Programmieren II

Objektorientiertes Programmieren II Objektorientiertes Programmieren II Symbolische Programmiersprache. Benjamin Roth Folien von Annemarie Friedrich Wintersemester 2017/2018 Centrum für Informations- und Sprachverarbeitung LMU München 1

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 17 Einstieg in die Informatik mit Java Methoden und Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld

Mehr