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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

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

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

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

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

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

Course Management System. mit Groovy & Grails

Course Management System. mit Groovy & Grails Course Management System mit Groovy & Grails DAS PROJEKT 1 FG Meinel Lehre (bisher) Student Features : - Einloggen mit Hilfe von OpenID - Anmelden für verschiedene Übungsgruppen - Übungsgruppe wechseln

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

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung Die Klasse Object. Die Klasse Object 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige

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

Groovy für Java Programmierer. 20. Juli Stefan Kolatzki

Groovy für Java Programmierer. 20. Juli Stefan Kolatzki Groovy für Java Programmierer 20. Juli 2015 Stefan Kolatzki Übersicht Karriere bei LINEAS Groovy für Java Programmierer Closures Literale, Operatoren, Operatoren überladen Extensions Compilerverhalten

Mehr

DOAG Konferenz 2011 Stefan Glase & Michael Stähler am Grails Die Suche ist vorbei

DOAG Konferenz 2011 Stefan Glase & Michael Stähler am Grails Die Suche ist vorbei Grails - Die Suche ist vorbei DOAG Konferenz 2011 Stefan Glase & Michael Stähler am 17.11.2011 OPITZ CONSULTING GmbH 2011 Folie 1 Michael Stähler Stefan Glase Wer sind wir? Softwareentwickler Java, Spring,

Mehr

Groovy Einführung groovy.codehaus.org

Groovy Einführung groovy.codehaus.org Groovy Einführung groovy.codehaus.org Dynamische Skriptsprache in der Java Umgebung Prof. Dr. Georg Beier Ein besseres Java? Javas statische Typisierung hat auch Nachteile Teilweise strukturell gleiche

Mehr

Spock und Geb (WebDriver) Wie können freie Werkzeuge zum strukturierten Testen von Web-Applicationen eingesetzt werden?

Spock und Geb (WebDriver) Wie können freie Werkzeuge zum strukturierten Testen von Web-Applicationen eingesetzt werden? Stuttgarter Test-Tage 21. & 22. März 2013 Spock und Geb (WebDriver) Wie können freie Werkzeuge zum strukturierten Testen von Web-Applicationen eingesetzt werden? Christian Baranowski Willkommen Christian

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen 5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Java wird Groovy. Eine Einführung in die neue, dynamische Programmiersprache für das Java-Ökosystem. Christof Vollrath, taobits.

Java wird Groovy. Eine Einführung in die neue, dynamische Programmiersprache für das Java-Ökosystem. Christof Vollrath, taobits. Java wird Groovy Eine Einführung in die neue, dynamische Programmiersprache für das Java-Ökosystem Christof Vollrath, taobits.net 23C3, 12/2006 Was ist Groovy? Neue, dynamische Sprache für die Java-VM.

Mehr

Aufbau einer Web 2.0 Community mit Grails

Aufbau einer Web 2.0 Community mit Grails Aufbau einer Web 2.0 Community mit Grails Nicole Hoock esentri consulting GmbH Karlsruhe Schlüsselworte: Web 2.0, Grails, Community, Social Network, Java, Open Source, Rapid Application Development Einleitung

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

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

Ruby on Rails. Thomas Baustert Ralf Wirdemann www.b-simple.de. Alternative zur Web-Entwicklung mit Java? 27.06.2005 www.b-simple.

Ruby on Rails. Thomas Baustert Ralf Wirdemann www.b-simple.de. Alternative zur Web-Entwicklung mit Java? 27.06.2005 www.b-simple. Ruby on Rails Alternative zur Web-Entwicklung mit Java? Thomas Baustert Ralf Wirdemann www.b-simple.de 27.06.2005 www.b-simple.de 1 Überblick Was ist Ruby on Rails? Weblog Demo Rails Komponenten Controller,

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

Groovy und Grails. Gliederung. Groovy Grails Live Session Wenn noch Zeit ist Quellen. Version: 1.0. Orientation in Objects GmbH

Groovy und Grails. Gliederung. Groovy Grails Live Session Wenn noch Zeit ist Quellen. Version: 1.0. Orientation in Objects GmbH Groovy und Grails Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de info@oio.de Gliederung Groovy Grails Live Session Wenn noch Zeit ist Quellen 2007 Orientation in

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI Ausdrücke in Scala Funktionale Programmierung Christoph Knabe FB VI 17.10.2014 Inhalt Einfache Ausdrücke Infix-Notation für Methodenaufruf Sonderzeichen in Bezeichnern Schlüsselwörter Konstanten Variablen

