Génie Logiciel ESIEA 2012-2013



Documents pareils
Génie Logiciel ESIEA

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Yassine ZAKARIA SÉMINAIRE : MÉTHODES AGILES

Conduite de projets SI. Les méthodes «Agiles» N QUAL/1995/3660e ORESYS

Scrum et l'agilité des équipes de développement

Une introduction à la technologie EJB (2/3)

25/12/2012

Gestion de projet Agile. STS IRIS Module «Gérer et organiser un projet informatique»

Design patterns. Design patterns - définition. Design patterns - avantages

Développement Logiciel

Formation Scrum. 2 jours

Scrum + Drupal = Julien Dubois

L'agilité appliquée à nous-mêmes. Philippe Krief, PhD Development Manager IBM France Lab

Développement itératif, évolutif et agile

Plan. 1 Cycles de développement. 2 Méthodes agiles, principes généraux. 3 Comment se passe un Sprint?

Formation pour Product Owner

Scrum Une méthode agile pour vos projets

Méthodes de développement

backlog du produit Product Owner

Certification Scrum Master

Règles d engagement. Présentation Diapositives Bibliographie Questions Les vertus de la marche

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

SCRUM chez BWIN : implémentation d une méthode agile dans Focalpoint Spasija Taseva et Corinne Bacle

Christophe Leroy Marc Lainez. L Agilité est-elle soluble dans la culture francophone?

Programmer en JAVA. par Tama

Alfstore workflow framework Spécification technique

Programmation Par Objets

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Java DataBaseConnectivity

Les méthodes Agiles. Introduc)on aux méthodes Agiles Exemple : Scrum

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Les méthodes Agiles Introduction. Intervenant : Tremeur Balbous tremeur@agilegardener.com 04/09/2008

as Architecture des Systèmes d Information

Architecture Orientée Service, JSON et API REST

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Méthodes Agiles et gestion de projets

INTRODUCTION À LA GESTION DE PROJET AGILE (BACKLOG, TABLEAUX DE BORD, BURNDOWN, PLANIFICATION D ITERATIONS)

Corrigé des exercices sur les références

OpenPaaS Le réseau social d'entreprise

TP1 : Initiation à Java et Eclipse

INF2015 Développement de logiciels dans un environnement Agile Examen final hiver 2015

Programmation Agile Mise en oeuvre via Scrum et l'extreme Programming (XP)

Agile Maroc 24 Novembre Méthodes agiles. Thierry Cros. Agile Maroc 24 novembre 2010

Formation Certifiante Scrum Master

Composants Logiciels. Le modèle de composant de CORBA. Plan

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Tutoriel d installation de Hibernate avec Eclipse

LOG4430 : Architecture logicielle et conception avancée

Analyse,, Conception Objet

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Auto-évaluation Programmation en Java

REX Scrum Master du terrain

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Topologie du web - Valentin Bourgoin - Méthodes agiles & SCRUM

Scrum. ... pour des projets informatiques agiles. Pascal Lando Certified Scrum product owner

Plateforme de capture et d analyse de sites Web AspirWeb

Le Product Backlog, qu est ce c est?

GESTION DE PROJET SÉANCE 2 : LES CYCLE DE VIE D'UN PROJET

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

1. Installation d'un serveur d'application JBoss:

Application web de gestion de comptes en banques

Méthodes agiles. CONSEIL & DÉVELOPPEMENT DE SOLUTIONS E-BUSINESS. Jean-Louis Bénard jlb@businessinteractif.

Projet de programmation (IK3) : TP n 1 Correction

Premiers Pas en Programmation Objet : les Classes et les Objets

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Logiciel de gestion de caisse et d ardoises

Formation agile. Formation agile Created on 24 janv Edited on 29 févr Page 1 sur 16

CHAPITRE 3 : LES METHODES AGILES?

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Un ordonnanceur stupide

Programmation d application Bases de données avec Java

Desktop Intégration. Rémi Forax

Le Product Owner Clé de voute d un projet agile réussi

