Rappels sur la Programmation java (2)

31
RAPPELS SUR LA PROGRAMMATION JAVA (2) NSY208 / 2010-2011

description

Rappels sur la Programmation java (2). NSY208 / 2010-2011. Plan. TDD Assertions , Test et JUNIT Programmation concurrentielle Introspection Fichiers et connexion réseau. TDD. TDD (1). h ttp://www.slideshare.net/Skud/test-driven-development-tutorial. TDD (2). - PowerPoint PPT Presentation

Transcript of Rappels sur la Programmation java (2)

Page 1: Rappels sur la Programmation java (2)

RAPPELS SUR LA PROGRAMMATION JAVA

(2) NSY208 / 2010-2011

Page 2: Rappels sur la Programmation java (2)

2

Plan• TDD Assertions, Test et JUNIT• Programmation concurrentielle• Introspection• Fichiers et connexion réseau

DJBEL- 2010

Page 3: Rappels sur la Programmation java (2)

3

TDD

DJBEL- 2010

Page 4: Rappels sur la Programmation java (2)

4

TDD (1)

http://www.slideshare.net/Skud/test-driven-development-tutorial

DJBEL- 2010

Page 5: Rappels sur la Programmation java (2)

5

TDD (2)

http://www.slideshare.net/Skud/test-driven-development-tutorial

DJBEL- 2010

Page 6: Rappels sur la Programmation java (2)

6

TDD (3)

http://www.slideshare.net/Skud/test-driven-development-tutorial

DJBEL- 2010

Page 7: Rappels sur la Programmation java (2)

7

TDD (4)• Etape 1 : la conception– Sous forme de diagrammes

• Etape 2 : Tester -> rouge– Écrire les tests en conformité avec les

spécifications ; les exécuter ; ils vont échouer• Etape 3 : l’implémentation• Etape 4 : Tester -> vert– Tester à nouveau : les tests vont passer

DJBEL- 2010

Page 8: Rappels sur la Programmation java (2)

8

TDD (6)• Ecrire les tests une fois et les sauvegarder• Exécuter les tous les jours• Ils doivent être automatiser• Construire des rapports génériques• Exemple : Continuum

DJBEL- 2010

Page 9: Rappels sur la Programmation java (2)

9

TDD (7)

DJBEL- 2010

Page 10: Rappels sur la Programmation java (2)

10

Programmation concurrentielle

DJBEL- 2010

Page 11: Rappels sur la Programmation java (2)

11

Concurrence (1)• Les processeurs multi-cœurs– Loi de Moore a trouvé ses limites (trop cher)– La puissance est répartie sur plusieurs cœurs

• Simplification– Diviser les systèmes en plusieurs entités qui

seront plus facile à gréer • Gestion des événements asynchrones• Des interfaces utilisateurs plus rapides

DJBEL- 2010

Page 12: Rappels sur la Programmation java (2)

12

Concurrence (2)• Une exécution non déterministe– Synchronisation imparfaite -> l’exécution d’un

programme « multi-threadé » est hasardeuse• Des performances non garanties• Cycle de vie mal maitrisé• Des threads partout– JVM : main, GC– AWT Swing : pour gérer les événement IHM– Timer : exécution différée de tâches– RMI, JSP

DJBEL- 2010

Page 13: Rappels sur la Programmation java (2)

13

Concurrence (3)• 1 Objet partagé et accès concurrent -> danger– Faire en sorte que l’objet soit immuable– Utiliser le mot clé synchronized

• Un objet est immutable si– Son état n’est pas modifiable après création :– Tous ses attributs sont déclarés comme final– Il est instancié correctement : constructeur privé– Exemple d’objet immutable : Date, String

DJBEL- 2010

Page 14: Rappels sur la Programmation java (2)

14

Concurrence (5) – Cycle de vie

DJBEL- 2010

Page 15: Rappels sur la Programmation java (2)

15

Concurrence (4) – Exemples de Thread

DJBEL- 2010

Page 16: Rappels sur la Programmation java (2)

16

Concurrence (4) – Objets Immutable

• Un objet immuable :– l’état ne sera plus jamais après sa création– Il est « thread safe »

• Comment ? :– Tous les attributs doivent être déclarés private– Pas méthodes de changement d’état– La class doit être final

• Mettre en balance le surcout de création systématique avec la synchronisation

DJBEL- 2010

Page 17: Rappels sur la Programmation java (2)

17

