SlideShare una empresa de Scribd logo
1 de 256
Descargar para leer sin conexión
Génie Logiciel
ESIEA 2016-17
Mise-à-jour : 28/12/2016
Thierry Leriche-Dessirier
thierryler@gmail.com
@thierryleriche
www.icauda.com
ESIEA 2001
A propos du projet des 3A
( LAB3416 )
par équipe de 6-8
Dates clés :
• 13 mars : constitution des équipes
• 20 mars : Présentation du sujet
• Semaine du 27 mars : permanence
• 28 avril : Remise du projet par email
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 activités de
conception et de mise en œuvre des produits et
des procédures tendant à rationaliser la
production du logiciel et son suivi »
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. »
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 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) {
...
}
}
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;
}
}
}
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) {
...
}
}
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
Copie individuelle à rendre sur papier au stylo
(un seul diagramme pour la casserole et la poêle)
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.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
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;
final 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 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
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 »
Combien de points noirs voyez-vous ?
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
« 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/
User story
Cartes Scrum
( planning poker )
Planning poker
Stand up
Stand up
Dashboard
Taskboard
Dashboard (taskboard) pour de vrai
Dashboard (taskboard) pour de vrai
Dashboard (taskboard) pour de vrai
Dashboard (taskboard) pour de vrai
Dashboard (taskboard) pour de vrai
Cherchez ce qui ne va pas
Burndown d’un sprint
Ce N’est PAS un pourcentage
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
Kanban  flux
Kanban
Kanban  flux
Scrum :
• 3 rôles (PO, équipe, SM)
• Sprints de durées fixées
• Pas de changement durant un sprint
• Board réalisé en début d’itération
• Equipes pluridisciplinaires
• Tâches limités par la durée du sprint
• Points quotidiens
Kanban :
• aucun rôles prescrit
• Dirigé par les flux
• Gestion selon capacité
• Board permanent
• Equipes spécialisés (dev, prod, etc.)
• Tâches limités par le flux et la
capacité
• Point quotidiens facultatifs mais
conseillés
Diagramme burndown
(Scrum)
Diagramme de flux cumulé
(Kanban)
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
https://www.youtube.com/watch?v=HsB0UZR7XvE&index=1&list=PLypC2fA0xsaWULkC3Q9b1d
XdZGIi0oj-h
Multitâche au volant ?
Multitâche au travail ?
Multitâche en réunion ?
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/
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 ?
• Conflits sur des modifications parallèles ?
Subversion : SCM centralisé
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.
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'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
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 :
• Gitkraken
• 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, 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
300 + 500 + 600 = 1s 400ms
public class CarteDeVoeuxService {
private DatabaseConnection conn;
private Smtp smtp;
public void envoyer(String name, String message) {
conn = someDatabse.createConnection();  300ms
conn.open();  500ms
String email
= conn.query("SELECT email FROM user WHERE name=" + name);
smtp = someServeur.createSmtp();  600ms
smtp.send(email, message);
...
}
}
Le Singleton
CarteDeVoeuxService service = new CarteDeVoeuxService();
service.envoyer("Thierry",
"Bonjour ça va ? Bla bla bla");
Le Singleton
service1 = new CDVS();
service1.envoyer(...)
service3 = new CDVS();
service3.envoyer(...)
service2 = new CDVS();
service2.envoyer(...)
service4 = new CDVS();
service4.envoyer(...)
CDVS 1
CDVS 2
CDVS 3
CDVS 4
public class CarteDeVoeuxService {
private DatabaseConnection conn;
private Smtp smtp;
private static CarteDeVoeuxService instance
= new CarteDeVoeuxService()
private CarteDeVoeuxService() {
conn = someDatabse.createConnection();  300ms
conn.open();  500ms
smtp = someServeur.createSmtp();  600ms
}
public static CarteDeVoeuxService getInstance() {
return instance;
}
public void envoyer(String name, String message) {
String email
= conn.query("SELECT email FROM user WHERE name=" + name);
smtp.send(email, message);
...
}
}
Le Singleton
CarteDeVoeuxService service = CarteDeVoeuxService.getInstance();
service.envoyer("Thierry",
"Bonjour ça va ? Bla bla bla");
Le Singleton
service1 = getInstance();
service1.envoyer(...)
service3 = getInstance();
service3.envoyer(...)
service2 = getInstance();
service2.envoyer(...)
service4 = getInstance();
service4.envoyer(...)
CDVS
public class CarteDeVoeuxService {
private DatabaseConnection conn;
private Smtp smtp;
private static CarteDeVoeuxService instance = null;
private CarteDeVoeuxService() {
...
}
public static CarteDeVoeuxService getInstance() {
if(instance == null) {
instance = new CarteDeVoeuxService();
}
return instance;
}
public void envoyer(String name, String message) {
...
}
}
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
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
Iterator
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);
}
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);
}
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 ?
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);
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);
« 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
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 ;
• Agile (Scrum/Kanban) ;
• etc.
Archive ZIP
projet_GLPOO_ESIEA_2016-17_groupe-Dupont.zip
Rapport PDF
rapport.pdf
Notice
notice.txt
Email
Projet GLPOO ESIEA 2016-17 groupe Dupont
Thème du projet de GL
( chasse aux œufs )
icauda.com © 1996-2017
Tous droits et bases réservés
Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.
Cours
FAQ
Interviews
Articles / tutoriels
Magazine
Forums
News
Agendas
Critiques
13 OOO OOOpages 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.oracle.com/javase/tutorial/ui/features/compWin.html
Test DISC gratuit : www.profil4.com
Podcast : http://www.outilsdumanager.com
DISC
Comportement et Communication
Erreur de communication…
« Ce que vous voulez que les autres fassent
pour vous, faites-le aussi pour eux »
Lc 6,31
Nous parlons aux autres comme on aimerait qu’ils nous parlent.
Il faut parler aux autres comme ils aimeraient qu’on leur parle.
« Tout ce que vous voudriez que les hommes fassent
pour vous, faites le, Vous aussi, pour eux »
Mt 7,12
Les saboteurs
ça n’existent pas !
L’équipe partage des objectifs
communs
Dominant
Influent
StableConsciencieux
A une vision
macro
Est (trop) franc
Accepte les challenges
Va droit au but
Parle fort
N’a pas peur
de se tromper
Enthousiaste et optimiste
Aime collaborer
Ne supporte pas
d’être ignoré
Délègue
(beaucoup)
A du mal à finir
les tâches
Fashion victim
Ne supporte pas
d’être pressé
Communique/agit
de façon calme
Aide volontiers
Est humble
Parle doucement
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
GRATUIT 25 questions
sans pub5-10 min
Compréhension et collaboration
Délégation
Recrutement : renforcement / diversification
la
vérité
Est
multiple
et
complexe
Test DISC Essentiel Gratuit
http://profil4.com/disc-essentiel.php
Podcast Outils du Manager
http://www.outilsdumanager.com
DISC sur Wikipedia
https://en.wikipedia.org/wiki/DISC_assessment
ICAUDA
http://www.icauda.com
Profil 4
http://www.profil4.com
Illustrations par Mimika
http://www.mimikaweb.fr
http://profil4.com/medias.php#mementos
Cours de Génie Logiciel / ESIEA 2016-17

