La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

EPITECH 2012 Java. Java 1 - Introduction Rappel : Historique Machine virtuelle Plateformes et marché Tour de J2SE Tour de J2EE.

Présentations similaires


Présentation au sujet: "EPITECH 2012 Java. Java 1 - Introduction Rappel : Historique Machine virtuelle Plateformes et marché Tour de J2SE Tour de J2EE."— Transcription de la présentation:

1 EPITECH 2012 Java

2 Java 1 - Introduction Rappel : Historique Machine virtuelle Plateformes et marché Tour de J2SE Tour de J2EE

3 Java 2 - Technique Les API Les librairies Best practices Exemples

4 Java 2 - Technique Les API Les librairies Best practices Exemples

5 Les API Les API que vous utiliserez le plus. Performantes Collections/JSTL Evidentes Input/Math Riches

6 Les API Collections Input / Output Threading Network Serialization Reflection XML JDBC...

7 Les API java.util.Collection D'une manière générale, une collection est un rassemblement d'objets.

8 Collections // 1. Un tableau String[] numbers = new String[] { "one", "two", "three", "one" }; // 2. Une liste List list = Arrays.asList(numbers); // 3. Unicité Set set = new HashSet (list); // contient { "one", "two", "three" } // 4. Addition List trajet = new ArrayList (); trajet.addAll(villes1); trajet.addAll(villes2); // 5. Soustraction trajet.removeAll(villesViolentes); // 6. Union Set visitees = new HashSet (); visitees.addAll(villes1); visitees.addAll(villes2); // 7. Intersection Set villesFleuries = new HashSet (Arrays.asList(ne w City[] { new City("Colmar"), new City("Mulhouse"), new City("Lille") })); visitees.retainAll(villesFleuries); // contient les villes visitees et fleuries

9 Les API java.io Un ruban divisé en cases consécutives – permet l'entrée et la sortie d'information.

