2 Problemlöser: Groovy und Grails. Thomas Westphal 25. Juni 2015
|
|
- Luisa Linden
- vor 8 Jahren
- Abrufe
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 18.04.2011 Herzlich Willkommen Thomas Westphal Software Engineer @ adesso AG Projekte, Beratung, Schulung www.adesso.de thomas.westphal@adesso.de
MehrGroovy 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
MehrGrails. 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
MehrWorkshop 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
MehrDOAG 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
MehrBekannte 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
MehrJava 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
MehrFachgebiet 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
MehrJava 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 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,
MehrJava 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]...
MehrAufbau 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
MehrTesten 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
Mehr188.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
MehrGrails 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
MehrJava: 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
MehrObjektorientierte 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
MehrEinfü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
MehrDas 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:
MehrGroß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,
MehrIch 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
MehrSoftware 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
MehrStefan 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
MehrCamelCaseCon 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
MehrECLIPSE 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
MehrEinfü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:
MehrSelbststudium 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
MehrGrundlagen 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.:
Mehr7. 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
MehrVersuchsziele 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
MehrWebPoint. 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
MehrZä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 --
MehrStruts 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
MehrSEMINAR 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
MehrAufgabe11. 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
MehrXMLBeam. 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
MehrClient-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
MehrWeb-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
MehrPraktikum 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:
MehrProgrammieren 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,
MehrObjektorientierte 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)
MehrSEP 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
MehrIntelliJ 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:
MehrEinfü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
MehrProgrammieren 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
MehrGenerisch 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,
MehrFortgeschrittenes 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
MehrWebseiten 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.
MehrSoftware 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
MehrKlassendefinitionen verstehen
Klassendefinitionen verstehen Java-Programme bestehen aus Klassendefinitionen und sonst nichts! 1 1.0 Konzepte Felder Konstruktoren Methoden Parameter Zuweisungen ( = ) Anweisungen bedingte Anweisungen
MehrPraktische Ü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
MehrJava 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
Mehr5. 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
MehrSoftware 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
MehrAJAX 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
MehrJavakurs 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
MehrExtending 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.
MehrEs 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
MehrSoftware 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
MehrDjango - 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
MehrArchitektur 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
MehrProgrammiervorkurs 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
MehrGrails 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
MehrSoftware 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
MehrErgebnisse. 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
MehrJavadoc. 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
MehrJSP 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
MehrProf. 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
MehrComputeranwendung 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
MehrArrays 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
MehrSoftware 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
MehrKlausur 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-
MehrObjektorientierte 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
MehrScala & 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.
MehrStudentische 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
MehrRails 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
MehrObjektorientierte 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/
MehrTypumwandlungen 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
MehrHow 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)
MehrPakete 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
MehrTesten 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
MehrArrays 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
MehrVortrag 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,
MehrC 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
MehrOpen 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
MehrEinfü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
MehrPersö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
MehrAufgabenblatt 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
MehrAlgorithmen 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
MehrEclipse 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
MehrVererbung & 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
MehrGrails - 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
MehrJSP 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
Mehr1.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){
MehrAlgorithmen 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
MehrSoftware-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
MehrRene 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
MehrVorkurs 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:
MehrProblemstellung. 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