Más contenido relacionado

La actualidad más candente

Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML Mireille Blay-Fornarino
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Farouk Mezghich
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1vangogue
 
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.1Laurent BUNIET
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAAymen Bedwivski
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Design patterns french
Design patterns frenchDesign patterns french
Design patterns frenchmeriem sari
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en JavaOussama BEN KHIROUN
 
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
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Laurent BUNIET
 

La actualidad más candente (14)

Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
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
 
Trivial Java - Part 1
Trivial Java - Part 1Trivial Java - Part 1
Trivial Java - Part 1
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Design patterns french
Design patterns frenchDesign patterns french
Design patterns french
 
Igl cours 3 - introduction à uml
Igl   cours 3 - introduction à umlIgl   cours 3 - introduction à uml
Igl cours 3 - introduction à uml
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
Design patterns
Design patternsDesign patterns
Design patterns
 
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
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 

Similar a Cours de Génie Logiciel / ESIEA 2016-17

Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014Yves Caseau
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Databricks
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Contrôle de la qualité logiciel
Contrôle de la qualité logicielContrôle de la qualité logiciel
Contrôle de la qualité logicielSylvain Leroy
 

Similar a Cours de Génie Logiciel / ESIEA 2016-17 (20)

Claire epita-février2014
Claire epita-février2014Claire epita-février2014
Claire epita-février2014
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Theme 7
Theme 7Theme 7
Theme 7
 
Patron observer
Patron observerPatron observer
Patron observer
 
