2 Problemlöser: Groovy und Grails. Thomas Westphal 25. Juni 2015

Größe: px
Ab Seite anzeigen:

Download "2 Problemlöser: Groovy und Grails. Thomas Westphal 25. Juni 2015"

Transkript

1 2 Problemlöser: Groovy und Grails Thomas Westphal 25. Juni 2015

2 Wer ist das? Thomas twest-log.blogspot.com 2 gplus.to/twest

3 Prologue Why? (i) 3

4 Warum? 4

5 Warum? Sie haben ein Problem? Ich habe kein Problem. Ich habe Probleme. Plural. Four Rooms 5

6 Welche Probleme? Ausdrucksschwacher Code Altlasten in Java Schnelle Releasezyklen Technologie- Blumenstrauß

7 Problemlöser?

8 Problemlöser? Du hast kein Problem, Jules. Ich kümmere mich um den Scheiß... Pulp Fiction

9 Problemlöser!

10 Episode I The Groovy Way

11 Was ist Groovy?

12 Was ist Groovy? Groovy is like a super version of Java. If you are a developer, tester or script guru, you have to love Groovy. 12

13 Was ist Groovy?... ist eine dynamische Sprache für die JVM.

14 Was ist Groovy?... ist eine dynamische Sprache für die JVM. dynamische und statische Typisierung

15 Was ist Groovy?... eine vielschichtige Sprache für die JVM. dynamische und statische Typisierung

16 Was ist Groovy?... eine vielschichtige Sprache für die JVM. dynamische und statische Typisierung Elemente aus Python, Ruby und Smalltalk seit 2003 aktuelle Version

17 Was ist Groovy? Vielschichtig Flache Lernkurve dynamisches und reiches Ökosystem Skriptfähigkeit und testing glue powerful features Java Plattform läuft auf jeder JVM Zugriff auf jegliche Java-Bibliotheken

18 Wie löst Groovy Probleme? 18

19 Wie löst Groovy Probleme? Wenn Du es machst, dann mach es cool! Pulp Fiction 19

20 Wie löst Groovy Probleme? Java Plattform: Nahtlose Integration Zugriff von Java auf Groovy-Objekte Joint Compilation Java Code ist Groovy Code! 20

21 Wie löst Groovy Probleme? 21

22 Wie löst Groovy Probleme? Clean Code Intuitiv verständlich ist alles, was mit wenig Aufwand in kurzer Zeit richtig verstanden werden kann. Wikipedia 22

23 Wie löst Groovy Probleme? Clean Code reducing boiler plate code ausdrucksstarke Syntax Twitter: "Kommentare sind Deo für schlechten Code" 23

