SlideShare une entreprise Scribd logo
Génie Logiciel
ESIEA 2013-2014
Mise-à-jour : 21/03/2014
Thierry Leriche-Dessirier
thierryler@gmail.com
@thierryleriche
ESIEA 2001
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
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
Pédagogie
( futurs jeunes ingénieurs )
www.icauda.com/cours
Génie Logiciel
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 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
Chef de
projet
Analyste Architecte
Développeurs
Graphiste Junior
Utilisateurs
Enfants
(bébés, jeunes, ado, …)
Personnes avec un handicap
(malvoyants, daltoniens,
malentendants, …)
Femmes
Hommes
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 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 )
La classe Loup
implémente l’interface
Mammifere
Attributs
Méthodes
Graphes UML avec
ObjectAid
Fleche avec trait
en pointillé
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;
}
}
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 pointillé
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 « - »
 Pour « public » on utilise « + »
 Et pour « protected » ???
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;
}
}
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;
}
...
}
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érale)
Graphes UML
avec Omondo
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
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
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
Pour la prochaine fois
Diagramme d’état-transitions d’un colis livré par la poste.
 Penser aux centres de tri.
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
Diagramme Use case
Interactions
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.
Actu de la semaine
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/
Tests avec JUnit
Tests avec JUnit
Prouver que ça fonctionne
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);
}
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
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
Faire passer au vert le dernier test, sur la durée
 Utiliser une HashMap
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/
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 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.
« Mémento Manifeste Agile »
« 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/
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
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/
Actu de la semaine
7B$
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/
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.com/mockingbird/#
Pencil :
http://pencil.evolus.vn/en-US/Home.aspx
Iphone mockup :
http://iphonemockup.lkmc.ch/
Gestion de version
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 ?
• 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.
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.
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 )
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
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.
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> 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()
service3 = new NDES();
service3.findNDE()
service2 = new NDES();
service2.findNDE()
service4 = new NDES();
service4.findNDE()
NDES 1
NDES 2
NDES 3
NDES 4
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()
service3 = getInstance();
service3.findNDE()
service2 = getInstance();
service2.findNDE()
service4 = getInstance();
service4.findNDE()
NDES
Le Singleton
public class NotesDesElevesService {
private static NotesDesElevesService instance;
private NotesDesElevesService() {
...
}
public static NotesDesElevesService getInstance() {
if(instance == null) {
instance = new NotesDesElevesService();
}
return instance;
}
...
}
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 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
Actu de la semaine
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/
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 ISE("...");
}
}
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
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
@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);JDBC
select
// (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 ?
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
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)
« 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
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.oracle.com/javase/tutorial/ui/features/compWin.html
Intégration continue
mvn clean install
mvn sonar:sonar
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.
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
Thème du projet de GL
( mangez des carottes )
Projet
( http://www.icauda.com/cours.php )
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.
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.
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
icauda.com © 1996-2014
Tous droits et bases réservés
Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.
Cours de Génie Logiciel / ESIEA 2013-2014

Contenu connexe

Tendances

Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
Mohammed Amine Mostefai
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
Yassine Badri
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
Laurent BUNIET
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
Eric Bourdet
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
Oussama BEN KHIROUN
 
Igl cours 3 - introduction à uml
Igl   cours 3 - introduction à umlIgl   cours 3 - introduction à uml
Igl cours 3 - introduction à uml
Mohammed Amine Mostefai
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
Laurent Guérin
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logiciel
guest0032c8
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
ENSET, Université Hassan II Casablanca
 
Cours spring
Cours springCours spring
Cours spring
mohamed el haddad
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
Gaëtan ELEOUET
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetAmine Chkr
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
Design patterns french
Design patterns frenchDesign patterns french
Design patterns french
meriem sari
 
Cours génie logiciel
Cours génie logicielCours génie logiciel
Cours génie logicielaraddaoui
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Ippon
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 
Programmation orienté aspect
Programmation orienté aspectProgrammation orienté aspect
Programmation orienté aspect
meriem sari
 

Tendances (20)

Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Chap 02 poo en java
Chap 02 poo en javaChap 02 poo en java
Chap 02 poo en java
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
Igl cours 3 - introduction à uml
Igl   cours 3 - introduction à umlIgl   cours 3 - introduction à uml
Igl cours 3 - introduction à uml
 
Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2Telosys tools jug-nantes-2014-v1.2
Telosys tools jug-nantes-2014-v1.2
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logiciel
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Cours spring
Cours springCours spring
Cours spring
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Design patterns french
Design patterns frenchDesign patterns french
Design patterns french
 
Cours génie logiciel
Cours génie logicielCours génie logiciel
Cours génie logiciel
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Programmation orienté aspect
Programmation orienté aspectProgrammation orienté aspect
Programmation orienté aspect
 
CM processus-unifie
CM processus-unifieCM processus-unifie
CM processus-unifie
 

En vedette

Atelier data visualisation une image vaut mieux qu'un long discours
Atelier data visualisation une image vaut mieux qu'un long discoursAtelier data visualisation une image vaut mieux qu'un long discours
Atelier data visualisation une image vaut mieux qu'un long discours
echangeurba
 
[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?
heaven
 
WHAT'S NEXT IN...MOBILE !
WHAT'S NEXT IN...MOBILE !WHAT'S NEXT IN...MOBILE !
WHAT'S NEXT IN...MOBILE !
DigitasLBi Paris
 
Anatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxeAnatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxe
Les Brigades du Marketing - www.lesbrigadesdumarketing.com
 
tome 7 de l'étude annuelle de Lecko
tome 7 de l'étude annuelle de Leckotome 7 de l'étude annuelle de Lecko
tome 7 de l'étude annuelle de Lecko
Claude Super
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
Sana Aroussi
 
Depistage des ac anti hiv
Depistage des ac anti hiv Depistage des ac anti hiv
Depistage des ac anti hiv
S/Abdessemed
 
Nokia - Business Enviroment Analysis
Nokia - Business Enviroment AnalysisNokia - Business Enviroment Analysis
Nokia - Business Enviroment Analysis
Darshan Singh
 
Brochure intelect neo
Brochure intelect neoBrochure intelect neo
Brochure intelect neo
casimir91
 
Algèbre de boole
Algèbre de booleAlgèbre de boole
Algèbre de boole
linuxscout
 
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
Notrax - Superior Manufacturing Group Europe BV
 
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Remy EXELMANS
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017
Techsauce Media
 
Validation des services web à l’aide de la génération automatique de tests
Validation des services web à l’aide de la génération automatique de testsValidation des services web à l’aide de la génération automatique de tests
Validation des services web à l’aide de la génération automatique de tests
VincentPSarga
 
Cour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarCour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarAnouar Sghaier
 
Génie Logiciel : Conception
Génie Logiciel : ConceptionGénie Logiciel : Conception
Génie Logiciel : Conception
Mohammed Amine Mostefai
 

En vedette (20)

Atelier data visualisation une image vaut mieux qu'un long discours
Atelier data visualisation une image vaut mieux qu'un long discoursAtelier data visualisation une image vaut mieux qu'un long discours
Atelier data visualisation une image vaut mieux qu'un long discours
 
[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?
 
WHAT'S NEXT IN...MOBILE !
WHAT'S NEXT IN...MOBILE !WHAT'S NEXT IN...MOBILE !
WHAT'S NEXT IN...MOBILE !
 
Objectif Express
Objectif Express Objectif Express
Objectif Express
 
Anatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxeAnatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxe
 
tome 7 de l'étude annuelle de Lecko
tome 7 de l'étude annuelle de Leckotome 7 de l'étude annuelle de Lecko
tome 7 de l'étude annuelle de Lecko
 
01
0101
01
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Depistage des ac anti hiv
Depistage des ac anti hiv Depistage des ac anti hiv
Depistage des ac anti hiv
 
Nokia - Business Enviroment Analysis
Nokia - Business Enviroment AnalysisNokia - Business Enviroment Analysis
Nokia - Business Enviroment Analysis
 
Brochure intelect neo
Brochure intelect neoBrochure intelect neo
Brochure intelect neo
 
Ecgs200 2
Ecgs200 2Ecgs200 2
Ecgs200 2
 
Cuisson vapeur
Cuisson vapeurCuisson vapeur
Cuisson vapeur
 
Algèbre de boole
Algèbre de booleAlgèbre de boole
Algèbre de boole
 
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
Vernünftig Stehen -Verbesserung des Stehkomforts der Mitarbeiter Von Professo...
 
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017
 
Validation des services web à l’aide de la génération automatique de tests
Validation des services web à l’aide de la génération automatique de testsValidation des services web à l’aide de la génération automatique de tests
Validation des services web à l’aide de la génération automatique de tests
 
Cour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarCour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouar
 
Génie Logiciel : Conception
Génie Logiciel : ConceptionGénie Logiciel : Conception
Génie Logiciel : Conception
 

Similaire à Cours de Génie Logiciel / ESIEA 2013-2014

Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
Elapse Technologies
 
Schuman présentation expérimentation bts à réunion du 24 10-2012
Schuman présentation  expérimentation bts à réunion du 24 10-2012Schuman présentation  expérimentation bts à réunion du 24 10-2012
Schuman présentation expérimentation bts à réunion du 24 10-2012
acastra
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012
agnes_crepet
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
Faycel Chaoua
 
Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C# Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C#
Saâd Zerhouni
 
Retour Experience Atchik Sigma T9 200903[1]
Retour Experience Atchik Sigma T9 200903[1]Retour Experience Atchik Sigma T9 200903[1]
Retour Experience Atchik Sigma T9 200903[1]almerys
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
Laurent Broudoux
 
Claroline - Semaine du libre
Claroline - Semaine du libreClaroline - Semaine du libre
Claroline - Semaine du libre
Claroline
 
Azure Data Factory-Rebuild 2017
Azure Data Factory-Rebuild 2017 Azure Data Factory-Rebuild 2017
Azure Data Factory-Rebuild 2017
Isabelle Van Campenhoudt
 
conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...
Sid Ahmed Benkraoua
 
Plasticitérecherche2015 2
Plasticitérecherche2015 2Plasticitérecherche2015 2
Plasticitérecherche2015 2
Atelier IHM Polytech Nice Sophia
 
Darwin appliqué à LabVIEW : l’évolution de la gestion des données
Darwin appliqué à LabVIEW : l’évolution de la gestion des donnéesDarwin appliqué à LabVIEW : l’évolution de la gestion des données
Darwin appliqué à LabVIEW : l’évolution de la gestion des données
Luc Desruelle
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
Adrien Blind
 
OpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du CloudOpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du Cloud
Michel-Marie Maudet
 
soft-shake.ch - Adoption de l'Agilité par les usages
soft-shake.ch - Adoption de l'Agilité par les usagessoft-shake.ch - Adoption de l'Agilité par les usages
soft-shake.ch - Adoption de l'Agilité par les usages
soft-shake.ch
 
Design patterns
Design patternsDesign patterns
Design patterns
CocoaHeads.fr
 
Plateforme d’e learning
Plateforme d’e learningPlateforme d’e learning
Plateforme d’e learningEl Aber Haythem
 
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REX
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REXRetour d’expérience de la transformation DevOps de Microsoft au DevOps REX
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REX
Samuel Metias
 
Du Manifeste Agile à Scrum
Du Manifeste Agile à ScrumDu Manifeste Agile à Scrum
Du Manifeste Agile à ScrumXavier Warzee
 

Similaire à Cours de Génie Logiciel / ESIEA 2013-2014 (20)

Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
 
Schuman présentation expérimentation bts à réunion du 24 10-2012
Schuman présentation  expérimentation bts à réunion du 24 10-2012Schuman présentation  expérimentation bts à réunion du 24 10-2012
Schuman présentation expérimentation bts à réunion du 24 10-2012
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C# Platform freelance ASP .NET / C#
Platform freelance ASP .NET / C#
 
Retour Experience Atchik Sigma T9 200903[1]
Retour Experience Atchik Sigma T9 200903[1]Retour Experience Atchik Sigma T9 200903[1]
Retour Experience Atchik Sigma T9 200903[1]
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
Claroline - Semaine du libre
Claroline - Semaine du libreClaroline - Semaine du libre
Claroline - Semaine du libre
 
Azure Data Factory-Rebuild 2017
Azure Data Factory-Rebuild 2017 Azure Data Factory-Rebuild 2017
Azure Data Factory-Rebuild 2017
 
conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...
 
Plasticitérecherche2015 2
Plasticitérecherche2015 2Plasticitérecherche2015 2
Plasticitérecherche2015 2
 
Darwin appliqué à LabVIEW : l’évolution de la gestion des données
Darwin appliqué à LabVIEW : l’évolution de la gestion des donnéesDarwin appliqué à LabVIEW : l’évolution de la gestion des données
Darwin appliqué à LabVIEW : l’évolution de la gestion des données
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
 
OpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du CloudOpenStack & DevOps, l'Open Source au service du Cloud
OpenStack & DevOps, l'Open Source au service du Cloud
 
soft-shake.ch - Adoption de l'Agilité par les usages
soft-shake.ch - Adoption de l'Agilité par les usagessoft-shake.ch - Adoption de l'Agilité par les usages
soft-shake.ch - Adoption de l'Agilité par les usages
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Plateforme d’e learning
Plateforme d’e learningPlateforme d’e learning
Plateforme d’e learning
 
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REX
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REXRetour d’expérience de la transformation DevOps de Microsoft au DevOps REX
Retour d’expérience de la transformation DevOps de Microsoft au DevOps REX
 
Du Manifeste Agile à Scrum
Du Manifeste Agile à ScrumDu Manifeste Agile à Scrum
Du Manifeste Agile à Scrum
 

Plus de Thierry Leriche-Dessirier

Disc l'essentiel
Disc l'essentielDisc l'essentiel
Disc l'essentiel
Thierry Leriche-Dessirier
 
Rapport DISC Pro de Lucie Durand
Rapport DISC Pro de Lucie DurandRapport DISC Pro de Lucie Durand
Rapport DISC Pro de Lucie Durand
Thierry Leriche-Dessirier
 
Rapport de test DISC de Groupe (Laurent Duval)
Rapport de test DISC de Groupe (Laurent Duval)Rapport de test DISC de Groupe (Laurent Duval)
Rapport de test DISC de Groupe (Laurent Duval)
Thierry Leriche-Dessirier
 
Memento DISC Influent (English)
Memento DISC Influent (English)Memento DISC Influent (English)
Memento DISC Influent (English)
Thierry Leriche-Dessirier
 
Le management en couleurs avec le DISC
Le management en couleurs avec le DISCLe management en couleurs avec le DISC
Le management en couleurs avec le DISC
Thierry Leriche-Dessirier
 
Memento DISC Stable
Memento DISC StableMemento DISC Stable
Memento DISC Stable
Thierry Leriche-Dessirier
 
Memento DISC Influent
Memento DISC InfluentMemento DISC Influent
Memento DISC Influent
Thierry Leriche-Dessirier
 
Memento DISC Dominant
Memento DISC DominantMemento DISC Dominant
Memento DISC Dominant
Thierry Leriche-Dessirier
 
Memento Disc Consciencieux
Memento Disc ConsciencieuxMemento Disc Consciencieux
Memento Disc Consciencieux
Thierry Leriche-Dessirier
 
Management en couleur avec DISC à Agile Tour Paris 2015
Management en couleur avec DISC à Agile Tour Paris 2015Management en couleur avec DISC à Agile Tour Paris 2015
Management en couleur avec DISC à Agile Tour Paris 2015
Thierry Leriche-Dessirier
 
Management en couleur avec DISC
Management en couleur avec DISCManagement en couleur avec DISC
Management en couleur avec DISC
Thierry Leriche-Dessirier
 
Les algorithmes de tri
Les algorithmes de triLes algorithmes de tri
Les algorithmes de tri
Thierry Leriche-Dessirier
 
Puzzle 2 (4x4)
Puzzle 2 (4x4)Puzzle 2 (4x4)
Guava et Lombok au Normandy JUG
Guava et Lombok au Normandy JUGGuava et Lombok au Normandy JUG
Guava et Lombok au Normandy JUG
Thierry Leriche-Dessirier
 
Guava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUGGuava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUG
Thierry Leriche-Dessirier
 
Guava et Lombok au Lorraine JUG
Guava et Lombok au Lorraine JUGGuava et Lombok au Lorraine JUG
Guava et Lombok au Lorraine JUG
Thierry Leriche-Dessirier
 
Guava et Lombok au Brezth JUG
Guava et Lombok au Brezth JUGGuava et Lombok au Brezth JUG
Guava et Lombok au Brezth JUG
Thierry Leriche-Dessirier
 
Guava au Paris JUG
Guava au Paris JUGGuava au Paris JUG
Guava au Paris JUG
Thierry Leriche-Dessirier
 
Memento java
Memento javaMemento java

Plus de Thierry Leriche-Dessirier (20)

Disc l'essentiel
Disc l'essentielDisc l'essentiel
Disc l'essentiel
 
Rapport DISC Pro de Lucie Durand
Rapport DISC Pro de Lucie DurandRapport DISC Pro de Lucie Durand
Rapport DISC Pro de Lucie Durand
 
Rapport de test DISC de Groupe (Laurent Duval)
Rapport de test DISC de Groupe (Laurent Duval)Rapport de test DISC de Groupe (Laurent Duval)
Rapport de test DISC de Groupe (Laurent Duval)
 
Memento DISC Influent (English)
Memento DISC Influent (English)Memento DISC Influent (English)
Memento DISC Influent (English)
 
Le management en couleurs avec le DISC
Le management en couleurs avec le DISCLe management en couleurs avec le DISC
Le management en couleurs avec le DISC
 
Memento DISC Stable
Memento DISC StableMemento DISC Stable
Memento DISC Stable
 
Memento DISC Influent
Memento DISC InfluentMemento DISC Influent
Memento DISC Influent
 
Memento DISC Dominant
Memento DISC DominantMemento DISC Dominant
Memento DISC Dominant
 
Memento Disc Consciencieux
Memento Disc ConsciencieuxMemento Disc Consciencieux
Memento Disc Consciencieux
 
Management en couleur avec DISC à Agile Tour Paris 2015
Management en couleur avec DISC à Agile Tour Paris 2015Management en couleur avec DISC à Agile Tour Paris 2015
Management en couleur avec DISC à Agile Tour Paris 2015
 
Management en couleur avec DISC
Management en couleur avec DISCManagement en couleur avec DISC
Management en couleur avec DISC
 
Les algorithmes de tri
Les algorithmes de triLes algorithmes de tri
Les algorithmes de tri
 
Puzzle 2 (4x4)
Puzzle 2 (4x4)Puzzle 2 (4x4)
Puzzle 2 (4x4)
 
Guava et Lombok au Normandy JUG
Guava et Lombok au Normandy JUGGuava et Lombok au Normandy JUG
Guava et Lombok au Normandy JUG
 
Guava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUGGuava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUG
 
Guava et Lombok au Lorraine JUG
Guava et Lombok au Lorraine JUGGuava et Lombok au Lorraine JUG
Guava et Lombok au Lorraine JUG
 
Guava et Lombok au Brezth JUG
Guava et Lombok au Brezth JUGGuava et Lombok au Brezth JUG
Guava et Lombok au Brezth JUG
 
Guava au Paris JUG
Guava au Paris JUGGuava au Paris JUG
Guava au Paris JUG
 
Memento scrum-equipe
Memento scrum-equipeMemento scrum-equipe
Memento scrum-equipe
 
Memento java
Memento javaMemento java
Memento java
 

Dernier

Iris van Herpen. pptx
Iris         van         Herpen.      pptxIris         van         Herpen.      pptx
Iris van Herpen. pptx
Txaruka
 
Iris van Herpen. pptx
Iris         van        Herpen.      pptxIris         van        Herpen.      pptx
Iris van Herpen. pptx
Txaruka
 
Iris van Herpen. pptx
Iris            van        Herpen.     pptxIris            van        Herpen.     pptx
Iris van Herpen. pptx
Txaruka
 
Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024
Friends of African Village Libraries
 
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
M2i Formation
 
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
BenotGeorges3
 

Dernier (6)

Iris van Herpen. pptx
Iris         van         Herpen.      pptxIris         van         Herpen.      pptx
Iris van Herpen. pptx
 
Iris van Herpen. pptx
Iris         van        Herpen.      pptxIris         van        Herpen.      pptx
Iris van Herpen. pptx
 
Iris van Herpen. pptx
Iris            van        Herpen.     pptxIris            van        Herpen.     pptx
Iris van Herpen. pptx
 
Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024Burkina Faso library newsletter May 2024
Burkina Faso library newsletter May 2024
 
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
Formation M2i - Onboarding réussi - les clés pour intégrer efficacement vos n...
 
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
Newsletter SPW Agriculture en province du Luxembourg du 12-06-24
 

Cours de Génie Logiciel / ESIEA 2013-2014

  • 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.
  • 9. 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 »
  • 10. De quoi on parle dans ce cours ?
  • 11. UML
  • 15. Tests : JUnit, TDD, 3T
  • 16. Les méthodes agiles : Scrum, Xp, Kanban, …
  • 18. Acteurs des projets Chef de projet Analyste Architecte Développeurs Graphiste Junior
  • 19. Utilisateurs Enfants (bébés, jeunes, ado, …) Personnes avec un handicap (malvoyants, daltoniens, malentendants, …) Femmes Hommes
  • 20.
  • 21. Mais on parle aussi… de vaches, de chiens, de téléphones, de voitures, …
  • 22.
  • 23. UML + Java (en support)
  • 24. Un peu d’histoire… pourquoi UML ?
  • 27. 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
  • 30. 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 )
  • 31. La classe Loup implémente l’interface Mammifere Attributs Méthodes Graphes UML avec ObjectAid Fleche avec trait en pointillé
  • 32. 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; } }
  • 33. La classe Chien étend la classe Loup Fleche avec trait plein
  • 34. La classe Chien étend la classe Loup qui implémente l’interface Mammifere Fleche avec trait plein Fleche avec trait en pointillé
  • 35. Un exemple vachement plus complexe ( mais qui reste courant )
  • 37. Pour la prochaine fois Trouver le sigle utilisé pour représenter le « protected »  Pour « private » on utilise « - »  Pour « public » on utilise « + »  Et pour « protected » ???
  • 38. 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; } }
  • 39. 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; } ... }
  • 40. La classe Louppossède un attribut du type Genre (sexe). On parle d’une association. Association *-1
  • 41. Graphes sympas avec yUML : http://yuml.me/ Associations Télécommande et piles
  • 42. Agrégation Télécommande et son couvercle Une télécommande sans couvercle est-elle toujours une télécommande ? Diamant vide
  • 43. Composition Télécommande et ses touches Une télécommande sans touche est-elle toujours une télécommande ? Diamant plein
  • 46.
  • 51. Au volant de sa voiture
  • 52. Démo UML avec Web Sequence Diagrams
  • 53.
  • 54.
  • 55. A->B: text activate B B-->A: text deactivate B A->A: text A->B: text
  • 56. 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
  • 60. Laver la vaisselle en machine Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/
  • 61. Laver la vaisselle en machine Fin (Ronds imbriqués) Début (Ronds plein)
  • 62. Laver la vaisselle en machine
  • 63. Laver la vaisselle en machine
  • 65. Pour la prochaine fois Diagramme d’état-transitions d’un colis livré par la poste.  Penser aux centres de tri.
  • 70.
  • 72. Laver la vaisselle en machine (encore) Action (verbe) Transition
  • 73. Laver la vaisselle en machine (encore)  Diagramme très proche de l’état-transitions Etat (adjectif) Action (verbe)
  • 80. 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.
  • 81.
  • 82. Actu de la semaine
  • 83. 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/
  • 84.
  • 86. Tests avec JUnit Prouver que ça fonctionne
  • 87. 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); }
  • 88. 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
  • 89. C’est vert donc c’est ok Les tests de la classe Temps d’exécution
  • 90. Démo dans Eclipse ( calcul de φ : 1,618 033 988 7  Fibonacci )
  • 91. Pour la prochaine fois Copie individuelle à rendre Faire passer au vert le dernier test, sur la durée  Utiliser une HashMap
  • 92. 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/
  • 94. Tests A la découverte de Junit « Les Tests en Trois Temps » icauda.com/articles.html#3t
  • 95.
  • 96.
  • 97. Les méthodes agiles ( Scrum, Xp, Kanban, Lean… )
  • 99.
  • 100. 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
  • 101. 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.
  • 102. 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.
  • 104. « 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/
  • 105.
  • 106. 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
  • 118. Démo
  • 119. Rétrospective de fin de sprint
  • 120. « 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/
  • 121.
  • 122.
  • 123.
  • 124. Actu de la semaine 7B$
  • 125. 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/
  • 126.
  • 127. Story board et maquettes
  • 128.
  • 129. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 130. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 131.
  • 132.
  • 133.
  • 134. 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/
  • 135.
  • 137.
  • 139. disque réseau Pourquoi pas sur un disque réseau ?
  • 140. Pourquoi pas par email ?
  • 141. • Travail à distance ? • Echanges de fichiers (nombreux) dans tous les sens ? • Versions des fichiers ? • Sauvegardes ? • Conflits sur des modifications parallèles ?
  • 142. 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.
  • 143. 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.
  • 144. Update ( récupération de la dernière version des fichiers )
  • 145. Import ( création de la copie locale )
  • 146. Commit ( envoie des fichiers modifiés vers le repository )
  • 147. 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.
  • 148. Commit ( bonne pratique : faire un update avant )
  • 149. Version 1 Version 2 Version 3 Branches ( versions )
  • 150. Version 1 Branche debug Branches - merge ( versions )
  • 151. Version 1 Version 2 Tags ( révisions ) 1.1 1.2 2.1
  • 152.
  • 153.
  • 154.
  • 156. 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
  • 157. 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
  • 158. 3 grosses familles : • Création : Factory, Builder, Singleton, etc. • Structure : Facade, Decorator / Adaptor, Proxy, etc. • Comportement : Iterator, Observer, etc.
  • 159. Chez vous Classer les design patterns GOF dans les 3 familles : création, structure ou comportement.
  • 160. A lire sur le Web : http://www.developpez.com
  • 163. 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; } }
  • 164. 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; } }
  • 165. Le Singleton NotesDesElevesService service = new NotesDesElevesService(); Map<String, Double> notes = service.findNotesDernierExamen()
  • 166. 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
  • 167. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance = new NotesDesElevesService(); private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { return instance; } public Map<String, Double> findNotesDernierExamen() { ... } }
  • 168. Le Singleton NotesDesElevesService service = NotesDesElevesService.getInstance(); Map<String, Double> notes = service.findNotesDernierExamen()
  • 169. Le Singleton service1 = getInstance(); service1.findNDE() service3 = getInstance(); service3.findNDE() service2 = getInstance(); service2.findNDE() service4 = getInstance(); service4.findNDE() NDES
  • 170. Le Singleton public class NotesDesElevesService { private static NotesDesElevesService instance; private NotesDesElevesService() { ... } public static NotesDesElevesService getInstance() { if(instance == null) { instance = new NotesDesElevesService(); } return instance; } ... }
  • 171. Chez vous Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations)
  • 173. « Mémento Singleton » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/design-pattern-mementos/
  • 176. Factory public enum RaceChienEnum { LABRADOR("Labrador"), CANICHE("Faux chien"), DOBERMAN("Chien méchant"); private final String name; RaceChienEnum(String name) { this.name = name; } ... }
  • 177. 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) { ... } }
  • 179. Facade
  • 180. 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
  • 181. 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
  • 182. Actu de la semaine
  • 183. 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/
  • 185. 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); }
  • 186. 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; }
  • 188. 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("..."); } }
  • 189. 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(); } } }
  • 190. 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(); } } } }
  • 191.
  • 192. JDBC
  • 193. 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
  • 194. @Override public List<Labrador> findLabradors() { List<Labrador> labradors = new ArrayList<Labrador>(); ... return labradors; }
  • 195. // (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
  • 196. // (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 ?
  • 197. 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
  • 198. 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)
  • 199. « 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
  • 200.
  • 201. SWING
  • 204. « 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
  • 205.
  • 207.
  • 208. mvn clean install mvn sonar:sonar
  • 209.
  • 210. 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.
  • 212. Thème du projet de GL ( mangez des carottes ) Projet ( http://www.icauda.com/cours.php )
  • 213.
  • 214. 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.
  • 215. 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.
  • 216.
  • 218. 13 OOO OOO pages vues par mois 5 500 000visites par mois 2 500 000visites uniques par mois 5 000 messages forum par jour
  • 219.
  • 220. icauda.com © 1996-2014 Tous droits et bases réservés Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.