SlideShare une entreprise Scribd logo
1  sur  22
S.O.L.I.D.
MAITRISEZ VOTRE PROGRAMMATION OBJET
Définition
• SOLID est un acronyme qui désigne les 5 premiers principes de la
programmation orientée objet décrit par Robert Cecil Martin (Oncle
Bob)
• Il n’existe pas de hiérarchie dans ces principes
• Dans la pratique ces principes sont très imbriqués
5 principes
• SRP : Single Responsibility Principle
Une classe doit avoir une et une seule responsabilité
• OCP : Open/Close Principle
Une entité doit être ouverte aux extensions et fermée aux modifications
• LSP : Liskov Substitution Principle
Les sous-types doivent être interchangeables par leurs types de base
• ISP : Interface Segregation Principle
Un client ne doit pas être forcé de dépendre de méthodes qu’il n’utilise pas
• DIP : Dependency Inversion Principle
Il faut dépendre des abstractions, pas des implémentations
Avant de commencer
• SOLID s’articule au cœur d’une architecture orienté objet, ses
principes sont un tremplin vers une certaine sérénité
• On peut considérer ces principes comme un « art de faire », de
bonnes pratiques
• « Principe », pas pattern. Si SOLID va nous dire ce qu’il faudrait faire,
les patterns vont nous dire comment le faire
• Utiliser ces principes demande de les conserver à l'esprit durant
chaque étape de nos développements
• Le pragmatisme doit rester maitre, une architecture trop complexe
peut en réalité nuire à ce pourquoi SOLID existe : la maintenabilité
Single Responsibility Principle
SRP – LA RESPONSABILISATION DE VOS CLASSES
SRP : Single Responsibility Principle
• Principe de responsabilité unique : une classe ne doit changer que
pour une seule raison
• Un moyen de trouver les raisons qui pourraient conduire la classe à
changer est d'analyser l'audience de la classe
SRP
SRP : Single Responsibility Principle
L’idée est que si une responsabilité évolue, alors on ne risque pas de
casser les autres pour avoir introduit des couplages forts comme du
code imbriqué le ferait.
• plus compréhensible car découpé, responsabilité par responsabilité
• testable plus facilement avec un spectre fonctionnel réduit
• plus facile à étendre
SRP : Single Responsibility Principle
Le respect excessif du principe d'unique responsabilité peut conduire à
de l'optimisation prématurée, une mauvaise conception et une
architecture qui se retrouve difficile à comprendre.
En revanche, les responsabilités techniques (non-métier), telles que la
persistance, les logs, l’accès aux données, etc. sont presque toujours à
scinder dès le début.
Ici, 2 responsabilités (gestion de la connexion
et de la communication) qui ne doivent pas
nécessairement être scindées. Cela dépendra
le l’évolution future de l’application.
Open/Close Principle
OCP – LA MODIFICATION PAISIBLE
OCP : Open/Close Principle
• Une classe doit être ouverte à l'extension, mais fermée à la
modification
• Sauf pour la correction de bug, l’idée est de ne jamais modifier un
code déjà existant surtout s’il a déjà été testé et approuvé
• Faire bon usage de l’abstraction et du polymorphisme afin d’étendre
un comportement sans le modifier (Decorator, Factory, Observer).
• La composition avec le pattern Strategy répond aussi à ce principe
OCP : Open/Close Principle
Il est probable que vous passiez plus de temps à ajouter de nouvelles
fonctionnalités que d’écrire du code neuf. Ce principe s’applique à
structurer notre code afin de nous procurer l'un des plus grands
avantages de la programmation orientée objet : la réutilisation et la
maintenabilité.
OCP
Liskov Substitution Principle
LSP – LA RÉCONCILIATION DES ENFANTS
LSP : Liskov Substitution Principle
• Les sous-types doivent être interchangeables par leurs types de base
• Les classes enfants ne doivent jamais briser les définitions de type de
classe parente
LSP : Liskov Substitution Principle
Ne pas penser « tous les oiseaux volent sauf l’autruche » mais plutôt
« tous les oiseaux ne volent pas, l’autruche en est un »
LSP
LSP : Liskov Substitution Principle
Je dois pouvoir considérer un cercle, un rectangle ou un carré comme
n’importe quelle forme.
LSP
Interface Segregation Principle
ISP – L’ANTI OUTIL A TOUT FAIRE
ISP : Interface Segregation Principle
• Un client ne doit pas être forcé de dépendre de méthodes qu’il
n’utilise pas
• Préférer plusieurs interfaces spécifiques pour chaque client plutôt
qu'une seule interface générale : interfaces de tête vs interfaces de
rôle
• Créer des interfaces à grains fin qui sont spécifiques au client
ISP : Interface Segregation Principle
Un client ne doit pas être forcé de dépendre de méthodes qu’il n’utilise
pas
LSP
DIP : Dependency Inversion Principle
DIP – L’EMERGENCE DES ABSTRACTIONS
ISP : Interface Segregation Principle
• Il faut dépendre des abstractions, pas des implémentations
• L'idée est que chaque point de contact entre deux modules soit
matérialisé par une abstraction
• Une abstraction se matérialise par une interface ou une classe de
base qui est aussi l’abstraction de classe plus élevé
• Les interfaces documentent
ISP : Interface Segregation Principle
Les modules de haut niveau ne doivent pas dépendre de modules de
plus bas niveau
ISP
Conclusion
• SOLID vs YAGNI (YouAren't Gonna Need It) : pourquoi mettre en
place tout un système de tolérance au changement dans un système
statique, avec peu de dépendances externes ?
• Il est possible de ne pas appliquer tous les principes SOLID d’un coup,
il n’est pas choquant d’ajuster les choix de conception au moment où
l’on en a besoin (refactoring)
• La raison, le pragmatisme et l’expérience vont nous permettre
d’arbitrer. Avec l’expérience vous pourrez appliquer
systématiquement SOLID avec le même effort, mais probablement
pas dès le début

Contenu connexe

Tendances

Rédaction d'un cahier des charges web
Rédaction d'un cahier des charges webRédaction d'un cahier des charges web
Rédaction d'un cahier des charges webForestier Mégane
 
Introduction au web sémantique
Introduction au web sémantiqueIntroduction au web sémantique
Introduction au web sémantiqueStéphane Traumat
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Introduction au web cours.pdf
Introduction au web cours.pdfIntroduction au web cours.pdf
Introduction au web cours.pdfElomyakobi
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partiekadzaki
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services WebLilia Sfaxi
 

Tendances (20)

Rédaction d'un cahier des charges web
Rédaction d'un cahier des charges webRédaction d'un cahier des charges web
Rédaction d'un cahier des charges web
 
Introduction au web sémantique
Introduction au web sémantiqueIntroduction au web sémantique
Introduction au web sémantique
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Patrons de conception
Patrons de conceptionPatrons de conception
Patrons de conception
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Introduction au web cours.pdf
Introduction au web cours.pdfIntroduction au web cours.pdf
Introduction au web cours.pdf
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 

Similaire à SOLID Maitrisez votre programmation Objet​

[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?Christophe HERAL
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns JavaVINOT Bernard
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?Rémi Lesieur
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdfbadrfathallah2
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Arnaud LEMAIRE
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesLilia Sfaxi
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
Le comportement au coeur de vos applications
Le comportement au coeur de vos applicationsLe comportement au coeur de vos applications
Le comportement au coeur de vos applicationsBenoit FONTAINE
 
Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agilesGuillaume Collic
 
Microservices depuis les tranchées
Microservices depuis les tranchéesMicroservices depuis les tranchées
Microservices depuis les tranchéesyannick grenzinger
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015Tarik Zakaria Benmerar
 
Une application sans framework en 2019
Une application sans framework en 2019Une application sans framework en 2019
Une application sans framework en 2019Rodrigue Villetard
 

Similaire à SOLID Maitrisez votre programmation Objet​ (20)

Ecrire un code Testable
Ecrire un code TestableEcrire un code Testable
Ecrire un code Testable
 
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Méthodes agiles
Méthodes agilesMéthodes agiles
Méthodes agiles
 
Clean code
Clean code Clean code
Clean code
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications Mobiles
 
Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Le comportement au coeur de vos applications
Le comportement au coeur de vos applicationsLe comportement au coeur de vos applications
Le comportement au coeur de vos applications
 
Introduction aux méthodes agiles
Introduction aux méthodes agilesIntroduction aux méthodes agiles
Introduction aux méthodes agiles
 
Microservices depuis les tranchées
Microservices depuis les tranchéesMicroservices depuis les tranchées
Microservices depuis les tranchées
 
Cours spring
Cours springCours spring
Cours spring
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015
 
Une application sans framework en 2019
Une application sans framework en 2019Une application sans framework en 2019
Une application sans framework en 2019
 

SOLID Maitrisez votre programmation Objet​

  • 2. Définition • SOLID est un acronyme qui désigne les 5 premiers principes de la programmation orientée objet décrit par Robert Cecil Martin (Oncle Bob) • Il n’existe pas de hiérarchie dans ces principes • Dans la pratique ces principes sont très imbriqués
  • 3. 5 principes • SRP : Single Responsibility Principle Une classe doit avoir une et une seule responsabilité • OCP : Open/Close Principle Une entité doit être ouverte aux extensions et fermée aux modifications • LSP : Liskov Substitution Principle Les sous-types doivent être interchangeables par leurs types de base • ISP : Interface Segregation Principle Un client ne doit pas être forcé de dépendre de méthodes qu’il n’utilise pas • DIP : Dependency Inversion Principle Il faut dépendre des abstractions, pas des implémentations
  • 4. Avant de commencer • SOLID s’articule au cœur d’une architecture orienté objet, ses principes sont un tremplin vers une certaine sérénité • On peut considérer ces principes comme un « art de faire », de bonnes pratiques • « Principe », pas pattern. Si SOLID va nous dire ce qu’il faudrait faire, les patterns vont nous dire comment le faire • Utiliser ces principes demande de les conserver à l'esprit durant chaque étape de nos développements • Le pragmatisme doit rester maitre, une architecture trop complexe peut en réalité nuire à ce pourquoi SOLID existe : la maintenabilité
  • 5. Single Responsibility Principle SRP – LA RESPONSABILISATION DE VOS CLASSES
  • 6. SRP : Single Responsibility Principle • Principe de responsabilité unique : une classe ne doit changer que pour une seule raison • Un moyen de trouver les raisons qui pourraient conduire la classe à changer est d'analyser l'audience de la classe SRP
  • 7. SRP : Single Responsibility Principle L’idée est que si une responsabilité évolue, alors on ne risque pas de casser les autres pour avoir introduit des couplages forts comme du code imbriqué le ferait. • plus compréhensible car découpé, responsabilité par responsabilité • testable plus facilement avec un spectre fonctionnel réduit • plus facile à étendre
  • 8. SRP : Single Responsibility Principle Le respect excessif du principe d'unique responsabilité peut conduire à de l'optimisation prématurée, une mauvaise conception et une architecture qui se retrouve difficile à comprendre. En revanche, les responsabilités techniques (non-métier), telles que la persistance, les logs, l’accès aux données, etc. sont presque toujours à scinder dès le début. Ici, 2 responsabilités (gestion de la connexion et de la communication) qui ne doivent pas nécessairement être scindées. Cela dépendra le l’évolution future de l’application.
  • 9. Open/Close Principle OCP – LA MODIFICATION PAISIBLE
  • 10. OCP : Open/Close Principle • Une classe doit être ouverte à l'extension, mais fermée à la modification • Sauf pour la correction de bug, l’idée est de ne jamais modifier un code déjà existant surtout s’il a déjà été testé et approuvé • Faire bon usage de l’abstraction et du polymorphisme afin d’étendre un comportement sans le modifier (Decorator, Factory, Observer). • La composition avec le pattern Strategy répond aussi à ce principe
  • 11. OCP : Open/Close Principle Il est probable que vous passiez plus de temps à ajouter de nouvelles fonctionnalités que d’écrire du code neuf. Ce principe s’applique à structurer notre code afin de nous procurer l'un des plus grands avantages de la programmation orientée objet : la réutilisation et la maintenabilité. OCP
  • 12. Liskov Substitution Principle LSP – LA RÉCONCILIATION DES ENFANTS
  • 13. LSP : Liskov Substitution Principle • Les sous-types doivent être interchangeables par leurs types de base • Les classes enfants ne doivent jamais briser les définitions de type de classe parente
  • 14. LSP : Liskov Substitution Principle Ne pas penser « tous les oiseaux volent sauf l’autruche » mais plutôt « tous les oiseaux ne volent pas, l’autruche en est un » LSP
  • 15. LSP : Liskov Substitution Principle Je dois pouvoir considérer un cercle, un rectangle ou un carré comme n’importe quelle forme. LSP
  • 16. Interface Segregation Principle ISP – L’ANTI OUTIL A TOUT FAIRE
  • 17. ISP : Interface Segregation Principle • Un client ne doit pas être forcé de dépendre de méthodes qu’il n’utilise pas • Préférer plusieurs interfaces spécifiques pour chaque client plutôt qu'une seule interface générale : interfaces de tête vs interfaces de rôle • Créer des interfaces à grains fin qui sont spécifiques au client
  • 18. ISP : Interface Segregation Principle Un client ne doit pas être forcé de dépendre de méthodes qu’il n’utilise pas LSP
  • 19. DIP : Dependency Inversion Principle DIP – L’EMERGENCE DES ABSTRACTIONS
  • 20. ISP : Interface Segregation Principle • Il faut dépendre des abstractions, pas des implémentations • L'idée est que chaque point de contact entre deux modules soit matérialisé par une abstraction • Une abstraction se matérialise par une interface ou une classe de base qui est aussi l’abstraction de classe plus élevé • Les interfaces documentent
  • 21. ISP : Interface Segregation Principle Les modules de haut niveau ne doivent pas dépendre de modules de plus bas niveau ISP
  • 22. Conclusion • SOLID vs YAGNI (YouAren't Gonna Need It) : pourquoi mettre en place tout un système de tolérance au changement dans un système statique, avec peu de dépendances externes ? • Il est possible de ne pas appliquer tous les principes SOLID d’un coup, il n’est pas choquant d’ajuster les choix de conception au moment où l’on en a besoin (refactoring) • La raison, le pragmatisme et l’expérience vont nous permettre d’arbitrer. Avec l’expérience vous pourrez appliquer systématiquement SOLID avec le même effort, mais probablement pas dès le début

Notes de l'éditeur

  1. https://amethyste16.wordpress.com/2016/02/02/ecrire-du-code-solid/ PRINCIPE, pas pattern. Si SOLID va nous dire ce qu’il faudrait faire, les patterns vont nous dire comment le faire. Cela n’a pas de sens d’entamer un chantier du style: Mardi on fait S Lundi O …
  2. https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) PRINCIPE, pas pattern. Si SOLID va nous dire ce qu’il faudrait faire, les patterns vont nous dire comment le faire. Au niveau du vocabulaire une entité peut désigner une fonction, un module, mais dans notre contexte ce sera plutôt une classe.
  3. Il y a le mauvais développeur et le bon développeur, le mauvais développeur il voit un clavier il code. Le bon développeur il voit un clavier il code… SOLID.
  4. https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique https://fr.wikibooks.org/wiki/Patrons_de_conception/Cha%C3%AEne_de_responsabilit%C3%A9 Un bug n’est pas une raison de changer. Facile à comprendre dur à appréhender, à bien découper : dépend beaucoup du futur de l’application.
  5. https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique https://fr.wikibooks.org/wiki/Patrons_de_conception/Cha%C3%AEne_de_responsabilit%C3%A9 L’idée est que si une responsabilité évolue, alors on ne risque pas de casser les autres pour avoir introduit des couplages forts comme du code imbriqué l’un dans l’autre.
  6. http://sogilis.com/blog/srp-single-responsibility-principle-code/ Il nous explique que les classes qui implémentent cette interface ont alors 2 responsabilités (la gestion de la connexion et la communication), mais qu’elles ne doivent pas nécessairement être scindées : tout dépend de la manière dont l’application évolue ! Si les évolutions ne porterons que sur la gestion de la connexion, alors oui, pour minimiser la rigidité, éviter de toucher à la partie communication lorsqu’on modifie la gestion de la connexion, etc., il est préférable de dissocier ces 2 responsabilités. En revanche, si les futures évolutions portent sur ces 2 aspects en même temps, alors cette séparation n’est pas nécessaire. Elle est même déconseillée pour éviter de compliquer l’architecture de manière inutile.
  7. PRINCIPE, pas pattern. Si SOLID va nous dire ce qu’il faudrait faire, les patterns vont nous dire comment le faire.
  8. PRINCIPE, pas pattern. Si SOLID va nous dire ce qu’il faudrait faire, les patterns vont nous dire comment le faire. http://www.jasondeoliveira.com/2010/11/tutorial-solid-quality-code-in-c-part3.html
  9. https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 Violation courante Carré : Rectangle https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 https://www.javacodegeeks.com/2011/11/solid-liskov-substitution-principle.html
  10. https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 Violation courante Carré : Rectangle https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 https://www.javacodegeeks.com/2011/11/solid-liskov-substitution-principle.html
  11. https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 Violation courante Carré : Rectangle https://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710 https://www.javacodegeeks.com/2011/11/solid-liskov-substitution-principle.html
  12. Historiquement les interfaces ont été développées pour introduire des couplages faibles. Ce n’est donc pas la classe concrète qui a besoin d’une interface, mais le client. On a donc aucune raison de proposer à un client des méthodes dont il n’a pas besoin. Ce type d’interface qui cible le besoin est appelée interface de rôle. Elles sont par définition plus restreintes  que les interfaces de tête et surtout moins sensibles au problème LSP.
  13. Historiquement les interfaces ont été développées pour introduire des couplages faibles. Ce n’est donc pas la classe concrète qui a besoin d’une interface, mais le client. On a donc aucune raison de proposer à un client des méthodes dont il n’a pas besoin. Ce type d’interface qui cible le besoin est appelée interface de rôle. Elles sont par définition plus restreintes  que les interfaces de tête et surtout moins sensibles au problème LSP. http://www.dotnetdojo.com/concevoir-des-applications-solid-avec-isp/ Lorsqu’on y réfléchi, le fait d’avoir une interface « trop grosse » va vite entraîner des problèmes d’efficacité : chaque classe implémentant l’interface devra implémenter toutes les méthodes de l’interface. Il est donc intéressant de réduire cette interface au minimum nécessaire.
  14. En règle générale les modules de haut niveau contiennent le cœur – business – des applications. Lorsque ces modules dépendent de modules de plus bas niveau, les modifications effectuées dans les modules « bas niveau » peuvent avoir des répercussions sur les modules « haut niveau » et les « forcer » à appliquer des changements. Une solution consiste à rendre indépendants les modules de haut et bas niveau
  15. Permet aussi la documentation
  16. Notre logiciel sera effectivement extrêmement robuste envers des événements qui n’auront pas lieu, ou avec un impact minime. L’investissement effectué s’avère peu productif, avec un retour sur investissement négatif. La raison, le pragmatisme et l’expérience vont nous permettre d’arbitrer sur une conception plus ou moins abstraite, plus ou moins tolérante au changement