Mehr

Ruby on Rails. Geschichte Ruby Rails Live Demo

Ruby on Rails. Geschichte Ruby Rails Live Demo Ruby on Rails Geschichte Ruby Rails Live Demo Seite 1 Geschichte Ruby "Vater": Yukihiro matz Matsumoto 1993: Beginn der Arbeiten an Rubys 1995: 1. public Release von Ruby 1996: erlangt "Akzeptanz der Massen"

Mehr

Enterprise 2.0 Portale mit Grails. Geht das?

Enterprise 2.0 Portale mit Grails. Geht das? Enterprise 2.0 Portale mit Grails. Geht das? Java Forum Stuttgart 04.07.2013 Manuel Breitfeld, Tobias Kraft Redner IT-Berater bei exensio GmbH (Karlsruhe) Mehrere Jahre Erfahrung mit der Umsetzung von

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

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

Kategorisierung von Web-Frameworks im Java-Umfeld

Kategorisierung von Web-Frameworks im Java-Umfeld Unüberschaubare Auswahl im Alltag 1/11/2011 Seite 2 Unüberschaubare Auswahl bei Web-Frameworks 1/11/2011 Seite 3 Viele gute Artikel in Fachzeitschriften 1/11/2011 Seite 4 Flame War unerwünscht, aber überall

Mehr

DSL am Beispiel Groovy - Kommunikation zwischen Entwickler und Kunde? Bernd Schiffer bernd.schiffer@akquinet.de

DSL am Beispiel Groovy - Kommunikation zwischen Entwickler und Kunde? Bernd Schiffer bernd.schiffer@akquinet.de DSL am Beispiel Groovy - Kommunikation zwischen Entwickler und Kunde? Bernd Schiffer bernd.schiffer@akquinet.de Herzlich Willkommen! Bernd Schiffer akquinet AG Softwareentwickler XP, Scrum, TDD, Groovy,

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Groovy 3 und das neue Meta Object Protocol in Beispielen

Groovy 3 und das neue Meta Object Protocol in Beispielen Groovy 3 und das neue Meta Object Protocol in Beispielen Jochen Theodorou, GoPivtoal Germany GmbH @JochenTheodorou 1 ...natürlich in viel zu wenigen Beispielen Jochen Theodorou, GoPivtoal Germany GmbH

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

Programmieren 2 Übung Semesterwoche 6

Programmieren 2 Übung Semesterwoche 6 Programmieren 2 Übung Semesterwoche 6 1. Aufgabe: Klasse Cube public class Cube implements Comparable protected int number; Nummer des Kubus int s1, s2, s3; Die 3 Seiten des Kubus. public static

Mehr

WIRTSCHAFTSINFORMATIK

WIRTSCHAFTSINFORMATIK Westfälische Wilhelms-Universität Münster A platform for professional model-driven software development. Präsentation im Rahmen des Seminars Software Engineering WS 08/09 Jan Schürmeier Jan.Schuermeier@gmx.de

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

Multimedia im Netz Wintersemester 2012/13

Multimedia im Netz Wintersemester 2012/13 Multimedia im Netz Wintersemester 2012/13 Übung 10 Ludwig-Maximilians-Universität München Multimedia im Netz WS 2012/13 - Übung 10-1 Lösung zu Übungsblatt 08 Ludwig-Maximilians-Universität München Multimedia

Mehr

Wie entwerfe ich ein Programm?

Wie entwerfe ich ein Programm? Wie entwerfe ich ein Programm? Welche Objekte brauche ich? Flussdiagramme für Programmablauf Vorcode Testcode Hauptcode Wir spielen Lotto! Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 5 +

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

Feelin Groovy? Groovy Eine Skriptsprache mit Bezug zu Java und Ant. Frank Schnitzer. Hochschule Furtwangen FB Informatik. 15.

