Java EPITECH 2012 sebastien@migniot.com.

Slides:



Advertisements
Présentations similaires
La programmation concurrente en Java
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
DOM Document Object Model. Généralités Standard du W3C Parseur XML – Génération dun arbre dobjet – Construction totale de larbre DOM est spécifié en IDL.
SAX Simple API for XML. Généralités API non standard développé par les membres du forum XML-DEV Parseur XML – Orienté événement – Parsing dynamique SAX.
Lucene une API d'indexation de texte. stocke les informations dans une structure d'index inversé. Les termes renvoient sur les documents qui les contiennent.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Au programme du jour …. Un peu plus de structures de données
NSY102 1 NSY102 Conception de logiciels Intranet Concurrence Notes de cours Cnam Paris jean-michel Douin, douin au cnam point fr 25 Février 2013.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Foutse Khomh © Guéhéneuc, 2009; Khomh, 2010 Département de génie informatique et de génie logiciel École Polytechnique de Montréal LOG4430 : Architecture.
Approfondissement du langage
Voisin-Polian : Introduction à Java 1 Introduction à Java - les flots - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Plan du cours 5:Threads introduction Définition Création des Threads
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV Threads Module Java Expert.
Calcul numérique (avec Maple)
Les entrées /sorties en Java François Bonneville
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
Mobile Clients for Location-Based Services
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Structures collectives en Java
CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.
Les collections d'objets
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Débugage avec log4j Azim Roussanaly.
Introduction à Node.JS Vincent Peybernes.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Objets Javascript Mécanismes internes Le concept et la construction dobjets
Généricité (fin) collections…. GénéricitéPOO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Types paramètres bornés.
Java : Le Collections Framework (JCF)
Palais des congrès Paris 7, 8 et 9 février Mardi 7 février Nicolas Ledez Architecte système Orange Business Services Introduction à Ruby.
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Python La programmation objet
Threads en Java ( Livre Software engineering: chapitre 9)
Programmation par Objets et Java
1 Part3 3 2 Exception Générée par un problème de programme Objet définissant une erreur Peut être saisie et traitée par un programme Une erreur: situation.
Rappels Java.
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
PHP GTK PHP…au delà du Web Paris, 28 novembre 2001 Armel FAUVEAU GLOBALIS media systems.
IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java.
Multi-Thread Jian-Yun Nie
1 IFT 6800 Atelier en Technologies dinformation Cours 7 : Le langage de programmation Java chapitre 5: Les API Java.
Exceptions IFT1025: Programmation 2 Jian-Yun Nie.
Indexation et Recherche d'Information
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres bornés.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Cours 6 décembre. Collections POO-L3 H. Fauconnier3 Collections types de données interfaces implémentations algorithmes Interfaces:
jean-michel Douin, douin au cnam point fr
COURS DE PROGRAMMATION ORIENTEE OBJET :
1 CSI 2532 Lab6 Application Web et DB Février 27, 2012.
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
Java, les objets : tout de suite ! Rassembler, grouper les objets
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY.
Michel Coletta - Journées PATTERNS Avril Grenoble1 STRUTS Introduction Technologies Java Architecture Développement Enseigner quoi ?
Première CTP le 4 décembre Nouvelle CTP depuis le 1 er février RTM milieu de cette année.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
AOP dans .Net avec PostSharp
Les collections. Gestion d’ensembles d’objets Tableaux Taille fixe Pas de manipulation aisée des objets dans le tableaux Base tab1[]= new Base[5]; for(int.
Les API Java. java.lang.* Object Boolean Character Class Math Number Process Runtime String StringBuffer System Thread ThreadGroup Throwable Double Float.
Cours du 3/12. Threads threadPOO-L3 H. Fauconnier3 Threads  threads: plusieurs activités qui coexistent et partagent des données exemples:  pendant.
Laboratoire des outils informatiques pour la conception et la production en mécanique (LICP) ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE 1 Petri nets for.
1 INF7115-Base de données Présentation La persistance avec JDO Kerlyne FOSTINE Figaro LUC.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
22 Azure et les technologies non Microsoft : PHP, Java, Eclipse février 2010 Yves Yang – Soyatec Xavier Warzee – Microsoft Stephane Crozatier –
Philippe Gandy – 17 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Collections. POO-L3 H. Fauconnier2 Collections  types de données interfaces implémentations algorithmes  Interfaces:
APIs Concurrentes Rémi Forax
Transcription de la présentation:

Java EPITECH 2012 sebastien@migniot.com

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

Java 2 - Technique Les API Les librairies Best practices Exemples

Java 2 - Technique Les API Les librairies Best practices Exemples

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

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

Les API java.util.Collection http://fr.wikipedia.org/wiki/Collection D'une manière générale, une collection est un rassemblement d'objets.

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

Les API java.io http://fr.wikipedia.org/wiki/Machine_de_Turing Un ruban divisé en cases consécutives – permet l'entrée et la sortie d'information.

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"); }

Les API java.util.conccurent http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html 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

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

Les API java.net.Socket http://download.oracle.com/javase/6/docs/api/java/net/Socket.html A socket is an endpoint for communication between two machines. Exemples joints.

Les API java.io.ObjectOutputStream http://download.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html An ObjectOutputStream writes primitive data types and graphs of Java objects to an OutputStream.

Les API java.lang.reflect http://download.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html La classe Class n'a pas de constructeur, mais la JVM n'est qu'un ClassLoader Bootclasspath

Les API javax.xml Faites du SAX .. ou du StAX http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html Troll (wikipedia) Un troll est une action de nature à créer une polémique en provoquant les participants d’un espace de discussion. Le mot désigne également un utilisateur qui a recours à ce type d’action Faites du SAX .. ou du StAX

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<String, String> textes; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (ITEMS.contains(localName)) { textes = new HashMap<String, String>(); 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); // …

Les API java.sql.Connection PreparedStatement statement = connection http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html Write once, run anywhere ^^ PreparedStatement statement = connection .prepareStatement("SELECT * FROM PERSON WHERE LASTVIEW < ?"); statement.setDate(1, yesterday); ResultSet result = statement.executeQuery();

Java 2 - Technique Les API Les librairies Best practices Exemples

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

Les librairies Spring Hibernate Apache XStream JUnit AspectJ CGlib

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

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

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

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

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

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.

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

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

Java 2 - Technique Les API Les librairies Best practices Exemples

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

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

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

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. * @param request * The user agent request * @param response * The user agent response * @return An output stream * @throws IOException * Upon streaming failure */

Best practices - Logging Plus jamais System.out.println(..) Utiliser logger.info(..) Utiliser [value] et overrider toString(..) /** * Run. * * @param packs * The packs * @throws InterruptedException * Upon {@link 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 + "]"); }

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); }

Best practices - JUnit Coder les tests avant la méthode http://www.extremeprogramming.org/rules/testfirst.html 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)

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

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

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

Best practices – Design Patterns Visitor : de multiples explorations

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

Exemples Conccurency Collections Unit testing Hibernate Aspect Profiling