310 likes | 474 Views
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).
E N D
Rappels sur la Programmation java (2) NSY208 / 2010-2011
Plan • TDD Assertions, Test et JUNIT • Programmation concurrentielle • Introspection • Fichiers et connexion réseau DJBEL- 2010
TDD DJBEL- 2010
TDD (1) http://www.slideshare.net/Skud/test-driven-development-tutorial DJBEL- 2010
TDD (2) http://www.slideshare.net/Skud/test-driven-development-tutorial DJBEL- 2010
TDD (3) http://www.slideshare.net/Skud/test-driven-development-tutorial DJBEL- 2010
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
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
TDD (7) DJBEL- 2010
Programmation concurrentielle DJBEL- 2010
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
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
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
Concurrence (5) – Cycle de vie DJBEL- 2010
Concurrence (4) – Exemples de Thread DJBEL- 2010
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
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
Concurrence (6) • Exemples : • Ressource partagée • Synchronisation • Producteur consommateur • Pool de threads DJBEL- 2010
Introspection DJBEL- 2010
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
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
Introspection (3) • Charger une classe : • Class<? extendsIPolygone> classe = Class.forName("pattern.composite.Triangle").asSubclass(IPolygone.class); • Invoquer un constructeur : • Class<?>[] args = new Class[] {}; • Constructor<? extendsIPolygone> 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
Introspection (4) • Exemples : • Exploration • Invocation • Proxy dynamic DJBEL- 2010
Introspection (5) DJBEL- 2010
Fichiers et connexions réseaux DJBEL- 2010
Fichiers et Réseau (1) • Lecture d’un fichier: • FileReader et BufferedReader : • FileReaderreader = new FileReader(« fichier »); • BufferedReader buffer = new BufferedReader(reader); • while((ligne = buffer.readLine()) != null) • Ecriture dans un fichier: • FileWriteret BufferedWriter: • FileWriterwriter = new FileWriter(« fichier »); • BufferedWriter(writerbuffer = new BufferedWriter(writer); • buffer.write("ligne " + (i+1)); buffer.newLine(); • Un fichier mode lecture et écriture • RandomAccessFileaccess = new RandomAccessFile("fichier.dat", "rw"); DJBEL- 2010
Fichiers et Réseau (2) • Sérialisation: • Interface Serializable • FileOutputStreamfos = new FileOutputStream(“fichier"); • ObjectOutputStreamoos = new ObjectOutputStream(fos); • oos.writeObject(polygone); • FileInputStreamfis = new FileInputStream("polygone.dat"); • ObjectInputStreamois = new ObjectInputStream(fis); • polygone = (Polygone<IPolygone>) ois.readObject(); DJBEL- 2010
Fichiers et Réseau (3) • Client/Server TCP : • ServerSocket • Socket DJBEL- 2010
Fichiers et Réseau (4) • RMI : DJBEL- 2010
Fichiers et Réseau (5) DJBEL- 2010
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