44
L’avenir de Java Benoît Lafontaine David Rousselie Marc Bojoly

L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 1: L'avenir de Java : Erlang, Haskell ou Ruby

L’avenir de Java

Benoît Lafontaine

David Rousselie

Marc Bojoly

Page 2: L'avenir de Java : Erlang, Haskell ou Ruby
Page 3: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 3

Page 4: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 4

Page 5: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 5

Page 6: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 6

Page 7: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 7

Java est içi

Page 8: L'avenir de Java : Erlang, Haskell ou Ruby

© Université du Système d’Information 8

Java est içi

Page 9: L'avenir de Java : Erlang, Haskell ou Ruby

Qu’attendre de cette session ?

9© Université du Système d’Information

Page 10: L'avenir de Java : Erlang, Haskell ou Ruby

Quels apports ?

10© Université du Système d’Information

Page 11: L'avenir de Java : Erlang, Haskell ou Ruby

Quels impacts ?

11© Université du Système d’Information

Page 12: L'avenir de Java : Erlang, Haskell ou Ruby

Quels impacts ?

12© Université du Système d’Information

Page 13: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

13© Université du Système d’Information

Page 14: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

14© Université du Système d’Information

Page 15: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

15© Université du Système d’Information

Page 16: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

16© Université du Système d’Information

Page 17: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

17© Université du Système d’Information

Page 18: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

18© Université du Système d’Information

Page 19: L'avenir de Java : Erlang, Haskell ou Ruby

19© Université du Système d’Information

Page 20: L'avenir de Java : Erlang, Haskell ou Ruby

Threads

20

Page 21: L'avenir de Java : Erlang, Haskell ou Ruby

Acteurs

21© Université du Système d’Information

Page 22: L'avenir de Java : Erlang, Haskell ou Ruby

Intérêt de la programmation fonctionnelle

22© Université du Système d’Information

Programmation objet

Chaque méthode modifie l’état existant

Page 23: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 24: L'avenir de Java : Erlang, Haskell ou Ruby

Intérêt de la programmation fonctionnelle

24© Université du Système d’Information

Appliquer Sur

Programmation objet

Programmation fonctionnelle

Patron de méthode

Page 25: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 26: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 27: L'avenir de Java : Erlang, Haskell ou Ruby

27

Page 28: L'avenir de Java : Erlang, Haskell ou Ruby

Intérêt de la programmation fonctionnelle

28© Université du Système d’Information …

Filtrage par motif (pattern matching) :

Page 29: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 30: L'avenir de Java : Erlang, Haskell ou Ruby

30© Université du Système d’Information

Page 31: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 32: L'avenir de Java : Erlang, Haskell ou Ruby

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);

Page 33: L'avenir de Java : Erlang, Haskell ou Ruby

Productivité et framework

Configuration Convention over Configuration

Page 34: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 35: L'avenir de Java : Erlang, Haskell ou Ruby
Page 36: L'avenir de Java : Erlang, Haskell ou Ruby

JVM

Langage

Communauté

Java est-il mort?

Page 37: L'avenir de Java : Erlang, Haskell ou Ruby

Scala

JRuby

Les langages sur la JVM

Clojure

Haskell

Page 38: L'avenir de Java : Erlang, Haskell ou Ruby

Java 7

Java est-il mort?

Page 39: L'avenir de Java : Erlang, Haskell ou Ruby

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

Page 40: L'avenir de Java : Erlang, Haskell ou Ruby

Librairies concurrentes en Scala

Page 41: L'avenir de Java : Erlang, Haskell ou Ruby

Projet web en Ruby on Rails/Grails

Page 42: L'avenir de Java : Erlang, Haskell ou Ruby

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))

}

Page 43: L'avenir de Java : Erlang, Haskell ou Ruby

Merci

Benoît Lafontaine

David Rousselie

Marc Bojoly

Page 44: L'avenir de Java : Erlang, Haskell ou Ruby

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