Les mécanismes d'assurance et de contrôle de la qualité dans un

BIRT (Business Intelligence and Reporting Tools)

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Threads. Threads. USTL routier 1

Package Java.util Classe générique

Cours en ligne Développement Java pour le web

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Héritage presque multiple en Java (1/2)

Introduction à JDBC. Accès aux bases de données en Java

Liste des Formations

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

L enseignement de méthodes agiles dans un contexte d apprentissage actif

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation Orientée Objet

Guide de Préparation. EXIN Agile Scrum. Foundation

Interfaces graphiques avec l API Swing

Les méthodes itératives. Hugues MEUNIER

Architecture pragmatique pour la gestion du cycle de vie des applications (ALM)

Synchro et Threads Java TM

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

XP : plus qu'agile. Extreme Programming v2 et Développement Responsable. Thierry Cros

Transcription:

Génie Logiciel ESIEA 2012-2013 Mise-à-jour : 04/01/2013

Thierry Leriche-Dessirier thierryler@gmail.com @thierryleriche ESIEA 2001 www.icauda.com/cours.html

Planning ( INF3038 ) Cours UFA+3A (matin) : Jeudi 31 janvier Jeudi 7 février Jeudi 14 février Jeudi 21 février Evaluation??? (aucun document) et à chaque cours TD UFA (après-midi) : Jeudi 31 janvier x2 Jeudi 14 février x2 TD 3A (après-midi) : Vendredi 1 er février Vendredi 8 février Vendredi 15 février Vendredi 22 février Logiciels : Java JDK 1.6 Maven 3 Eclipse 3.6

Projet ( LAB3416 ) Dates clés : 7 février : constitution des binômes Pas de mélange entre classe, svp. 21 février : Présentation du sujet 17 mai : Remise du projet par email en binôme

Génie Logiciel

Arrêté ministériel du 30 décembre 1983 (Journal officiel du 19 février 1984) Le génie logiciel est «l'ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et son suivi»

De quoi on parle dans ce cours?

UML

Java avancé

Eclipse IDE

Design patterns

Tests : JUnit, TDD, 3T

Les méthodes agiles : Scrum, Xp, Kanban,

Gestion de source

Acteurs des projets Analyste Architecte Graphiste Junior Chef de projet Développeurs

Utilisateurs Hommes Personnes avec un handicap (malvoyants, daltoniens, malentendants, ) Femmes Enfants (bébés, jeunes, ado, )

Mais on parle aussi de vaches, de chiens, de téléphones, de voitures,

UML + Java (en support)

Un peu d histoire pourquoi UML?

http://en.wikipedia.org/wiki/file:oo-historie-2.svg

http://en.wikipedia.org/wiki/unified_modeling_language

9 diagrammes : de classes ; de cas d utilisation (use case) ; d objets ; de collaboration ; de séquence ; d états-transitions ; d activités ; de composants ; de déploiement

Diagramme de classe

Des exemples simples

public interface Telephone { String getnumber(); } public class SimpleTelephone implements Telephone { private String number; } public String getnumber() { return number; } public void setnumber(string number) { this.number = number; } Accesseurs ( getter / setter )

La classe SimpleTelephone implémente l interface Telephone Fleche avec trait en pointillé Attributs Méthodes Graphes UML avec Omondo

public class PaysTelephone extends SimpleTelephone { private String indicatif; } public String getindicatif() { return indicatif; } public void setindicatif(string indicatif) { this.indicatif = indicatif; }

La classe PaysTelephone étend la classe SimpleTelephone Fleche avec trait plein

Un exemple vachement plus complexe ( mais qui reste courant )

spécialisation généralisation

Trouver le sigle utilisé pour représenter le «protected» Pour «private» on utilise «-» Pour «public» on utilise «+» Et pour «protected»??? Pour la prochaine fois

public enum TypeTelephone { PORTABLE("Portable"), FIXE("Fixe"), FAX("Fax"); private final String label; TypeTelephone(String label) { this.label = label; } } public String getlabel() { return label; }

