Génie Logiciel
ESIEA 2014-2015
Mise-à-jour : 24/01/2015
Thierry Leriche-Dessirier
thierryler@gmail.com
@thierryleriche
www.icauda.com
ESIEA 2001
Cours
• 26 février
• 27 février
• 5 mars
• 6 mars
Evaluation
• Semaine du 21/05/2015
(aucun document)
Planning
( INF3038 )
Test DISC Essentiel
(gratuit)
http://profil4.com/disc-essentiel.php
Projet
( LAB3416 )
par équipe de 6-8
Dates clés :
• 5 mars : constitution des équipes
• 6 mars : Présentation du sujet
• 1...
Pédagogie
( futurs jeunes ingénieurs )
www.icauda.com/cours
L’ESIEA
l’Ecole qui forme
l’Ingénieur et l’Homme
Arrêté ministériel du 30 décembre 1983
(Journal officiel du 19 février 1984)
Le génie logiciel est « l'ensemble des activi...
Wikipedia
Le génie logiciel « est une science de génie industriel qui étudie
les méthodes de travail et les bonnes pratiqu...
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’ét...
Diagramme de classe
Des exemples simples
public interface Mammifere {
int getNombreMamelle();
}
public class Loup implements Mammifere {
private int nbMamelle;
@Ov...
La classe Loup
implémente l’interface
Mammifere
Attributs
Méthodes
Graphes UML avec
ObjectAid
Fleche avec trait
en pointil...
public class Chien extends Loup {
private boolean lof;
private String tatouage;
public boolean isLof() {
return lof;
}
pub...
La classe Chien étend la
classe Loup
Fleche avec trait
plein
La classe Chien étend la
classe Loup qui
implémente l’interface
Mammifere
Fleche avec trait
plein
Fleche avec trait
en poi...
Un exemple vachement plus complexe
( mais qui reste courant )
généralisation
spécialisation
Graphes UML
avec Omondo
Pour la prochaine fois
Trouver le sigle utilisé pour représenter le « protected »
 Pour « private » on utilise « - »
 Po...
public enum Genre {
HOMME(1, "Garcon"),
FEMME(2, "Fille"),
TEMPORAIRE(8, "Temp");
final int codeSecu;
final String label;
...
public interface Mammifere {
int getNombreMamelle();
Genre getSexe();
}
public class Loup implements Mammifere {
private i...
La classe Louppossède
un attribut du type
Genre (sexe).
On parle d’une
association.
Association *-1
Graphes sympas avec yUML :
http://yuml.me/
Associations
Télécommande et piles
Agrégation
Télécommande
et son couvercle
Une télécommande sans
couvercle est-elle toujours
une télécommande ?
Diamant vide
Composition
Télécommande
et ses touches
Une télécommande sans
touche est-elle toujours une
télécommande ?
Diamant plein
Association,
Agrégation,
Composition
Composition 1-1..*
(biilatérale)
Association *-*
(unilatérale)
Agrégation 1-1
(unilat...
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
activate B
B-->A: text
deactivate B
A->A: text
A->B: text
participant Conducteur
participant Cle
participant Pedale
participant Voiture
participant Demarreur
participant Moteur
par...
Diagramme de séquence du programme suivant
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public c...
suite
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public class Job {
public int work() {
try {
...
suite
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public class AnimalService {
private static A...
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
Historique
Laver la vaisselle en machine
Diagramme d’état-transitions d’un œuf qu’on cuit dans une
casserole d’eau et/ou dans une poêle.
Pour la prochaine fois
Cop...
Bifurcation
Bifurcation
final
Bifurcation
http://uml.free.fr
Diagramme d’activité
Laver la vaisselle en machine (encore)
Action
(verbe)
Transition
Laver la vaisselle en machine (encore)
 Diagramme très proche de l’état-transitions
Etat
(adjectif)
Action
(verbe)
Représentation
des conditions
Représentation
D’une décision
Décision
Synchronisation
Signaux
Prochaines conférences
Scrum Day
10-11 avril 2014
http://www.scrumday.fr/
Devoxx France
16-18 avril 2014
http://www.devoxx...
Tests avec JUnit
Prouver que ça fonctionne
public class SimpleCalculette
implements Calculette {
@Override
public int additionner(int a, int b) {
return a + b;
}
@Ov...
import static junit.framework.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
public class SimpleCalc...
C’est vert donc
c’est ok
Les tests de
la classe
Temps d’exécution
Démo dans Eclipse
( calcul de φ : 1,618 033 988 7  Fibonacci )
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
(code des tests ET code de la calculette)
Factorise...
Dossier – La suite de Fibonacci et le nombre d’or :
http://www.podcastscience.fm/dossiers/2011/03/17/la-suite-de-fibonacci...
One more thing
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 logiciel...
Manifeste agile
Les 12 principes :
• Notre plus haute priorité est de satisfaire le client en livrant rapidement et
réguli...
Manifeste agile
Les 12 principes (suite) :
• Un logiciel opérationnel est la principale mesure d’avancement.
• Les process...
« Mémento Manifeste Agile »
« En route vers l'agilité, SCRUM et XP : retour d'expérience »
http://rad-hass.developpez.com/tutoriels/conception/route-v...
Des rôles :
• Product Owner
• Scrum Master
• Team
Des concepts :
• Story points
• Velocity
• User story
• Done
Des rituels...
User story
Cartes Scrum
( planning poker )
Planning poker
Stand up
Stand up
Dashboard
Taskboard
Dashboard (taskboard) pour de vrai
Dashboard (taskboard) pour de vrai
Cherchez ce qui ne va pas
Burndown d’un sprint
Burndown en vrai
0
5
10
15
20
25
30
35
40
45
50
1 2 3 4 5 6 7 8 9 10
RAF
idéal
Idéal adapté
Démo
Rétrospective de fin de sprint
Quelques lectures
« 3T en pratique »
http://thierry-leriche-dessirier.developpez.com
« Scrum et Agile avec des bonhommes »...
https://www.youtube.com/watch?v=HsB0UZR7XvE&index=1&list=PLypC2fA0xsaWULkC3Q9b1d
XdZGIi0oj-h
Multitâche au volant ?
Multitâche au travail ?
Dossier sur le « multitasking » sur Podcast Science :
http://www.podcastscience.fm/dossiers/2013/0...
Multitâche en réunion ?
Test DISC gratuit : www.profil4.com
Podcast : http://www.outilsdumanager.com
DISC
Comportement et Communication
Taureau
Vous êtes bourré d’énergie, centré
sur l’action et constamment en
mouvement. D’un naturel plutôt
positif et factue...
Vous êtes soucieux d’avoir de
bonnes relations personnelles,
généralement positif et extraverti.
Vous prenez plaisir à la ...
Vous appréciez la cohérence
dans votre vie et vous pouvez
combattre pour une cause avec
obstination. Vous vous appliquez
à...
Vous aimez réfléchir avant d’agir
et vous pouvez être perçu
comme froide et indifférent.
Vous manifestez un fort désir de
...
User groups
Paris JUG (Java User Group)
http://www.parisjug.org/
Duchess France
http://www.duchess-france.org/
Angular JS ...
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
Axure :
http://www.axure.com/
Mockingbird :
https://gomockingbird....
Source Code Management (SCM)
http://fr.wikipedia.org/wiki/Source_Code_Management
SubversionCVS Mercurial Git
pratique ?
disque réseau
Pourquoi pas sur un disque réseau ?
Pourquoi pas par email ?
• Travail à distance ?
• Echanges de fichiers (nombreux) dans tous les sens ?
• Versions des fichiers ?
• Sauvegardes ?
• ...
Subversion : SCM centralisé
Gestion de sources et contrôle de versions :
• garder un historique des différentes versions des
fichiers d'un projet ;
• ...
Copie de travail (working copy)
La copie de travail est un répertoire situé en local sur l’ordi
de l'utilisateur et qui co...
Import / checkout
( création de la copie locale )
Update
( récupération de la dernière
version des fichiers )
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...
Commit
( bonne pratique : faire un update avant )
❶
❷
Version 1
Version 2
Version 3
Branches
( versions )
Version 1
Branche debug
Branches - merge
( versions )
Version 1
Version 2
Tags
( révisions )
1.1 1.2
2.1
Git : SCM décentralisé
Espaces
Repo local
Repo distant
Working
copie
Commandes quotidiennes
push
fetch
pull
commit
clone
Git process
merge fetch
commit push
Tutoriel Git chez Atlassian : https://www.atlassian.com/fr/git/tutorial
Travail en branche
( les branches ne sont pas chères avec Git )
A B C D
E F G
Master
M-7548-DEV
Merge
A B C D
E F G
Master
M-7548-DEV
Rebase
A B C D
E F G
Master
M-7548-DEV
E’ F’ G’
Cherry-pick
A B D G
E C E
E’
Master
une autre
branche
F H
« Git en 15 minutes »
https://try.github.io/levels/1/challenges/1
Quelques logiciels :
• Tortoise
• Sourcetree
• Ungit
• Git bash
• Plugins d’IDE (Netbeans/Eclipse/etc.)
Intégration continue
mvn clean install
mvn sonar:sonar
Design patterns
Les 23 Design patterns de GOF :
Abstract factory, Builder, Factory, Prototype, Singleton,
Adapter, Bridge, Composite, Deco...
Les patterns JEE :
MVC (Model-View-Controller), Business delegate, Composite
entity, DAO (Data Access Object), Front contr...
3 grosses familles :
• Création : Factory, Builder, Singleton, etc.
• Structure : Facade, Decorator / Adaptor, Proxy, etc....
Chez vous
Classer les design patterns GOF dans les 3 familles :
création, structure ou comportement.
A lire sur le Web : http://www.developpez.com
Singleton
LeSingleton
Le Singleton
public class NotesDesElevesService {
public Map<String, Double> findNotesDernierExamen() {
Map<String, Double...
Le Singleton
public class NotesDesElevesService {
public Map<String, Double> findNotesDernierExamen() {
Map<String, Double...
Le Singleton
NotesDesElevesService service = new NotesDesElevesService();
Map<String, Double> notes = service.findNotesDer...
Le Singleton
service1 = new NDES();
service1.findNDE()
service3 = new NDES();
service3.findNDE()
service2 = new NDES();
se...
Le Singleton
public class NotesDesElevesService {
private static NotesDesElevesService instance
= new NotesDesElevesServic...
Le Singleton
NotesDesElevesService service =
NotesDesElevesService.getInstance();
Map<String, Double> notes = service.find...
Le Singleton
service1 = getInstance();
service1.findNDE()
service3 = getInstance();
service3.findNDE()
service2 = getInsta...
Le Singleton
public class NotesDesElevesService {
private static NotesDesElevesService instance;
private NotesDesElevesSer...
Chez vous
Dessiner le diagramme de classe UML du Singleton
(avec les bonnes associations)
LeSingleton
synchronized ?
« Mémento Singleton »
http://thierry-leriche-dessirier.developpez.com/tutoriels/java/design-pattern-mementos/
Factory
Factory
Factory
public enum RaceChienEnum {
LABRADOR("Labrador"),
CANICHE("Faux chien"),
DOBERMAN("Chien méchant");
private final ...
Factory
public class AnimalFactory {
public Chien getChien(RaceChienEnum race) {
switch (race) {
case CANICHE:
return new ...
Façade
Facade
public class CommisDeCuisine {
public Plat cuisiner(String recette) {
Placard placard = Placard.getInstance();
Frigo frigo...
Facade
participant Chef
participant CommisDeCuisine
participant Placard
participant Frigo
participant PlaqueDeCuisson
Chef...
Podcasts
Les Cast Codeurs
http://lescastcodeurs.com
Le rendez-vous Tech
http://frenchspin.com/fr
niptech / nipdev
http://n...
Iterator
Iterator
John Marie Lucie Marc Paul
List<String> prenoms = new ArrayList<String>();
prenoms.add( "John" );
prenoms.add( "M...
Iterator
John Marie Lucie Marc Paul
List<String> prenoms = ...
Iterator<String> iter = prenoms.iterator();
while( iter.has...
Iterator
public class EnfantQuiCompteIterator
implements Iterator<Integer> {
public final static int NOMBRE_MAX = 100;
pub...
Observer
Observer
public enum FeuState {
VERT(60000), // 60 secondes
ORANGE(3000), // 3 secondes
ROUGE(60000); // 60 secondes
priva...
Observer
public class FeuTricolor extends Observable
implements Runnable {
private FeuState state;
public FeuState getStat...
Observer public class Conducteur implements Observer {
Voiture voiture = ...
@Override
public void update(Observable obj, ...
JDBC
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 dobe...
@Override
public List<Labrador> findLabradors() {
List<Labrador> labradors = new ArrayList<Labrador>();
...
return labrado...
// (1)
Class.forName("oracle.jdbc.driver.OracleDriver");
// (2)
Connection con
= DriverManager.getConnection("monUrl",
"mo...
// (6)
while ( rs.next() ) {
// (7)
String name = rs.getString("name");
double poids = rs.getDouble("poids");
int nbMamell...
JDBC
insert
String sql = "INSERT INTO chien "
+ " (name, race, nb_de_mamelle, poids) "
+ " VALUES ( '" + labrador.getName(...
JDBC
Insert (PreparedStatement)
String sql = "INSERT INTO chien "
+ " (name, race, nb_de_mamelle, poids) "
+ " VALUES ( ?,...
« Introduction à JPA, application au chargement de données depuis une base MySQL »
http://thierry-leriche-dessirier.develo...
Ce qu’on a vu en cours et en TD :
• UML ;
• Java ;
• Tests (TDD, 3T) ;
• Design pattern ;
• DAO (JDBC / CSV / …) ;
• Swing...
Archive ZIP
projet_GLPOO_ESIEA_2014-2015_groupe-Dupont.zip
Rapport PDF
rapport.pdf
Notice
notice.txt
Email
Projet GLPOO ES...
Thème du projet de GL
( Eternity )
Projet
( http://www.icauda.com/cours.php )
icauda.com © 1996-2015
Tous droits et bases réservés
Reproduction partielle ou complète strictement interdite sans l’autor...
Cours
FAQ
Interviews
Articles / tutoriels
Magazine
Forums
News
Agendas
Critiques
13 OOO OOO pages vues par mois
5 500 000visites par mois
2 500 000visites uniques par mois
5 000 messages forum par jour
SWING
JButton JRadioButtonJCheckBox
JComboBox JList
JMenu
JTextField JTextArea
JLabel
JFileChooserJTable
JDialog JFrame
JProgressBar
« A Visual Guide to Swing Components »
http://docs.oracle.com/javase/tutorial/ui/features/components.html
http://docs.orac...
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Cours de Génie Logiciel / ESIEA 2014-2015
Prochain SlideShare
Chargement dans…5
×

Cours de Génie Logiciel / ESIEA 2014-2015

12 481 vues

Publié le

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

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...

Publié dans : Formation
0 commentaire
7 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
12 481
Sur SlideShare
0
Issues des intégrations
0
Intégrations
9 245
Actions
Partages
0
Téléchargements
160
Commentaires
0
J’aime
7
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cours de Génie Logiciel / ESIEA 2014-2015

  1. 1. Génie Logiciel ESIEA 2014-2015 Mise-à-jour : 24/01/2015
  2. 2. Thierry Leriche-Dessirier thierryler@gmail.com @thierryleriche www.icauda.com ESIEA 2001
  3. 3. Cours • 26 février • 27 février • 5 mars • 6 mars Evaluation • Semaine du 21/05/2015 (aucun document) Planning ( INF3038 )
  4. 4. Test DISC Essentiel (gratuit) http://profil4.com/disc-essentiel.php
  5. 5. Projet ( LAB3416 ) par équipe de 6-8 Dates clés : • 5 mars : constitution des équipes • 6 mars : Présentation du sujet • 15 mai : Remise du projet par email
  6. 6. Pédagogie ( futurs jeunes ingénieurs ) www.icauda.com/cours
  7. 7. L’ESIEA l’Ecole qui forme l’Ingénieur et l’Homme
  8. 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. 9. Wikipedia Le génie logiciel « est une science de génie industriel qui étudie les méthodes de travail et les bonnes pratiques des ingénieurs qui développent des logiciels. » Le génie logiciel « s'intéresse en particulier aux procédures systématiques qui permettent d'arriver à ce que des logiciels de grande taille correspondent aux attentes du client, soient fiables, aient un coût d'entretien réduit et de bonnes performances tout en respectant les délais et les coûts de construction. »
  10. 10. UML + Java (en support)
  11. 11. Un peu d’histoire… pourquoi UML ?
  12. 12. http://en.wikipedia.org/wiki/File:OO-historie-2.svg
  13. 13. http://en.wikipedia.org/wiki/Unified_Modeling_Language
  14. 14. 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
  15. 15. Diagramme de classe
  16. 16. Des exemples simples
  17. 17. 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 )
  18. 18. La classe Loup implémente l’interface Mammifere Attributs Méthodes Graphes UML avec ObjectAid Fleche avec trait en pointillé
  19. 19. 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; } }
  20. 20. La classe Chien étend la classe Loup Fleche avec trait plein
  21. 21. La classe Chien étend la classe Loup qui implémente l’interface Mammifere Fleche avec trait plein Fleche avec trait en pointillé
  22. 22. Un exemple vachement plus complexe ( mais qui reste courant )
  23. 23. généralisation spécialisation Graphes UML avec Omondo
  24. 24. Pour la prochaine fois Trouver le sigle utilisé pour représenter le « protected »  Pour « private » on utilise « - »  Pour « public » on utilise « + »  Et pour « protected » ???
  25. 25. 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; } }
  26. 26. 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; } ... }
  27. 27. La classe Louppossède un attribut du type Genre (sexe). On parle d’une association. Association *-1
  28. 28. Graphes sympas avec yUML : http://yuml.me/ Associations Télécommande et piles
  29. 29. Agrégation Télécommande et son couvercle Une télécommande sans couvercle est-elle toujours une télécommande ? Diamant vide
  30. 30. Composition Télécommande et ses touches Une télécommande sans touche est-elle toujours une télécommande ? Diamant plein
  31. 31. Association, Agrégation, Composition Composition 1-1..* (biilatérale) Association *-* (unilatérale) Agrégation 1-1 (unilatérale) Graphes UML avec Omondo
  32. 32. Démo UML avec YUML
  33. 33. [Telecommande|-piles;|+getPiles();+setPiles();]*-*[Pile]
  34. 34. [Telecommande|-couvercle;|+getCouvercle(); +setCouvercle();]<>1-1>[Couvercle]
  35. 35. [Telecommande|-touches|+getTouches();+setTouches();]++1- 1..*>[Touche|-telecommande|+getTelecommande(); setTelecommande();]
  36. 36. Diagramme de séquence
  37. 37. Au volant de sa voiture
  38. 38. Démo UML avec Web Sequence Diagrams
  39. 39. A->B: text activate B B-->A: text deactivate B A->A: text A->B: text
  40. 40. 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
  41. 41. Diagramme de séquence du programme suivant Pour la prochaine fois Copie individuelle à rendre sur papier au stylo public class Launcher { public static void main(String[] args) { Job job = new Job(); int result = job.work(); System.exit(result); } } public class DogReader { public DogReader(String string) { ... } public List<Dog> getByRace(String string) { ... } }
  42. 42. suite Pour la prochaine fois Copie individuelle à rendre sur papier au stylo public class Job { public int work() { try { DogReader dr = new DogReader("c:/files/dog.xml"); List<Dog> labradors = dr.getByRace("labrador"); AnimalService service = AnimalService.getInstance(); service.send(labradors); return labradors.size(); } catch (Exception e) { return -1; } } }
  43. 43. suite Pour la prochaine fois Copie individuelle à rendre sur papier au stylo public class AnimalService { private static AnimalService instance = null; private AnimalService() { ... } public static AnimalService getInstance() { if (instance == null) { instance = new AnimalService(); } return instance; } public void send(List<Dog> labradors) { ... } }
  44. 44. Diagramme d’états-transitions
  45. 45. Feux tricolores Etat (adjectif) Transition
  46. 46. Lave vaisselle
  47. 47. Laver la vaisselle en machine Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/
  48. 48. Laver la vaisselle en machine Fin (Ronds imbriqués) Début (Ronds plein)
  49. 49. Laver la vaisselle en machine
  50. 50. Laver la vaisselle en machine
  51. 51. Historique Laver la vaisselle en machine
  52. 52. Diagramme d’état-transitions d’un œuf qu’on cuit dans une casserole d’eau et/ou dans une poêle. Pour la prochaine fois Copie individuelle à rendre sur papier au stylo (un seul diagramme pour la casserole et la poêle)
  53. 53. Bifurcation
  54. 54. Bifurcation final
  55. 55. Bifurcation
  56. 56. http://uml.free.fr
  57. 57. Diagramme d’activité
  58. 58. Laver la vaisselle en machine (encore) Action (verbe) Transition
  59. 59. Laver la vaisselle en machine (encore)  Diagramme très proche de l’état-transitions Etat (adjectif) Action (verbe)
  60. 60. Représentation des conditions
  61. 61. Représentation D’une décision Décision
  62. 62. Synchronisation
  63. 63. Signaux
  64. 64. 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/
  65. 65. Tests avec JUnit Prouver que ça fonctionne
  66. 66. 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); }
  67. 67. 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; final int result = calculette.additionner(a, b); assertEquals(5, result); } Conventions de nommage Avant chaque test Test
  68. 68. C’est vert donc c’est ok Les tests de la classe Temps d’exécution
  69. 69. Démo dans Eclipse ( calcul de φ : 1,618 033 988 7  Fibonacci )
  70. 70. Pour la prochaine fois Copie individuelle à rendre sur papier au stylo (code des tests ET code de la calculette) Factoriser les tests et les faire tous passer au vert (y compris le dernier sur le durée)  Utiliser une HashMap
  71. 71. 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/
  72. 72. One more thing
  73. 73. Tests A la découverte de Junit « Les Tests en Trois Temps » icauda.com/articles.html#3t
  74. 74. Les méthodes agiles ( Scrum, Xp, Kanban, Lean… )
  75. 75. Cycle en V
  76. 76. 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
  77. 77. 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.
  78. 78. 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.
  79. 79. « Mémento Manifeste Agile »
  80. 80. « 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/
  81. 81. 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
  82. 82. User story
  83. 83. Cartes Scrum ( planning poker )
  84. 84. Planning poker
  85. 85. Stand up
  86. 86. Stand up
  87. 87. Dashboard
  88. 88. Taskboard
  89. 89. Dashboard (taskboard) pour de vrai
  90. 90. Dashboard (taskboard) pour de vrai
  91. 91. Cherchez ce qui ne va pas
  92. 92. Burndown d’un sprint
  93. 93. Burndown en vrai
  94. 94. 0 5 10 15 20 25 30 35 40 45 50 1 2 3 4 5 6 7 8 9 10 RAF idéal Idéal adapté
  95. 95. Démo
  96. 96. Rétrospective de fin de sprint
  97. 97. Quelques lectures « 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/ « Petit guide du lean » http://leanagilecamp.fr/guide.html
  98. 98. https://www.youtube.com/watch?v=HsB0UZR7XvE&index=1&list=PLypC2fA0xsaWULkC3Q9b1d XdZGIi0oj-h
  99. 99. Multitâche au volant ?
  100. 100. Multitâche au travail ? Dossier sur le « multitasking » sur Podcast Science : http://www.podcastscience.fm/dossiers/2013/05/23/le-multitasking/
  101. 101. Multitâche en réunion ?
  102. 102. Test DISC gratuit : www.profil4.com Podcast : http://www.outilsdumanager.com DISC Comportement et Communication
  103. 103. Taureau Vous êtes bourré d’énergie, centré sur l’action et constamment en mouvement. D’un naturel plutôt positif et factuel, vous pouvez être agressif. Vous êtes extraverti, tenace et vous savez vous concentrer sur les résultats à atteindre. Vous abordez les autres de manière directe et autoritaire. • A une vision macro • Est (trop) franc • Accepte les chalenges • Va droit au but • Parle fort • N’a pas peut de se tromper
  104. 104. Vous êtes soucieux d’avoir de bonnes relations personnelles, généralement positif et extraverti. Vous prenez plaisir à la compagnie des autres et estimez que la vie doit être amusante. Rayonnants et amicaux, vous abordez les autres de façon convaincante, démocratique.Coq • Montre/communique de l’enthousiasme • Est (trop) optimiste • Aime collaborer • Ne supporte pas d’être ignoré • Délègue (beaucoup) • A du mal à finir les taches
  105. 105. Vous appréciez la cohérence dans votre vie et vous pouvez combattre pour une cause avec obstination. Vous vous appliquez à être sérieux et fiable. Vous ne répondez pas facilement à l’ambiguïté ou à une structure impersonnelle et vous pouvez être timide dans votre façon d’aborder les autres.Chien • Ne supporte pas d’être pressé • communique/agit de façon calme • Aide volontiers • Est humble • Parle doucement
  106. 106. Vous aimez réfléchir avant d’agir et vous pouvez être perçu comme froide et indifférent. Vous manifestez un fort désir de connaître et de comprendre ce qui vous entoure. Vous avez du mal à répondre à une pression autoritaire et vous préférez communiquer par écrit.Hibou • A besoin d’indépendance • Est objectif/réfléchi • Aime les détails • A peur de se tromper • A du mal à prendre des décisions sans avoir toutes les infos
  107. 107. 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/
  108. 108. Story board et maquettes
  109. 109. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  110. 110. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  111. 111. 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/
  112. 112. Source Code Management (SCM) http://fr.wikipedia.org/wiki/Source_Code_Management SubversionCVS Mercurial Git
  113. 113. pratique ?
  114. 114. disque réseau Pourquoi pas sur un disque réseau ?
  115. 115. Pourquoi pas par email ?
  116. 116. • Travail à distance ? • Echanges de fichiers (nombreux) dans tous les sens ? • Versions des fichiers ? • Sauvegardes ? • Conflits sur des modifications parallèles ?
  117. 117. Subversion : SCM centralisé
  118. 118. 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.
  119. 119. 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.
  120. 120. Import / checkout ( création de la copie locale )
  121. 121. Update ( récupération de la dernière version des fichiers )
  122. 122. Commit ( envoie des fichiers modifiés vers le repository )
  123. 123. 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.
  124. 124. Commit ( bonne pratique : faire un update avant ) ❶ ❷
  125. 125. Version 1 Version 2 Version 3 Branches ( versions )
  126. 126. Version 1 Branche debug Branches - merge ( versions )
  127. 127. Version 1 Version 2 Tags ( révisions ) 1.1 1.2 2.1
  128. 128. Git : SCM décentralisé
  129. 129. Espaces Repo local Repo distant Working copie
  130. 130. Commandes quotidiennes push fetch pull commit clone
  131. 131. Git process merge fetch commit push Tutoriel Git chez Atlassian : https://www.atlassian.com/fr/git/tutorial
  132. 132. Travail en branche ( les branches ne sont pas chères avec Git ) A B C D E F G Master M-7548-DEV
  133. 133. Merge A B C D E F G Master M-7548-DEV
  134. 134. Rebase A B C D E F G Master M-7548-DEV E’ F’ G’
  135. 135. Cherry-pick A B D G E C E E’ Master une autre branche F H
  136. 136. « Git en 15 minutes » https://try.github.io/levels/1/challenges/1
  137. 137. Quelques logiciels : • Tortoise • Sourcetree • Ungit • Git bash • Plugins d’IDE (Netbeans/Eclipse/etc.)
  138. 138. Intégration continue
  139. 139. mvn clean install mvn sonar:sonar
  140. 140. Design patterns
  141. 141. 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
  142. 142. 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
  143. 143. 3 grosses familles : • Création : Factory, Builder, Singleton, etc. • Structure : Facade, Decorator / Adaptor, Proxy, etc. • Comportement : Iterator, Observer, etc.
  144. 144. Chez vous Classer les design patterns GOF dans les 3 familles : création, structure ou comportement.
  145. 145. A lire sur le Web : http://www.developpez.com
  146. 146. Singleton
  147. 147. LeSingleton
  148. 148. 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; } }
  149. 149. 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; } }
  150. 150. Le Singleton NotesDesElevesService service = new NotesDesElevesService(); Map<String, Double> notes = service.findNotesDernierExamen()
  151. 151. 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
  152. 152. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance = new NotesDesElevesService(); private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { return instance; } public Map<String, Double> findNotesDernierExamen() { ... } }
  153. 153. Le Singleton NotesDesElevesService service = NotesDesElevesService.getInstance(); Map<String, Double> notes = service.findNotesDernierExamen()
  154. 154. Le Singleton service1 = getInstance(); service1.findNDE() service3 = getInstance(); service3.findNDE() service2 = getInstance(); service2.findNDE() service4 = getInstance(); service4.findNDE() NDES
  155. 155. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance; private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { if(instance == null) { instance = new NotesDesElevesService(); } return instance; } ... }
  156. 156. Chez vous Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations)
  157. 157. LeSingleton synchronized ?
  158. 158. « Mémento Singleton » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/design-pattern-mementos/
  159. 159. Factory
  160. 160. Factory
  161. 161. Factory public enum RaceChienEnum { LABRADOR("Labrador"), CANICHE("Faux chien"), DOBERMAN("Chien méchant"); private final String name; RaceChienEnum(String name) { this.name = name; } ... }
  162. 162. 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) { ... } }
  163. 163. Façade
  164. 164. Facade
  165. 165. 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
  166. 166. 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
  167. 167. 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 Outils du manager http://www.outilsdumanager.com
  168. 168. Iterator
  169. 169. Iterator John Marie Lucie Marc Paul List<String> prenoms = new ArrayList<String>(); prenoms.add( "John" ); prenoms.add( "Marie" ); ... for( int i = 0; i < prenoms.size(); i++ ) { String prenom = prenoms.get(i); System.out.println(prenom); }
  170. 170. Iterator John Marie Lucie Marc Paul List<String> prenoms = ... Iterator<String> iter = prenoms.iterator(); while( iter.hasNext() ) { String prenom = iter.next(); System.out.println(prenom); } for( String prenom : prenoms ) { System.out.println(prenom); }
  171. 171. 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; }
  172. 172. Observer
  173. 173. 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("..."); } }
  174. 174. 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(); } } }
  175. 175. 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(); } } } }
  176. 176. JDBC
  177. 177. 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
  178. 178. @Override public List<Labrador> findLabradors() { List<Labrador> labradors = new ArrayList<Labrador>(); ... return labradors; }
  179. 179. // (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
  180. 180. // (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 ?
  181. 181. JDBC insert 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);
  182. 182. JDBC Insert (PreparedStatement) 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);
  183. 183. « 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
  184. 184. 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/Git ; • Scrum/Kanban ; • etc.
  185. 185. Archive ZIP projet_GLPOO_ESIEA_2014-2015_groupe-Dupont.zip Rapport PDF rapport.pdf Notice notice.txt Email Projet GLPOO ESIEA 2014-2015 groupe Dupont
  186. 186. Thème du projet de GL ( Eternity ) Projet ( http://www.icauda.com/cours.php )
  187. 187. icauda.com © 1996-2015 Tous droits et bases réservés Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.
  188. 188. Cours FAQ Interviews Articles / tutoriels Magazine Forums News Agendas Critiques
  189. 189. 13 OOO OOO pages vues par mois 5 500 000visites par mois 2 500 000visites uniques par mois 5 000 messages forum par jour
  190. 190. SWING
  191. 191. JButton JRadioButtonJCheckBox JComboBox JList JMenu JTextField JTextArea
  192. 192. JLabel JFileChooserJTable JDialog JFrame JProgressBar
  193. 193. « 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

×