Upload
marc-bojoly
View
276
Download
0
Embed Size (px)
DESCRIPTION
Les nouveaux langages sont de plus en plus présents et bouleversent un eco- systeme dominé par Java: Ruby, et notamment Rails, annoncent des productivités faisant rêver les chefs de projet Java; d'autres proposent la gestion de concurrence et de parallélisme (souvent problématiques pour les programmeurs Java) nativement dans la langage. Alors que faire? Jeter Java et la JVM, rester sourd aux chants des sirènes? Dans cette session nous aborderons les limites de la plateforme Java et comment concilier les meilleurs des mondes.
Citation preview
L’avenir de Java
Benoît Lafontaine
David Rousselie
Marc Bojoly
© Université du Système d’Information 3
© Université du Système d’Information 4
© Université du Système d’Information 5
© Université du Système d’Information 6
© Université du Système d’Information 7
Java est içi
© Université du Système d’Information 8
Java est içi
Qu’attendre de cette session ?
9© Université du Système d’Information
Quels apports ?
10© Université du Système d’Information
Quels impacts ?
11© Université du Système d’Information
Quels impacts ?
12© Université du Système d’Information
Threads
13© Université du Système d’Information
Threads
14© Université du Système d’Information
Threads
15© Université du Système d’Information
Threads
16© Université du Système d’Information
Threads
17© Université du Système d’Information
Threads
18© Université du Système d’Information
19© Université du Système d’Information
Threads
20
Acteurs
21© Université du Système d’Information
Intérêt de la programmation fonctionnelle
22© Université du Système d’Information
Programmation objet
Chaque méthode modifie l’état existant
Intérêt de la programmation fonctionnelle
23© Université du Système d’Information
La fonction map(\x -> 2*x) prend donne
Programmation fonctionnelle
La fonction reduce (\x y -> x+y) prend
donne
Intérêt de la programmation fonctionnelle
24© Université du Système d’Information
Appliquer Sur
Programmation objet
Programmation fonctionnelle
Patron de méthode
Intérêt de la programmation fonctionnelle
25© Université du Système d’Information
Appliquer Sur
Programmation objet
Programmation fonctionnelle
Chaque méthode boucle sur la liste
reduce (\x y -> x+y) 0 (map (\x -> 2*x) [1,2,3]
Intérêt de la programmation fonctionnelle
class MyList extends ArrayList<Integer> { public MyList(int... array) { for(int i : array) { this.add(i); } }
public void multiplyBy(int by) { for (int i = 0; i < this.size(); i++) { this.set(i, this.get(i) * by); } }
public int sum() { int result = 0; while (!this.isEmpty()) {
result += this.get(i); } return result;
}
public static void main(String[] args) { MyList list = new MyList(1,2,3); list.multiplyBy(2); list.sum(); }}//End of MyList class
Java
Langage fonctionnel
27
Intérêt de la programmation fonctionnelle
28© Université du Système d’Information …
Filtrage par motif (pattern matching) :
addMouseListener(new MouseListener() { public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) { Button button = (Button)e.getComponent(); if ("Validate".equals(button.getName())) { System.out.print(button.text); } } });
val reactions = { case ButtonClicked(button) if button.name = "Validate" =>
println(button.text)}
La programmation fonctionnelle
Java
Langage fonctionnel
30© Université du Système d’Information
public List<Client> findByNameAndBirthday(String name, Date birthday) {
Session session = sessionFactory.openSession(); Query query = session.createQuery("from Client c where
c.name=:name and c.birthday=:birthday"); query.setString("name", name); query.setDate("birthday", birthday); return query.list(); }
class Client { def name def birthday}
client.findByNameAndBirthday("name", birthday)
La programmation dynamique
Java
Langage Dynamique
public List<Client> findByNameAndBirthday(String name, Date birthday) {
Session session = sessionFactory.openSession(); Query query = session.createQuery("from Client c where
c.name=:name and c.birthday=:birthday"); query.setString("name", name); query.setDate("birthday", birthday); return query.list(); }
Java Langage dynamique :
La programmation dynamique
client.findByNameAndBirthday ("name", birthday)
Query query = session.createQuery("from Client c where c.name=:name and c.birthday=:birthday"); query.setString("name", "name"); query.setDate("birthday",birthday);
Productivité et framework
Configuration Convention over Configuration
Productivité et framework
class User < ActiveRecord::Base devise :registerable,
:authenticatable,
:recoverable,
:rememberableend
34© Université du Système d’Information
applicationContext-Security.xml
web.xml
Webmvc-config.xml
Views.xml
Login.jspx
Spring Security
Ruby On Rails
JVM
Langage
Communauté
Java est-il mort?
Scala
JRuby
Les langages sur la JVM
Clojure
Haskell
Java 7
Java est-il mort?
Les actions pour demain
• Apprenez le concept de closure
• Etudiez la programmation concurrente par acteurs
• Conservez la plateforme Java (la JVM)
Et pour aller plus loin…
39© Université du Système d’Information
Librairies concurrentes en Scala
Projet web en Ruby on Rails/Grails
Pour aller plus loin utilisez un autre langage
DSL métier en Groovy/Scala
val portfolio = List[Order] {new Order buy (100 callOn "GLE" withStrike(30 euros)),new Order sell (15 putOn "CS" withStrike(20 euros))
}
Merci
Benoît Lafontaine
David Rousselie
Marc Bojoly
Liens
• http://stuffthathappens.com/blog/wp-content/uploads/2007/09/gavin_and_obie.png
• http://people.mandriva.com/~prigaux/language-study/diagram-light.png• http://www.thinkgeek.com/gadgets/tools/8b97/• http://www.flickr.com/photos/monkeyiron/367271228/• http://www.flickr.com/photos/tkotam/2262497717/• http://www.flickr.com/photos/jimmiehomeschoolmom/2438124826/ • http://duke.kenai.com/
44© Université du Système d’Information