Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
You’ve finished this document.
Download and read it offline.
Upcoming SlideShare
Tp switch
Next
Upcoming SlideShare
Tp switch
Next
Download to read offline and view in fullscreen.

Share

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

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

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

Views

Total views

1,666

On Slideshare

0

From embeds

0

Number of embeds

238

Actions

Downloads

73

Shares

0

Comments

0

Likes

0

×