public interface Telephone { String getnumber(); TypeTelephone gettype(); } public class PaysTelephone extends SimpleTelephone { private String indicatif; private TypeTelephone type; public TypeTelephone gettype() { return type; } public void settype(typetelephone type) { this.type = type; } }...

La classe SimpleTelephone possède un attribut du type TypeTelephone. Association *-1 On parle d une association.

public interface Personne { String getprenom(); String getnom(); List<Telephone> gettelephones(); } public class DefaultPersonne implements Personne { private String prenom; private String nom; private List<Telephone> telephones; }...

La classe DefaultPersonne possède un attribut du type List de Telephone. Association 0..1-1..n On considère que chaque personne possède au moins un numéro de téléphone ( est ce vraiment la réalité? ) On parle aussi d une association.

Graphes sympas avec yuml : http://yuml.me/ Associations Télécommande et piles

Une télécommande sans couvercle est-elle toujours une télécommande? Agrégation Télécommande et son couvercle Diamant vide

Une télécommande sans touche est-elle toujours une télécommande? Composition Télécommande et ses touches Diamant plein

Composition 1-1..* (biilatérale) Association *-* (unilatérale) Association, Agrégation, Composition Agrégation 1-1 (unilatérale)

Démo UML avec YUML

[Telecommande -piles; +getpiles();+setpiles();]*-*[pile]

[Telecommande -couvercle; +getcouvercle(); +setcouvercle();]<>1-1>[couvercle]

[Telecommande -touches +gettouches();+settouches();]++1-1..*>[touche -telecommande +gettelecommande(); settelecommande();]

Diagramme de séquence

Au volant de sa voiture

Démo UML avec Web Sequence Diagrams

A->B: text A->A: text A->B: text activate B B-->A: text deactivate B

www.websequencediagrams.com participant Conducteur participant Cle participant Pedale participant Voiture participant Demarreur participant Moteur participant Arbre Conducteur->Cle: tourner activate Cle Cle->Voiture: demarrer activate Voiture Voiture->Demarreur: activer activate Demarreur Demarreur->Arbre: entrainer activate Arbre Arbre-->Demarreur: ok deactivate Arbre Demarreur-->Voiture: ok deactivate Demarreur deactivate Voiture deactivate Cle Conducteur->Pedale: appuyer activate Pedale Pedale->Voiture: accelerer activate Voiture Voiture->Moteur: accelerer activate Moteur Moteur->Arbre: entrainer activate Arbre Arbre-->Moteur: deactivate Arbre Moteur-->Voiture: vitesse_rotation

Diagramme d états-transitions

Feux tricolores Etat (adjectif) Transition

Lave vaisselle

Laver la vaisselle en machine Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/

Laver la vaisselle en machine Fin (Ronds imbriqués) Début (Ronds plein)

Laver la vaisselle en machine

Laver la vaisselle en machine

Laver la vaisselle en machine Historique

Diagramme d état-transitions d un colis livré par la poste. Penser aux centres de tri. Pour la prochaine fois

Bifurcation

Bifurcation final

Bifurcation

http://uml.free.fr

Diagramme d activité

Laver la vaisselle en machine (encore) Transition Action (verbe)

Laver la vaisselle en machine (encore) Diagramme très proche de l état-transitions Action (verbe) Etat (adjectif)

Représentation des conditions

Représentation D une décision Décision

Synchronisation

Signaux

Diagramme Use case

Interactions

Use case d un homme en interaction avec la télé via la télécommande. Penser aux interactions entre la télé et la télécommande. Pour la prochaine fois

Tests avec JUnit

Tests avec JUnit Prouver que ça fonctionne

public interface Calculette { int additionner(int a, int b); int multiplier(int a, int b); } public class SimpleCalculette implements Calculette { @Override public int additionner(int a, int b) { return a + b; } } @Override public int multiplier(int a, int b) { return a * b; }