Contrôle de la qualité logiciel
Contrôle de la qualité logicielContrôle de la qualité logiciel
Contrôle de la qualité logiciel
 

Más de 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
 
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 2015Thierry Leriche-Dessirier
 

Más 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
 

Último

gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 

Último (16)

gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 

Cours de Génie Logiciel / ESIEA 2016-17

  • 3. A propos du projet des 3A ( LAB3416 ) par équipe de 6-8 Dates clés : • 13 mars : constitution des équipes • 20 mars : Présentation du sujet • Semaine du 27 mars : permanence • 28 avril : Remise du projet par email
  • 4. Pédagogie ( futurs jeunes ingénieurs ) www.icauda.com/cours
  • 6. 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 »
  • 7. 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. »
  • 8.
  • 9. UML + Java (en support)
  • 10. Un peu d’histoire… pourquoi UML ?
  • 13. 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
  • 16. 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 )
  • 17. La classe Loup implémente l’interface Mammifere Attributs Méthodes Graphes UML avec ObjectAid Fleche avec trait en pointillé
  • 18. 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; } }
  • 19. La classe Chien étend la classe Loup Fleche avec trait plein
  • 20. La classe Chien étend la classe Loup qui implémente l’interface Mammifere Fleche avec trait plein Fleche avec trait en pointillé
  • 21. Un exemple vachement plus complexe ( mais qui reste courant )
  • 23. Pour la prochaine fois Trouver le sigle utilisé pour représenter le « protected »  Pour « private » on utilise « - »  Pour « public » on utilise « + »  Et pour « protected » ???
  • 24. 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; } }
  • 25. 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; } ... }
  • 26. La classe Louppossède un attribut du type Genre (sexe). On parle d’une association. Association *-1
  • 27. Graphes sympas avec yUML : http://yuml.me/ Associations Télécommande et piles
  • 28. Agrégation Télécommande et son couvercle Une télécommande sans couvercle est-elle toujours une télécommande ? Diamant vide
  • 29. Composition Télécommande et ses touches Une télécommande sans touche est-elle toujours une télécommande ? Diamant plein
  • 32.
  • 37. Au volant de sa voiture
  • 38. Démo UML avec Web Sequence Diagrams
  • 39.
  • 40.
  • 41. A->B: text activate B B-->A: text deactivate B A->A: text A->B: text
  • 42. 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
  • 43. 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) { ... } }
  • 44. 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; } } }
  • 45. 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) { ... } }
  • 49. Laver la vaisselle en machine Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/
  • 50. Laver la vaisselle en machine Fin (Ronds imbriqués) Début (Ronds plein)
  • 51. Laver la vaisselle en machine
  • 52. Laver la vaisselle en machine
  • 54. 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)
  • 59.
  • 60.
  • 61.
  • 63. Laver la vaisselle en machine (encore) Action (verbe) Transition
  • 64. Laver la vaisselle en machine (encore)  Diagramme très proche de l’état-transitions Etat (adjectif) Action (verbe)
  • 69.
  • 70. 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/
  • 71.
  • 72. Tests avec JUnit Prouver que ça fonctionne
  • 73. 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); }
  • 74. 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
  • 75. C’est vert donc c’est ok Les tests de la classe Temps d’exécution
  • 76. Démo dans Eclipse ( calcul de φ : 1,618 033 988 7  Fibonacci )
  • 77. 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
  • 78. 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/
  • 80. Tests A la découverte de Junit « Les Tests en Trois Temps » icauda.com/articles.html#3t
  • 81.
  • 82.
  • 83. Les méthodes agiles ( Scrum, Xp, Kanban, Lean… )
  • 85.
  • 86.
  • 87. 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
  • 88. 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.
  • 89. Manifeste agile Les 12 principes (suite) : • Un logiciel opérationnel est la principale mesure d’avancement. • Les processus agiles encouragent un rythme de développement soutenable. Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant. • Une attention continue à l'excellence technique et à une bonne conception renforce l’agilité. • La simplicité – c’est-à-dire l’art de minimiser la quantité de travail inutile – est essentielle. • Les meilleures architectures, spécifications et conceptions émergent d'équipes auto organisées. • À intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence.
  • 91. Combien de points noirs voyez-vous ?
  • 92.
  • 93. Des rôles : • Product Owner • Scrum Master • Team Des concepts : • Story points • Velocity • User story • Done Des rituels : • Sprint • Daily stand up • Sprint review • Planning poker • Retrospective Des artefacts : • Product backlog • Sprint backlog • Task board • Burn down Scrum
  • 94. « 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/
  • 107. Cherchez ce qui ne va pas
  • 108. Burndown d’un sprint Ce N’est PAS un pourcentage
  • 110. 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é
  • 111. Démo
  • 112. Rétrospective de fin de sprint
  • 113.
  • 114.
  • 117. Scrum : • 3 rôles (PO, équipe, SM) • Sprints de durées fixées • Pas de changement durant un sprint • Board réalisé en début d’itération • Equipes pluridisciplinaires • Tâches limités par la durée du sprint • Points quotidiens Kanban : • aucun rôles prescrit • Dirigé par les flux • Gestion selon capacité • Board permanent • Equipes spécialisés (dev, prod, etc.) • Tâches limités par le flux et la capacité • Point quotidiens facultatifs mais conseillés
  • 119. Diagramme de flux cumulé (Kanban)
  • 120. 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
  • 121.
  • 122.
  • 124.
  • 128.
  • 129.
  • 130. 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/
  • 131.
  • 132. Story board et maquettes
  • 133.
  • 134. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 135. Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141. 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/
  • 142.
  • 143. Source Code Management (SCM) http://fr.wikipedia.org/wiki/Source_Code_Management SubversionCVS Mercurial Git
  • 144.
  • 146. disque réseau Pourquoi pas sur un disque réseau ?
  • 147. Pourquoi pas par email ?
  • 148. • Travail à distance ? • Echanges de fichiers (nombreux) dans tous les sens ? • Versions des fichiers ? • Sauvegardes ? • Conflits sur des modifications parallèles ?
  • 149. Subversion : SCM centralisé
  • 150. 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.
  • 151. 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.
  • 152. Import / checkout ( création de la copie locale )
  • 153. Update ( récupération de la dernière version des fichiers )
  • 154. Commit ( envoie des fichiers modifiés vers le repository )
  • 155. 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.
  • 156. Commit ( bonne pratique : faire un update avant ) ❶ ❷
  • 157.
  • 158. Version 1 Version 2 Version 3 Branches ( versions )
  • 159. Version 1 Branche debug Branches - merge ( versions )
  • 160. Version 1 Version 2 Tags ( révisions ) 1.1 1.2 2.1
  • 161.
  • 162.
  • 163.
  • 164. Git : SCM décentralisé
  • 167. Git process merge fetch commit push Tutoriel Git chez Atlassian : https://www.atlassian.com/fr/git/tutorial
  • 168. Travail en branche ( les branches ne sont pas chères avec Git ) A B C D E F G Master M-7548-DEV
  • 169. Merge A B C D E F G Master M-7548-DEV
  • 170. Rebase A B C D E F G Master M-7548-DEV E’ F’ G’
  • 171. Cherry-pick A B D G E C E E’ Master une autre branche F H
  • 172. « Git en 15 minutes » https://try.github.io/levels/1/challenges/1
  • 173. Quelques logiciels : • Gitkraken • Tortoise • Sourcetree • Ungit • Git bash • Plugins d’IDE (Netbeans/Eclipse/etc.)
  • 174.
  • 176.
  • 177. mvn clean install mvn sonar:sonar
  • 178.
  • 180. 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
  • 181. 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
  • 182. 3 grosses familles : • Création : Factory, Builder, Singleton, etc. • Structure : Facade, Decorator / Adaptor, Proxy, etc. • Comportement : Iterator, Observer, etc.
  • 183. Chez vous Classer les design patterns GOF dans les 3 familles : création, structure ou comportement.
  • 184. A lire sur le Web : http://www.developpez.com
  • 187. Le Singleton 300 + 500 + 600 = 1s 400ms public class CarteDeVoeuxService { private DatabaseConnection conn; private Smtp smtp; public void envoyer(String name, String message) { conn = someDatabse.createConnection();  300ms conn.open();  500ms String email = conn.query("SELECT email FROM user WHERE name=" + name); smtp = someServeur.createSmtp();  600ms smtp.send(email, message); ... } }
  • 188. Le Singleton CarteDeVoeuxService service = new CarteDeVoeuxService(); service.envoyer("Thierry", "Bonjour ça va ? Bla bla bla");
  • 189. Le Singleton service1 = new CDVS(); service1.envoyer(...) service3 = new CDVS(); service3.envoyer(...) service2 = new CDVS(); service2.envoyer(...) service4 = new CDVS(); service4.envoyer(...) CDVS 1 CDVS 2 CDVS 3 CDVS 4
  • 190. public class CarteDeVoeuxService { private DatabaseConnection conn; private Smtp smtp; private static CarteDeVoeuxService instance = new CarteDeVoeuxService() private CarteDeVoeuxService() { conn = someDatabse.createConnection();  300ms conn.open();  500ms smtp = someServeur.createSmtp();  600ms } public static CarteDeVoeuxService getInstance() { return instance; } public void envoyer(String name, String message) { String email = conn.query("SELECT email FROM user WHERE name=" + name); smtp.send(email, message); ... } }
  • 191. Le Singleton CarteDeVoeuxService service = CarteDeVoeuxService.getInstance(); service.envoyer("Thierry", "Bonjour ça va ? Bla bla bla");
  • 192. Le Singleton service1 = getInstance(); service1.envoyer(...) service3 = getInstance(); service3.envoyer(...) service2 = getInstance(); service2.envoyer(...) service4 = getInstance(); service4.envoyer(...) CDVS
  • 193. public class CarteDeVoeuxService { private DatabaseConnection conn; private Smtp smtp; private static CarteDeVoeuxService instance = null; private CarteDeVoeuxService() { ... } public static CarteDeVoeuxService getInstance() { if(instance == null) { instance = new CarteDeVoeuxService(); } return instance; } public void envoyer(String name, String message) { ... } }
  • 194. Chez vous Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations)
  • 196. « Mémento Singleton » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/design-pattern-mementos/
  • 199. Factory public enum RaceChienEnum { LABRADOR("Labrador"), CANICHE("Faux chien"), DOBERMAN("Chien méchant"); private final String name; RaceChienEnum(String name) { this.name = name; } ... }
  • 200. 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) { ... } }
  • 202. Facade
  • 203. 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
  • 204. 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
  • 205. 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
  • 207. 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); }
  • 208. 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); }
  • 209. 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; }
  • 211. 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("..."); } }
  • 212. 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(); } } }
  • 213. 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(); } } } }
  • 214.
  • 215. JDBC
  • 216. 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
  • 217. @Override public List<Labrador> findLabradors() { List<Labrador> labradors = new ArrayList<Labrador>(); ... return labradors; }
  • 218. // (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
  • 219. // (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 ?
  • 220. 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);
  • 221. 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);
  • 222. « 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
  • 223.
  • 224. 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 ; • Agile (Scrum/Kanban) ; • etc.
  • 226. Thème du projet de GL ( chasse aux œufs )
  • 227.
  • 228. icauda.com © 1996-2017 Tous droits et bases réservés Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.
  • 230. 13 OOO OOOpages vues par mois 5 500 000visites par mois 2 500 000visites uniques par mois 5 000 messages forum par jour
  • 231.
  • 232. SWING
  • 235. « 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
  • 236.
  • 237. Test DISC gratuit : www.profil4.com Podcast : http://www.outilsdumanager.com DISC Comportement et Communication
  • 238.
  • 239. Erreur de communication… « Ce que vous voulez que les autres fassent pour vous, faites-le aussi pour eux » Lc 6,31 Nous parlons aux autres comme on aimerait qu’ils nous parlent. Il faut parler aux autres comme ils aimeraient qu’on leur parle. « Tout ce que vous voudriez que les hommes fassent pour vous, faites le, Vous aussi, pour eux » Mt 7,12
  • 240. Les saboteurs ça n’existent pas ! L’équipe partage des objectifs communs
  • 242. A une vision macro Est (trop) franc Accepte les challenges Va droit au but Parle fort N’a pas peur de se tromper
  • 243. Enthousiaste et optimiste Aime collaborer Ne supporte pas d’être ignoré Délègue (beaucoup) A du mal à finir les tâches Fashion victim
  • 244. Ne supporte pas d’être pressé Communique/agit de façon calme Aide volontiers Est humble Parle doucement
  • 245. 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
  • 246.
  • 247.
  • 249.
  • 252. Recrutement : renforcement / diversification
  • 254. Test DISC Essentiel Gratuit http://profil4.com/disc-essentiel.php Podcast Outils du Manager http://www.outilsdumanager.com DISC sur Wikipedia https://en.wikipedia.org/wiki/DISC_assessment ICAUDA http://www.icauda.com Profil 4 http://www.profil4.com Illustrations par Mimika http://www.mimikaweb.fr