SlideShare une entreprise Scribd logo
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

Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
VINOT Bernard
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
Kalilou DIABY
 
Design patterns
Design patternsDesign patterns
Design patterns
CocoaHeads.fr
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Coder propre !
Coder propre !Coder propre !
Coder propre !
cluelessjoe
 
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 fonctionnelle
Association Agile Nantes
 
Hibernate
HibernateHibernate
Hibernate
Ghazouani Mahdi
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
Gilles 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-pratiques
Sylvie 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
 
Cours Ynov JS B1_1
Cours Ynov JS B1_1Cours Ynov JS B1_1
Cours Ynov JS B1_1
ThomasBrunet18
 

Similaire à Design poo togo_jug_final (20)

Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
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
 

Plus de Duchess France

Conding Dojo Fruit Shop
Conding Dojo Fruit ShopConding Dojo Fruit Shop
Conding Dojo Fruit Shop
Duchess France
 
Dans les coulisses de Google BigQuery
 Dans les coulisses de Google BigQuery Dans les coulisses de Google BigQuery
Dans les coulisses de Google BigQuery
Duchess France
 
Hands-On Apache Spark
Hands-On Apache SparkHands-On Apache Spark
Hands-On Apache Spark
Duchess France
 
4 ans de Duchess France : Cassandra 2.0
4 ans de Duchess France : Cassandra 2.04 ans de Duchess France : Cassandra 2.0
4 ans de Duchess France : Cassandra 2.0Duchess France
 
BOF Duchess France à Devoxx France 2013
BOF Duchess France à Devoxx France 2013BOF Duchess France à Devoxx France 2013
BOF Duchess France à Devoxx France 2013
Duchess France
 
Gemfire Sqlfire - La Marmite NoSql
Gemfire Sqlfire - La Marmite NoSqlGemfire Sqlfire - La Marmite NoSql
Gemfire Sqlfire - La Marmite NoSql
Duchess France
 
MongoDB - Marmite NoSql
MongoDB - Marmite NoSqlMongoDB - Marmite NoSql
MongoDB - Marmite NoSqlDuchess France
 
Neo4 j - Marmite NoSql
Neo4 j - Marmite NoSqlNeo4 j - Marmite NoSql
Neo4 j - Marmite NoSqlDuchess France
 
Intro - La Marmite NoSql
Intro - La Marmite NoSqlIntro - La Marmite NoSql
Intro - La Marmite NoSqlDuchess France
 
2 ans de Duchess France - Ouverture
2 ans de Duchess France - Ouverture2 ans de Duchess France - Ouverture
2 ans de Duchess France - Ouverture
Duchess France
 

Plus de Duchess France (12)

Conding Dojo Fruit Shop
Conding Dojo Fruit ShopConding Dojo Fruit Shop
Conding Dojo Fruit Shop
 
Dans les coulisses de Google BigQuery
 Dans les coulisses de Google BigQuery Dans les coulisses de Google BigQuery
Dans les coulisses de Google BigQuery
 
Hands-On Apache Spark
Hands-On Apache SparkHands-On Apache Spark
Hands-On Apache Spark
 
4 ans de Duchess France : Cassandra 2.0
4 ans de Duchess France : Cassandra 2.04 ans de Duchess France : Cassandra 2.0
4 ans de Duchess France : Cassandra 2.0
 
BOF Duchess France à Devoxx France 2013
BOF Duchess France à Devoxx France 2013BOF Duchess France à Devoxx France 2013
BOF Duchess France à Devoxx France 2013
 
Gemfire Sqlfire - La Marmite NoSql
Gemfire Sqlfire - La Marmite NoSqlGemfire Sqlfire - La Marmite NoSql
Gemfire Sqlfire - La Marmite NoSql
 
MongoDB - Marmite NoSql
MongoDB - Marmite NoSqlMongoDB - Marmite NoSql
MongoDB - Marmite NoSql
 
Neo4 j - Marmite NoSql
Neo4 j - Marmite NoSqlNeo4 j - Marmite NoSql
Neo4 j - Marmite NoSql
 
Intro - La Marmite NoSql
Intro - La Marmite NoSqlIntro - La Marmite NoSql
Intro - La Marmite NoSql
 
2 ans de Duchess France - Ouverture
2 ans de Duchess France - Ouverture2 ans de Duchess France - Ouverture
2 ans de Duchess France - Ouverture
 
Ces nanas qui codent
Ces nanas qui codentCes nanas qui codent
Ces nanas qui codent
 
Trivial Java - Part 2
Trivial Java - Part 2Trivial Java - Part 2
Trivial Java - Part 2
 

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.