1 COURS DE PROGRAMMATION ORIENTEE OBJET : Rappels des bases en Java, Objets et Classes.
Rappels sur la Programmation java (2)
-
Upload
jena-sykes -
Category
Documents
-
view
55 -
download
1
description
Transcript of Rappels sur la Programmation java (2)
RAPPELS SUR LA PROGRAMMATION JAVA
(2) NSY208 / 2010-2011
2
Plan• TDD Assertions, Test et JUNIT• Programmation concurrentielle• Introspection• Fichiers et connexion réseau
DJBEL- 2010
3
TDD
DJBEL- 2010
4
TDD (1)
http://www.slideshare.net/Skud/test-driven-development-tutorial
DJBEL- 2010
5
TDD (2)
http://www.slideshare.net/Skud/test-driven-development-tutorial
DJBEL- 2010
6
TDD (3)
http://www.slideshare.net/Skud/test-driven-development-tutorial
DJBEL- 2010
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
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
9
TDD (7)
DJBEL- 2010
10
Programmation concurrentielle
DJBEL- 2010
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
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
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
14
Concurrence (5) – Cycle de vie
DJBEL- 2010
15
Concurrence (4) – Exemples de Thread
DJBEL- 2010
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
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
18
Concurrence (6) • Exemples :– Ressource partagée– Synchronisation– Producteur consommateur– Pool de threads
DJBEL- 2010
19
Introspection
DJBEL- 2010
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
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
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
23
Introspection (4)• Exemples :– Exploration– Invocation– Proxy dynamic
DJBEL- 2010
24
Introspection (5)
DJBEL- 2010
25
Fichiers et connexions réseaux
DJBEL- 2010
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
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
28
Fichiers et Réseau (3)• Client/Server TCP :– ServerSocket– Socket
DJBEL- 2010
29
Fichiers et Réseau (4)• RMI :
DJBEL- 2010
30
Fichiers et Réseau (5)
DJBEL- 2010
31
Bibliographie• http://www.javaworld.com/javaworld/jw-09-2007/jw-09-multicoreprocessing.html• http://www.deelin.com/downloads/books/java_concurrency_in_practice.pdf• http://jfod.cnam.fr/NSY102/lectures/j-concur-ltr.pdf
DJBEL- 2010