Présentation Groovy
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,838
On Slideshare
2,833
From Embeds
5
Number of Embeds
1

Actions

Shares
Downloads
48
Comments
0
Likes
0

Embeds 5

http://www.slideshare.net 5

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Groovy
  • 2. Qui je suis?
    • J’ai inventé Groovy
    J’entretiens une relation extraconjugale avec Guillaume Laforge J’ai écrit un super bouquin sur Groovy Je siège sur l’ expert group de la JSR-241 Je suis committer sur Groovy Jean-Sébastien Bournival Architecte de systèmes Nurun Mon blog: http ://js.jipiju.com
  • 3. Agenda
    • PARTIE I – Introduction
      • Origines et principes de base
    • PARTIE II - Qu'est ce que Groovy?
      • Comment se décline ce langage
    • PARTIE III - Que fait-on avec Groovy?
      • Applications concrètes du langage
    • PARTIE IV – Conclusion
      • Références, questions
  • 4. Partie 1: Introduction Origines et principes de base
  • 5. Introduction
    • Précision importante
      • Groovy == langage de programmation
      • Grails == framework de développement web utilisant Groovy
  • 6. Introduction
    • Manifeste
      • Groovy est un langage de programmation dynamique et agile pour la machine virtuelle Java (JVM)
    • « Groovy is Java »
      • Graeme Rocher
      • Grails project lead
    Groovy Java Java Virtual Machine bytecode
  • 7. Historique
    • Personnel
      • 2003 James Strachan, le fondateur
      • 2004 Guillaume Laforge, le récupérateur
      • 2007 G2One, le catalyseur
    • JSR 241
      • Supportée par IBM, Oracle, Sun, ASF, ThoughtWorks
  • 8. Installation
    • Environnement
        • $JAVA_HOME
        • $GROOVY_HOME
        • $PATH = $PATH;$GROOVY_HOMEin;$JAVA_HOMEin
        • ~/.groovy/lib
    • Outils
        • Interpréteur (groovy.sh)
        • Shell (groovysh.sh)
        • Console Swing (groovyConsole.sh)
  • 9. Anatomie d’un script // monScript.groovy // def maVariable = 3 def uneClosure = { it * it } println ‘Bonjour monde!’ L’instruction return est optionnelle Packages importés par défaut: groovy.lang.* groovy.util.* java.lang.* java.util.* java.io.* java.net.* Java.math.BigDecimal Java.math.BigInteger Le point virgule et les paranthèses sont optionnels System.out est implicite Ce script ne contient pas de classe: lors de l’exécution, il sera enrobé dans la méthode run() d’un objet de type Script
  • 10. Partie 2: Qu’est-ce que Groovy? Survol du langage
  • 11. Type de données de base
    • Tout est Objet (pour vrai de vrai cette fois-ci!)
      • pas de type primitif
      • typage dynamique (ou pas)
      • autoboxing
        • méthode java qui prend un int en paramètre
      • l’opérateur ‘==‘ veut dire equals() … pour tout le monde, pour l’identité, il faut utiliser la méthode is()
  • 12. Types de données de base
    • Strings
      • java.lang.String ‘’
      • groovy.lang.GString “”
    • Aussi
      • Slashy //
      • Triple quote ‘’’ et “””
  • 13. Expressions régulières
    • Sucre syntaxique par-dessus:
      • java.util.regex.Matcher / Pattern
    • Opérateurs ‘~’ ‘=~’ et ‘==~’
    // java.util.regex.Pattern def pattern = ~/.ou/ // java.util.regex.Matcher def matcher = ('hibou pou chou genou' =~ pattern) assert matcher.size() == 4 assert 'hibou' ==~ /.*ou/
  • 14. Structures de contrôle
    • La vérité, rien que la vérité …
      • true == références objets non-nulle
      • true == list/map non-vide
      • true == string non-vide
      • true == un matcher ayant un match
      • true == Valeur numérique différente de zéro
      • true == true (la valeur booléenne)
    • Aussi:
      • l’instruction if () == celle de Java
      • idem pour les try {…} catch() {…}
  • 15. Structures de contrôle (2)
    • Boucler
      • le while( expr ) est identique à celui de Java
      • pas de do {…} while ( expr ) en Groovy
      • for ( variable in iterable ) { instr }
    def matcher = '12xy5' =~ /d/ for (match in matcher) { println match } def myString = 'Saku Koivu' for (i in 0..<myString.size()) { ... }
  • 16. Structures de contrôle (3)
    • Un switch beaucoup plus puissant qu’en Java :
    switch (x) { case 7: println &quot;7&quot;; break; case 2.3: println &quot;2.3&quot;; break; case &quot;dog&quot;: println &quot;dog&quot;; break; case [1, 2, 'alf']: println &quot;in list&quot;; break; case (3..6): println &quot;in range&quot;; break; case Integer: println &quot;Integer&quot;; break; case ~&quot;ca.*&quot;: println &quot;regex&quot;; break; }
  • 17. GDK
    • Plusieurs types de Java deviennent plus Groovy !
    java.io.File: eachLine (Closure closure) eachFile (Closure closure) java.util.Date: minus(int days) plus(int days) java.lang.String: toURL() java.util.Collection: count(Object value) find(Closure closure) findAll(Closure closure)
  • 18. Support natif des collections
    • Les listes
      • opérateur subscript [] = getAt()/putAt()
      • opérateur Spread *.
      • permet l’utilisation d’index négatifs
    def sakuList = [] sakuList = ['fi','en'] sakuList << 'fr' assert sakuList instanceof java.util.List
  • 19. Support natif des collections (2)
    • Les maps
      • permet la syntaxe .dot sur les clés
      • utilisation de valeur par défaut
    def sakuMap = [:] sakuMap = [ 'team':'mtl', 'goals':12, 'languages':['fi', 'en'] ] println sakuMap.team assert sakuMap instanceof java.util.Map
  • 20. Support natif des collections (3)
    • Les ranges
      • une liste de valeurs séquentielles
      • opérateur .. et ..<
      • utilisation: boucles, switch , et closures
    def range = 5..8 assert range.size() == 4 for (i in range) { println &quot;Hello ${i}&quot; }
  • 21. Closures
    • Wikipedia
    • « In computer science, a closure is a function that is evaluated in an environment containing one or more bound variables. When called, the function can access these variables. The explicit use of closures is associated with functional programming and with languages such as ML and Lisp.»
    • Fonction Lambda de Lisp.
    (define (derivative f dx) (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))
  • 22. Closures (2)
    • En Groovy
      • Une &quot;closure&quot; c'est un bout de code:
        • assigné à une variable ou anonyme
        • exécuté ultérieurement
        • de type groovy.lang.Closure
    • Utilisation typique
      • List (.each())
      • File (.eachLine(), .eachFile())
  • 23. Programmation objet
    • Identique à Java … sauf:
      • les inner class ne sont pas supportées
      • le scope par défaut des classes/méthodes/attributs est public
      • paramètres positionnels, et nommés
      • surcharge d’opérateurs permise
      • safe dereferencing operator ‘?.’
  • 24. Programmation objet
    • GroovyBeans
      • Ajoute au formalisme des JavaBeans
        • get/set sous-entendu pour préserver l’encapsulation
        • opérateur @
      • Expando, ou un GroovyBean « vierge »
        • ajout dynamique d’attributs et méthodes ( closures )
  • 25. Programmation META objet
    • Sous le capot de Groovy:
      • toutes les classes ont une méta-classe
      • une méta-classe permet, entre autres, d’intercepter des appels à des méthodes inexistantes
    classe méta-classe appel de methode()
  • 26. Partie 3: Que fait-on avec Groovy? Applications concrètes du langage
  • 27. Builders
    • Principes basés sur le célèbre patron de conception (GOF 97)
      • Permet de construire des structures de type «arbre»
    def builder = new MarkupBuilder() builder.'web-app' { 'display-name' 'My Webapp' } <web-app> <display-name>My Webapp</display-name> </web-app>
  • 28. Builders
    • Applications usuelles
      • MarkupBuilder
      • AntBuilder
      • GraphicsBuilder
      • SwingBuilder
  • 29. XML
    • 2 Objets Groovy pour faciliter le parsing de structures XML
      • groovy.util.XMLParser
      • groovy.util.XMLSlurper
    • Utiliser des librairies Java est tout aussi recommandé!
      • DOM4J, par exemple
    new XmlSlurper().parse(new File('C:/dev/data/file.xml'))
  • 30. GSQL
    • Accès aux SGBD
      • package groovy.sql.*
      • 2 façons de rendre SQL Groovy:
        • Nature
          • groovy.sql.GroovyResultSet
        • DataSets
          • groovy.sql.DataSet
  • 31. GANT
    • Gant permet de construire des scripts de build à l’aide d’Ant, mais écrits en Groovy
      • « Look Ma! No XML! »
      • Utilise les tâches d’Ant
      • Il existe un plugin pour Hudson
    target ( default : 'This is the default target.' ) { if (System.getenv ( ).'JAVA_HOME') { anotherTarget() } }
  • 32. Services Web
    • Module GroovyWS
      • Enrobe le cadre d’application Apache CXF
    • Client et serveur se définissent de façon Groovy, c’est-à-dire simple et concise
      • groovyx.net.ws.WSServer
      • groovyx.net.ws.WSClient
  • 33. Services Web import groovyx.net.ws.WSClient def proxy = new WSClient(&quot;http://localhost:6980/MathService?wsdl&quot;, this.class.classLoader) def result = proxy.add(1.0 as double, 2.0 as double) import groovyx.net.ws.WSServer def server = new WSServer() server.setNode(&quot;MathService&quot;, &quot;http://localhost:6980/MathService&quot;) Serveur Client
  • 34. Tester avec Groovy
    • GroovyTestCase
      • JUnit est enchâssé dans l’environnement d’exécution de Groovy
      • Ajoute plusieurs méthodes assert*
      • GroovyTestSuite s’intègre à merveille avec les IDE
      • Il est tout aussi facile de rouler une batterie de tests avec Ant ou Maven
  • 35. Tester avec Groovy
    • Tester avec d’autres outils
      • Unit tests
        • TestNG
      • Services web
        • Canoo WebTest
        • SOAPUI
      • Coverage
        • Cobertura
  • 36. Partie 4: Conclusion La fin … vraiment? Ou seulement le début?
  • 37. State of the «groovy» nation
    • Version
      • Dernière livraison: 1.1 RC 2
      • 1.1 final devrait être à nos portes
    • Présence
      • Spring
      • Jboss Seam
      • IBM project ZERO
      • OpenEJB
      • ServiceMix
      • Grails
      • Hudson
      • Canoo Web Test
      • SoapUI
  • 38. Défis à venir
    • Surfer sur la vague sans perdre pied!
      • maintenir le rythme effréné des livraisons
      • maintenir le niveau élevé de la qualité
    • Documentation
      • la communauté le réclame: une documentation à jour, mieux organisée
    • Performance
      • bien que cet aspect ait été amélioré depuis quelques livraisons, beaucoup de travail reste à faire
  • 39. Voir la lumière …
    • Grails
      • Cadre d’application web agile
      • Assemblage de frameworks connus de l’écosystème Java
      • Applique les principes de productivité de Rails en lui chipant plusieurs idées ( À tout seigneur, tout honneur. )
      • À suivre …
  • 40. Références
    • Bouquins
      • Groovy in action
      • Dierk König, 2007
      • ISBN 1-932394-84-2
      • Groovy programming
      • Kenneth Barclay/John Savage, 2006
      • ISBN 978-0-12-372507-3
      • Groovy Recipes
      • Scott Davis, Coming soon!
    ?
  • 41. Références
    • Sur la grande toile
      • http://groovy.codehaus.org
      • http ://www.groovyblogs.org
      • http://www.aboutgroovy.com
      • http://www.g2one.com
      • http://jcp.org/en/jsr/detail?id=241
      • Groovy User Groups
        • Vancouver http://groovyvan.com/
        • Londres http://skillsmatter.com/menu/539
        • Melbourne http://tech.groups.yahoo.com/group/groovy-melbourne/
        • Stuttgart http://www.jugs.de/sig-groovy.html
        • Minnesota http://groups.google.com/group/groovymn
        • Montréal?
  • 42. Références
    • La Blogoshère
      • Guillaume Laforge
      • Jason Rudolph
      • Glen Smith
      • Sven Haiges
      • Scott Davis
      • Venkat Subramaniam
      • Geertjan Wielenga
      • Jeremy Rayner
      • Mark Palmer
      • Jeff Brown
      • Andres Almiray
    • http://glaforge.free.fr/weblog/
    • http://www.jasonrudolph.com/blog/
    • http ://blogs.bytecode.com.au/glen/
    • http://svenhaiges.de/
    • http://www.davisworld.org/
    • http://www.agiledeveloper.com/blog/
    • http://blogs.sun.com/geertjan/
    • http://javanicus.com/blog2/
    • http://www.anyware.co.uk/2005/
    • http://javajeff.blogspot.com/
    • http://jroller.com/aalmiray/
  • 43. Des questions? Merci à tous [email_address]