import static junit.framework.assert.assertequals; import org.junit.before; import org.junit.test; public class SimpleCalculetteTestCase { private Calculette calculette; Test Avant chaque @Before test public void dobefore() { calculette = new SimpleCalculette(); } @Test public void testadditionner() { final int a = 2; final int b = 3; Conventions de nommage } int result = calculette.additionner(a, b); assertequals(5, result);

C est vert donc c est ok Les tests de la classe Temps d exécution

import java.util.arraylist; import java.util.list; Ajoutons une nouvelle méthode public class AdvanceCalculette implements Calculette { @Override public List<Integer> calculcarres(int nombre) { if (nombre < 0) { throw new IllegalArgumentException( "Le nombre ne peut pas être negatif."); } List<Integer> carres = new ArrayList<Integer>(); for (int i = 0; i < nombre; i++) { Integer carre = i * i; carres.add(carre); } } return carres;

import static junit.framework.assert.assertequals; import static junit.framework.assert.assertfalse; import static junit.framework.assert.assertnotnull; @Test public void testcalculcarre() { final int nombre = 3; List<Integer> carres = calculette.calculcarres(nombre); assertnotnull(carres); assertfalse(carres.isempty()); et son test unitaire } Integer carrede2 = carres.get(2); assertequals(new Integer(4), carrede2);

et son test unitaire qui plante @Test(expected = IllegalArgumentException.class) public void testcalculcarreerror() { final int nombre = -1; } List<Integer> carres = calculette.calculcarres(nombre);

Démo Suite de Fibonacci Tests avec JUnit

Tests A la découverte de Junit «Les Tests en Trois Temps» icauda.com/articles.html#3t

Les méthodes agiles ( Scrum, Xp, Kanban, Lean )

Cycle en V

Manifeste agile Les 4 valeurs : Les individus et leurs interactions plus que les processus et les outils. Des logiciels opérationnels plus qu une documentation exhaustive. La collaboration avec les clients plus que la négociation contractuelle. L adaptation au changement plus que le suivi d un plan. Wikipedia : http://fr.wikipedia.org/wiki/manifeste_agile

Manifeste agile Les 12 principes : Notre plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement des fonctionnalités à grande valeur ajoutée. Accueillez positivement les changements de besoins, même tard dans le projet. Les processus agiles exploitent le changement pour donner un avantage compétitif au client. Livrez fréquemment un logiciel opérationnel avec des cycles de quelques semaines à quelques mois et une préférence pour les plus courts. Les utilisateurs ou leurs représentants et les développeurs doivent travailler ensemble quotidiennement tout au long du projet. Réalisez les projets avec des personnes motivées. Fournissez-leur l environnement et le soutien dont ils ont besoin et faites-leur confiance pour atteindre les objectifs fixés. La méthode la plus simple et la plus efficace pour transmettre de l information à l'équipe de développement et à l intérieur de celle-ci est le dialogue en face à face.

Manifeste agile Les 12 principes (suite) : Un logiciel opérationnel est la principale mesure d avancement. Les processus agiles encouragent un rythme de développement soutenable. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant. Une attention continue à l'excellence technique et à une bonne conception renforce l agilité. La simplicité c est-à-dire l art de minimiser la quantité de travail inutile est essentielle. Les meilleures architectures, spécifications et conceptions émergent d'équipes auto organisées. À intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence.

«En route vers l'agilité, SCRUM et XP : retour d'expérience» http://rad-hass.developpez.com/tutoriels/conception/route-vers-agilitescrum-et-xp-retour-experience/

Scrum

Scrum Des rôles : Product Owner Scrum Master Team Des concepts : Story points Velocity User story Done Des rituels : Sprint Daily stand up Sprint review Planning poker Retrospective Des artefacts : Product backlog Sprint backlog Task board Burn down

User story

Cartes Scrum ( planning poker )

Planning poker

Stand up

Stand up

Dashboard

Taskboard

Dashboard (taskboard) pour de vrai

Dashboard (taskboard) pour de vrai

Burndown d un sprint

Burndown en vrai

Démo

Rétrospective de fin de sprint

«3T en pratique» http://thierry-leriche-dessirier.developpez.com

«Scrum et Agile avec des bonhommes» http://hingchanscrum.blogspot.com

«Présentation des méthodes agiles et Scrum» http://ineumann.developpez.com/tutoriels/alm/agile_scrum

«Scrum Xp depuis les tranchées» http://henrik-kniberg.developpez.com/livre/scrum-xp

«Mémento Scrum gratuit» http://thierry-leriche-dessirier.developpez.com/tutoriels/general/memento-scrum-destination-equipe/

Story board et maquettes

Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch

Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch

Balsamiq mockups : http://balsamiq.com/products/mockups Mockingbird : https://gomockingbird.com/mockingbird/# Pencil : http://pencil.evolus.vn/en-us/home.aspx Iphone mockup : http://iphonemockup.lkmc.ch/

Gestion de version

pratique?

Pourquoi pas sur un disque réseau? disque réseau

Pourquoi pas par email?

Travail à distance? Echanges de fichiers (nombreux) dans tous les sens? Versions des fichiers? Sauvegardes? Conflits sur des modifications parallèles?

Gestion de sources et contrôle de versions : garder un historique des différentes versions des fichiers d'un projet ; permettre le retour à une version antérieure quelconque ; garder un historique des modifications avec leur nature, leur date, leur auteur... ; permettre un accès souple à ces fichiers, en local ou via un réseau ; permettre à des utilisateurs distincts et souvent distants de travailler ensemble sur les mêmes fichiers.

Dépôt (repository) Un dépôt Subversion est l'emplacement central où sont stockées toutes les données relatives aux projets gérés. Le dépôt contient l'historique des versions des fichiers stockés, les logs enregistrés lors des modifications, les dates et auteurs de ces modifications, etc. Un dépôt apparaît de l'extérieur comme un système de fichiers composé de répertoires au sein desquels on peut naviguer, lire et écrire selon les permissions accordées. Copie de travail (working copy) La copie de travail est un répertoire situé en local sur l ordi de l'utilisateur et qui contient une copie des fichiers. C'est cette copie qui sert de base de travail et qui est modifiée en local avant d'être envoyée vers le dépôt.

Update ( récupération de la dernière version des fichiers )

Import ( création de la copie locale )

Commit ( envoie des fichiers modifiés vers le repository )

Opérations Le checkout est l'opération qui consiste à récupérer pour la première fois les fichiers déjà existant au sein d'un projet du dépôt. Cette opération ne se fait en général qu'une fois par projet. Le résultat est une copie de travail. L'update consiste à synchroniser la copie de travail locale avec le dépôt en récupérant la dernière version des fichiers du dépôt. C'est à cette occasion que des conflits de version peuvent apparaître. Un commit est l'opération inverse d'un update. Elle consiste à mettre à jour le dépôt à partir de la copie de travail locale. Une nouvelle révision est alors créée. Un log (simple message texte contenant une description des modifications effectuées) doit être saisi à cette occasion. Remarque : pour qu'un commit soit possible, il faut que la copie de travail corresponde à la dernière version du dépôt (modifications locales exceptées). Si ce n'est pas le cas, il est nécessaire d'effectuer d'abord un update et de résoudre les conflits éventuels avant de réessayer le commit.

Commit ( bonne pratique : faire un update avant )

Branches ( versions ) Version 3 Version 2 Version 1

Branches - merge ( versions ) Branche debug Version 1

Tags ( révisions ) 1.1 1.2 2.1 Version 2 Version 1

Design patterns

Les 23 Design patterns de GOF : Abstract factory, Builder, Factory, Prototype, Singleton, Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy, Chain of responsability, Command, Interpreter, Iterator, Mediator, Memento, State, Strategy, Template, Visitor, Observer

Les patterns JEE : MVC (Model-View-Controller), Business delegate, Composite entity, DAO (Data Access Object), Front controller, Intercepting filter, Service locator, Transfer object, IOC (Inversion Of Control) JEE : Java Enterprise Edition

3 grosses familles : Création : Factory, Builder, Singleton, etc. Structure : Facade, Decorator / Adaptor, Proxy, etc. Comportement : Iterator, Observer, etc.

Classer les design patterns GOF dans les 3 familles : création, structure ou comportement. Chez vous

A lire sur le Web : http://www.developpez.com

Singleton

Le Singleton

Le Singleton public class NotesDesElevesService { public Map<String, Double> findnotesdernierexamen() { Map<String, Double> notes = new HashMap<String, Double>(); notes.put("jean Dupont", 14.5); notes.put("alice Marini", 16.0); notes.put("marc Tonnolu", 8.0);... } return notes; }

Le Singleton public class NotesDesElevesService { public Map<String, Double> findnotesdernierexamen() { Map<String, Double> notes = new HashMap<String, Double>(); // recherche longue en base de donnees } return notes; }

Le Singleton NotesDesElevesService service = new NotesDesElevesService(); Map<String, Double> notes = service.findnotesdernierexamen()

Le Singleton service1 = new NDES(); service1.findnde() NDES 1 service2 = new NDES(); service2.findnde() NDES 2 service3 = new NDES(); service3.findnde() NDES 3 NDES 4 service4 = new NDES(); service4.findnde()

Le Singleton public class NotesDesElevesService { } private static NotesDesElevesService instance = new NotesDesElevesService(); private NotesDesElevesService() {... } public static NotesDesElevesService getinstance() { return instance; } public Map<String, Double> findnotesdernierexamen() {... }

Le Singleton NotesDesElevesService service = NotesDesElevesService.getInstance(); Map<String, Double> notes = service.findnotesdernierexamen()

Le Singleton service1 = getinstance(); service1.findnde() service2 = getinstance(); service2.findnde() NDES service3 = getinstance(); service3.findnde() service4 = getinstance(); service4.findnde()

Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance; private NotesDesElevesService() {... } public static NotesDesElevesService getinstance() { if(instance == null) { instance = new NotesDesElevesService(); } } return instance; }...

Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations) Chez vous

Le Singleton synchronized?

Factory

Factory

Factory public enum RaceChienEnum { LABRADOR("Labrador"), CANICHE("Faux chien"), DOBERMAN("Chien méchant"); private final String name; RaceChienEnum(String name) { this.name = name; } }...

Factory public class AnimalFactory { public Chien getchien(racechienenum race) { switch (race) { case CANICHE: return new Caniche(); case DOBERMAN: return new Doberman(); } } case LABRADOR: return new Labrador(); default: throw new IllegalArgumentException( "Race de chien non gérée"); } public Vache getvache(racevacheenum race) {... }

Façade

Facade

public class CommisDeCuisine { public Plat cuisiner(string recette) { Placard placard = Placard.getInstance(); Frigo frigo = Frigo.getInstance(); PlaqueDeCuisson plaque = PlaqueDeCuisson.getInstance(); Poele poele = placard.prendre("poele"); plaque.allumer(); List<Ingredient> ingredients = frigo.prendre( {"oeuf", "oeuf", "fromage", "beurre"} ); while( plaque.chauffer(poele, ingredients) ) { // attendre } Plat plat = poele.getcontenu(); } }... return plat; pseudo code d une façade

Facade participant Chef participant CommisDeCuisine participant Placard participant Frigo participant PlaqueDeCuisson Chef->CommisDeCuisine: cuisiner activate CommisDeCuisine CommisDeCuisine->Placard: prendre activate Placard Placard-->CommisDeCuisine: poêle deactivate Placard CommisDeCuisine->PlaqueDeCuisson: allumer activate PlaqueDeCuisson CommisDeCuisine->Frigo: prendre activate Frigo Frigo-->CommisDeCuisine: oeufs, fromage, beurre deactivate Frigo CommisDeCuisine->PlaqueDeCuisson: chauffer PlaqueDeCuisson-->CommisDeCuisine: cuit_ok deactivate PlaqueDeCuisson CommisDeCuisine-->Chef: omelette deactivate CommisDeCuisine

Iterator

Iterator John Marie Lucie Marc Paul List<String> prenoms = new ArrayList<String>(); Iterator<String> iter = prenoms.iterator(); while( iter.hasnext() ) { String prenom = iter.next(); System.out.println(prenom); }

Iterator public class EnfantQuiCompteIterator implements Iterator<Integer> { public final static int NOMBRE_MAX = 100; public final static int NOMBRE_DEPART = 1; private int nombre = NOMBRE_DEPART; public boolean hasnext() { return nombre < NOMBRE_MAX; } public Integer next() { return ++nombre; }

Observer

Observer public enum FeuState { VERT(60000), /* 60 secondes */ ORANGE(3000), /* 3 secondes */ ROUGE(60000); /* 60 secondes */ private final long duree; FeuState(long duree) { this.duree = duree; } public FeuState next() { switch (this) { case VERT: return ORANGE; case ORANGE: return ROUGE; case ROUGE: return VERT; default: throw new IllegalStateException("Etat non valide"); } }

Observer public class FeuTricolor extends Observable implements Runnable { private FeuState state; public FeuState getstate() { return state; } @Override public void run() { while (true) { try { Thread.sleep(state.getDuree()); state = state.next(); notifyobservers(state); } } } catch (InterruptedException e) { e.printstacktrace(); }

Observer public class Conducteur implements Observer { Voiture voiture =... @Override public void update(observable obj, Object value) { } } if (obj instanceof FeuTricolor) { FeuState state = (FeuState) value; if (state == FeuState.VERT) { voiture.accelerer(); } }

JDBC

Table CHIEN id name race nb_de_mamelle poids 1 Tigrou labrador 6 45.6 2 Titi caniche 4 6.2 3 Uta labrador 47.1 35 Medor doberman 4 60.0

@Override public List<Labrador> findlabradors() { } List<Labrador> labradors = new ArrayList<Labrador>();... return labradors;

// (1) Class.forName("oracle.jdbc.driver.OracleDriver"); // (2) Connection con = DriverManager.getConnection("monUrl", "monlogin", "monpassword"); // (3) String sql = "SELECT * FROM chien WHERE race = 'labrador' "; // (4) Statement statement = con.createstatement(); // (5) ResultSet rs = statement.executequery(sql);

Iterator? // (6) while ( rs.next() ) { // (7) String name = rs.getstring("name"); double poids = rs.getdouble("poids"); int nbmamelle = rs.getint("nb_de_mamelle"); // (8) Labrador labrador = new Labrador(); labrador.setname(name); labrador.setweight(poids); labrador.setnombremamelle(nbmamelle); } // (9) labradors.add(labrador);

«Charger des données depuis une base MySQL en 5 minutes» http://thierry-leriche-dessirier.developpez.com

SWING

JButton JCheckBox JRadioButton JMenu JComboBox JList JTextField JTextArea

JTable JFileChooser JLabel JDialog JFrame JProgressBar

«A Visual Guide to Swing Components» http://docs.oracle.com/javase/tutorial/ui/features/components.html http://docs.oracle.com/javase/tutorial/ui/features/compwin.html

Intégration continue

Projet ( Il faut être présent au dernier cours pour le découvrir )

Ce qu on a vu en cours et en TD : UML ; Java ; Tests (TDD, 3T) ; Design pattern ; DAO (JDBC / CSV / ) ; Swing (table model) ; Story board ; Maven ; Subversion ; Scrum ; etc.

Email Projet GL ESIEA 2012-2013 groupe N Archive ZIP Projet_GL_ESIEA_2012-2013_groupe-N.zip Rapport PDF Rapport_Projet_GL_ESIEA_2012-2013_groupe-N.pdf Projet Java-Maven programme.zip

Thème du projet de GL ( plantez la petite graine )

Reproduction partielle ou complète strictement interdite sans l autorisation de l auteur. icauda.com 1996-2013 Tous droits et bases réservés