Conception dApplications       Interactives : Applications Web et JEE            Séance #5     Scala / Play! Framework
Langages alternatives pour la JVM
Langages alternatives pour la JVM                 Java ≠ JVM● Java : Langage qui compile vers du bytecode● JVM : Machine v...
La JVM en tant que plate-forme● Build once, run everywhere  ○ Des implémentations de JVM pour la plupart du    hardware et...
Pourquoi des nouveaux langages         If all you have is a hammer,          everything looks like a nailJava est un très ...
Pourquoi des nouveaux langagessur la JVM● Le target est le bytecode  ○ Pas besoin dimplémenter la compilation vers le    f...
Quels sont ces langages ?● Des langages nouveaux :  ○ Clojure, Groovy, Scala, Ceylon, Kotlin...● Des implémentations dautr...
JythonInterprète Python écrit en Java, créé en 1997●   Compilation de code Python en bytecode●   Héritage de classes Java ...
JRubyInterprète Ruby écrit en Java, créé en 2001● Equivalente de Jython pout Ruby● Capable de faire tourner Rails● Plus ra...
GroovyLangage de POO destiné à la plate-forme Java● Inspiré de Python, Ruby et Smalltalk● Syntaxe très proche de Java● Com...
CeylonNouveau langage pour la JVM par RedHat● "Java tel quils serait si il avait été développé  aujourdhui"● Typage statiq...
ScalaLangage de programmation multi-paradigme  ○ Programmations orientée objet et fonctionnelle● Typage statique, syntaxe ...
Le développeur multi-lingue● Environnement JVM en mouvement continu  ○ Nouveaux langages  ○ Nouveaux frameworks  ○ Nouveau...
Introduction à Scala
ScalaLangage de programmation multi-paradigme  ○ Programmations orientée objet et fonctionnelle● Typage statique, syntaxe ...
La console REPLREPL : Read Event Print Loop● Console intéractive pour linterprétation de  Scala    horacio@horacio-laptop:...
val et var● var : variables (mutables)● val : valeurs (constantes, inmutables)    scala> val revolution : Int = 1789    re...
Classes● Pas besoin de déclarer les attributs privés et  les getters et setters   ○ Le constructeur suffit● Constructeur a...
Classes● Définition explicite des paramètres lors des appels aux  méthodes● Méthode copy pour créer des copies des objets ...
Collections● Les listes et les maps sont des types natifs  ○ Immuables par défaut● Simplification des génériques Java  ○ I...
Collections● Le for est "très Java"  ○ Façon Scala : Utiliser des fonctions                             functionName { inp...
Collections● Dautres exemples des fonctions sur des listes  scala> val reversedList = numbers.reverse  reversedList: List[...
Comment apprendreScala ?Je ne vais pas passer une heure à vos passerdes slides● Méthode peu éfficaceTentons quelque chose ...
KoansUne nouvelle façon dapprendre un langage● Des petits cas pratiques   ○ Sous la forme de suites de tests unitaires● Ch...
Scala Koans :Learn Scala with the Koans       http://www.scalakoans.org/
Scala Koans1. Telecharger le .zip sur http://www.scalakoans.org/2. Extraire tout et exécuter le fichier ./sbt3. Compiler l...
Cest lheure des Scala Koans !
Play! FrameworkPlay 2.0, a Web framework for a new era
Le projet Play!Play! est un framework pour● faire du développement web● avec une haute productivité● avec létat de lart de...
Play! : productivité et plaisir● Conçu par des développeurs web pour des    développeurs web●   Gestion simple, flexible e...
Play! : pas un jouet●   Modèle de programmation HTTP asynchrone●   Architecture scalable de haute performance●   Modèle re...
Suivons le web !    When a web framework starts an architecture fight          with the web, the framework loses.● PHP et ...
Modifiez, rechargez, cest fait !● Devoir redémarrer le serveur après une modif ?● Redéployer car on a changé un fichier ?●...
Play! ne se bat pas contre le web● Des URL à ralonge avec des paramètres techniques ?             Cest pas du web, ça !● P...
Le web a évolué● On est au bord dune nouvelle évolution :    ○ Les requêtes asynchrones en temps réel    ○ Des énormes flu...
Les limites des frameworksclassiques● Chaque utilisateur connecté consomme des  ressources  ○ Mémoire, threads...● Modèles...
Play! utilise un modèle réactif● Inversion de contrôle  ○ On agit que lorsquon a quelque chose à faire● Sans perte de cont...
Play! Framework Voici une petite démo
Prochain SlideShare
Chargement dans…5
×

Enib cours c.a.i. web - séance #5 : scala play! framework

1 392 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 392
Sur SlideShare
0
Issues des intégrations
0
Intégrations
230
Actions
Partages
0
Téléchargements
59
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Enib cours c.a.i. web - séance #5 : scala play! framework

  1. 1. Conception dApplications Interactives : Applications Web et JEE Séance #5 Scala / Play! Framework
  2. 2. Langages alternatives pour la JVM
  3. 3. Langages alternatives pour la JVM Java ≠ JVM● Java : Langage qui compile vers du bytecode● JVM : Machine virtuelle qui exécute du bytecode
  4. 4. La JVM en tant que plate-forme● Build once, run everywhere ○ Des implémentations de JVM pour la plupart du hardware et OS ○ Bytecode format pivot indépendant de la plate-forme● Tendance à saffranchir de lOS ○ Côté client : navigateur comme plate-forme ○ Côté serveur : JVM comme plate-forme
  5. 5. Pourquoi des nouveaux langages If all you have is a hammer, everything looks like a nailJava est un très bon langage généraliste, maispas la solution ultime● Scripting ?● Programmation fonctionnelle ?● Simplification et réduction du boilerplate ?
  6. 6. Pourquoi des nouveaux langagessur la JVM● Le target est le bytecode ○ Pas besoin dimplémenter la compilation vers le format natif de chaque OS● Profiter de lécosystème Java ○ Bibliothèques, serveurs, outils... ○ Courbe dadoption moins ardue● Support pour langages à typage dynamique ○ JSR 292, invokedynamic ○ Intégrée à la JVM depuis Java 1.7
  7. 7. Quels sont ces langages ?● Des langages nouveaux : ○ Clojure, Groovy, Scala, Ceylon, Kotlin...● Des implémentations dautres langages ○ JRuby (Ruby), Jython (Python), Rhino (JS), Elastic COBOL (Cobol), JGNAT (Ada), Luaj (Lua)...
  8. 8. JythonInterprète Python écrit en Java, créé en 1997● Compilation de code Python en bytecode● Héritage de classes Java par des classes Python● Scripting de code Python dans un programme Java● Utilisation dobjets Java dans du code PythonTrès utilisé pour prototypage, scripting et exploration desclasses Java http://www.jython.org/
  9. 9. JRubyInterprète Ruby écrit en Java, créé en 2001● Equivalente de Jython pout Ruby● Capable de faire tourner Rails● Plus rapide que limplémentation de référence ○ Option JIT http://www.jruby.org/
  10. 10. GroovyLangage de POO destiné à la plate-forme Java● Inspiré de Python, Ruby et Smalltalk● Syntaxe très proche de Java● Compilé ○ soit à la volée dynamiquement ○ soit classiquement vers bytecode● Typages statique et dynamique● Support natif pour listes, maps, et expressions régulières● Fermetures ou clôtures (closures)● Surcharge des opérateurs http://groovy.codehaus.org/
  11. 11. CeylonNouveau langage pour la JVM par RedHat● "Java tel quils serait si il avait été développé aujourdhui"● Typage statique ○ Types union et intersection● Syntaxe régulière ○ Sucre syntactique ajouté● Modulaire ○ Dépôt Ceylon Herd http://www.ceylon-lang.org/
  12. 12. ScalaLangage de programmation multi-paradigme ○ Programmations orientée objet et fonctionnelle● Typage statique, syntaxe concise● Compilé vers bytecode● Intéropérabilité avec le code Java http://www.scala-lang.org/
  13. 13. Le développeur multi-lingue● Environnement JVM en mouvement continu ○ Nouveaux langages ○ Nouveaux frameworks ○ Nouveaux outils● Ne pas se tenir à jour, ne pas apprendre = stagner, régresser. ○ Un nouveau langage par an ○ Un nouveau framework tous les 3 mois
  14. 14. Introduction à Scala
  15. 15. ScalaLangage de programmation multi-paradigme ○ Programmations orientée objet et fonctionnelle● Typage statique, syntaxe concise● Compilé vers bytecode● Intéropérabilité avec le code Java http://www.scala-lang.org/
  16. 16. La console REPLREPL : Read Event Print Loop● Console intéractive pour linterprétation de Scala horacio@horacio-laptop:$ scala Welcome to Scala version 2.10.0-RC3 (Java HotSpot(TM) Server VM, Java 1.6.0_31). Type in expressions to have them evaluated. Type :help for more information. scala> val revolution : Int = 1789 revolution: Int = 1789 scala>
  17. 17. val et var● var : variables (mutables)● val : valeurs (constantes, inmutables) scala> val revolution : Int = 1789 revolution: Int = 1789 scala> revolution = 1917 <console>:8: error: reassignment to val revolution = 1917 ^ scala> var variable : String = "Ma variable" variable: String = Ma variable scala> variable = "Notre variable" variable: String = Notre variable scala>
  18. 18. Classes● Pas besoin de déclarer les attributs privés et les getters et setters ○ Le constructeur suffit● Constructeur avec des valeurs par défaut scala> case class Employee( name:String="guest", age: Int=30, company:String = "DevCode" ) defined class Employee scala> val guest = Employee() guest: Employee = Employee(guest,30,DevCode) scala> val guestAge = guest.age guestAge: Int = 30 scala>
  19. 19. Classes● Définition explicite des paramètres lors des appels aux méthodes● Méthode copy pour créer des copies des objets scala> case class Employee( name:String="guest", age: Int=30, company:String = "DevCode" ) defined class Employee scala> val luke = Employee("Luke", company="LucasArt") luke: Employee = Employee(Luke,30,LucasArt) scala> val yoda = luke.copy("Yoda", age=800) yoda: Employee = Employee(Yoda,800,LucasArt) scala>
  20. 20. Collections● Les listes et les maps sont des types natifs ○ Immuables par défaut● Simplification des génériques Java ○ Inférence des types scala> val numbers = List(1,2,3) numbers: List[Int] = List(1, 2, 3) scala> for (n <- numbers) println("Number "+n) Number 1 Number 2 Number 3 scala>
  21. 21. Collections● Le for est "très Java" ○ Façon Scala : Utiliser des fonctions functionName { input => body } scala> val numbers = List(1,2,3) numbers: List[Int] = List(1, 2, 3) scala> numbers.foreach { n:Int => // Enter to continue on the next line | println("Number "+n) | } Number 1 Number 2 Number 3 scala>
  22. 22. Collections● Dautres exemples des fonctions sur des listes scala> val reversedList = numbers.reverse reversedList: List[Int] = List(3, 2, 1) scala> val numbersLessThan3 = numbers.filter { n => n < 3 } numbersLessThan3: List[Int] = List(1, 2) scala> val oddNumbers = numbers.filterNot { n => n % 2 == 0 } oddNumbers: List[Int] = List(1, 3) scala> val higherNumbers = numbers.map { n => n + 10 } higherNumbers: List[Int] = List(11, 12, 13) scala> val sumOfNumbers = numbers.foldLeft(0) { (total,element) => | total + element | } sumOfNumbers: Int = 6 scala> val sumOfNumbers = numbers.sum sumOfNumbers: Int = 6 scala> val higherNumbers = numbers.map(_+10) higherNumbers: List[Int] = List(11, 12, 13) scala>
  23. 23. Comment apprendreScala ?Je ne vais pas passer une heure à vos passerdes slides● Méthode peu éfficaceTentons quelque chose de nouveau● Approche pratique Essayons les Scala Koans !Scala Koans ? Kesaco ?
  24. 24. KoansUne nouvelle façon dapprendre un langage● Des petits cas pratiques ○ Sous la forme de suites de tests unitaires● Chaque cas orienté pour un concept ○ Et un ensemble de tests qui ne passent pas● Objectif : réparer les tests pour quils passent ○ Et apprendre le langage en passantMéthode dapprentissage différente et éfficace !
  25. 25. Scala Koans :Learn Scala with the Koans http://www.scalakoans.org/
  26. 26. Scala Koans1. Telecharger le .zip sur http://www.scalakoans.org/2. Extraire tout et exécuter le fichier ./sbt3. Compiler les tests avec : > test:compile4. Exécuter tous les koans avec : > ~test-only org.functionalkoans.forscala.Koans ou Exécuter un koan en concret : > ~test-only org.functionalkoans.forscala.AboutAsserts5. Ouvrir le fichier source du koan, léditer et voir si ça passe
  27. 27. Cest lheure des Scala Koans !
  28. 28. Play! FrameworkPlay 2.0, a Web framework for a new era
  29. 29. Le projet Play!Play! est un framework pour● faire du développement web● avec une haute productivité● avec létat de lart des technologies web● sur la JVM
  30. 30. Play! : productivité et plaisir● Conçu par des développeurs web pour des développeurs web● Gestion simple, flexible et puissante du protocole HTTP ○ Framework web -> HTTP au centre ○ Stateless, request-response● Facilité de démarrage ○ Courbe dapprentissage douce● Rapidité et simplicité : change le code et recharge la page !● Framework complet, full-stack
  31. 31. Play! : pas un jouet● Modèle de programmation HTTP asynchrone● Architecture scalable de haute performance● Modèle reactive, non bloquant● Typage fort
  32. 32. Suivons le web ! When a web framework starts an architecture fight with the web, the framework loses.● PHP et Ruby on Rails lont bien compris ○ Si on fait du web, on sadapte au web !● Exemples : session, bouton back...● Play! a une architecture stateless basé sur HTTP
  33. 33. Modifiez, rechargez, cest fait !● Devoir redémarrer le serveur après une modif ?● Redéployer car on a changé un fichier ?● A nouveau, regardons PHP ou Ruby on Rails ○ Si on fait du web, on sadapte au web !● Avec Play! il suffit de recharger la page et la modif est prise en compte ○ Ca, cest de la productivité !
  34. 34. Play! ne se bat pas contre le web● Des URL à ralonge avec des paramètres techniques ? Cest pas du web, ça !● Play! utilise HTTP comme protocole, avec sa semantique ○ il ne cherche pas à faire son meta-protocole au dessus
  35. 35. Le web a évolué● On est au bord dune nouvelle évolution : ○ Les requêtes asynchrones en temps réel ○ Des énormes flux de données ○ Les BDD non relationnelles● Les frameworks classiques ont du mal à sadapter
  36. 36. Les limites des frameworksclassiques● Chaque utilisateur connecté consomme des ressources ○ Mémoire, threads...● Modèles basés sur lattente active ○ Synchronisme entre requête et réponse ○ On bloque un thread côté serveur● Les I/O sont bloquantes
  37. 37. Play! utilise un modèle réactif● Inversion de contrôle ○ On agit que lorsquon a quelque chose à faire● Sans perte de contrôle ○ Mais on est capable de garder le contrôle● Iteratee/Enumerator IO
  38. 38. Play! Framework Voici une petite démo

×