SlideShare une entreprise Scribd logo
1  sur  97
Principes de la conception objet L'enjeu du design Les Design Patterns Agnès CREPET @agnes_crepet Cyril LACÔTE @clacote 13 aout 2011 TogoJUG - Lomé
Programme de la session ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Un peu d'histoire ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Au début était le Go To Facture: Traitement facture go to Calcul  Avoir: Traitement avoir go to Calcul Calcul: Lecture du compte Calcul du solde Mise à jour compte go to Read: Fin-Fichier: close (« interface-File »)
Au delà du GOTO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Le programmation structurée ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],ex : langage C Fonctions réutilisables Structures de contrôle Méthodologie ?
Approche top-down ,[object Object],[object Object],[object Object],[object Object],Diviser pour régner !
Approche top-down Ouverture fichier Traitement fichier Fermeture fichier Tant qu ’il y a des enregistrements Traitement Facture Traitement Avoir Traitement du solde ReadCompte Calcul Solde UpdateCompte Traitement du solde ...
Approche top-down ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Modularité ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vers l'encapsulation ,[object Object],[object Object],[object Object],[object Object]
Démarche objet : pas si récente ! ,[object Object],[object Object],[object Object],[object Object],[object Object]
Objet : motivations ,[object Object],[object Object],demarrer( ) freiner( ) vitesse modèle Voiture Abstraction
Pourquoi l'objet ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Doc Conception Test Code Autre Révision &  Maintenance Source: DP Budget, Vol. 7, Dec 1998.
Conception objet ,[object Object],[object Object],[object Object],[object Object],[object Object]
Une bonne conception objet ,[object Object],[object Object],[object Object],[object Object],[object Object]
Les Design Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object]
L'intérêt des Design Patterns ,[object Object],[object Object],[object Object],[object Object]
L'enjeu des Design Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Un principe fondateur : l'OCP (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Un principe fondateur : l'OCP (2/2) ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Principes d'une bonne conception
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Principes d'une bonne conception
[object Object],[object Object],[object Object],[object Object],[object Object],Les fondements de l'objet
L'encapsulation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Fonce ! Freine ! Tourne !
L'encapsulation ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
L'encapsulation ,[object Object],[object Object],[object Object],[object Object]
Encapsulation : exemple SANS AVEC class Adresse { public  String nom; … . } class Adresse { private   String nom public   setNom   (String aNom) { nom = aNom; } // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.nom  = « Dupond »; // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.setNom  (« Dupond »); // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.nom   = « Dupond »; // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.setNom   (« Dupond »);
Encapsulation : exemple SANS AVEC class Adresse { public  String nom; … . } class Adresse { private   String nom public   setNom   (String aNom) { nom = aNom .toUpperCase() ; } // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.nom  = « Dupond » .toUpperCase() ; // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.setNom  (« Dupond »); // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.nom   = « Dupond ». toUpperCase() ; // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.setNom   (« Dupond »);
L'héritage ,[object Object],[object Object],Personne nom : chaîne age : entier seMarie() Employé nom : chaîne age : entier société : chaîne seMarie() estPromu() Personne nom : chaîne age : entier seMarie() Employé société : chaîne estPromu()
L'h éritage Généralisation Spécialisation Véhicule moteur VéhiculeTerrestre nombreRoues VéhiculeMaritime VéhiculeAérien altitudeMax Voiture Camion Paquebot cabines Péniche Avion ailes Hélicoptère rotors
Liskow Substitution Principle : LSP ,[object Object],[object Object],[object Object]
Liskow Substitution Principle : LSP ,[object Object],[object Object],[object Object],[object Object],[object Object]
Le polymorphisme ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],La voie du polymorphisme public interface Dessinable { void draw (); // public abstract implicite }
Comment réaliser des extensions sans modifier l'existant ? L'enjeu d'un bon Design
Rappel : le challenge de l'OCP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],calculPrixRevient() n'est pas fermée aux modifications
Comment réaliser des extensions sans modifier l'existant ? L'enjeu d'un bon Design
Rappel : le challenge de l'OCP ,[object Object],[object Object],[object Object],calculPrixRevient() est ouvert aux extensions Le polymorphisme via l'introduction d'une interface a été la solution
Rappel : le challenge de l'OCP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Mais il faut bien a un moment donné choisir l'implémentation réelle...
L'application des grands principes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Affectation des responsabilités
[object Object],[object Object],[object Object],[object Object],Affectation des responsabilités
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Classement des responsabilités
G.R.A.S.P : Expert ,[object Object],[object Object],[object Object],[object Object]
G.R.A.S.P : Creator ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
G.R.A.S.P. : Faible couplage ( 1/2) Mesure l'interdépendance entre composants
[object Object],[object Object],[object Object],[object Object],G.R.A.S.P. : Faible couplage (2/2)
G.R.A.S.P. : Forte cohésion ,[object Object],[object Object],[object Object],[object Object],[object Object],Chacun son métier !
Attention à l'obésité ! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Quelles solutions pour garantir un faible couplage  et une forte cohésion ?
Interface Segregation Principle : ISP ,[object Object],[object Object],[object Object],[object Object]
ISP : exemple gestion de commandes ,[object Object],[object Object],[object Object],[object Object],[object Object],Service Logistique Saisie des commandes
ISP : Techniques de séparation ,[object Object],[object Object],[object Object],[object Object],[object Object]
ISP : exemple gestion de commandes ,[object Object],[object Object],Service Logistique Saisie des commandes
Gestion des dépendances Inversion de contrôle
Dépendances : conséquences ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],A A A utilise lié à hérite de B B B
Dépendances : un choix stratégique ! ,[object Object],[object Object],[object Object],[object Object],A B A B ? ou ?
Dependency Inversion Principle ,[object Object],[object Object],[object Object]
DIP : haut / bas niveau ,[object Object],[object Object],[object Object],[object Object]
DIP : abstraction/détail ,[object Object],[object Object],[object Object],[object Object],[object Object]
DIP : mise en oeuvre ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Inversion de contrôle : principe ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Inversion de contrôle : mise en oeuvre ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Injection de dépendance : exemple ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Injection de dépendances : sans ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Utilisation : Chat monChat = new Chat(); monChat.jouer();
Injection de dépendance : bilan ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Injection de dépendance : manuelle ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Utilisation : Chat monChat = new Chat(); IJouet jouet = new Souris(); // Souris implémente IJouet monChat.setJouet(jouet); monChat.jouer();
Injection manuelle : bilan ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Injection de dépendance : conteneur ,[object Object],[object Object],[object Object],[object Object],[object Object]
Injection de dépendance : conteneur ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Configuration par annotations (normalisées JEE6): public class Chat { @Inject private IJouet jouet; }
Injection de dépendance : bilan ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Inversion de contrôle : avantages ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Design Pattern en vogue Convention over Configuration
Convention over configuration ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Patterns d'architecture 2 grandes familles (selon Adam Bien)
Exemples d'architecture applicative Application Java web Couches Applicatives  (présentation, service, métier… HTML/ JavaScript HTTP  …  et persistance) JDBC Navigateur web Serveur d’application (ex : JBoss) Serveur de base  de données (Ex: Oracle) Exterieur de  l'application (Système d'information de l'entreprise ) ? SGBDR
Des couches logicielles Présentation Façade Service Persistance Page JSP Contrôleur Logique applicative Façades Services métier Objets du domaine Repository accès aux données Objets du domaine Http SGBDR
Des Patterns d'architecture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Des Patterns d'architecture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Des Patterns d'architecture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lean Service Oriented Architecture (SOA) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Façades Services métier Repository SGBDR  Objets du domaine
Domain Driven Architecture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Repository SGBDR  Objets du domaine
Conclusion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Rester petit mais penser grand !
Bibliographie
Bibliographie  ,[object Object],[object Object],[object Object],[object Object]
Bibliographie ,[object Object],[object Object]
Bibliographie ,[object Object],[object Object],[object Object],[object Object]
Bibliographie : sites internet ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Best-Of Design Patterns
Design Pattern  :  « GoF » (1/2) ,[object Object],[object Object],[object Object]
Design Pattern  : « Gof » (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemples Gof : Gestion des objets ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Design Pattern  :  PEAA (Martin Fowler, 2002) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Exemples PEAA : Accès aux données ,[object Object],[object Object],[object Object]
Exemples Gof/PEAA : Accès aux services ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Design Pattern  :  EIP ( Gregor Hohpe et Bobby Woolf, 2003)  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Design Pattern  :  DDD (Eric Evans, 2003) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Contenu connexe

Similaire à Design poo togo_jug_final

Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Guillaume RICHARD
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiquesSylvie Clément
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyGuillaume Laforge
 

Similaire à Design poo togo_jug_final (20)

Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Coder propre !
Coder propre !Coder propre !
Coder propre !
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
Hibernate
HibernateHibernate
Hibernate
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Drools
DroolsDrools
Drools
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Domain-Specific Languages avec Groovy
Domain-Specific Languages avec GroovyDomain-Specific Languages avec Groovy
Domain-Specific Languages avec Groovy
 
Sds Programme
Sds ProgrammeSds Programme
Sds Programme
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 

Plus de agnes_crepet

Iut agile lyon 20 nov. 2013 - bdd
Iut agile lyon   20 nov. 2013 - bddIut agile lyon   20 nov. 2013 - bdd
Iut agile lyon 20 nov. 2013 - bddagnes_crepet
 
Introduction à l'agilité ensmse
Introduction à l'agilité   ensmseIntroduction à l'agilité   ensmse
Introduction à l'agilité ensmseagnes_crepet
 
Introduction à l'agilité iut lyon 1 sept2013
Introduction à l'agilité   iut lyon 1 sept2013Introduction à l'agilité   iut lyon 1 sept2013
Introduction à l'agilité iut lyon 1 sept2013agnes_crepet
 
#12 rétrospective et roti
#12 rétrospective et roti#12 rétrospective et roti
#12 rétrospective et rotiagnes_crepet
 
#2 gestion de projet
#2 gestion de projet#2 gestion de projet
#2 gestion de projetagnes_crepet
 
#4 pratiques techniques
#4 pratiques techniques#4 pratiques techniques
#4 pratiques techniquesagnes_crepet
 
#6 transition agile
#6 transition agile#6 transition agile
#6 transition agileagnes_crepet
 
#9 processus continu de fabrication
#9 processus continu de fabrication#9 processus continu de fabrication
#9 processus continu de fabricationagnes_crepet
 
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 2012agnes_crepet
 
Introduction à l'agilité numélink - 24 mai 2012 - #0 debut
Introduction à l'agilité   numélink - 24 mai 2012 - #0 debutIntroduction à l'agilité   numélink - 24 mai 2012 - #0 debut
Introduction à l'agilité numélink - 24 mai 2012 - #0 debutagnes_crepet
 
Introduction à l'agilité numélink - 24 mai 2012 - #11 rex
Introduction à l'agilité   numélink - 24 mai 2012 - #11 rexIntroduction à l'agilité   numélink - 24 mai 2012 - #11 rex
Introduction à l'agilité numélink - 24 mai 2012 - #11 rexagnes_crepet
 
Introduction à l'agilité numélink - 24 mai 2012 - #10 convergen
Introduction à l'agilité   numélink - 24 mai 2012 - #10 convergenIntroduction à l'agilité   numélink - 24 mai 2012 - #10 convergen
Introduction à l'agilité numélink - 24 mai 2012 - #10 convergenagnes_crepet
 

Plus de agnes_crepet (20)

Iut agile lyon 20 nov. 2013 - bdd
Iut agile lyon   20 nov. 2013 - bddIut agile lyon   20 nov. 2013 - bdd
Iut agile lyon 20 nov. 2013 - bdd
 
Introduction à l'agilité ensmse
Introduction à l'agilité   ensmseIntroduction à l'agilité   ensmse
Introduction à l'agilité ensmse
 
Introduction à l'agilité iut lyon 1 sept2013
Introduction à l'agilité   iut lyon 1 sept2013Introduction à l'agilité   iut lyon 1 sept2013
Introduction à l'agilité iut lyon 1 sept2013
 
#10 convergence
#10 convergence#10 convergence
#10 convergence
 
#12 rétrospective et roti
#12 rétrospective et roti#12 rétrospective et roti
#12 rétrospective et roti
 
#2 gestion de projet
#2 gestion de projet#2 gestion de projet
#2 gestion de projet
 
#11 rex
#11 rex#11 rex
#11 rex
 
#1 définition
#1 définition#1 définition
#1 définition
 
#5 management
#5 management#5 management
#5 management
 
#4 pratiques techniques
#4 pratiques techniques#4 pratiques techniques
#4 pratiques techniques
 
#6 transition agile
#6 transition agile#6 transition agile
#6 transition agile
 
#9 processus continu de fabrication
#9 processus continu de fabrication#9 processus continu de fabrication
#9 processus continu de fabrication
 
#7 méthodes
#7 méthodes#7 méthodes
#7 méthodes
 
#8 jeux sérieux
#8 jeux sérieux#8 jeux sérieux
#8 jeux sérieux
 
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
 
#3 etapes projet
#3 etapes projet#3 etapes projet
#3 etapes projet
 
#13 annexes
#13 annexes#13 annexes
#13 annexes
 
Introduction à l'agilité numélink - 24 mai 2012 - #0 debut
Introduction à l'agilité   numélink - 24 mai 2012 - #0 debutIntroduction à l'agilité   numélink - 24 mai 2012 - #0 debut
Introduction à l'agilité numélink - 24 mai 2012 - #0 debut
 
Introduction à l'agilité numélink - 24 mai 2012 - #11 rex
Introduction à l'agilité   numélink - 24 mai 2012 - #11 rexIntroduction à l'agilité   numélink - 24 mai 2012 - #11 rex
Introduction à l'agilité numélink - 24 mai 2012 - #11 rex
 
Introduction à l'agilité numélink - 24 mai 2012 - #10 convergen
Introduction à l'agilité   numélink - 24 mai 2012 - #10 convergenIntroduction à l'agilité   numélink - 24 mai 2012 - #10 convergen
Introduction à l'agilité numélink - 24 mai 2012 - #10 convergen
 

Design poo togo_jug_final

  • 1. Principes de la conception objet L'enjeu du design Les Design Patterns Agnès CREPET @agnes_crepet Cyril LACÔTE @clacote 13 aout 2011 TogoJUG - Lomé
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. Approche top-down Ouverture fichier Traitement fichier Fermeture fichier Tant qu ’il y a des enregistrements Traitement Facture Traitement Avoir Traitement du solde ReadCompte Calcul Solde UpdateCompte Traitement du solde ...
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. Encapsulation : exemple SANS AVEC class Adresse { public String nom; … . } class Adresse { private String nom public setNom (String aNom) { nom = aNom; } // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.nom = « Dupond »; // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.setNom (« Dupond »); // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.nom = « Dupond »; // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.setNom (« Dupond »);
  • 28. Encapsulation : exemple SANS AVEC class Adresse { public String nom; … . } class Adresse { private String nom public setNom (String aNom) { nom = aNom .toUpperCase() ; } // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.nom = « Dupond » .toUpperCase() ; // Saisie des livraisons Adresse adrLiv = new Adresse(); ... adrLiv.setNom (« Dupond »); // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.nom = « Dupond ». toUpperCase() ; // Saisie de facturation Adresse adrFac = new Adresse(); ... adrFac.setNom (« Dupond »);
  • 29.
  • 30. L'h éritage Généralisation Spécialisation Véhicule moteur VéhiculeTerrestre nombreRoues VéhiculeMaritime VéhiculeAérien altitudeMax Voiture Camion Paquebot cabines Péniche Avion ailes Hélicoptère rotors
  • 31.
  • 32.
  • 33.
  • 34.
  • 35. Comment réaliser des extensions sans modifier l'existant ? L'enjeu d'un bon Design
  • 36.
  • 37. Comment réaliser des extensions sans modifier l'existant ? L'enjeu d'un bon Design
  • 38.
  • 39.
  • 40.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46. G.R.A.S.P. : Faible couplage ( 1/2) Mesure l'interdépendance entre composants
  • 47.
  • 48.
  • 49.
  • 50. Quelles solutions pour garantir un faible couplage et une forte cohésion ?
  • 51.
  • 52.
  • 53.
  • 54.
  • 55. Gestion des dépendances Inversion de contrôle
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73. Design Pattern en vogue Convention over Configuration
  • 74.
  • 75. Patterns d'architecture 2 grandes familles (selon Adam Bien)
  • 76. Exemples d'architecture applicative Application Java web Couches Applicatives (présentation, service, métier… HTML/ JavaScript HTTP … et persistance) JDBC Navigateur web Serveur d’application (ex : JBoss) Serveur de base de données (Ex: Oracle) Exterieur de l'application (Système d'information de l'entreprise ) ? SGBDR
  • 77. Des couches logicielles Présentation Façade Service Persistance Page JSP Contrôleur Logique applicative Façades Services métier Objets du domaine Repository accès aux données Objets du domaine Http SGBDR
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 85.
  • 86.
  • 87.
  • 88.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.

Notes de l'éditeur

  1. Commentaires
  2. Dijkstra : « plus court chemin » dans un graphe, algorithme du banquier, sémaphore.
  3. Polymorphisme d'héritage = Polymorphisme d'inclusion  redéfinition/spécialisation de méthodes durant l'héritage (overriding) Polymorphisme paramétrable  Les types génériques, introduits avec Java 5, donnent la possibilité de ne pas devoir contrôler le type d'une valeur lors de l'exécution, ils permettent de définir des comportements communs sur des objets sans devoir les typer Polymorphisme ad hoc = surcharge de méthodes (overloading)  capacité de distinguer des opérations par la signature (avec types et arguments différents) plutôt que par le seul nom
  4. une configuration par défaut (convention par règle de nommage) mais permettront aussi la substitution des valeurs par défaut via la configuration (à partir des fichiers ou une autre source de données).
  5. Expliquer l’origine historique du concept : issu de l’architecture de bâtiments.
  6. Creational patterns These patterns have to do with class instantiation. They can be further divided into class-creation patterns and object-creational patterns. While class-creation patterns use inheritance effectively in the instantiation process, object-creation patterns use delegation to get the job done. Abstract Factory groups object factories that have a common theme. Builder constructs complex objects by separating construction and representation. Factory Method creates objects without specifying the exact class to create. Prototype creates objects by cloning an existing object. Singleton restricts object creation for a class to only one instance.