24 Eine ganz normale Java-Klasse package de.aonnet.groovy.start; public class JKontaktanfrage {

25 mit Imports import import import import java.util.arraylist; java.util.hashmap; java.util.list; java.util.map; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.tostringbuilder; import org.apache.commons.lang.builder.tostringstyle; import org.codehaus.groovy.util.hashcodehelper;

26 mit Feldern private Long id; private Long version; private String unternehmen; private String name; private String vorname; private String ort; private String postleitzahl; private String produkt; private String anliegen; private List<String> telefonnummern = new ArrayList<String>(); private Map<String, String> adressen = new HashMap<String, String>();

27 mit (nur) einem Konstruktor public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen;

28 Getter und Setter public Long getid() { return this.id; public void setid(long id) { this.id = id; public Long getversion() { return this.version; public void setversion(long version) { this.version = version; public String getunternehmen() { return this.unternehmen; public void setunternehmen(string unternehmen) { this.unternehmen = unternehmen; public String getname() { return this.name;

29 und mit public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

30 Das ist viel Quellcode! package de.aonnet.groovy.start; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.tostringbuilder; import org.apache.commons.lang.builder.tostringstyle; import org.codehaus.groovy.util.hashcodehelper; public class JKontaktanfrage { private private private private private private private private private private private Long id; Long version; String unternehmen; String name; String vorname; String ort; String postleitzahl; String produkt; String anliegen; List<String> telefonnummern = new ArrayList<String>(); Map<String, String> adressen = new HashMap<String, String>(); public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen; public Long getid() { return this.id; public void setid(long id) { this.id = id; public Long getversion() { return this.version; public void setversion(long version) { this.version = version; public String getunternehmen() { return this.unternehmen; public void setunternehmen(string unternehmen) { this.unternehmen = unternehmen; public String getname() { return this.name; public void setname(string name) { this.name = name; public String getvorname() { return this.vorname; public void setvorname(string vorname) { this.vorname = vorname; public String getort() { return this.ort; public void setort(string ort) { this.ort = ort; public String getpostleitzahl() { return this.postleitzahl; public void setpostleitzahl(string postleitzahl) { this.postleitzahl = postleitzahl; public String getprodukt() { return this.produkt; public void setprodukt(string produkt) { this.produkt = produkt; public String getanliegen() { return this.anliegen; public void setanliegen(string anliegen) { this.anliegen = anliegen; public List<String> gettelefonnummern() { return this.telefonnummern; public void settelefonnummern(list<string> telefonnummern) { this.telefonnummern = telefonnummern; public Map<String, String> get adressen() { return this. adressen; public void set adressen(map<string, String> adressen) { this. adressen = public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

31 Das ist viel Quellcode! package de.aonnet.groovy.start; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.tostringbuilder; import org.apache.commons.lang.builder.tostringstyle; import org.codehaus.groovy.util.hashcodehelper; public class JKontaktanfrage { private private private private private private private private private private private Long id; Long version; String unternehmen; String name; String vorname; String ort; String postleitzahl; String produkt; String anliegen; List<String> telefonnummern = new ArrayList<String>(); Map<String, String> adressen = new HashMap<String, String>(); public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen; public Long getid() { return this.id; public void setid(long id) { this.id = id; public Long getversion() { return this.version; JKontaktanfrage.java mv public void setversion(long version) { this.version = version; public String getunternehmen() { return this.unternehmen; public void setunternehmen(string unternehmen) { this.unternehmen = unternehmen; public String getname() { return this.name; public void setname(string name) { this.name = name; public String getvorname() { return this.vorname; public void setvorname(string vorname) { this.vorname = vorname; public String getort() { return this.ort; public void setort(string ort) { this.ort = ort; public String getpostleitzahl() { return this.postleitzahl; public void setpostleitzahl(string postleitzahl) { this.postleitzahl = postleitzahl; public String getprodukt() { return this.produkt; public void setprodukt(string produkt) { this.produkt = produkt; public String getanliegen() { return this.anliegen; public void setanliegen(string anliegen) { this.anliegen = anliegen; public List<String> gettelefonnummern() { return this.telefonnummern; public void settelefonnummern(list<string> telefonnummern) { this.telefonnummern = telefonnummern; public Map<String, String> get adressen() { return this. adressen; public void set adressen(map<string, String> adressen) { this. adressen = public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); JKontaktanfrage.groovy

32 Was haben wir da? Viel Gepäck! 32

33 Was kann gespart werden? Tuning! 33

34 Was kann gespart werden? package de.aonnet.groovy.start; import import import import java.util.arraylist; java.util.hashmap; java.util.list; java.util.map; import import import import org.apache.commons.lang.builder.equalsbuilder; org.apache.commons.lang.builder.tostringbuilder; org.apache.commons.lang.builder.tostringstyle; org.codehaus.groovy.util.hashcodehelper; public class JKontaktanfrage {... Standard-Imports: java.io.* java.lang.* java.net.* java.math.bigdecimal java.math.biginteger java.util.* groovy.lang.* groovy.util.* Public per Default: Klassen Methoden

35 Was kann gespart werden? private private private private private private private private private private private Long id; Long version; String unternehmen; String name; String vorname; String ort; String postleitzahl; String produkt; String anliegen; List<String> telefonnummern = new ArrayList<String>(); Map<String, String> adressen = new HashMap<String, String>(); ohne Modifier für Sichtbarkeit = Groovy-Property Semikolon ist optional

36 Was kann gespart werden? public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen; Konstruktor Default Konstruktor mit Named Parameter

37 Was kann gespart public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

38 Was kann gespart public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, kontaktanfrage.id).isequals(); Die Logik public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

39 Das ist Groovy!!! package de.aonnet.groovy.start; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.tostringbuilder; import org.apache.commons.lang.builder.tostringstyle; import org.codehaus.groovy.util.hashcodehelper; public class JKontaktanfrage { private private private private private private private private private private private Long id; Long version; String unternehmen; String name; String vorname; String ort; String postleitzahl; String produkt; String anliegen; List<String> telefonnummern = new ArrayList<String>(); Map<String, String> adressen = new HashMap<String, String>(); public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen; package de.aonnet.groovy.start import import import import org.apache.commons.lang.builder.equalsbuilder org.apache.commons.lang.builder.tostringbuilder org.apache.commons.lang.builder.tostringstyle org.codehaus.groovy.util.hashcodehelper class GKontaktanfrage { Long id Long version String unternehmen String name String vorname String ort String postleitzahl String produkt String anliegen List<String> telefonnummern = [] Map<String, String> adressen = [:] public Long getid() { return this.id; public void setid(long id) { this.id = id; public Long getversion() { return this.version; public void setversion(long version) { this.version = version; public String getunternehmen() { return this.unternehmen; public void setunternehmen(string unternehmen) { this.unternehmen = unternehmen; public String getname() { return this.name; public void setname(string name) { this.name = name; public String getvorname() { return this.vorname; public void setvorname(string vorname) { this.vorname = vorname; POGO GroovyBean public int hashcode() { HashCodeHelper.updateHash(HashCodeHelper.initHash(), id) public String getort() { return this.ort; public void setort(string ort) { this.ort = ort; public String getpostleitzahl() { return this.postleitzahl; public void setpostleitzahl(string postleitzahl) { this.postleitzahl = postleitzahl; boolean equals(def obj) { if (obj == null) { return false if (obj == this) { return true if (obj.getclass()!= this.getclass()) { return false new EqualsBuilder().append(this.id, obj.id).isequals() public String getprodukt() { return this.produkt; public void setprodukt(string produkt) { this.produkt = produkt; public String getanliegen() { return this.anliegen; public void setanliegen(string anliegen) { this.anliegen = anliegen; public List<String> gettelefonnummern() { return this.telefonnummern; public void settelefonnummern(list<string> telefonnummern) { this.telefonnummern = telefonnummern; public Map<String, String> get adressen() { return this. adressen; public void set adressen(map<string, String> adressen) { this. adressen = public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, kontaktanfrage.id).isequals(); String tostring() { ToStringBuilder.reflectionToString(this, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

40 Das ist Groovy!!! package de.aonnet.groovy.start; package de.aonnet.groovy.start import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.commons.lang.builder.equalsbuilder; import org.apache.commons.lang.builder.tostringbuilder; import org.apache.commons.lang.builder.tostringstyle; import org.codehaus.groovy.util.hashcodehelper; import import import import public class JKontaktanfrage { private private private private private private private private private private private Long id; Long version; String unternehmen; String name; String vorname; String ort; String postleitzahl; String produkt; String anliegen; List<String> telefonnummern = new ArrayList<String>(); Map<String, String> adressen = new HashMap<String, String>(); public JKontaktanfrage(Long id, Long version, String unternehmen, String name, String vorname, String ort, String postleitzahl, String produkt, String anliegen, List<String> telefonnummern, Map<String, String> adressen) { super(); this.id = id; this.version = version; this.unternehmen = unternehmen; this.name = name; this.vorname = vorname; this.ort = ort; this.postleitzahl = postleitzahl; this.produkt = produkt; this.anliegen = anliegen; this.telefonnummern = telefonnummern; this. adressen = adressen; class GKontaktanfrage { Long id Long version String unternehmen String name String vorname String ort String postleitzahl String produkt String anliegen List<String> telefonnummern = [] Map<String, String> adressen = [:] public Long getid() { return this.id; public void setid(long id) { this.id = id; public Long getversion() { return this.version; public void setversion(long version) { this.version = version; public String getunternehmen() { return this.unternehmen; public void setunternehmen(string unternehmen) { this.unternehmen = unternehmen; public String getname() { return this.name; public void setname(string name) { this.name = name; public String getvorname() { return this.vorname; public void setvorname(string vorname) { this.vorname = vorname; public String getort() { return this.ort; public void setort(string ort) { this.ort = ort; public String getpostleitzahl() { return this.postleitzahl; org.apache.commons.lang.builder.equalsbuilder org.apache.commons.lang.builder.tostringbuilder org.apache.commons.lang.builder.tostringstyle org.codehaus.groovy.util.hashcodehelper -73% LOC public int hashcode() { HashCodeHelper.updateHash(HashCodeHelper.initHash(), id) public void setpostleitzahl(string postleitzahl) { this.postleitzahl = postleitzahl; boolean equals(def obj) { if (obj == null) { return false if (obj == this) { return true if (obj.getclass()!= this.getclass()) { return false new EqualsBuilder().append(this.id, obj.id).isequals() public String getprodukt() { return this.produkt; public void setprodukt(string produkt) { this.produkt = produkt; public String getanliegen() { return this.anliegen; public void setanliegen(string anliegen) { this.anliegen = anliegen; public List<String> gettelefonnummern() { return this.telefonnummern; public void settelefonnummern(list<string> telefonnummern) { this.telefonnummern = telefonnummern; public Map<String, String> get adressen() { return this. adressen; public void set adressen(map<string, String> adressen) { this. adressen = public int hashcode() { return HashCodeHelper.updateHash(HashCodeHelper.initHash(), public boolean equals(object obj) { if (obj == null) { return false; if (obj == this) { return true; if (obj.getclass()!= this.getclass()) { return false; final JKontaktanfrage kontaktanfrage = (JKontaktanfrage) obj; return new EqualsBuilder().append(this.id, kontaktanfrage.id).isequals(); String tostring() { ToStringBuilder.reflectionToString(this, public String tostring() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

41 Das ist Groovy!!! LOC Java Groovy 21 Groovy > 1.8

42 Das ist Groovy ab Version 1.8!!! package de.aonnet.groovy.start import groovy.transform.equalsandhashcode class GKontaktanfrage { Long id Long version String unternehmen String name String vorname String ort String postleitzahl String produkt String anliegen List<String> telefonnummern = [] Map<String, String> adressen = [:] -86% LOC

43 Das ist Groovy!!! 43

44 Wie löst Groovy noch Probleme? 44

45 Wie löst Groovy noch Probleme? Ausdrucksstarke Syntax 45

46 Wie löst Groovy noch Probleme? Ausdrucksstarke Syntax Groovy Markup und Builder Closures Operatorüberladung Native Listen und Maps Gleitkommaoperationen Groovy DSL 46

47 Wie löst Groovy noch Probleme?

48 Wie löst Groovy noch Probleme? Groovy Markup und Builder

49 Ausdrucksstarke Syntax: Groovy Markup und Builder JSON Objekte in Java JSONObject object = new JSONObject(); object.put("firstname", "Don"); object.put("lastname", "Draper"); JSONArray array = new JSONArray(); JSONObject kid = new JSONObject(); kid.put("firstname", "Bobby"); kid.put("lastname", "Draper"); array.put(kid); kid = new JSONObject(); kid.put("firstname", "Sally"); kid.put("lastname", "Draper"); array.put(kid); object.put("kids", array);

50 Ausdrucksstarke Syntax: Groovy Markup und Builder Groovy: native markup support def root = new JsonBuilder().person { firstname 'Don' lastname 'Draper' kids ([ [ firstname: 'Bobby', LastName: 'Draper' ],[ firstname: 'Sally', LastName: 'Draper' ] ]) // creates a data structure made of maps (Json object) and lists (Json array) assert root instanceof Map

51 Ausdrucksstarke Syntax: Groovy Markup und Builder JSON Ant tasks HTML JMX W3C DOM XML FileTree Swing eigene Builder...

52 Wie löst Groovy noch Probleme? 52

53 Wie löst Groovy noch Probleme? Closures 53

54 Wie löst Groovy noch Probleme? Closures Was sind Closures? 54

55 Wie löst Groovy noch Probleme? Closures spezielle Funktionen 55

56 Wie löst Groovy noch Probleme? Closures spezielle Funktionen Was bewirken Closures? 56

57 Wie löst Groovy noch Probleme? Closures spezielle Funktionen Machen komplexe Programmieraufgaben elegant und lesbar! 57

58 Ausdrucksstarke Syntax: Closures def square = { x -> x * x

59 Ausdrucksstarke Syntax: Closures def square = { x -> x * x

60 Ausdrucksstarke Syntax: Closures def square = { x -> x * x assert square(4) == 16

61 Ausdrucksstarke Syntax: Closures def square = { x -> x * x def calculate(def x, def operator) { operator(x)

62 Ausdrucksstarke Syntax: Closures def square = { x -> x * x def calculate(def x, def operator) { operator(x) assert calculate(4, square) == 16

63 Ausdrucksstarke Syntax: Closures def square = { x -> x * x def calculate(def x, def operator) { operator(x) assert calculate(4, {y -> y ** y) == 256

64 Wie löst Groovy noch Probleme? 64

65 Wie löst Groovy noch Probleme? Operatorüberladung 65

66 Ausdrucksstarke Syntax: Operatorüberladung a == b

67 Ausdrucksstarke Syntax: Operatorüberladung a.equals(b) a == b a.compareto(b) == 0

68 Ausdrucksstarke Syntax: Operatorüberladung a == b 68

69 Ausdrucksstarke Syntax: Operatorüberladung a == b a.equals(b) oder a.compareto(b) == 0 a!= b! a.equals(b) a a a a a a.compareto(b) a.compareto(b) a.compareto(b) a.compareto(b) a.compareto(b) <=> > >= < <= b b b b b > >= < <=

70 Ausdrucksstarke Syntax: Operatorüberladung a + b a - b a * b a ** b a / b a % b a b a & b a ^ b a++ or ++a a-- or --a a[b] a[b] = c a << b a >> b switch(a) { case(b) : ~a -a +a a.plus(b) a.minus(b) a.multiply(b) a.power(b) a.div(b) a.mod(b) a.or(b) a.and(b) a.xor(b) a.next() a.previous() a.getat(b) a.putat(b, c) a.leftshift(b) a.rightshift(b) b.iscase(a) a.bitwisenegate() a.negative() a.positive()

71 Ausdrucksstarke Syntax: Operatorüberladung Download mit Groovy: String url = ' new File('pic.jpg').withOutputStream { it << new BufferedInputStream(url.toURL().openStream())

72 Ausdrucksstarke Syntax: Operatorüberladung String url = ' new File('pic.jpg').withOutputStream { it << new BufferedInputStream(url.toURL().openStream()) 72

73 Wie löst Groovy noch Probleme? 73

74 Wie löst Groovy noch Probleme? Native Listen und Maps 74

75 Ausdrucksstarke Syntax: Native Listen [1, 2, 3, 4] == (1..4)

76 Ausdrucksstarke Syntax: Native Listen [1, 2, 3] << 1 == [1, 2, 3, 1] [1, 2, 3] * 2 == [1, 2, 3, 1, 2, 3]

77 Ausdrucksstarke Syntax: Native Listen [1, 2, 3, 1].count(1) == 2 [1, 2, 3, 4].sum() == 10 [1, 2, 3].reverse() == [3, 2, 1]

78 Ausdrucksstarke Syntax: Native Listen [1, 2, 3].collect { it + 3 == [4, 5, 6] [4, 2, 1, 3].findAll {it % 2 == 0 == [4, 2]

79 Ausdrucksstarke Syntax: Native Maps def m = [a:'a', b:'b', c:'c'] m.a == 'A' m.get('a') == 'A'

80 Ausdrucksstarke Syntax: Native Maps def m = [a:'a', b:'b', c:'c'] def p = new StringBuffer() m.each{ key, value -> p << "$key: $value; " p.tostring() == 'a: A; b: B; c: C; '

81 Wie löst Groovy noch Probleme? 81

82 Wie löst Groovy noch Probleme? GLEITKOMMAOPERATIONEN 82

83 Ausdrucksstarke Syntax: Gleitkommaoperationen 1.4 instanceof BigDecimal 1.7 == d == 1.3d + 0.4d

84 Ausdrucksstarke Syntax: Gleitkommaoperationen 1/2 == new java.math.bigdecimal('0.5') // y = 2 x^3 + 5 x^2-3 x + 2 def x = 5.0 def y = 2.0*x** *x**2-3.0*x y ==

85 Ausdrucksstarke Syntax: Gleitkommaoperationen 1/2 == new java.math.bigdecimal('0.5') // y = 2 x^3 + 5 x^2-3 x + 2 def x = 5.0 def y = 2.0*x** *x**2-3.0*x y ==

86 Wie löst Groovy noch Probleme? 86

87 Wie löst Groovy noch Probleme? DSL (domain-specific language) 87

88 Ausdrucksstarke Syntax: DSL Optionale Klammern und Semikolon move(left); move left

89 Ausdrucksstarke Syntax: DSL Metaprogramming Integer.metaClass.getPills = { -> "$delegate Pills" assert 2.pills == '2 Pills'

90 Ausdrucksstarke Syntax: DSL Groovy DSL take 2.pills of niaxilin after 6.hours 90

91 Los gehts! Live Coding 91

92 Rosige Aussichten The Groovy programming language is sustained & led by SpringSource and the Groovy Community 92

93 Rosige Aussichten The Groovy programming language is sustained & led by SpringSource and the Groovy Community 93

94 Rosige Aussichten FIRED! 94

95 Rosige Aussichten APACHE INCUBATOR 95

96 Rosige Aussichten! 96

97 Episode II The Holy Grail 97

98 Was ist Grails? 98

99 Was ist Grails? Die Lösung aller Probleme? 99

100 Was ist Grails?... ist ein Web Application Framework. angelehnt an Ruby On Rails seit 2006 aktuelle Version

101 Was will Grails? Java Web Entwicklung einfach, schnell und robust 101

102 Wie löst Grails Probleme?

103 Wie löst Grails Probleme? Bewährte Technologien Full Stack Framework

104 Bewährte Technologien - Full Stack ORM-Layer GORM (Hibernate) transaktionaler Service Layer (Spring Transactions) Controller (Spring MVC) Groovy Server Pages GSP Layout mit Sitemash DI (Spring)

105 Bewährte Technologien Grails 3.0 Neue Basis: Spring Boot Neues Buildsystem: Gradle Application Profiles Redesigned API

106 Scaffolding

107 Scaffolding

108 Scaffolding

109 Wie löst Grails noch Probleme? 109

110 Wie löst Grails noch Probleme? Convention over Configuration 110

111 Wie löst Grails noch Probleme? Convention over Configuration 111 Don't Repeat Yourself

112 Convention over Configuration 112

113 Convention over Configuration Projektstruktur 113

114 Convention over Configuration Projektstruktur Namenskonventionen 114

115 Convention over Configuration Projektstruktur Namenskonventionen Unified Configuration 115

116 Don't Repeat Yourself 116

117 Don't Repeat Yourself Unified Configuration 117

118 Don't Repeat Yourself Unified Configuration GORM constraints + Validation 118

119 Don't Repeat Yourself Unified Configuration GORM constraints + Validation Taglibs + Templates 119

120 Don't Repeat Yourself Unified Configuration GORM constraints + Validation Taglibs + Templates Plugins 120

121 Grails Plugins 121

122 Grails Plugins umfangreicher Plugin Mechanismus Grails Central Plugins Repository Grails 2: Plugins 122

123 Grails Plugins umfangreicher Plugin Mechanismus Grails Bintray Plugins Repository Grails 3: 35 Plugins 123

124 Grails Plugins - Beispiele Security Plugin Commentable Plugin Searchable Plugin Grails-UI Plugin Export Plugin JSON RESTful API for GORM Plugin MongoDB, Hadoop, Neo4j

125 Grails weitere Features Detached Criteria and Where Queries Interactive Mode and DBConsole Reloading Agent Multiple Data Sources Support

126 Rosige Aussichten FIRED! Problemlöser: Groovy und Grails 2 Problemlöser: Groovy und Grails

127 Rosige Aussichten Grails 3 Grails 3.0 is a complete ground up rewrite of Grails and introduces new concepts and components for many parts of the framework

128 Rosige Aussichten Grails 3 Kompatibel zu Spring Boot Features von Spring Boot in Grails Features von Grails in Spring Boot 128

129 Epilogue Why? (ii) 129

130 Was sind Groovy und Grails? 130

131 Was sind Groovy und Grails? RAPID, DYNAMIC, ROBUST 131

132 Anwendungsfälle 132 Dawn of the Large Hadron Collider, Credit & Copyright: Maximilien Brice, CERN

133 Anwendungsfälle Groovy Listen+Maps POJOs XML/JSON Generierung (Templating) Testing Filehandling Gleitkommaoperationen Scripting 133 Dawn of the Large Hadron Collider, Credit & Copyright: Maximilien Brice, CERN

134 Anwendungsfälle Groovy Grails Listen+Maps POJOs XML/JSON Generierung (Templating) Testing Filehandling Gleitkommaoperationen Scripting eignet sich grundsätzlich für jede Art von Web-Anwendung! 134 Dawn of the Large Hadron Collider, Credit & Copyright: Maximilien Brice, CERN

135 Rosige Aussichten 135

136 The Groovy Universe Rosige Aussichten 136

137 The Groovy Universe Rosige Aussichten Gradle gpars Spock geb 137

138 The Groovy Universe Rosige Aussichten GroovyFX GVM GContracts Rapack gealyk GS Vert.X CRaSH GroovyServ Netflix Asgard Netflix Zuul Griffon Groovy in ES 138

139 Was geben uns Groovy und Grails?

140 Was geben uns Groovy und Grails? Clean Code

141 Was geben uns Groovy und Grails? Clean Code easy to build

142 Was geben uns Groovy und Grails? Clean Code easy to build easy to read

143 Was geben uns Groovy und Grails? Clean Code easy to build easy to read easy to maintrain

144 Was geben uns Groovy und Grails? Vincent sind wir glücklich? Ja wir sind glücklich!! Pulp Fiction

145 Bildnachweis 1 S S S S S S S S S S S S S

146 Bildnachweis 2 S S S S S S S S S S S S S

147 Bildnachweis 3 S S S S Russian_honor_guard_at_Tomb_of_the_Unknown_Soldier,_Alexander_Garden_welcomes_Michael_G._Mullen_ _2.jpg S S S S S S135 S S

148 The End 2 Probemlöser: Groovy und Grails 149

Groovy und CouchDB. Ein traumhaftes Paar. Thomas Westphal

Groovy und CouchDB. Ein traumhaftes Paar. Thomas Westphal Groovy und CouchDB Ein traumhaftes Paar Thomas Westphal 18.04.2011 Herzlich Willkommen Thomas Westphal Software Engineer @ adesso AG Projekte, Beratung, Schulung www.adesso.de thomas.westphal@adesso.de

Mehr

Groovy on Grails. Informatik-Seminar WS06/07. Alexander Treptow. Groovy on Grails Alexander Treptow (minf2622) 1

Groovy on Grails. Informatik-Seminar WS06/07. Alexander Treptow. Groovy on Grails Alexander Treptow (minf2622) 1 Groovy on Grails Informatik-Seminar WS06/07 Alexander Treptow Groovy on Grails Alexander Treptow (minf2622) 1 Übersicht Groovy on Grails Projektstruktur Controllers Views & Layout Dynamic Tag Libraries

Mehr

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011 Weiterführende Themen zu Internet- und WWW-Technologien 06. Juni 2011 Übersicht 1 Was ist? 2 Übersicht über 3 MVC-Konzept 4 Groovy Beispiele 5 Tutorial: Kleiner Notizblock Web Application Framework Übersicht

Mehr

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk Workshop Java Webentwicklung Einführung in Hibernate Ulrich Stärk Ablauf Montag bis Donnerstag 09:00 Uhr s.t. Beginn, bis ca. 17:00 Uhr 1 Stunde Mittagspause Donnerstag Experiment Aufzeichnung der Programmiertätigkeit

Mehr

DOAG 2012 Development Stefan Glase am Grails Die Suche ist vorbei

DOAG 2012 Development Stefan Glase am Grails Die Suche ist vorbei Grails - Die Suche ist vorbei DOAG 2012 Development Stefan Glase am 14.06.2012 OPITZ CONSULTING GmbH 2011 Folie 1 Wer bin ich? Software-Entwickler Java EE, Spring, Groovy, Grails Trainer und Coach Methoden

Mehr

Bekannte Tools in einem agilen Ansatz. Frank Schwichtenberg SourceTalkTage 2013 Göttingen, 2.10.2013

Bekannte Tools in einem agilen Ansatz. Frank Schwichtenberg SourceTalkTage 2013 Göttingen, 2.10.2013 Bekannte Tools in einem agilen Ansatz Frank Schwichtenberg SourceTalkTage 2013 Göttingen, 2.10.2013 Vorher Lange Planungszeiten und Releasezyklen Manche Features brauchten lange und wurden nicht gebraucht

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

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

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

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

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

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

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

Aufbau einer Web 2.0 Community mit Grails. DOAG Konferenz + Ausstellung 2010 Nicole Hoock, esentri consulting GmbH

Aufbau einer Web 2.0 Community mit Grails. DOAG Konferenz + Ausstellung 2010 Nicole Hoock, esentri consulting GmbH Aufbau einer Web 2.0 Community mit Grails DOAG Konferenz + Ausstellung 2010 Nicole Hoock, esentri consulting GmbH Agenda Firmenvorstellung Einführung ins Thema Grundlagen Live-Vorführung Ausblick & Erfahrungswerte

Mehr

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Testen von graphischen Benutzeroberflächen. 26. Juni 2013 Testen von graphischen Benutzeroberflächen 26. Juni 2013 Überblick Testarten Methoden-, Klassen-, Komponenten-, Systemtests Motivation für automatisches Testen von graphischen Benutzeroberflächen Entwicklungsprinzipien

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

Grails Ein modernes MVC Framework zur Erstellung von Webanwendungen Gabriel Münch

Grails Ein modernes MVC Framework zur Erstellung von Webanwendungen Gabriel Münch Grails Ein modernes MVC Framework zur Erstellung von Webanwendungen = + + ( 1 ) Grundlagen Geschichte von Groovy und Grails Groovy Warum Groovy? Warum Grails? Geschichte von Groovy und Grails 2003 von

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

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

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

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

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

Ich liebe Java && Ich liebe C# Rolf Borst

Ich liebe Java && Ich liebe C# Rolf Borst Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String

Mehr

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 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

Mehr

Stefan Roock stefan.roock@akquinet.de. Bernd Schiffer bernd.schiffer@akquinet.de. Beispiel Grails

Stefan Roock stefan.roock@akquinet.de. Bernd Schiffer bernd.schiffer@akquinet.de. Beispiel Grails Stefan Roock stefan.roock@akquinet.de Bernd Schiffer bernd.schiffer@akquinet.de Beispiel Grails Brauchen wir neue Technologien für agile Entwicklung? Herzlich Willkommen! Stefan Roock akquinet AG, Hamburg

Mehr

CamelCaseCon 2011 Vortrag von Stefan Glase am 07.09.2011. Statische Code-Analyse für Groovy & Grails mit CodeNarc

CamelCaseCon 2011 Vortrag von Stefan Glase am 07.09.2011. Statische Code-Analyse für Groovy & Grails mit CodeNarc Statische Code-Analyse für Groovy & Grails mit CodeNarc CamelCaseCon 2011 Vortrag von Stefan Glase am 07.09.2011 OPITZ CONSULTING GmbH 2011 Folie 1 Stefan Glase, OPITZ CONSULTING Software-Entwickler Java

Mehr

ECLIPSE PLUG-IN. Redwood Anwendertage 2015

ECLIPSE PLUG-IN. Redwood Anwendertage 2015 ECLIPSE PLUG-IN Redwood Anwendertage 2015 Übersicht Was ist Eclipse? Welche Voraussetzungen benötige ich? Wie wird das Plug-In installiert Welche Konfigurationen sind sinnvoll? Tipps & Tricks Was ist Eclipse

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

Selbststudium OOP4 Auftrag

Selbststudium OOP4 Auftrag Selbststudium OOP4 Auftrag Kapitel 3.6 1. Wie deklarieren Sie eine Referenzvariable? Mit new z.b. Student studenta = new Stundent( Meier ); 2. Zeichnen Sie das Objektdiagramm zum BlueJ Picture Projekt

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

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung. Hochschule Harz Programmierung1 Tutorial 11: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Sortieren und generische Klassen Versuchsziele Kenntnisse

Mehr

WebPoint. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen. Maria C. Raabe Daniel Woithe Vorlage: Torsten Walter. 16.

WebPoint. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen. Maria C. Raabe Daniel Woithe Vorlage: Torsten Walter. 16. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen Maria C. Raabe Daniel Woithe Vorlage: Torsten Walter 16. Oktober 2006 Gliederung Datenverwaltung 1 Datenverwaltung 2 Problemstellung Java

Mehr

Zählen von Objekten einer bestimmten Klasse

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 --

Mehr

Struts 2 Das Imperium schlägt zurück?

Struts 2 Das Imperium schlägt zurück? Struts 2 Das Imperium schlägt zurück? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Tobias Kieninger www.oio.de info@oio.de Java, XML und Open Source seit 1998 ) Software

Mehr

SEMINAR Modifikation für die Nutzung des Community Builders

SEMINAR Modifikation für die Nutzung des Community Builders 20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen

Mehr

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 { Hochschule Harz Programmierung1 Aufgabe 10: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Hashing und Generische Klassen Versuchsziele Kenntnisse

Mehr

XMLBeam. Einfach XML-Handling. W3L AG solutions@w3l.de

XMLBeam. Einfach XML-Handling. W3L AG solutions@w3l.de 1 XMLBeam Einfach XML-Handling W3L AG solutions@w3l.de 2015 2 Inhaltsverzeichnis Was ist XMLBeam XML lesen XML schreiben Weitere Features zurück 3 Was ist XMLBeam Java Library ohne Abhängigkeiten Vereinfacht

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen Klaus-Dieter Walter SSV Software Systems GmbH Dünenweg 5 D-30419 Hannover www.ssv-embedded.de kdw@ssv-embedded.de

Mehr

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005 Praktikum Datenbanksysteme Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005 Tomcat-Installation $JAVA_HOME (z.b. /home/dbp00/j2sdk1.4.2) $CATALINA_HOME (/home/dbp00/jakarta-tomcat-4) Skripte zum Start/Stop:

Mehr

Programmieren Tutorium

Programmieren Tutorium Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,

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

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

IntelliJ IDEA. Gliederung. Was ist IntelliJ IDEA? Lizenzmodell Warum IntelliJ einsetzen? IntelliJ und Eclipse Demo. Blick über den Eclipse-Tellerrand

IntelliJ IDEA. Gliederung. Was ist IntelliJ IDEA? Lizenzmodell Warum IntelliJ einsetzen? IntelliJ und Eclipse Demo. Blick über den Eclipse-Tellerrand IntelliJ IDEA Blick über den Eclipse-Tellerrand Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de info@oio.de Gliederung 2007 Orientation in Objects GmbH IntelliJ IDEA:

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

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

Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon

Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon Ringvorlesung Softwareentwicklung in der industriellen Praxis TU Dresden 14. Dezember 2011 Die i.s.x. Software GmbH & Co. KG Junges,

Mehr

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Fortgeschrittenes Programmieren mit Java. Test Driven Development Fortgeschrittenes Programmieren mit Java Test Driven Development Test getriebene Programmierung Benedikt Boeck Hochschule für Angewandte Wissenschaften Hamburg 6. November 2009 B. Boeck (HAW Hamburg) Test

Mehr

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web Webseiten sind keine Gemälde Webkrauts Die Initiative für die Webkrauts ging von einem Blogeintrag im August 2005 aus. Nach dem Aufruf fanden sich innerhalb von etwa drei Tagen über 60 Interessierte zusammen.

Mehr

Software Engineering II

Software Engineering II Software Engineering II Codegenerierung für den SmartIO Editor mit der Modeling Workflow Engine Wintersemester 10/111 Fachgebiet Software Engineering Albert Zündorf / Wiederholung Bisher im Laufe des Semesters

Mehr

Klassendefinitionen verstehen

Klassendefinitionen verstehen Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen

Mehr

Praktische Übung 'JUnit-Test'

Praktische Übung 'JUnit-Test' Praktische Übung 'JUnit-Test' Starten Sie für die folgende Übung Eclipse und laden Sie das Testprojekt von folgender URL: http://pi.informatik.uni-siegen.de/berlik/swt/currency.zip Darin ist die Klasse

Mehr

Java Frameworks im Vergleich - ADF vs. Grails vs. Spring

Java Frameworks im Vergleich - ADF vs. Grails vs. Spring Java Frameworks im Vergleich - ADF vs. Grails vs. Spring Frank Szilinski esentri software GmbH Karlsruhe Schlüsselworte: ADF, Java, JEE, JSF, Grails, Spring, Open Source, Rapid Application Development

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

Software Engineering II

Software Engineering II Software Engineering II Wintersemester 12/13 Fachgebiet Software Engineering Installation der MWE Plugins Von der Juno Update Site installieren (falls noch nicht vorhanden): MWE SDK Xpand SDK 2 TFD Projekt

Mehr

AJAX Implementierung mit Joomla!

AJAX Implementierung mit Joomla! Joomla! DAY TM AUSTRIA 2015 AJAX Implementierung mit Joomla! Inhalt AJAX Implementierung mit Joomla! Inhalt Einleitung Was ist AJAX und wie funktioniert es Joomla! & AJAX AJAX in Templates mit Komponenten

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Extending tl_member. Andreas Fieger (@fiedschmuc) 2015-10-08

Extending tl_member. Andreas Fieger (@fiedschmuc) 2015-10-08 Extending tl_member Andreas Fieger (@fiedschmuc) 2015-10-08 Übersicht Was wollen wir? Wie könnten wir es erreichen? Aufwand/Folgekosten? Was wollen wir? Felder in der Mitgliederverwaltung hinzufügen (z.b.

Mehr

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder

Mehr

Software Entwicklung II (SS12)

Software Entwicklung II (SS12) Prof. Dr. P. Liggesmeyer Dipl.-Inf. K. Bizik M.Sc. K. Nehring TU Kaiserslautern Fachbereich Informatik AG Software Engineering: Dependability Software Entwicklung II (SS12) Übung 5 Ausgabe: 04.06.2012

Mehr

Django - ein Python Web-Framework

Django - ein Python Web-Framework 31. Mai 2011 Inhaltsverzeichnis 1 Überblick Was ist Django Merkmale Anforderungen 2 MVC im Detail Model Controller View 3 Live-Demo 4 Wie geht es weiter? Was ist Django Was ist Django? quelloffenes Web-Framework

Mehr

Architektur des agimatec-validation Frameworks

Architektur des agimatec-validation Frameworks Development : Implementierung Validierungskonzept (Dokumentation) This page last changed on Apr 03, 2008 by roman.stumm. Architektur des agimatec-validation Frameworks Generierung der Metainformationen

Mehr

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. 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

Mehr

Grails Der Gral der Webentwicklung

Grails Der Gral der Webentwicklung Grails Der Gral der Webentwicklung Stefan Roock stefan.roock@akquinet.de Bernd Schiffer bernd.schiffer@akquinet.de 03.07.2008 JFS 1 2 FAIL! 2 3 FAIL! 3 4 4 FAIL!5 5 6 6 7 7 8 8 9 9 10 FAIL! 10 11 12 11

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Ergebnisse. Umfrage 567537. Kurz-Statistiken Umfrage 567537 'Feedback und Entertain 2.0'

Ergebnisse. Umfrage 567537. Kurz-Statistiken Umfrage 567537 'Feedback und Entertain 2.0' Ergebnisse Umfrage 567537 Anzahl der Datensätze in dieser Abfrage: 386 Gesamtzahl der Datensätze dieser Umfrage: 386 Anteil in Prozent: 100.00% Seite 1 / 41 Feld-Zusammenfassung für Fortsetzung Ist das

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de JSP Grundlagen JEE Vorlesung Teil 5 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept Model-View-Controller mit JSPs JSP Expression Language EL Literale

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

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Arrays Fortgeschrittene Verwendung

Arrays Fortgeschrittene Verwendung Arrays Fortgeschrittene Verwendung Gilbert Beyer und Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik http://www.pst.ifi.lmu.de/lehre/wise-11-12/infoeinf WS11/12 Arrays: Wiederholung

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

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

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

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

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

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap http://wwwiuk.informatik.uni-rostock.de http://www.internet-prof.de

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap http://wwwiuk.informatik.uni-rostock.de http://www.internet-prof.de Rails Ruby on Rails Ajax on Rails Who is who? Rails Ziel: Framework für Web (2.0) Anwungen Beschleunigung der Entwicklung Konzept des Agilen Programmierens Ruby Interpretierte Sprache Rails Integrationen

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

Typumwandlungen bei Referenztypen

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

Mehr

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform 0. Benötigt werden folgende Softwarepakete:.NET Framework Software Development Kit (http://www.microsoft.com/downloads/details.aspx?familyid=4fe5bdb5-c7a7-4505-9927-2213868a325b&displaylang=en)

Mehr

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Paketdeklaration Paketdeklaration package Bezeichner ; Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Ein

Mehr

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Testen von graphischen Benutzeroberflächen. 24. Juni 2015 Testen von graphischen Benutzeroberflächen 24. Juni 2015 Überblick Motivation für das automatische Testen von graphischen Benutzeroberflächen Entwicklungsprinzipien für GUIs Capture / Replay Testmethode

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-12-13/infoeinf WS12/13 Arrays: Wiederholung Ein Array ist ein Tupel von Elementen gleichen

Mehr

Vortrag SASS Funktionen #ck2016. Was ist SASS?

Vortrag SASS Funktionen #ck2016. Was ist SASS? Vortrag SASS Funktionen #ck2016 Was ist SASS? Syntactically Awesome Stylesheets = Meta-Sprache DRY Don't Repeat Yourself Der Vorteil von SASS liegt in den zusätzlichen Features die es mit sich bringt,

Mehr

C O C O O N. Wo ist Cocoon in die Apache Projekte einzureihen?

C O C O O N. Wo ist Cocoon in die Apache Projekte einzureihen? C O C O O N ein Web-Framework der Apache Software Foundation http://www.apache.org Wo ist Cocoon in die Apache Projekte einzureihen? Apache Server sehr leistungsfähiger HTTP-Server Tomcat Server Referenzimplementierung

Mehr

Open Source. Hendrik Ebbers 2015

Open Source. Hendrik Ebbers 2015 Open Source Hendrik Ebbers 2015 Open Source About me Hendrik Ebbers Lead of JUG Dortmund Java Architect @ Canoo Engineering AG JavaOne Rockstar, Java Expert Group Member Speaker, blogger & author Engineering

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

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy Über Ant und Maven zu SBT und Gradle Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy 07.04.2011 Speaker Andreas Hartmann [hartmann@adesso.de] Principal Software Engineer

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 mit Python

Algorithmen mit Python Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World

Mehr

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Eclipse Equinox als Basis für Smart Client Anwendungen Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Übersicht Definition / Architektur Smart Client Smart Client mit RCP / Equinox Gesamtfazit

Mehr

Vererbung & Schnittstellen in C#

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

Mehr

Grails - schneller zum Ziel - für Enterprise-Applikationen? Tobias Kraft, exensio GmbH

Grails - schneller zum Ziel - für Enterprise-Applikationen? Tobias Kraft, exensio GmbH Grails - schneller zum Ziel - für Enterprise-Applikationen? Tobias Kraft, exensio GmbH Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise Applikationen mit Grails Wo ist Grails

Mehr

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel ralf_gitzel@hotmail.de

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel ralf_gitzel@hotmail.de JSP JSTL JEE Vorlesung Teil 6 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Wiederholung / Vertiefung JSTL Grundlagen JSTL Basisbefehle Templates über JSTL

Mehr

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

1.2 Attribute und Methoden Aufbau einer Java-Klasse: Aufbau einer Java-Klasse: public class Quadrat { int groesse; int xposition; String farbe; boolean istsichtbar; public void sichtbarmachen() { istsichtbar = true; public void horizontalbewegen(int distance){

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

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

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

Mehr

Rene Schneider GEBIT Solutions GmbH. Integrity - ein innovatives Tool zur Acceptance-Test-Automatisierung

Rene Schneider GEBIT Solutions GmbH. Integrity - ein innovatives Tool zur Acceptance-Test-Automatisierung Rene Schneider GEBIT Solutions GmbH Integrity - ein innovatives Tool zur Acceptance-Test-Automatisierung Über mich Über mich Software Consultant bei GEBIT Solutions Über mich Software Consultant bei GEBIT

Mehr

Vorkurs C++ Programmierung

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:

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