EPITECH 2012 sebastien@migniot.com Java. Java 1 - Introduction Rappel : Historique Machine virtuelle...

Post on 03-Apr-2015

107 views 2 download

Transcript of EPITECH 2012 sebastien@migniot.com Java. Java 1 - Introduction Rappel : Historique Machine virtuelle...

EPITECH 2012sebastien@migniot.com

Java

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.

PerformantesCollections/JSTL

EvidentesInput/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

// 1. Un tableauString[] numbers = new String[] {

"one", "two", "three", "one" };

// 2. Une listeList<String> list =

Arrays.asList(numbers);

// 3. UnicitéSet<String> set = new

HashSet<String>(list);// contient { "one", "two",

"three" }

// 4. AdditionList<City> trajet = new

ArrayList<City>();trajet.addAll(villes1);trajet.addAll(villes2);

// 5. Soustractiontrajet.removeAll(villesViolentes

);

// 6. UnionSet<City> visitees = new

HashSet<City>();visitees.addAll(villes1);visitees.addAll(villes2);

// 7. IntersectionSet<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 + "]");}

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

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

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;

@Overridepublic 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

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 évidentesApache commons

Les plus utiliséesSpring, 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ésistantA 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éeDepuis les années 70

Arts martiauxReproduire avant d'inventer

Best practices

Javadoc Logging Exceptions JUnit XP, IoC, ConcernRun, 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

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