Feelin Groovy? Groovy Eine Skriptsprache mit Bezug zu Java und Ant. Frank Schnitzer. Hochschule Furtwangen FB Informatik. 15. Feelin Groovy? Groovy Eine Skriptsprache mit Bezug zu Java und Ant Frank Schnitzer Hochschule Furtwangen FB Informatik 15. Mai 2006 Frank Schnitzer (CN7) Groovy 15. Mai 2006 1 / 21 Einleitung Was ist eine

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

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

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

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

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

Web-Anwendungsentwicklung mit dem Delivery Server

Web-Anwendungsentwicklung mit dem Delivery Server Web-Anwendungsentwicklung mit dem Delivery Server Java-Framework auf Basis der Open API Bernfried Howe, Webertise Consulting GmbH WEBertise Consulting Dipl. Informatiker (Wirtschaftsinformatik) 2001-2010

Mehr

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java Oliver Kalz Agenda Grundlagen Objektpersistenz Objektrelationales Mapping Performance Fazit

Mehr

Kann ich mit Grails Enterprise Applikationen umsetzen?

Kann ich mit Grails Enterprise Applikationen umsetzen? Kann ich mit Grails Enterprise Applikationen umsetzen? DOAG Nürnberg 21.11.2013 Tobias Kraft, exensio GmbH Agenda Grails im Überblick Anforderungen an Enterprise Applikationen Enterprise Applikationen

Mehr

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold Codegeneratoren mit Xtend2 11.04.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was ist Xtend2? 2. Xtend2 Konzepte 3. Hands On! 3 4 8 20 2 Was ist Xtend2? Funktionale, objektorientierte Sprache

Mehr

Prozessautomatisierung mit BPMN 2.0 und Java. bernd.ruecker@camunda.com

Prozessautomatisierung mit BPMN 2.0 und Java. bernd.ruecker@camunda.com Prozessautomatisierung mit BPMN 2.0 und Java bernd.ruecker@camunda.com Bernd Rücker camunda services GmbH Demo Was ist Prozessautomatisierung mit BPMN 2.0 Prozessautomatisierung mit Process Engine Monitoring

Mehr

Bean-Mapping mit MapStruct

Bean-Mapping mit MapStruct Machst Du noch Reflection oder annotierst Du schon? Bean-Mapping mit MapStruct Thomas Much thomas@muchsoft.com www.muchsoft.com 1 20 Jahre Java, 18 Jahre Beans JavaBeans JAXBEntities 2015 2006 2005 2000

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

Adobe Flex & Grails RIA, REST und XML

Adobe Flex & Grails RIA, REST und XML Adobe Flex & Grails RIA, REST und XML Pascal Schudel Consultant pascal.schudel@trivadis.com Mischa Kölliker Principal Consultant mischa.koelliker@trivadis.com JUGS Zürich, 8. Juli 2010 Basel Bern Lausanne

Mehr

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

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Die Alternative zum Web-Form Modell

Die Alternative zum Web-Form Modell Marc André Zhou Solution Architect www.dev -sky.net www.just -sp.net Die Alternative zum Web-Form Modell dotnet Cologne 03.05.2013 Agenda Web Forms vs. MVC ASP.NET MVC Features Web API ODATA Eine ASP.NET

Mehr

Grails agil und extrem

Grails agil und extrem Grails agil und extrem Stefan Roock stefan.roock@akquinet.de Bernd Schiffer bernd.schiffer@akquinet.de 11.12.2007 XPUG-HH Herzlich Willkommen! Bernd Schiffer akquinet AG Softwareentwickler XP, Scrum, TDD,

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

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

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

Übung 1: Object Inspector

Übung 1: Object Inspector Übung 1: Object Inspector Es ist ein System zu entwickeln, mit dem man Objektstrukturen bezüglich ihrer Properties analysieren und dann in einem Tree Viewer (JTree) anzeigen und bearbeiten kann. Properties

Mehr

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate

Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate 1 von 43 Rene Böing, Alexander Kuhn, Marc Wilmes Einführung in Spring und Hibernate 27.11.11 Agenda Einleitung Ist-Zustand Bookstore Was ist Hibernate? Wie funktioniert Hibernate? Was ist Spring? Architektur

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

ROOT Tutorial für HEPHY@CERN. D. Liko