10 Input Output FileInputStream input = null; try { input = new FileInputStream(file); String content = readFile(input); logger.info(content); } finally { if (input != null) { try { input.close(); } catch (IOException ioe) { // Harmless logger.throwing("FooBar", "foo", ioe); logger.fine("Can't close file reader properly"); }

11 Les API java.util.conccurent De toute évidence, une rupture du continuum espace- temps a produit une nouvelle séquence chrono- évènementielle entraînant l'émergence de cette réalité alternative

12 Conccurence LOGGER.info("Starting Master.run()"); BlockingQueue queue = new LinkedBlockingDeque (); ExecutorService service = new ThreadPoolExecutor(MINIMUM_THREADS, MAXIMUM_THREADS, KEEP_ALIVE, KEEP_ALIVE_UNIT, queue); Map > calls = new HashMap >(); for (String pack : packs) { calls.put(pack, service.submit(new Slave(pack).getRunnable())); LOGGER.info("Submitted pack = [" + pack + "]"); } for (String pack : packs) { LOGGER.info(">> Waiting for pack = [" + pack + "]"); try { calls.get(pack).get(); } catch (InterruptedException e) { LOGGER.severe(e.toString()); } catch (ExecutionException e) { LOGGER.severe(e.toString()); } LOGGER.info("<< Waited for pack = [" + pack + "]"); } service.shutdown(); LOGGER.info("Done Master.run()");

13 Les API java.net.Socket A socket is an endpoint for communication between two machines. Exemples joints.

14 Les API java.io.ObjectOutputStream An ObjectOutputStream writes primitive data types and graphs of Java objects to an OutputStream.

15 Les API java.lang.reflect La classe Class n'a pas de constructeur, mais la JVM n'est qu'un ClassLoader Bootclasspath

16 Les API javax.xml Troll (wikipedia) Un troll est une action de nature à créer une polémique en provoquant les participants dun espace de discussion. Le mot désigne également un utilisateur qui a recours à ce type daction Faites du SAX.. ou du StAX

17 XML InputStream stream = openUrl(source.getUrl()); SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(stream, new DefaultHandler() { private boolean insideItem = false; private boolean captureText = false; private StringBuilder texte = null; private String linkHref = null; private Map public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (ITEMS.contains(localName)) { textes = new HashMap (); insideItem = true; } if (CAPTURED.contains(localName)) { texte = new StringBuilder(); captureText = true; } if ("link".equals(localName)) { linkHref = attributes.getValue("href"); } super.startElement(uri, localName, qName, attributes); } // … }

18 Les API java.sql.Connection Write once, run anywhere ^^ PreparedStatement statement = connection.prepareStatement("SELECT * FROM PERSON WHERE LASTVIEW < ?"); statement.setDate(1, yesterday); ResultSet result = statement.executeQuery();

19 Java 2 - Technique Les API Les librairies Best practices Exemples

20 Les librairies Les librairies classiques Juste évidentes Apache commons Les plus utilisées Spring, Hibernate

21 Les librairies Spring Hibernate Apache XStream JUnit AspectJ CGlib

22 Les librairies - Spring Un conteneur IoC Un encapsulateur Transactionnel Sécurité MVC Vers OSGI.. Partiellement commercial

23 Les librairies - Hibernate SGBDO Persiste Automatiquement En cycle Transactionnellement Cascading CGlib Vers EJB3.. Partiellement JBoss

24 Les librairies - Apache Commons lang Commons IO Commons Configuration Commons Net Struts..

25 Les librairies - XStream Simple Résistant A good job..

26 Les librairies - JUnit Deux fois plus de code ? Troll Tester ? Non, j'écris tout d'une traite, et parfait ! Métaphore du grimpeur et du python

27 Les librairies - JUnit Coder les yeux fermés Construire des exemples Documenter les cas non passant L'application a demandé une carte de trop parce que l'utilisateur Joe a triché sur le réseau.

28 Les librairies - AspectJ Librairie avancée Injection de code Logging Sécurité Transactionnalité Profiling

29 Les librairies - CGlib CGLib, BCEL, ASM Injection de code Runtime injection Tissage de proxy Persistance Mock

30 Java 2 - Technique Les API Les librairies Best practices Exemples

31 Best practices The cathedral and the bazaar La roue est inventée Depuis les années 70 Arts martiaux Reproduire avant d'inventer

32 Best practices Javadoc Logging Exceptions JUnit XP, IoC, Concern Run, Right, Fast, Small Singleton (yuk) Observer Visitor Test driven

33 Best practices - Javadoc Vous n'utilisez que des librairies connues et bien documentées Faîtes de même Respectez-vous

34 Best practices - Javadoc 70% du code Exemple /** * Stream the proxy response body to the user agent response output stream. * * SubClasses SHOULD override this method both for metadata gathering and * for stream backup. * request * The user agent request response * The user agent response An output stream IOException * Upon streaming failure */

35 Best practices - Logging Plus jamais System.out.println(..) Utiliser logger.info(..) Utiliser [value] et overrider toString(..) /** * Run. * packs * The packs InterruptedException * Upon Thread#sleep(long)} failure */ public void perform() throws InterruptedException { LOGGER.info("Starting Master.perform() for data = [" + data + "]"); new Slave(data).run(); LOGGER.info("Done Master.perform() for data = [" + data + "]"); }

36 Best practices - Exception Ne pas hésiter à relancer les exceptions A minima, utiliser les finally Un cas non passant = un destinataire Ex: Formattage de nombre « On ne propage pas un bug » try { // At this point, the client ouput stream is opened streamResponse(request, response, proxyRequest, proxyResponse); } finally { // The proxy socket must be closed // The client input stream is closed // The client ouput stream must be closed closeQuietly(response.getOutputStream(), proxyConnection, proxySocket); }

37 Best practices - JUnit Coder les tests avant la méthode Capitaliser pour durer Un test est un exemple de bonne utilisation de votre code Ex: core.CheckListener.checked(Category, String)

38 Best practices - IoC Renier les Singleton et variables globales Si MyClass.foo(..) utilise Globals.VAR, Injecter un argument supplémentaire ou Injecter un membre de classe supplémentaire Ex: Les connections SQL et le multi-threading

39 Best practices – Design Patterns Depuis les années 70, les ordinateurs doublent de vitesse processeur tous les ans, doublent de capacité mémoire, quadruplent de capacité de communication La vitesse des logiciels diminue de moitié tous les ans Ne pas réinventer la roue – ou uniquement après l'avoir apprise

40 Best practices – Design Patterns Observer : dès qu'on voit le mot clé Listener Ex: Barre de progression

41 Best practices – Design Patterns Visitor : de multiples explorations

42 Anti-patterns Vous en rencontrerez. Inventoriez-les. Elles vous disent dans quelle direction est l'autre.. la bonne solution.

43 Exemples Conccurency Collections Unit testing Hibernate Aspect Profiling


Télécharger ppt "EPITECH 2012 Java. Java 1 - Introduction Rappel : Historique Machine virtuelle Plateformes et marché Tour de J2SE Tour de J2EE."

Présentations similaires


Annonces Google