Concurrence (5) – Les collections• Les collections peuvent, pour certaines, sont

déjà prévues pour un contexte concurrent– Hashtable, Vector

• java.util.concurrent fournit d’autres classes, mieux adaptées pour la concurrence

• A partir de Jdk 5 : deux nouvelles interfaces Queue et BlockingQueue– Queue = List, sans accès aléatoire

DJBEL- 2010

Page 18: Rappels sur la Programmation java (2)

18

Concurrence (6) • Exemples :– Ressource partagée– Synchronisation– Producteur consommateur– Pool de threads

DJBEL- 2010

Page 19: Rappels sur la Programmation java (2)

19

Introspection

DJBEL- 2010

Page 20: Rappels sur la Programmation java (2)

20

Introspection (1)• Un package : java.lang.reflect pour charger et

invoquer• Une classe class<?> pour le lien avec la classe

chargée par le loader : getClass()• Explorer et invoquer : les constructeurs, les

champs et les méthodes d’une classe • NewInstance() pour la création d’1 instance• IsInstance(Object objet) : si l’objet est une

sous classe d’une autre

DJBEL- 2010

Page 21: Rappels sur la Programmation java (2)

21

Introspection (2)• Inspecter une classe :– getDeclaredFields() pour les attributs– getConstructors() : liste des constructeurs– getDeclaredMethods() : less méthodes– getInterfaces (): les interfaces implémentées– getGenericInterfaces() : les types génériques

• Inspecter une méthode :– getModifiers() : la portée (public, private,– getReturnType() : le type retourné– getParameterTypes() : liste des paramètres

DJBEL- 2010

Page 22: Rappels sur la Programmation java (2)

22

Introspection (3)• Charger une classe :

– Class<? extends IPolygone> classe = Class.forName("pattern.composite.Triangle").asSubclass(IPolygone.class);

• Invoquer un constructeur :– Class<?>[] args = new Class[] {};– Constructor<? extends IPolygone> constructeur =

classe.getConstructor(args);– Object[] argsValue = new Object[] {};– Triangle polygone = (Triangle) constructeur.newInstance(argsValue);

• Invoquer une méthode– Class<?>[] parameterTypes =new Class[] {Stack.class};– Method methode = classe.getMethod("setCotes",parameterTypes);– Object[] arguments = new Object[] { cotes };– methode.invoke(polygone,arguments);

DJBEL- 2010

Page 23: Rappels sur la Programmation java (2)

23

Introspection (4)• Exemples :– Exploration– Invocation– Proxy dynamic

DJBEL- 2010

Page 24: Rappels sur la Programmation java (2)

24

Introspection (5)

DJBEL- 2010

Page 25: Rappels sur la Programmation java (2)

25

Fichiers et connexions réseaux

DJBEL- 2010

Page 26: Rappels sur la Programmation java (2)

26

Fichiers et Réseau (1)• Lecture d’un fichier:– FileReader et BufferedReader :

• FileReader reader = new FileReader(« fichier »);• BufferedReader buffer = new BufferedReader(reader);• while((ligne = buffer.readLine()) != null)

• Ecriture dans un fichier:– FileWriter et BufferedWriter :

• FileWriter writer = new FileWriter(« fichier »);• BufferedWriter(writer buffer = new BufferedWriter(writer);• buffer.write("ligne " + (i+1)); buffer.newLine();

• Un fichier mode lecture et écriture– RandomAccessFile access = new RandomAccessFile("fichier.dat",

"rw");DJBEL- 2010

Page 27: Rappels sur la Programmation java (2)

27

Fichiers et Réseau (2)• Sérialisation:– Interface Serializable – FileOutputStream fos = new FileOutputStream(“fichier");– ObjectOutputStream oos = new ObjectOutputStream(fos);– oos.writeObject(polygone);– FileInputStream fis = new FileInputStream("polygone.dat");– ObjectInputStream ois = new ObjectInputStream(fis);– polygone = (Polygone<IPolygone>) ois.readObject();

DJBEL- 2010

Page 28: Rappels sur la Programmation java (2)

28

Fichiers et Réseau (3)• Client/Server TCP :– ServerSocket– Socket

DJBEL- 2010

Page 29: Rappels sur la Programmation java (2)

29

Fichiers et Réseau (4)• RMI :

DJBEL- 2010

Page 30: Rappels sur la Programmation java (2)

30

Fichiers et Réseau (5)

DJBEL- 2010