ROOT Tutorial für HEPHY@CERN. D. Liko ROOT Tutorial für HEPHY@CERN D. Liko Was ist ROOT? Am CERN entwickeltes Tool zur Analyse von Daten Funktionalität in vielen Bereichen Objekte C++ Skriptsprachen Was kann ROOT Verschiedene Aspekte C++ as

Mehr

Software Engineering Software Frameworks. am Beispiel Ruby on Rails Hendrik Volkmer WWI2010G

Software Engineering Software Frameworks. am Beispiel Ruby on Rails Hendrik Volkmer WWI2010G Software Engineering Software Frameworks am Beispiel Ruby on Rails Hendrik Volkmer WWI2010G Vorstellung Plan für heute Donnerstag Freitag Montag Softwareframeworks Wiederholung Wiederholung Webframeworks

Mehr

Selbststudium OOP5 21.10.2011 Programmieren 1 - H1103 Felix Rohrer

Selbststudium OOP5 21.10.2011 Programmieren 1 - H1103 Felix Rohrer Kapitel 4.1 bis 4.3 1. zu bearbeitende Aufgaben: 4.1 4.1: done 2. Was verstehen Sie unter einem "Java-Package"? Erweiterungen verschiedener Klassen welche in Java benutzt werden können. 3. Sie möchten

Mehr

Einführung in Google Web Toolkit

Einführung in Google Web Toolkit Einführung in Google Web Toolkit Lars Pfannenschmidt Tobias Ullrich Software Freedom Day 2009 Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 1 / 24 Aus

Mehr

Web-Anwendungen mit Arquillian testen

