L'avenir de Java : Erlang, Haskell ou Ruby
-
Upload
marc-bojoly -
Category
Software
-
view
275 -
download
0
description
Transcript of L'avenir de Java : Erlang, Haskell ou Ruby
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