Your SlideShare is downloading. ×
  • Like
Cours de Génie Logiciel / ESIEA 2013-2014
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Cours de Génie Logiciel / ESIEA 2013-2014

  • 4,334 views
Published

Slides du cours de Génie Logiciel pour les étudiants de l'ESIEA, année 2013-2014. …

Slides du cours de Génie Logiciel pour les étudiants de l'ESIEA, année 2013-2014.

Le Génie Logiciel, c'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." UML, Xp, Scrum, Méthodes agiles, Java, Design Pattern, Swing, SVN, Objet, Tests, etc. et un peu de bavardages...

Published in Education , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
4,334
On SlideShare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
83
Comments
1
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Génie Logiciel ESIEA 2013-2014 Mise-à-jour : 21/03/2014
  • 2. Thierry Leriche-Dessirier thierryler@gmail.com @thierryleriche ESIEA 2001
  • 3. Cours UFA+3A (matin) : • 17 mars • 24 mars • 31 mars • 7 avril Evaluation • ??? (aucun document) • pas durant les cours… Planning ( INF3038 ) TD UFA (matin) : • 25 mars x2 • 8 avril x2 TD 3A : • plein de dates… Logiciels : • Java JDK 1.6 • Maven 3 • Eclipse 3.6
  • 4. Projet ( LAB3416 ) par équipe de 6-8 Dates clés : • 31 mars : constitution des équipes • 7 avril : Présentation du sujet • 23 mai : Remise du projet par email
  • 5. Pédagogie ( futurs jeunes ingénieurs ) www.icauda.com/cours
  • 6. Génie Logiciel
  • 7. L’ESIEA l’Ecole qui forme l’Ingénieur et l’Homme
  • 8. 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 »
  • 9. De quoi on parle dans ce cours ?
  • 10. UML
  • 11. Java avancé
  • 12. Eclipse IDE
  • 13. Design patterns
  • 14. Tests : JUnit, TDD, 3T
  • 15. Les méthodes agiles : Scrum, Xp, Kanban, …
  • 16. Gestion de source
  • 17. Acteurs des projets Chef de projet Analyste Architecte Développeurs Graphiste Junior
  • 18. Utilisateurs Enfants (bébés, jeunes, ado, …) Personnes avec un handicap (malvoyants, daltoniens, malentendants, …) Femmes Hommes
  • 19. Mais on parle aussi… de vaches, de chiens, de téléphones, de voitures, …
  • 20. UML + Java (en support)
  • 21. Un peu d’histoire… pourquoi UML ?
  • 22. http://en.wikipedia.org/wiki/File:OO-historie-2.svg
  • 23. http://en.wikipedia.org/wiki/Unified_Modeling_Language
  • 24. 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
  • 25. Diagramme de classe
  • 26. Des exemples simples
  • 27. public interface Mammifere { int getNombreMamelle(); } public class Loup implements Mammifere { private int nbMamelle; @Override public int getNombreMamelle() { return nbMamelle; } public void setNombreMamelle(int nbMamelle) { this.nbMamelle = nbMamelle; } } Accesseurs ( getter / setter )
  • 28. La classe Loup implémente l’interface Mammifere Attributs Méthodes Graphes UML avec ObjectAid Fleche avec trait en pointillé
  • 29. public class Chien extends Loup { private boolean lof; private String tatouage; public boolean isLof() { return lof; } public void setLof(boolean lof) { this.lof = lof; } public String getTatouage() { return tatouage; } public void setTatouage(String tatouage) { this.tatouage = tatouage; } }
  • 30. La classe Chien étend la classe Loup Fleche avec trait plein
  • 31. La classe Chien étend la classe Loup qui implémente l’interface Mammifere Fleche avec trait plein Fleche avec trait en pointillé
  • 32. Un exemple vachement plus complexe ( mais qui reste courant )
  • 33. généralisation spécialisation Graphes UML avec Omondo
  • 34. Pour la prochaine fois Trouver le sigle utilisé pour représenter le « protected »  Pour « private » on utilise « - »  Pour « public » on utilise « + »  Et pour « protected » ???
  • 35. public enum Genre { HOMME(1, "Garcon"), FEMME(2, "Fille"), TEMPORAIRE(8, "Temp"); final int codeSecu; final String label; Genre(final int codeSecu, final String label) { this.codeSecu = codeSecu; this.label = label; } public int getCodeSecu() { return codeSecu; } public String getLabel() { return label; } }
  • 36. public interface Mammifere { int getNombreMamelle(); Genre getSexe(); } public class Loup implements Mammifere { private int nbMamelle; private Genre sexe; @Override public Genre getSexe() { return sexe; } public void setSexe(Genre sexe) { this.sexe = sexe; } ... }
  • 37. La classe Louppossède un attribut du type Genre (sexe). On parle d’une association. Association *-1
  • 38. Graphes sympas avec yUML : http://yuml.me/ Associations Télécommande et piles
  • 39. Agrégation Télécommande et son couvercle Une télécommande sans couvercle est-elle toujours une télécommande ? Diamant vide
  • 40. Composition Télécommande et ses touches Une télécommande sans touche est-elle toujours une télécommande ? Diamant plein
  • 41. Association, Agrégation, Composition Composition 1-1..* (biilatérale) Association *-* (unilatérale) Agrégation 1-1 (unilatérale) Graphes UML avec Omondo
  • 42. Démo UML avec YUML
  • 43. [Telecommande|-piles;|+getPiles();+setPiles();]*-*[Pile]
  • 44. [Telecommande|-couvercle;|+getCouvercle(); +setCouvercle();]<>1-1>[Couvercle]
  • 45. [Telecommande|-touches|+getTouches();+setTouches();]++1- 1..*>[Touche|-telecommande|+getTelecommande(); setTelecommande();]
  • 46. Diagramme de séquence
  • 47. Au volant de sa voiture
  • 48. Démo UML avec Web Sequence Diagrams
  • 49. A->B: text activate B B-->A: text deactivate B A->A: text A->B: text
  • 50. 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 www.websequencediagrams.com
  • 51. Diagramme d’états-transitions
  • 52. Feux tricolores Etat (adjectif) Transition
  • 53. Lave vaisselle
  • 54. Laver la vaisselle en machine Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/
  • 55. Laver la vaisselle en machine Fin (Ronds imbriqués) Début (Ronds plein)
  • 56. Laver la vaisselle en machine
  • 57. Laver la vaisselle en machine
  • 58. Historique Laver la vaisselle en machine
  • 59. Pour la prochaine fois Diagramme d’état-transitions d’un colis livré par la poste.  Penser aux centres de tri.
  • 60. Bifurcation
  • 61. Bifurcation final
  • 62. Bifurcation
  • 63. http://uml.free.fr
  • 64. Diagramme d’activité
  • 65. Laver la vaisselle en machine (encore) Action (verbe) Transition
  • 66. Laver la vaisselle en machine (encore)  Diagramme très proche de l’état-transitions Etat (adjectif) Action (verbe)
  • 67. Représentation des conditions
  • 68. Représentation D’une décision Décision
  • 69. Synchronisation
  • 70. Signaux
  • 71. Diagramme Use case
  • 72. Interactions
  • 73. Pour la prochaine fois 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.
  • 74. Actu de la semaine
  • 75. Prochaines conférences Scrum Day 10-11 avril 2014 http://www.scrumday.fr/ Devoxx France 16-18 avril 2014 http://www.devoxx.fr/ Mix-it 29-30 avril 2014 http://www.mix-it.fr/ Breizth Camp 21-23 mai 2014 http://www.breizhcamp.org/ Agile France 22-23 mai 2014 http://2014.conference-agile.fr/
  • 76. Tests avec JUnit
  • 77. Tests avec JUnit Prouver que ça fonctionne
  • 78. 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; } } public interface Calculette { int additionner(int a, int b); int multiplier(int a, int b); }
  • 79. import static junit.framework.Assert.assertEquals; import org.junit.Before; import org.junit.Test; public class SimpleCalculetteTestCase { private Calculette calculette; @Before public void doBefore() { calculette = new SimpleCalculette(); } @Test public void testAdditionner() { final int a = 2; final int b = 3; int result = calculette.additionner(a, b); assertEquals(5, result); } Conventions de nommage Avant chaque test Test
  • 80. C’est vert donc c’est ok Les tests de la classe Temps d’exécution
  • 81. Démo dans Eclipse ( calcul de φ : 1,618 033 988 7  Fibonacci )
  • 82. Pour la prochaine fois Copie individuelle à rendre Faire passer au vert le dernier test, sur la durée  Utiliser une HashMap
  • 83. Dossier – La suite de Fibonacci et le nombre d’or : http://www.podcastscience.fm/dossiers/2011/03/17/la-suite-de-fibonacci-nombre-d-or/
  • 84. One more thing
  • 85. Tests A la découverte de Junit « Les Tests en Trois Temps » icauda.com/articles.html#3t
  • 86. Les méthodes agiles ( Scrum, Xp, Kanban, Lean… )
  • 87. Cycle en V
  • 88. 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
  • 89. 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.
  • 90. 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.
  • 91. « Mémento Manifeste Agile »
  • 92. « En route vers l'agilité, SCRUM et XP : retour d'expérience » http://rad-hass.developpez.com/tutoriels/conception/route-vers-agilite-scrum-et-xp-retour- experience/
  • 93. 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 Scrum
  • 94. User story
  • 95. Cartes Scrum ( planning poker )
  • 96. Planning poker
  • 97. Stand up
  • 98. Stand up
  • 99. Dashboard
  • 100. Taskboard
  • 101. Dashboard (taskboard) pour de vrai
  • 102. Dashboard (taskboard) pour de vrai
  • 103. Burndown d’un sprint
  • 104. Burndown en vrai
  • 105. Démo
  • 106. Rétrospective de fin de sprint
  • 107. « 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/
  • 108. Actu de la semaine 7B$
  • 109. User groups Paris JUG (Java User Group) http://www.parisjug.org/ Duchess France http://www.duchess-france.org/ Angular JS Paris http://www.meetup.com/AngularJS-Paris Paris AUG (Android User Group) http://www.paug.fr/
  • 110. Story board et maquettes
  • 111. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 112. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 113. Balsamiq mockups : http://balsamiq.com/products/mockups Axure : http://www.axure.com/ Mockingbird : https://gomockingbird.com/mockingbird/# Pencil : http://pencil.evolus.vn/en-US/Home.aspx Iphone mockup : http://iphonemockup.lkmc.ch/
  • 114. Gestion de version
  • 115. pratique ?
  • 116. disque réseau Pourquoi pas sur un disque réseau ?
  • 117. Pourquoi pas par email ?
  • 118. • Travail à distance ? • Echanges de fichiers (nombreux) dans tous les sens ? • Versions des fichiers ? • Sauvegardes ? • Conflits sur des modifications parallèles ?
  • 119. 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.
  • 120. 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. 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.
  • 121. Update ( récupération de la dernière version des fichiers )
  • 122. Import ( création de la copie locale )
  • 123. Commit ( envoie des fichiers modifiés vers le repository )
  • 124. 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.
  • 125. Commit ( bonne pratique : faire un update avant )
  • 126. Version 1 Version 2 Version 3 Branches ( versions )
  • 127. Version 1 Branche debug Branches - merge ( versions )
  • 128. Version 1 Version 2 Tags ( révisions ) 1.1 1.2 2.1
  • 129. Design patterns
  • 130. 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
  • 131. 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
  • 132. 3 grosses familles : • Création : Factory, Builder, Singleton, etc. • Structure : Facade, Decorator / Adaptor, Proxy, etc. • Comportement : Iterator, Observer, etc.
  • 133. Chez vous Classer les design patterns GOF dans les 3 familles : création, structure ou comportement.
  • 134. A lire sur le Web : http://www.developpez.com
  • 135. Singleton
  • 136. LeSingleton
  • 137. 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; } }
  • 138. 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; } }
  • 139. Le Singleton NotesDesElevesService service = new NotesDesElevesService(); Map<String, Double> notes = service.findNotesDernierExamen()
  • 140. Le Singleton service1 = new NDES(); service1.findNDE() service3 = new NDES(); service3.findNDE() service2 = new NDES(); service2.findNDE() service4 = new NDES(); service4.findNDE() NDES 1 NDES 2 NDES 3 NDES 4
  • 141. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance = new NotesDesElevesService(); private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { return instance; } public Map<String, Double> findNotesDernierExamen() { ... } }
  • 142. Le Singleton NotesDesElevesService service = NotesDesElevesService.getInstance(); Map<String, Double> notes = service.findNotesDernierExamen()
  • 143. Le Singleton service1 = getInstance(); service1.findNDE() service3 = getInstance(); service3.findNDE() service2 = getInstance(); service2.findNDE() service4 = getInstance(); service4.findNDE() NDES
  • 144. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance; private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { if(instance == null) { instance = new NotesDesElevesService(); } return instance; } ... }
  • 145. Chez vous Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations)
  • 146. LeSingleton synchronized ?
  • 147. « Mémento Singleton » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/design-pattern-mementos/
  • 148. Factory
  • 149. Factory
  • 150. Factory public enum RaceChienEnum { LABRADOR("Labrador"), CANICHE("Faux chien"), DOBERMAN("Chien méchant"); private final String name; RaceChienEnum(String name) { this.name = name; } ... }
  • 151. 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) { ... } }
  • 152. Façade
  • 153. Facade
  • 154. 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
  • 155. 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
  • 156. Actu de la semaine
  • 157. Podcasts Les Cast Codeurs http://lescastcodeurs.com/ Le rendez-vous Tech http://frenchspin.com/fr/ niptech / nipdev http://nipcast.com/ Podcast science http://www.podcastscience.fm/
  • 158. Iterator
  • 159. 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); }
  • 160. 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; }
  • 161. Observer
  • 162. 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 ISE("..."); } }
  • 163. 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(); } } }
  • 164. 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(); } } } }
  • 165. JDBC
  • 166. 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 … … … … … Table CHIEN
  • 167. @Override public List<Labrador> findLabradors() { List<Labrador> labradors = new ArrayList<Labrador>(); ... return labradors; }
  • 168. // (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);JDBC select
  • 169. // (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); } JDBC select Iterator ?
  • 170. String sql = "INSERT INTO chien " + " (name, race, nb_de_mamelle, poids) " + " VALUES ( " + + "'" + labrador.getName() + "', " + "'labrador', " + labrador.getNombreMamelle() + ", " + labrador.getWeight() + " )"; Statement stmt = con.createStatement(); stmt.executeUpdate(sql); JDBC insert
  • 171. String sql = "INSERT INTO chien " + " (name, race, nb_de_mamelle, poids) " + " VALUES ( ?, 'labrador', ?, ?) "; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString( 1, labrador.getName() ); stmt.setInt( 2, labrador.getNombreMamelle() ); stmt.setDouble( 3, labrador.getWeight() ); stmt.executeUpdate(sql); JDBC Insert (PreparedStatement)
  • 172. « Introduction à JPA, application au chargement de données depuis une base MySQL » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/charger-donnees-mysql-jpa-intro/ « JDBI » http://www.jdbi.org/ « Named Parameters for PreparedStatement » http://www.javaworld.com/article/2077706/core-java/named-parameters-for- preparedstatement.html « Charger des données depuis une base MySQL en 5 minutes » http://thierry-leriche-dessirier.developpez.com
  • 173. SWING
  • 174. JButton JRadioButtonJCheckBox JComboBox JList JMenu JTextField JTextArea
  • 175. JLabel JFileChooserJTable JDialog JFrame JProgressBar
  • 176. « 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
  • 177. Intégration continue
  • 178. mvn clean install mvn sonar:sonar
  • 179. 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.
  • 180. Archive ZIP Projet_GL_ESIEA_2013-2014_groupe-N.zip Rapport PDF Rapport_Projet_GL_ESIEA_2013-2014_groupe-N.pdf Projet Java-Maven programme.zip Email Projet GL ESIEA 2013-2014 groupe N
  • 181. Thème du projet de GL ( mangez des carottes ) Projet ( http://www.icauda.com/cours.php )
  • 182. Bill Gates : 11 règles de vie Règle 1 : La vie n'est pas juste; il faudra vous y faire. Règle 2 : Le monde se fiche de votre estime personnelle. Le monde s'attendra à ce que vous réalisiez quelque chose AVANT que vous ne vous sentiez bien dans votre peau. Règle 3 : Vous ne toucherez pas 40 000 dollars par année immédiatement en sortant de l'école secondaire. Vous ne serez pas vice-président d'entreprise avec un téléphone dans votre voiture avant d'avoir gagné et mérité les deux. Règle 4 : Si vous pensez que votre professeur est sévère, attendez d'avoir un patron. Règle 5 : Être plongeur dans un restaurant n'a rien d'humiliant. Vos grands-parents utilisaient un terme différent pour décrire ce genre de boulot, ils appelaient cela "s'ouvrir des portes". Règle 6 : Si vous vous retrouvez dans le pétrin, ce n'est pas la faute de vos parents, alors ne vous plaignez pas de votre sort et tirez-en plutôt les leçons nécessaires.
  • 183. Bill Gates : 11 règles de vie Règle 7 : Avant votre naissance, vos parents n'étaient pas aussi ennuyeux qu'ils le sont aujourd'hui. Ils sont devenus comme cela à force de payer vos factures, de laver vos sous-vêtements et de vous écouter raconter à quel point vous êtes cool. Alors, avant de penser sauver la forêt équatoriale des parasites de la génération de vos parents, essayez de mettre un peu d'ordre dans votre propre chambre. Règle 8 : Votre école a peut-être cessé de distinguer les gagnants des perdants, mais pas la vie. Dans certaines écoles, ils ont éliminé la note de passage et ils vous donneront autant de chances que vous voulez avant de trouver la bonne réponse. Cela n'a absolument RIEN À VOIR avec la vraie vie. Règle 9 : La vie n'est pas divisée en semestres. Vous n'êtes pas en vacances tout l'été et très peu d'employeurs sont intéressés à vous aider à vous retrouver. Faites cela durant vos temps libres. Règle 10 : La télévision N'EST PAS représentative de la vraie vie. Dans la vie, en réalité, les gens doivent quitter le restaurant et retourner travailler. Règle 11 : Soyez gentils avec les « nerds ». Il y a de bonnes chances que vous finissiez par travailler pour l'un d'entre eux.
  • 184. Cours FAQ Interviews Articles / tutoriels Magazine Forums News Agendas Critiques
  • 185. 13 OOO OOO pages vues par mois 5 500 000visites par mois 2 500 000visites uniques par mois 5 000 messages forum par jour
  • 186. icauda.com © 1996-2014 Tous droits et bases réservés Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.