Web-Anwendungen mit Arquillian testen Michael Kotten open knowledge @michaelkotten @_openknowledge Wozu denn testen? Ich mach doch keine Fehler! Wozu denn testen? > Notwendig bei komplexen Systemen > Sicherung von > Qualität > Funktionalität

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (2/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Listen Bisher: Collections

Mehr

Info B VL 14: Java Collections/Reflections

Info B VL 14: Java Collections/Reflections Info B VL 14: Java Collections/Reflections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 14: Java Collections/Reflections

Mehr

Einführung in ActionScript

Einführung in ActionScript Fachbereich Mathematik und Informatik Softwareprojekt: Spieleprogrammierung Einführung in ActionScript Do, Hoang Viet(do@mi.fu-berlin.de) Freie Universität Berlin, SoSe 2012 Agenda Allgemeine Einführung

Mehr

Frühling für iphone-apps

Frühling für iphone-apps Spring-basierte Backends für ios-applikationen Stefan Scheidt Solution Architect OPITZ CONSULTING GmbH OPITZ CONSULTING GmbH 2010 Seite 1 Wer bin ich? Software-Entwickler und Architekt Trainer und Coach

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Ein Jahr mit dem. Play! Framework FLAVIA IT. Dmitrij Funkner & Jonas Kilian. Quelle: http://www.flickr.com/photos/sdasmarchives/6996901834

Ein Jahr mit dem. Play! Framework FLAVIA IT. Dmitrij Funkner & Jonas Kilian. Quelle: http://www.flickr.com/photos/sdasmarchives/6996901834 Ein Jahr mit dem Play! Framework FLAVIA IT Dmitrij Funkner & Jonas Kilian Quelle: http://www.flickr.com/photos/sdasmarchives/6996901834 Über uns dmitrij funkner jonas kilian Konzentration auf das Wesentliche

Mehr

Spiel, Spaß, Spannung mit ember js

Spiel, Spaß, Spannung mit ember js Spiel, Spaß, Spannung mit ember js Spiel, Spaß, Spannung mit ember js ember js A framework for creating ambitious web applications 3 Spiel, Spaß, Spannung mit ember js ember js l Convention over configuration

Mehr

Java-Schulung Grundlagen

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

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

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

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer Java Kurs Objektorientierung II & die Java Klassenbibliothek Kristian Bergmann und Arthur Lochstampfer Vergleich class Apfel { String farbe; int gewicht; String geerntetin; class Erdbeere { String farbe;

Mehr

REST-Schnittstellen Dokumentation und Testing. Adrian Moos (adrian.moos@bedag.ch) Technology Advisor Bedag Informatik AG

REST-Schnittstellen Dokumentation und Testing. Adrian Moos (adrian.moos@bedag.ch) Technology Advisor Bedag Informatik AG REST-Schnittstellen Dokumentation und Testing Adrian Moos (adrian.moos@bedag.ch) Technology Advisor Bedag Informatik AG Inhalt Einleitung Dokumentation und Ad-Hoc-Testing Testautomation Fazit Seite 2 Softwareentwicklung

Mehr

Selbststudium OOP7 & ALG2 Auftrag

Selbststudium OOP7 & ALG2 Auftrag Selbststudium OOP7 & ALG2 Auftrag Kapitel 5.6 1. zu bearbeitende Aufgaben: 5.24 bis 5.30 5.24: Return Method Set entryset() V get(object key) Set keyset() V put(k key, V value) void

Mehr

Andreas Mösching Senior IT Architekt Hewlett-Packard (Schweiz) GmbH HP Banking Service Center Bern andreas.moesching@rtc.ch

Andreas Mösching Senior IT Architekt Hewlett-Packard (Schweiz) GmbH HP Banking Service Center Bern andreas.moesching@rtc.ch Eclipse Runtime (OSGi) als Plattform eines Swing Rich Client Andreas Mösching Senior IT Architekt Hewlett-Packard (Schweiz) GmbH HP Banking Service Center Bern andreas.moesching@rtc.ch Zu meiner Person

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

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE38-Generics (Stand 28.09.2012) Aufgabe 1: Schauen Sie sich die generischen Klassen des Paketes java.util an. Aufgabe 2: Ausgangslage sind die folgenden

Mehr

GIS mit Ruby on Rails

GIS mit Ruby on Rails FOSSGIS 2010 Pirmin Kalberer Sourcepole AG, Bad Ragaz www.sourcepole.ch ./configure && make && make install apt-get install postgis XML, SOAP Http, REST CVS git Linux? Linux! RUP Agile Software- Entwicklung

Mehr

Dominik Helleberg inovex GmbH. Auf Augenhöhe mit Android Studio und Gradle

Dominik Helleberg inovex GmbH. Auf Augenhöhe mit Android Studio und Gradle Dominik Helleberg inovex GmbH Auf Augenhöhe mit Android Studio und Gradle Dominik Helleberg Mobile Development Android / Embedded Tools http://dominik-helleberg.de/+ The new Dream Team Gradle + Android

Mehr

Datenaustausch mit JSON

Datenaustausch mit JSON Datenaustausch mit JSON Datenaustausch Kodierung von Daten Binärformate (PNG, MP4, Word,... ) effizient, aufwändig, nicht menschenlesbar Textformate (Java,... ): menschenlesbar, Aufwand für Ein- und Ausgabe

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

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

Überleben im Funkloch

Überleben im Funkloch Überleben im Funkloch Offlinefähige Apps für Android entwickeln Christian Janz (@c_janz ) christian.janz@bridging-it.de Christian Janz Consultant im Bereich Softwareentwicklung Java/JEE bei Bridging IT

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Angewandte Softwareentwicklung Serialisierung

Angewandte Softwareentwicklung Serialisierung Angewandte Softwareentwicklung Serialisierung WS 2014/2015 Markus Berg Hochschule Wismar Fakultät für Ingenieurwissenschaften Bereich Elektrotechnik und Informatik markus.berg@hs-wismar.de http://mmberg.net

Mehr

JSON. Johannes Baiter. 5. Mai 2015

JSON. Johannes Baiter. 5. Mai 2015 JSON Johannes Baiter 5. Mai 2015 Kurz und Knapp JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. { } "title" "JSON: JavaScript Object Notation",

Mehr

Scala: Klassen, Methoden und Objekte. von Simon Lerch

Scala: Klassen, Methoden und Objekte. von Simon Lerch Scala: Klassen, Methoden und Objekte von Simon Lerch Überblick Methoden Klassen Objekte Basis Typen Prefixes Java's == vs. Scala's == Assoziativität von Operatoren Rich Wrapper 30.03.10 Klassen, Methoden

Mehr

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2 Problemstellung Objekt mit aggregierten Objekten: att1: att2: 17 Object1:Klasse1 Object2:Klasse2 att1: Klasse1 att2: 9 serialisiert als Datei: Klasse1 att1 att2 Klasse2 att1 att2 -Speicherung von Objekten

Mehr