L'avenir de Java : Erlang, Haskell ou Ruby

Preview:

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

Recommended