[{"data":1,"prerenderedAt":6287},["ShallowReactive",2],{"/fr/architecture-craft/principes-solid-java-exemples":3,"search-api":-1},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"id":10,"date":11,"listed":12,"nocomments":6,"hidden":6,"categories":13,"tags":15,"--cover":18,"readingTime":19,"body":24,"_type":6281,"_id":6282,"_source":6283,"_file":6284,"_stem":6285,"_extension":6286},"/fr/architecture-craft/principes-solid-java-exemples","architecture-craft",false,"","Principes SOLID en Java, Comprendre et Appliquer pour un Code plus Propre","Découvrez comment appliquer les principes SOLID en Java pour améliorer la structure, la maintenabilité et la modularité de votre code. Avec des exemples...",48,"2024-05-22",true,[14],"Principes du software craftsmanship",[16,17],"principe","qualité","covers/articles/solid-principles.jpg",{"text":20,"minutes":21,"time":22,"words":23},"17 min read",16.295,977700,3259,{"type":25,"children":26,"toc":6256},"root",[27,36,42,47,52,72,77,137,142,149,153,158,162,177,182,186,192,205,212,217,223,244,251,627,639,645,650,1005,1008,1023,1036,1042,1061,1066,1071,1076,1081,1087,1100,1371,1398,1404,1409,1840,1852,1979,1990,2323,2326,2339,2345,2350,2355,2360,2365,2386,2392,2410,3000,3035,3041,3046,3537,3540,3553,3559,3564,3569,3574,3579,3592,3598,3603,3685,3714,3719,3978,3997,4003,4015,4186,4191,4626,4629,4642,4648,4653,4658,4663,4668,4680,4686,4698,5019,5045,5051,5064,5649,5697,6005,6008,6021,6027,6172,6175,6181,6196,6209,6222,6235,6238,6250],{"type":28,"tag":29,"props":30,"children":32},"element","h2",{"id":31},"principes-solid-les-fondements-de-la-programmation-orientée-objet",[33],{"type":34,"value":35},"text","Principes SOLID : Les fondements de la programmation orientée objet",{"type":28,"tag":37,"props":38,"children":39},"p",{},[40],{"type":34,"value":41},"Si vous êtes développeur ou étudiant en informatique, vous avez peut-être entendu parler des principes SOLID sans vraiment comprendre comment les appliquer dans vos projets. Et c’est tout à fait normal. Souvent, au début de notre parcours, on se concentre plus sur la fonctionnalité que sur la structure de notre code. Mais à un certain point, les choses commencent à se compliquer : notre code devient de plus en plus difficile à maintenir, les bugs se multiplient, et chaque nouvelle fonctionnalité semble briser quelque chose d'autre.",{"type":28,"tag":37,"props":43,"children":44},{},[45],{"type":34,"value":46},"C’est ici que les principes SOLID deviennent essentiels. Ces cinq principes de conception orientée objet, formalisés par Robert C. Martin dans \"Agile Software Development: Principles, Patterns, and Practices\", peuvent vous aider à écrire du code plus clair, plus modulable, et surtout, plus facile à maintenir. Et je parle en connaissance de cause. Quand j’ai commencé à les appliquer, mon code est devenu beaucoup plus propre, et j’ai pu développer des fonctionnalités plus rapidement sans avoir à craindre de casser l’existant.",{"type":28,"tag":37,"props":48,"children":49},{},[50],{"type":34,"value":51},"Dans cet article, vous allez découvrir :",{"type":28,"tag":53,"props":54,"children":55},"ul",{},[56,62,67],{"type":28,"tag":57,"props":58,"children":59},"li",{},[60],{"type":34,"value":61},"Ce que sont les principes SOLID.",{"type":28,"tag":57,"props":63,"children":64},{},[65],{"type":34,"value":66},"Pourquoi ils sont essentiels à une bonne architecture de votre code.",{"type":28,"tag":57,"props":68,"children":69},{},[70],{"type":34,"value":71},"Comment les appliquer concrètement dans des projets Java avec des exemples clairs.",{"type":28,"tag":37,"props":73,"children":74},{},[75],{"type":34,"value":76},"Les principes SOLID sont les suivants :",{"type":28,"tag":78,"props":79,"children":80},"ol",{},[81,93,104,115,126],{"type":28,"tag":57,"props":82,"children":83},{},[84,91],{"type":28,"tag":85,"props":86,"children":88},"a",{"href":87},"/fr/architecture-craft/principe-srp-software-craftsmanship-exemples-java",[89],{"type":34,"value":90},"Le principe de responsabilité unique (SRP)",{"type":34,"value":92}," : une classe ne doit avoir qu'une seule raison de changer. Cela signifie qu'une classe ne doit avoir qu'une seule responsabilité et qu'elle ne doit pas être surchargée de fonctionnalités.",{"type":28,"tag":57,"props":94,"children":95},{},[96,102],{"type":28,"tag":85,"props":97,"children":99},{"href":98},"/fr/architecture-craft/principe-ocp-software-craftsmanship-exemples-java",[100],{"type":34,"value":101},"Le principe d'ouverture/fermeture (OCP)",{"type":34,"value":103}," : les entités logicielles (classes, modules, fonctions, etc.) doivent être ouvertes à l'extension mais fermées à la modification. Cela signifie qu'il est possible d'ajouter de nouvelles fonctionnalités sans modifier le code existant.",{"type":28,"tag":57,"props":105,"children":106},{},[107,113],{"type":28,"tag":85,"props":108,"children":110},{"href":109},"/fr/architecture-craft/principe-substitution-liskov-lsp-java",[111],{"type":34,"value":112},"Le principe de substitution de Liskov (LSP)",{"type":34,"value":114}," : les objets d'une classe dérivée doivent pouvoir être utilisés en remplacement des objets de la classe de base sans altérer la cohérence du programme.",{"type":28,"tag":57,"props":116,"children":117},{},[118,124],{"type":28,"tag":85,"props":119,"children":121},{"href":120},"/fr/architecture-craft/principe-isp-software-craftsmanship-exemples-java",[122],{"type":34,"value":123},"Le principe de ségrégation des interfaces (ISP)",{"type":34,"value":125}," : les interfaces doivent être spécifiques aux besoins des clients. Cela signifie qu'il vaut mieux avoir plusieurs interfaces spécialisées plutôt qu'une seule interface générale.",{"type":28,"tag":57,"props":127,"children":128},{},[129,135],{"type":28,"tag":85,"props":130,"children":132},{"href":131},"/fr/architecture-craft/principe-inversion-dependances-dip-java-guide-complet",[133],{"type":34,"value":134},"Le principe d'inversion de dépendance (DIP)",{"type":34,"value":136}," : les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions. Cela favorise la modularité et la facilité de test.",{"type":28,"tag":37,"props":138,"children":139},{},[140],{"type":34,"value":141},"A la fin de cet article, vous aurez une bien meilleure compréhension de ces principes fondamentaux.",{"type":28,"tag":143,"props":144,"children":146},"h1",{"id":145},"comprendre-et-appliquer-les-principes-solid-en-java",[147],{"type":34,"value":148},"Comprendre et appliquer les principes SOLID en Java",{"type":28,"tag":37,"props":150,"children":151},{},[152],{"type":34,"value":41},{"type":28,"tag":37,"props":154,"children":155},{},[156],{"type":34,"value":157},"C'est ici que les principes SOLID deviennent essentiels. Ces cinq principes de conception orientée objet peuvent vous aider à écrire du code plus clair, plus modulable, et surtout, plus facile à maintenir. Et je parle en connaissance de cause. Quand j’ai commencé à les appliquer, mon code est devenu beaucoup plus propre, et j'ai pu développer des fonctionnalités plus rapidement sans avoir à craindre de casser l’existant.",{"type":28,"tag":37,"props":159,"children":160},{},[161],{"type":34,"value":51},{"type":28,"tag":53,"props":163,"children":164},{},[165,169,173],{"type":28,"tag":57,"props":166,"children":167},{},[168],{"type":34,"value":61},{"type":28,"tag":57,"props":170,"children":171},{},[172],{"type":34,"value":66},{"type":28,"tag":57,"props":174,"children":175},{},[176],{"type":34,"value":71},{"type":28,"tag":37,"props":178,"children":179},{},[180],{"type":34,"value":181},"Attachez vos ceintures, car à la fin de cet article, vous aurez une bien meilleure compréhension de ces principes fondamentaux.",{"type":28,"tag":183,"props":184,"children":185},"hr",{},[],{"type":28,"tag":29,"props":187,"children":189},{"id":188},"_1-principe-de-responsabilité-unique-single-responsibility-principle-srp",[190],{"type":34,"value":191},"1. Principe de Responsabilité Unique (Single Responsibility Principle - SRP)",{"type":28,"tag":37,"props":193,"children":194},{},[195,197,203],{"type":34,"value":196},"Le principe de responsabilité unique, ou SRP, est probablement l’un des plus simples à comprendre, mais aussi l’un des plus importants. L'idée est qu'une classe ne devrait avoir ",{"type":28,"tag":198,"props":199,"children":200},"strong",{},[201],{"type":34,"value":202},"qu'une seule raison de changer",{"type":34,"value":204},". En d'autres termes, chaque classe doit se concentrer sur une seule tâche ou responsabilité.",{"type":28,"tag":206,"props":207,"children":209},"h3",{"id":208},"pourquoi-cest-important",[210],{"type":34,"value":211},"Pourquoi c'est important ?",{"type":28,"tag":37,"props":213,"children":214},{},[215],{"type":34,"value":216},"Quand une classe a plusieurs responsabilités, cela peut rapidement mener à une situation où un changement dans une partie de la classe impacte d'autres parties qui n'ont rien à voir avec ce changement. Cela rend le code difficile à maintenir et augmente les risques de bugs. En respectant le SRP, vous minimisez le couplage dans votre code et facilitez la maintenance.",{"type":28,"tag":206,"props":218,"children":220},{"id":219},"exemple-concret-en-java",[221],{"type":34,"value":222},"Exemple concret en Java",{"type":28,"tag":37,"props":224,"children":225},{},[226,228,235,237,242],{"type":34,"value":227},"Imaginons un système qui gère des rapports. Nous avons une classe ",{"type":28,"tag":229,"props":230,"children":232},"code",{"className":231},[],[233],{"type":34,"value":234},"Report",{"type":34,"value":236}," qui s'occupe à la fois de la génération du rapport et de son enregistrement au format PDF. À première vue, cela peut sembler correct. Cependant, cette classe enfreint le principe de responsabilité unique, car elle fait deux choses différentes : générer un rapport ",{"type":28,"tag":198,"props":238,"children":239},{},[240],{"type":34,"value":241},"et",{"type":34,"value":243}," le sauvegarder en PDF.",{"type":28,"tag":245,"props":246,"children":248},"h4",{"id":247},"exemple-sans-srp",[249],{"type":34,"value":250},"Exemple sans SRP :",{"type":28,"tag":252,"props":253,"children":257},"pre",{"className":254,"code":255,"language":256,"meta":7,"style":7},"language-java shiki shiki-themes catppuccin-frappe github-dark","public class Report {\n    private String content;\n\n    public Report(String content) {\n        this.content = content;\n    }\n\n    public void generateReport() {\n        // Logique de génération de rapport\n        System.out.println(\"Génération du rapport : \" + content);\n    }\n\n    public void saveToPDF(String filename) {\n        // Logique d'enregistrement en PDF\n        System.out.println(\"Enregistrement du rapport en PDF sous : \" + filename);\n    }\n}\n","java",[258],{"type":28,"tag":229,"props":259,"children":260},{"__ignoreMap":7},[261,290,316,325,363,397,406,414,441,451,502,510,518,556,565,610,618],{"type":28,"tag":262,"props":263,"children":266},"span",{"class":264,"line":265},"line",1,[267,273,278,284],{"type":28,"tag":262,"props":268,"children":270},{"style":269},"--shiki-default:#CA9EE6;--shiki-dark:#F97583",[271],{"type":34,"value":272},"public",{"type":28,"tag":262,"props":274,"children":275},{"style":269},[276],{"type":34,"value":277}," class",{"type":28,"tag":262,"props":279,"children":281},{"style":280},"--shiki-default:#E5C890;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[282],{"type":34,"value":283}," Report",{"type":28,"tag":262,"props":285,"children":287},{"style":286},"--shiki-default:#949CBB;--shiki-dark:#E1E4E8",[288],{"type":34,"value":289}," {\n",{"type":28,"tag":262,"props":291,"children":293},{"class":264,"line":292},2,[294,299,305,311],{"type":28,"tag":262,"props":295,"children":296},{"style":269},[297],{"type":34,"value":298},"    private",{"type":28,"tag":262,"props":300,"children":302},{"style":301},"--shiki-default:#CA9EE6;--shiki-dark:#E1E4E8",[303],{"type":34,"value":304}," String",{"type":28,"tag":262,"props":306,"children":308},{"style":307},"--shiki-default:#C6D0F5;--shiki-dark:#E1E4E8",[309],{"type":34,"value":310}," content",{"type":28,"tag":262,"props":312,"children":313},{"style":286},[314],{"type":34,"value":315},";\n",{"type":28,"tag":262,"props":317,"children":319},{"class":264,"line":318},3,[320],{"type":28,"tag":262,"props":321,"children":322},{"emptyLinePlaceholder":12},[323],{"type":34,"value":324},"\n",{"type":28,"tag":262,"props":326,"children":328},{"class":264,"line":327},4,[329,334,339,344,349,354,359],{"type":28,"tag":262,"props":330,"children":331},{"style":269},[332],{"type":34,"value":333},"    public",{"type":28,"tag":262,"props":335,"children":337},{"style":336},"--shiki-default:#8CAAEE;--shiki-default-font-style:italic;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit",[338],{"type":34,"value":283},{"type":28,"tag":262,"props":340,"children":341},{"style":286},[342],{"type":34,"value":343},"(",{"type":28,"tag":262,"props":345,"children":346},{"style":301},[347],{"type":34,"value":348},"String",{"type":28,"tag":262,"props":350,"children":352},{"style":351},"--shiki-default:#EA999C;--shiki-default-font-style:italic;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit",[353],{"type":34,"value":310},{"type":28,"tag":262,"props":355,"children":356},{"style":286},[357],{"type":34,"value":358},")",{"type":28,"tag":262,"props":360,"children":361},{"style":286},[362],{"type":34,"value":289},{"type":28,"tag":262,"props":364,"children":366},{"class":264,"line":365},5,[367,373,378,383,389,393],{"type":28,"tag":262,"props":368,"children":370},{"style":369},"--shiki-default:#E78284;--shiki-dark:#79B8FF",[371],{"type":34,"value":372},"        this",{"type":28,"tag":262,"props":374,"children":375},{"style":286},[376],{"type":34,"value":377},".",{"type":28,"tag":262,"props":379,"children":380},{"style":307},[381],{"type":34,"value":382},"content ",{"type":28,"tag":262,"props":384,"children":386},{"style":385},"--shiki-default:#81C8BE;--shiki-dark:#F97583",[387],{"type":34,"value":388},"=",{"type":28,"tag":262,"props":390,"children":391},{"style":307},[392],{"type":34,"value":310},{"type":28,"tag":262,"props":394,"children":395},{"style":286},[396],{"type":34,"value":315},{"type":28,"tag":262,"props":398,"children":400},{"class":264,"line":399},6,[401],{"type":28,"tag":262,"props":402,"children":403},{"style":286},[404],{"type":34,"value":405},"    }\n",{"type":28,"tag":262,"props":407,"children":409},{"class":264,"line":408},7,[410],{"type":28,"tag":262,"props":411,"children":412},{"emptyLinePlaceholder":12},[413],{"type":34,"value":324},{"type":28,"tag":262,"props":415,"children":417},{"class":264,"line":416},8,[418,422,427,432,437],{"type":28,"tag":262,"props":419,"children":420},{"style":269},[421],{"type":34,"value":333},{"type":28,"tag":262,"props":423,"children":424},{"style":269},[425],{"type":34,"value":426}," void",{"type":28,"tag":262,"props":428,"children":429},{"style":336},[430],{"type":34,"value":431}," generateReport",{"type":28,"tag":262,"props":433,"children":434},{"style":286},[435],{"type":34,"value":436},"()",{"type":28,"tag":262,"props":438,"children":439},{"style":286},[440],{"type":34,"value":289},{"type":28,"tag":262,"props":442,"children":444},{"class":264,"line":443},9,[445],{"type":28,"tag":262,"props":446,"children":448},{"style":447},"--shiki-default:#737994;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit",[449],{"type":34,"value":450},"        // Logique de génération de rapport\n",{"type":28,"tag":262,"props":452,"children":454},{"class":264,"line":453},10,[455,460,464,469,473,478,482,488,493,497],{"type":28,"tag":262,"props":456,"children":457},{"style":307},[458],{"type":34,"value":459},"        System",{"type":28,"tag":262,"props":461,"children":462},{"style":286},[463],{"type":34,"value":377},{"type":28,"tag":262,"props":465,"children":466},{"style":307},[467],{"type":34,"value":468},"out",{"type":28,"tag":262,"props":470,"children":471},{"style":286},[472],{"type":34,"value":377},{"type":28,"tag":262,"props":474,"children":475},{"style":336},[476],{"type":34,"value":477},"println",{"type":28,"tag":262,"props":479,"children":480},{"style":286},[481],{"type":34,"value":343},{"type":28,"tag":262,"props":483,"children":485},{"style":484},"--shiki-default:#A6D189;--shiki-dark:#9ECBFF",[486],{"type":34,"value":487},"\"Génération du rapport : \"",{"type":28,"tag":262,"props":489,"children":490},{"style":385},[491],{"type":34,"value":492}," +",{"type":28,"tag":262,"props":494,"children":495},{"style":307},[496],{"type":34,"value":310},{"type":28,"tag":262,"props":498,"children":499},{"style":286},[500],{"type":34,"value":501},");\n",{"type":28,"tag":262,"props":503,"children":505},{"class":264,"line":504},11,[506],{"type":28,"tag":262,"props":507,"children":508},{"style":286},[509],{"type":34,"value":405},{"type":28,"tag":262,"props":511,"children":513},{"class":264,"line":512},12,[514],{"type":28,"tag":262,"props":515,"children":516},{"emptyLinePlaceholder":12},[517],{"type":34,"value":324},{"type":28,"tag":262,"props":519,"children":521},{"class":264,"line":520},13,[522,526,530,535,539,543,548,552],{"type":28,"tag":262,"props":523,"children":524},{"style":269},[525],{"type":34,"value":333},{"type":28,"tag":262,"props":527,"children":528},{"style":269},[529],{"type":34,"value":426},{"type":28,"tag":262,"props":531,"children":532},{"style":336},[533],{"type":34,"value":534}," saveToPDF",{"type":28,"tag":262,"props":536,"children":537},{"style":286},[538],{"type":34,"value":343},{"type":28,"tag":262,"props":540,"children":541},{"style":301},[542],{"type":34,"value":348},{"type":28,"tag":262,"props":544,"children":545},{"style":351},[546],{"type":34,"value":547}," filename",{"type":28,"tag":262,"props":549,"children":550},{"style":286},[551],{"type":34,"value":358},{"type":28,"tag":262,"props":553,"children":554},{"style":286},[555],{"type":34,"value":289},{"type":28,"tag":262,"props":557,"children":559},{"class":264,"line":558},14,[560],{"type":28,"tag":262,"props":561,"children":562},{"style":447},[563],{"type":34,"value":564},"        // Logique d'enregistrement en PDF\n",{"type":28,"tag":262,"props":566,"children":568},{"class":264,"line":567},15,[569,573,577,581,585,589,593,598,602,606],{"type":28,"tag":262,"props":570,"children":571},{"style":307},[572],{"type":34,"value":459},{"type":28,"tag":262,"props":574,"children":575},{"style":286},[576],{"type":34,"value":377},{"type":28,"tag":262,"props":578,"children":579},{"style":307},[580],{"type":34,"value":468},{"type":28,"tag":262,"props":582,"children":583},{"style":286},[584],{"type":34,"value":377},{"type":28,"tag":262,"props":586,"children":587},{"style":336},[588],{"type":34,"value":477},{"type":28,"tag":262,"props":590,"children":591},{"style":286},[592],{"type":34,"value":343},{"type":28,"tag":262,"props":594,"children":595},{"style":484},[596],{"type":34,"value":597},"\"Enregistrement du rapport en PDF sous : \"",{"type":28,"tag":262,"props":599,"children":600},{"style":385},[601],{"type":34,"value":492},{"type":28,"tag":262,"props":603,"children":604},{"style":307},[605],{"type":34,"value":547},{"type":28,"tag":262,"props":607,"children":608},{"style":286},[609],{"type":34,"value":501},{"type":28,"tag":262,"props":611,"children":613},{"class":264,"line":612},16,[614],{"type":28,"tag":262,"props":615,"children":616},{"style":286},[617],{"type":34,"value":405},{"type":28,"tag":262,"props":619,"children":621},{"class":264,"line":620},17,[622],{"type":28,"tag":262,"props":623,"children":624},{"style":286},[625],{"type":34,"value":626},"}\n",{"type":28,"tag":37,"props":628,"children":629},{},[630,632,637],{"type":34,"value":631},"Dans cet exemple, la classe ",{"type":28,"tag":229,"props":633,"children":635},{"className":634},[],[636],{"type":34,"value":234},{"type":34,"value":638}," enfreint le SRP. Elle est responsable de deux tâches distinctes : générer un rapport et l'enregistrer sous forme de fichier PDF. Si un jour on décide de changer la méthode de génération des rapports ou d'enregistrer le fichier dans un autre format (par exemple, JSON), il faudra modifier cette classe, ce qui peut introduire des bugs ou rendre les modifications plus difficiles.",{"type":28,"tag":245,"props":640,"children":642},{"id":641},"exemple-avec-srp-appliqué",[643],{"type":34,"value":644},"Exemple avec SRP appliqué :",{"type":28,"tag":37,"props":646,"children":647},{},[648],{"type":34,"value":649},"Pour corriger cela, on peut diviser les responsabilités en deux classes distinctes.",{"type":28,"tag":252,"props":651,"children":653},{"className":254,"code":652,"language":256,"meta":7,"style":7},"// Classe qui se charge uniquement de la génération du rapport\npublic class Report {\n    private String content;\n\n    public Report(String content) {\n        this.content = content;\n    }\n\n    public void generateReport() {\n        System.out.println(\"Génération du rapport : \" + content);\n    }\n}\n\n// Classe qui se charge uniquement de l'enregistrement du rapport\npublic class ReportSaver {\n    public void saveToPDF(Report report, String filename) {\n        System.out.println(\"Enregistrement du rapport en PDF sous : \" + filename);\n    }\n}\n",[654],{"type":28,"tag":229,"props":655,"children":656},{"__ignoreMap":7},[657,665,684,703,710,741,768,775,782,805,848,855,862,869,877,897,946,989,997],{"type":28,"tag":262,"props":658,"children":659},{"class":264,"line":265},[660],{"type":28,"tag":262,"props":661,"children":662},{"style":447},[663],{"type":34,"value":664},"// Classe qui se charge uniquement de la génération du rapport\n",{"type":28,"tag":262,"props":666,"children":667},{"class":264,"line":292},[668,672,676,680],{"type":28,"tag":262,"props":669,"children":670},{"style":269},[671],{"type":34,"value":272},{"type":28,"tag":262,"props":673,"children":674},{"style":269},[675],{"type":34,"value":277},{"type":28,"tag":262,"props":677,"children":678},{"style":280},[679],{"type":34,"value":283},{"type":28,"tag":262,"props":681,"children":682},{"style":286},[683],{"type":34,"value":289},{"type":28,"tag":262,"props":685,"children":686},{"class":264,"line":318},[687,691,695,699],{"type":28,"tag":262,"props":688,"children":689},{"style":269},[690],{"type":34,"value":298},{"type":28,"tag":262,"props":692,"children":693},{"style":301},[694],{"type":34,"value":304},{"type":28,"tag":262,"props":696,"children":697},{"style":307},[698],{"type":34,"value":310},{"type":28,"tag":262,"props":700,"children":701},{"style":286},[702],{"type":34,"value":315},{"type":28,"tag":262,"props":704,"children":705},{"class":264,"line":327},[706],{"type":28,"tag":262,"props":707,"children":708},{"emptyLinePlaceholder":12},[709],{"type":34,"value":324},{"type":28,"tag":262,"props":711,"children":712},{"class":264,"line":365},[713,717,721,725,729,733,737],{"type":28,"tag":262,"props":714,"children":715},{"style":269},[716],{"type":34,"value":333},{"type":28,"tag":262,"props":718,"children":719},{"style":336},[720],{"type":34,"value":283},{"type":28,"tag":262,"props":722,"children":723},{"style":286},[724],{"type":34,"value":343},{"type":28,"tag":262,"props":726,"children":727},{"style":301},[728],{"type":34,"value":348},{"type":28,"tag":262,"props":730,"children":731},{"style":351},[732],{"type":34,"value":310},{"type":28,"tag":262,"props":734,"children":735},{"style":286},[736],{"type":34,"value":358},{"type":28,"tag":262,"props":738,"children":739},{"style":286},[740],{"type":34,"value":289},{"type":28,"tag":262,"props":742,"children":743},{"class":264,"line":399},[744,748,752,756,760,764],{"type":28,"tag":262,"props":745,"children":746},{"style":369},[747],{"type":34,"value":372},{"type":28,"tag":262,"props":749,"children":750},{"style":286},[751],{"type":34,"value":377},{"type":28,"tag":262,"props":753,"children":754},{"style":307},[755],{"type":34,"value":382},{"type":28,"tag":262,"props":757,"children":758},{"style":385},[759],{"type":34,"value":388},{"type":28,"tag":262,"props":761,"children":762},{"style":307},[763],{"type":34,"value":310},{"type":28,"tag":262,"props":765,"children":766},{"style":286},[767],{"type":34,"value":315},{"type":28,"tag":262,"props":769,"children":770},{"class":264,"line":408},[771],{"type":28,"tag":262,"props":772,"children":773},{"style":286},[774],{"type":34,"value":405},{"type":28,"tag":262,"props":776,"children":777},{"class":264,"line":416},[778],{"type":28,"tag":262,"props":779,"children":780},{"emptyLinePlaceholder":12},[781],{"type":34,"value":324},{"type":28,"tag":262,"props":783,"children":784},{"class":264,"line":443},[785,789,793,797,801],{"type":28,"tag":262,"props":786,"children":787},{"style":269},[788],{"type":34,"value":333},{"type":28,"tag":262,"props":790,"children":791},{"style":269},[792],{"type":34,"value":426},{"type":28,"tag":262,"props":794,"children":795},{"style":336},[796],{"type":34,"value":431},{"type":28,"tag":262,"props":798,"children":799},{"style":286},[800],{"type":34,"value":436},{"type":28,"tag":262,"props":802,"children":803},{"style":286},[804],{"type":34,"value":289},{"type":28,"tag":262,"props":806,"children":807},{"class":264,"line":453},[808,812,816,820,824,828,832,836,840,844],{"type":28,"tag":262,"props":809,"children":810},{"style":307},[811],{"type":34,"value":459},{"type":28,"tag":262,"props":813,"children":814},{"style":286},[815],{"type":34,"value":377},{"type":28,"tag":262,"props":817,"children":818},{"style":307},[819],{"type":34,"value":468},{"type":28,"tag":262,"props":821,"children":822},{"style":286},[823],{"type":34,"value":377},{"type":28,"tag":262,"props":825,"children":826},{"style":336},[827],{"type":34,"value":477},{"type":28,"tag":262,"props":829,"children":830},{"style":286},[831],{"type":34,"value":343},{"type":28,"tag":262,"props":833,"children":834},{"style":484},[835],{"type":34,"value":487},{"type":28,"tag":262,"props":837,"children":838},{"style":385},[839],{"type":34,"value":492},{"type":28,"tag":262,"props":841,"children":842},{"style":307},[843],{"type":34,"value":310},{"type":28,"tag":262,"props":845,"children":846},{"style":286},[847],{"type":34,"value":501},{"type":28,"tag":262,"props":849,"children":850},{"class":264,"line":504},[851],{"type":28,"tag":262,"props":852,"children":853},{"style":286},[854],{"type":34,"value":405},{"type":28,"tag":262,"props":856,"children":857},{"class":264,"line":512},[858],{"type":28,"tag":262,"props":859,"children":860},{"style":286},[861],{"type":34,"value":626},{"type":28,"tag":262,"props":863,"children":864},{"class":264,"line":520},[865],{"type":28,"tag":262,"props":866,"children":867},{"emptyLinePlaceholder":12},[868],{"type":34,"value":324},{"type":28,"tag":262,"props":870,"children":871},{"class":264,"line":558},[872],{"type":28,"tag":262,"props":873,"children":874},{"style":447},[875],{"type":34,"value":876},"// Classe qui se charge uniquement de l'enregistrement du rapport\n",{"type":28,"tag":262,"props":878,"children":879},{"class":264,"line":567},[880,884,888,893],{"type":28,"tag":262,"props":881,"children":882},{"style":269},[883],{"type":34,"value":272},{"type":28,"tag":262,"props":885,"children":886},{"style":269},[887],{"type":34,"value":277},{"type":28,"tag":262,"props":889,"children":890},{"style":280},[891],{"type":34,"value":892}," ReportSaver",{"type":28,"tag":262,"props":894,"children":895},{"style":286},[896],{"type":34,"value":289},{"type":28,"tag":262,"props":898,"children":899},{"class":264,"line":612},[900,904,908,912,916,920,925,930,934,938,942],{"type":28,"tag":262,"props":901,"children":902},{"style":269},[903],{"type":34,"value":333},{"type":28,"tag":262,"props":905,"children":906},{"style":269},[907],{"type":34,"value":426},{"type":28,"tag":262,"props":909,"children":910},{"style":336},[911],{"type":34,"value":534},{"type":28,"tag":262,"props":913,"children":914},{"style":286},[915],{"type":34,"value":343},{"type":28,"tag":262,"props":917,"children":918},{"style":301},[919],{"type":34,"value":234},{"type":28,"tag":262,"props":921,"children":922},{"style":351},[923],{"type":34,"value":924}," report",{"type":28,"tag":262,"props":926,"children":927},{"style":286},[928],{"type":34,"value":929},",",{"type":28,"tag":262,"props":931,"children":932},{"style":301},[933],{"type":34,"value":304},{"type":28,"tag":262,"props":935,"children":936},{"style":351},[937],{"type":34,"value":547},{"type":28,"tag":262,"props":939,"children":940},{"style":286},[941],{"type":34,"value":358},{"type":28,"tag":262,"props":943,"children":944},{"style":286},[945],{"type":34,"value":289},{"type":28,"tag":262,"props":947,"children":948},{"class":264,"line":620},[949,953,957,961,965,969,973,977,981,985],{"type":28,"tag":262,"props":950,"children":951},{"style":307},[952],{"type":34,"value":459},{"type":28,"tag":262,"props":954,"children":955},{"style":286},[956],{"type":34,"value":377},{"type":28,"tag":262,"props":958,"children":959},{"style":307},[960],{"type":34,"value":468},{"type":28,"tag":262,"props":962,"children":963},{"style":286},[964],{"type":34,"value":377},{"type":28,"tag":262,"props":966,"children":967},{"style":336},[968],{"type":34,"value":477},{"type":28,"tag":262,"props":970,"children":971},{"style":286},[972],{"type":34,"value":343},{"type":28,"tag":262,"props":974,"children":975},{"style":484},[976],{"type":34,"value":597},{"type":28,"tag":262,"props":978,"children":979},{"style":385},[980],{"type":34,"value":492},{"type":28,"tag":262,"props":982,"children":983},{"style":307},[984],{"type":34,"value":547},{"type":28,"tag":262,"props":986,"children":987},{"style":286},[988],{"type":34,"value":501},{"type":28,"tag":262,"props":990,"children":992},{"class":264,"line":991},18,[993],{"type":28,"tag":262,"props":994,"children":995},{"style":286},[996],{"type":34,"value":405},{"type":28,"tag":262,"props":998,"children":1000},{"class":264,"line":999},19,[1001],{"type":28,"tag":262,"props":1002,"children":1003},{"style":286},[1004],{"type":34,"value":626},{"type":28,"tag":183,"props":1006,"children":1007},{},[],{"type":28,"tag":1009,"props":1010,"children":1012},"alert",{"type":1011},"TIP",[1013],{"type":28,"tag":37,"props":1014,"children":1015},{},[1016,1021],{"type":28,"tag":198,"props":1017,"children":1018},{},[1019],{"type":34,"value":1020},"Gardez vos classes petites",{"type":34,"value":1022},". Si vous trouvez qu'une classe fait plusieurs choses non liées, envisagez de la diviser en plusieurs classes plus petites. Cela rendra le code plus lisible et plus facile à maintenir.",{"type":28,"tag":1024,"props":1025,"children":1030},"cta",{"cta":1026,"href":1027,"title":1028,"type":1029},"Réserver mon diagnostic gratuit →","https://app.kamanga.fr/forms/discovery-call","Votre code est si couplé que changer quelque chose à un endroit casse tout le reste ?","call",[1031],{"type":28,"tag":37,"props":1032,"children":1033},{},[1034],{"type":34,"value":1035},"Les tests sont impossibles à écrire parce que tout dépend de tout, chaque refactoring est un projet en soi, et votre équipe a peur de toucher au code legacy. Réservons 30 minutes pour évaluer le niveau de couplage de votre architecture et prioriser les refactorings à fort impact.",{"type":28,"tag":29,"props":1037,"children":1039},{"id":1038},"_2-principe-ouvertfermé-openclosed-principle-ocp",[1040],{"type":34,"value":1041},"2. Principe Ouvert/Fermé (Open/Closed Principle - OCP)",{"type":28,"tag":37,"props":1043,"children":1044},{},[1045,1047,1052,1054,1059],{"type":34,"value":1046},"Le principe Ouvert/Fermé stipule qu’une entité (classe, module, fonction, etc.) doit être ",{"type":28,"tag":198,"props":1048,"children":1049},{},[1050],{"type":34,"value":1051},"ouverte à l’extension",{"type":34,"value":1053}," mais ",{"type":28,"tag":198,"props":1055,"children":1056},{},[1057],{"type":34,"value":1058},"fermée à la modification",{"type":34,"value":1060},". Cela signifie qu’il devrait être possible d’ajouter de nouvelles fonctionnalités sans avoir à modifier le code existant. En d’autres termes, je vous recommande de concevoir le code de manière à ce qu’il puisse évoluer par des extensions plutôt que par des modifications internes.",{"type":28,"tag":206,"props":1062,"children":1064},{"id":1063},"pourquoi-cest-important-1",[1065],{"type":34,"value":211},{"type":28,"tag":37,"props":1067,"children":1068},{},[1069],{"type":34,"value":1070},"En suivant ce principe, vous évitez de toucher au code stable et déjà testé, minimisant ainsi les risques d'introduire des bugs. Cela permet aussi d'ajouter de nouvelles fonctionnalités plus facilement et rend votre code plus flexible à long terme.",{"type":28,"tag":206,"props":1072,"children":1074},{"id":1073},"exemple-concret-en-java-1",[1075],{"type":34,"value":222},{"type":28,"tag":37,"props":1077,"children":1078},{},[1079],{"type":34,"value":1080},"Imaginons que nous travaillions sur un système de paiement qui supporte plusieurs méthodes de paiement comme la carte bancaire et PayPal. Si l’on veut ajouter une nouvelle méthode de paiement, par exemple via un portefeuille électronique (e-wallet), on ne veut pas devoir modifier chaque partie du code. Cela enfreindrait le principe OCP.",{"type":28,"tag":245,"props":1082,"children":1084},{"id":1083},"exemple-sans-ocp",[1085],{"type":34,"value":1086},"Exemple sans OCP :",{"type":28,"tag":37,"props":1088,"children":1089},{},[1090,1092,1098],{"type":34,"value":1091},"Voici une implémentation où la classe ",{"type":28,"tag":229,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":34,"value":1097},"PaymentProcessor",{"type":34,"value":1099}," gère directement les différentes méthodes de paiement :",{"type":28,"tag":252,"props":1101,"children":1103},{"className":254,"code":1102,"language":256,"meta":7,"style":7},"public class PaymentProcessor {\n    public void processPayment(String type) {\n        if (type.equals(\"creditCard\")) {\n            // Traitement paiement par carte bancaire\n            System.out.println(\"Paiement par carte bancaire\");\n        } else if (type.equals(\"paypal\")) {\n            // Traitement paiement PayPal\n            System.out.println(\"Paiement via PayPal\");\n        }\n    }\n}\n",[1104],{"type":28,"tag":229,"props":1105,"children":1106},{"__ignoreMap":7},[1107,1127,1164,1209,1217,1254,1305,1313,1349,1357,1364],{"type":28,"tag":262,"props":1108,"children":1109},{"class":264,"line":265},[1110,1114,1118,1123],{"type":28,"tag":262,"props":1111,"children":1112},{"style":269},[1113],{"type":34,"value":272},{"type":28,"tag":262,"props":1115,"children":1116},{"style":269},[1117],{"type":34,"value":277},{"type":28,"tag":262,"props":1119,"children":1120},{"style":280},[1121],{"type":34,"value":1122}," PaymentProcessor",{"type":28,"tag":262,"props":1124,"children":1125},{"style":286},[1126],{"type":34,"value":289},{"type":28,"tag":262,"props":1128,"children":1129},{"class":264,"line":292},[1130,1134,1138,1143,1147,1151,1156,1160],{"type":28,"tag":262,"props":1131,"children":1132},{"style":269},[1133],{"type":34,"value":333},{"type":28,"tag":262,"props":1135,"children":1136},{"style":269},[1137],{"type":34,"value":426},{"type":28,"tag":262,"props":1139,"children":1140},{"style":336},[1141],{"type":34,"value":1142}," processPayment",{"type":28,"tag":262,"props":1144,"children":1145},{"style":286},[1146],{"type":34,"value":343},{"type":28,"tag":262,"props":1148,"children":1149},{"style":301},[1150],{"type":34,"value":348},{"type":28,"tag":262,"props":1152,"children":1153},{"style":351},[1154],{"type":34,"value":1155}," type",{"type":28,"tag":262,"props":1157,"children":1158},{"style":286},[1159],{"type":34,"value":358},{"type":28,"tag":262,"props":1161,"children":1162},{"style":286},[1163],{"type":34,"value":289},{"type":28,"tag":262,"props":1165,"children":1166},{"class":264,"line":318},[1167,1172,1177,1182,1186,1191,1195,1200,1205],{"type":28,"tag":262,"props":1168,"children":1169},{"style":269},[1170],{"type":34,"value":1171},"        if",{"type":28,"tag":262,"props":1173,"children":1174},{"style":286},[1175],{"type":34,"value":1176}," (",{"type":28,"tag":262,"props":1178,"children":1179},{"style":307},[1180],{"type":34,"value":1181},"type",{"type":28,"tag":262,"props":1183,"children":1184},{"style":286},[1185],{"type":34,"value":377},{"type":28,"tag":262,"props":1187,"children":1188},{"style":336},[1189],{"type":34,"value":1190},"equals",{"type":28,"tag":262,"props":1192,"children":1193},{"style":286},[1194],{"type":34,"value":343},{"type":28,"tag":262,"props":1196,"children":1197},{"style":484},[1198],{"type":34,"value":1199},"\"creditCard\"",{"type":28,"tag":262,"props":1201,"children":1202},{"style":286},[1203],{"type":34,"value":1204},"))",{"type":28,"tag":262,"props":1206,"children":1207},{"style":286},[1208],{"type":34,"value":289},{"type":28,"tag":262,"props":1210,"children":1211},{"class":264,"line":327},[1212],{"type":28,"tag":262,"props":1213,"children":1214},{"style":447},[1215],{"type":34,"value":1216},"            // Traitement paiement par carte bancaire\n",{"type":28,"tag":262,"props":1218,"children":1219},{"class":264,"line":365},[1220,1225,1229,1233,1237,1241,1245,1250],{"type":28,"tag":262,"props":1221,"children":1222},{"style":307},[1223],{"type":34,"value":1224},"            System",{"type":28,"tag":262,"props":1226,"children":1227},{"style":286},[1228],{"type":34,"value":377},{"type":28,"tag":262,"props":1230,"children":1231},{"style":307},[1232],{"type":34,"value":468},{"type":28,"tag":262,"props":1234,"children":1235},{"style":286},[1236],{"type":34,"value":377},{"type":28,"tag":262,"props":1238,"children":1239},{"style":336},[1240],{"type":34,"value":477},{"type":28,"tag":262,"props":1242,"children":1243},{"style":286},[1244],{"type":34,"value":343},{"type":28,"tag":262,"props":1246,"children":1247},{"style":484},[1248],{"type":34,"value":1249},"\"Paiement par carte bancaire\"",{"type":28,"tag":262,"props":1251,"children":1252},{"style":286},[1253],{"type":34,"value":501},{"type":28,"tag":262,"props":1255,"children":1256},{"class":264,"line":399},[1257,1262,1267,1272,1276,1280,1284,1288,1292,1297,1301],{"type":28,"tag":262,"props":1258,"children":1259},{"style":286},[1260],{"type":34,"value":1261},"        }",{"type":28,"tag":262,"props":1263,"children":1264},{"style":269},[1265],{"type":34,"value":1266}," else",{"type":28,"tag":262,"props":1268,"children":1269},{"style":269},[1270],{"type":34,"value":1271}," if",{"type":28,"tag":262,"props":1273,"children":1274},{"style":286},[1275],{"type":34,"value":1176},{"type":28,"tag":262,"props":1277,"children":1278},{"style":307},[1279],{"type":34,"value":1181},{"type":28,"tag":262,"props":1281,"children":1282},{"style":286},[1283],{"type":34,"value":377},{"type":28,"tag":262,"props":1285,"children":1286},{"style":336},[1287],{"type":34,"value":1190},{"type":28,"tag":262,"props":1289,"children":1290},{"style":286},[1291],{"type":34,"value":343},{"type":28,"tag":262,"props":1293,"children":1294},{"style":484},[1295],{"type":34,"value":1296},"\"paypal\"",{"type":28,"tag":262,"props":1298,"children":1299},{"style":286},[1300],{"type":34,"value":1204},{"type":28,"tag":262,"props":1302,"children":1303},{"style":286},[1304],{"type":34,"value":289},{"type":28,"tag":262,"props":1306,"children":1307},{"class":264,"line":408},[1308],{"type":28,"tag":262,"props":1309,"children":1310},{"style":447},[1311],{"type":34,"value":1312},"            // Traitement paiement PayPal\n",{"type":28,"tag":262,"props":1314,"children":1315},{"class":264,"line":416},[1316,1320,1324,1328,1332,1336,1340,1345],{"type":28,"tag":262,"props":1317,"children":1318},{"style":307},[1319],{"type":34,"value":1224},{"type":28,"tag":262,"props":1321,"children":1322},{"style":286},[1323],{"type":34,"value":377},{"type":28,"tag":262,"props":1325,"children":1326},{"style":307},[1327],{"type":34,"value":468},{"type":28,"tag":262,"props":1329,"children":1330},{"style":286},[1331],{"type":34,"value":377},{"type":28,"tag":262,"props":1333,"children":1334},{"style":336},[1335],{"type":34,"value":477},{"type":28,"tag":262,"props":1337,"children":1338},{"style":286},[1339],{"type":34,"value":343},{"type":28,"tag":262,"props":1341,"children":1342},{"style":484},[1343],{"type":34,"value":1344},"\"Paiement via PayPal\"",{"type":28,"tag":262,"props":1346,"children":1347},{"style":286},[1348],{"type":34,"value":501},{"type":28,"tag":262,"props":1350,"children":1351},{"class":264,"line":443},[1352],{"type":28,"tag":262,"props":1353,"children":1354},{"style":286},[1355],{"type":34,"value":1356},"        }\n",{"type":28,"tag":262,"props":1358,"children":1359},{"class":264,"line":453},[1360],{"type":28,"tag":262,"props":1361,"children":1362},{"style":286},[1363],{"type":34,"value":405},{"type":28,"tag":262,"props":1365,"children":1366},{"class":264,"line":504},[1367],{"type":28,"tag":262,"props":1368,"children":1369},{"style":286},[1370],{"type":34,"value":626},{"type":28,"tag":37,"props":1372,"children":1373},{},[1374,1376,1381,1383,1388,1390,1396],{"type":34,"value":1375},"Dans ce cas, si l'on veut ajouter un nouveau moyen de paiement, comme un portefeuille électronique, il faudrait ",{"type":28,"tag":198,"props":1377,"children":1378},{},[1379],{"type":34,"value":1380},"modifier la classe",{"type":34,"value":1382}," ",{"type":28,"tag":229,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":34,"value":1097},{"type":34,"value":1389}," en ajoutant une nouvelle condition ",{"type":28,"tag":229,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":34,"value":1395},"else if",{"type":34,"value":1397},". Cela enfreint le principe OCP, car on doit toucher au code existant pour ajouter une nouvelle fonctionnalité.",{"type":28,"tag":245,"props":1399,"children":1401},{"id":1400},"exemple-avec-ocp-appliqué",[1402],{"type":34,"value":1403},"Exemple avec OCP appliqué :",{"type":28,"tag":37,"props":1405,"children":1406},{},[1407],{"type":34,"value":1408},"Voyons maintenant une solution où la classe est ouverte à l'extension mais fermée à la modification en utilisant l’héritage et le polymorphisme.",{"type":28,"tag":252,"props":1410,"children":1412},{"className":254,"code":1411,"language":256,"meta":7,"style":7},"// Interface de stratégie de paiement\npublic interface PaymentMethod {\n    void processPayment();\n}\n\n// Implémentation pour la carte bancaire\npublic class CreditCardPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement par carte bancaire\");\n    }\n}\n\n// Implémentation pour PayPal\npublic class PayPalPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement via PayPal\");\n    }\n}\n\n// Classe de traitement des paiements qui respecte OCP\npublic class PaymentProcessor {\n    public void processPayment(PaymentMethod paymentMethod) {\n        paymentMethod.processPayment();\n    }\n}\n",[1413],{"type":28,"tag":229,"props":1414,"children":1415},{"__ignoreMap":7},[1416,1424,1445,1462,1469,1476,1484,1513,1528,1551,1586,1593,1600,1607,1615,1643,1654,1677,1712,1719,1727,1735,1744,1764,1802,1824,1832],{"type":28,"tag":262,"props":1417,"children":1418},{"class":264,"line":265},[1419],{"type":28,"tag":262,"props":1420,"children":1421},{"style":447},[1422],{"type":34,"value":1423},"// Interface de stratégie de paiement\n",{"type":28,"tag":262,"props":1425,"children":1426},{"class":264,"line":292},[1427,1431,1436,1441],{"type":28,"tag":262,"props":1428,"children":1429},{"style":269},[1430],{"type":34,"value":272},{"type":28,"tag":262,"props":1432,"children":1433},{"style":269},[1434],{"type":34,"value":1435}," interface",{"type":28,"tag":262,"props":1437,"children":1438},{"style":280},[1439],{"type":34,"value":1440}," PaymentMethod",{"type":28,"tag":262,"props":1442,"children":1443},{"style":286},[1444],{"type":34,"value":289},{"type":28,"tag":262,"props":1446,"children":1447},{"class":264,"line":318},[1448,1453,1457],{"type":28,"tag":262,"props":1449,"children":1450},{"style":269},[1451],{"type":34,"value":1452},"    void",{"type":28,"tag":262,"props":1454,"children":1455},{"style":336},[1456],{"type":34,"value":1142},{"type":28,"tag":262,"props":1458,"children":1459},{"style":286},[1460],{"type":34,"value":1461},"();\n",{"type":28,"tag":262,"props":1463,"children":1464},{"class":264,"line":327},[1465],{"type":28,"tag":262,"props":1466,"children":1467},{"style":286},[1468],{"type":34,"value":626},{"type":28,"tag":262,"props":1470,"children":1471},{"class":264,"line":365},[1472],{"type":28,"tag":262,"props":1473,"children":1474},{"emptyLinePlaceholder":12},[1475],{"type":34,"value":324},{"type":28,"tag":262,"props":1477,"children":1478},{"class":264,"line":399},[1479],{"type":28,"tag":262,"props":1480,"children":1481},{"style":447},[1482],{"type":34,"value":1483},"// Implémentation pour la carte bancaire\n",{"type":28,"tag":262,"props":1485,"children":1486},{"class":264,"line":408},[1487,1491,1495,1500,1505,1509],{"type":28,"tag":262,"props":1488,"children":1489},{"style":269},[1490],{"type":34,"value":272},{"type":28,"tag":262,"props":1492,"children":1493},{"style":269},[1494],{"type":34,"value":277},{"type":28,"tag":262,"props":1496,"children":1497},{"style":280},[1498],{"type":34,"value":1499}," CreditCardPayment",{"type":28,"tag":262,"props":1501,"children":1502},{"style":269},[1503],{"type":34,"value":1504}," implements",{"type":28,"tag":262,"props":1506,"children":1507},{"style":280},[1508],{"type":34,"value":1440},{"type":28,"tag":262,"props":1510,"children":1511},{"style":286},[1512],{"type":34,"value":289},{"type":28,"tag":262,"props":1514,"children":1515},{"class":264,"line":416},[1516,1522],{"type":28,"tag":262,"props":1517,"children":1519},{"style":1518},"--shiki-default:#EF9F76;--shiki-dark:#E1E4E8",[1520],{"type":34,"value":1521},"    @",{"type":28,"tag":262,"props":1523,"children":1525},{"style":1524},"--shiki-default:#EF9F76;--shiki-dark:#F97583",[1526],{"type":34,"value":1527},"Override\n",{"type":28,"tag":262,"props":1529,"children":1530},{"class":264,"line":443},[1531,1535,1539,1543,1547],{"type":28,"tag":262,"props":1532,"children":1533},{"style":269},[1534],{"type":34,"value":333},{"type":28,"tag":262,"props":1536,"children":1537},{"style":269},[1538],{"type":34,"value":426},{"type":28,"tag":262,"props":1540,"children":1541},{"style":336},[1542],{"type":34,"value":1142},{"type":28,"tag":262,"props":1544,"children":1545},{"style":286},[1546],{"type":34,"value":436},{"type":28,"tag":262,"props":1548,"children":1549},{"style":286},[1550],{"type":34,"value":289},{"type":28,"tag":262,"props":1552,"children":1553},{"class":264,"line":453},[1554,1558,1562,1566,1570,1574,1578,1582],{"type":28,"tag":262,"props":1555,"children":1556},{"style":307},[1557],{"type":34,"value":459},{"type":28,"tag":262,"props":1559,"children":1560},{"style":286},[1561],{"type":34,"value":377},{"type":28,"tag":262,"props":1563,"children":1564},{"style":307},[1565],{"type":34,"value":468},{"type":28,"tag":262,"props":1567,"children":1568},{"style":286},[1569],{"type":34,"value":377},{"type":28,"tag":262,"props":1571,"children":1572},{"style":336},[1573],{"type":34,"value":477},{"type":28,"tag":262,"props":1575,"children":1576},{"style":286},[1577],{"type":34,"value":343},{"type":28,"tag":262,"props":1579,"children":1580},{"style":484},[1581],{"type":34,"value":1249},{"type":28,"tag":262,"props":1583,"children":1584},{"style":286},[1585],{"type":34,"value":501},{"type":28,"tag":262,"props":1587,"children":1588},{"class":264,"line":504},[1589],{"type":28,"tag":262,"props":1590,"children":1591},{"style":286},[1592],{"type":34,"value":405},{"type":28,"tag":262,"props":1594,"children":1595},{"class":264,"line":512},[1596],{"type":28,"tag":262,"props":1597,"children":1598},{"style":286},[1599],{"type":34,"value":626},{"type":28,"tag":262,"props":1601,"children":1602},{"class":264,"line":520},[1603],{"type":28,"tag":262,"props":1604,"children":1605},{"emptyLinePlaceholder":12},[1606],{"type":34,"value":324},{"type":28,"tag":262,"props":1608,"children":1609},{"class":264,"line":558},[1610],{"type":28,"tag":262,"props":1611,"children":1612},{"style":447},[1613],{"type":34,"value":1614},"// Implémentation pour PayPal\n",{"type":28,"tag":262,"props":1616,"children":1617},{"class":264,"line":567},[1618,1622,1626,1631,1635,1639],{"type":28,"tag":262,"props":1619,"children":1620},{"style":269},[1621],{"type":34,"value":272},{"type":28,"tag":262,"props":1623,"children":1624},{"style":269},[1625],{"type":34,"value":277},{"type":28,"tag":262,"props":1627,"children":1628},{"style":280},[1629],{"type":34,"value":1630}," PayPalPayment",{"type":28,"tag":262,"props":1632,"children":1633},{"style":269},[1634],{"type":34,"value":1504},{"type":28,"tag":262,"props":1636,"children":1637},{"style":280},[1638],{"type":34,"value":1440},{"type":28,"tag":262,"props":1640,"children":1641},{"style":286},[1642],{"type":34,"value":289},{"type":28,"tag":262,"props":1644,"children":1645},{"class":264,"line":612},[1646,1650],{"type":28,"tag":262,"props":1647,"children":1648},{"style":1518},[1649],{"type":34,"value":1521},{"type":28,"tag":262,"props":1651,"children":1652},{"style":1524},[1653],{"type":34,"value":1527},{"type":28,"tag":262,"props":1655,"children":1656},{"class":264,"line":620},[1657,1661,1665,1669,1673],{"type":28,"tag":262,"props":1658,"children":1659},{"style":269},[1660],{"type":34,"value":333},{"type":28,"tag":262,"props":1662,"children":1663},{"style":269},[1664],{"type":34,"value":426},{"type":28,"tag":262,"props":1666,"children":1667},{"style":336},[1668],{"type":34,"value":1142},{"type":28,"tag":262,"props":1670,"children":1671},{"style":286},[1672],{"type":34,"value":436},{"type":28,"tag":262,"props":1674,"children":1675},{"style":286},[1676],{"type":34,"value":289},{"type":28,"tag":262,"props":1678,"children":1679},{"class":264,"line":991},[1680,1684,1688,1692,1696,1700,1704,1708],{"type":28,"tag":262,"props":1681,"children":1682},{"style":307},[1683],{"type":34,"value":459},{"type":28,"tag":262,"props":1685,"children":1686},{"style":286},[1687],{"type":34,"value":377},{"type":28,"tag":262,"props":1689,"children":1690},{"style":307},[1691],{"type":34,"value":468},{"type":28,"tag":262,"props":1693,"children":1694},{"style":286},[1695],{"type":34,"value":377},{"type":28,"tag":262,"props":1697,"children":1698},{"style":336},[1699],{"type":34,"value":477},{"type":28,"tag":262,"props":1701,"children":1702},{"style":286},[1703],{"type":34,"value":343},{"type":28,"tag":262,"props":1705,"children":1706},{"style":484},[1707],{"type":34,"value":1344},{"type":28,"tag":262,"props":1709,"children":1710},{"style":286},[1711],{"type":34,"value":501},{"type":28,"tag":262,"props":1713,"children":1714},{"class":264,"line":999},[1715],{"type":28,"tag":262,"props":1716,"children":1717},{"style":286},[1718],{"type":34,"value":405},{"type":28,"tag":262,"props":1720,"children":1722},{"class":264,"line":1721},20,[1723],{"type":28,"tag":262,"props":1724,"children":1725},{"style":286},[1726],{"type":34,"value":626},{"type":28,"tag":262,"props":1728,"children":1730},{"class":264,"line":1729},21,[1731],{"type":28,"tag":262,"props":1732,"children":1733},{"emptyLinePlaceholder":12},[1734],{"type":34,"value":324},{"type":28,"tag":262,"props":1736,"children":1738},{"class":264,"line":1737},22,[1739],{"type":28,"tag":262,"props":1740,"children":1741},{"style":447},[1742],{"type":34,"value":1743},"// Classe de traitement des paiements qui respecte OCP\n",{"type":28,"tag":262,"props":1745,"children":1747},{"class":264,"line":1746},23,[1748,1752,1756,1760],{"type":28,"tag":262,"props":1749,"children":1750},{"style":269},[1751],{"type":34,"value":272},{"type":28,"tag":262,"props":1753,"children":1754},{"style":269},[1755],{"type":34,"value":277},{"type":28,"tag":262,"props":1757,"children":1758},{"style":280},[1759],{"type":34,"value":1122},{"type":28,"tag":262,"props":1761,"children":1762},{"style":286},[1763],{"type":34,"value":289},{"type":28,"tag":262,"props":1765,"children":1767},{"class":264,"line":1766},24,[1768,1772,1776,1780,1784,1789,1794,1798],{"type":28,"tag":262,"props":1769,"children":1770},{"style":269},[1771],{"type":34,"value":333},{"type":28,"tag":262,"props":1773,"children":1774},{"style":269},[1775],{"type":34,"value":426},{"type":28,"tag":262,"props":1777,"children":1778},{"style":336},[1779],{"type":34,"value":1142},{"type":28,"tag":262,"props":1781,"children":1782},{"style":286},[1783],{"type":34,"value":343},{"type":28,"tag":262,"props":1785,"children":1786},{"style":301},[1787],{"type":34,"value":1788},"PaymentMethod",{"type":28,"tag":262,"props":1790,"children":1791},{"style":351},[1792],{"type":34,"value":1793}," paymentMethod",{"type":28,"tag":262,"props":1795,"children":1796},{"style":286},[1797],{"type":34,"value":358},{"type":28,"tag":262,"props":1799,"children":1800},{"style":286},[1801],{"type":34,"value":289},{"type":28,"tag":262,"props":1803,"children":1805},{"class":264,"line":1804},25,[1806,1811,1815,1820],{"type":28,"tag":262,"props":1807,"children":1808},{"style":307},[1809],{"type":34,"value":1810},"        paymentMethod",{"type":28,"tag":262,"props":1812,"children":1813},{"style":286},[1814],{"type":34,"value":377},{"type":28,"tag":262,"props":1816,"children":1817},{"style":336},[1818],{"type":34,"value":1819},"processPayment",{"type":28,"tag":262,"props":1821,"children":1822},{"style":286},[1823],{"type":34,"value":1461},{"type":28,"tag":262,"props":1825,"children":1827},{"class":264,"line":1826},26,[1828],{"type":28,"tag":262,"props":1829,"children":1830},{"style":286},[1831],{"type":34,"value":405},{"type":28,"tag":262,"props":1833,"children":1835},{"class":264,"line":1834},27,[1836],{"type":28,"tag":262,"props":1837,"children":1838},{"style":286},[1839],{"type":34,"value":626},{"type":28,"tag":37,"props":1841,"children":1842},{},[1843,1845,1850],{"type":34,"value":1844},"Pour ajouter une nouvelle méthode de paiement, il suffit simplement de créer une nouvelle classe qui implémente l'interface ",{"type":28,"tag":229,"props":1846,"children":1848},{"className":1847},[],[1849],{"type":34,"value":1788},{"type":34,"value":1851}," :",{"type":28,"tag":252,"props":1853,"children":1855},{"className":254,"code":1854,"language":256,"meta":7,"style":7},"// Nouvelle implémentation pour portefeuille électronique (e-wallet)\npublic class EWalletPayment implements PaymentMethod {\n    @Override\n    public void processPayment() {\n        System.out.println(\"Paiement via portefeuille électronique\");\n    }\n}\n",[1856],{"type":28,"tag":229,"props":1857,"children":1858},{"__ignoreMap":7},[1859,1867,1895,1906,1929,1965,1972],{"type":28,"tag":262,"props":1860,"children":1861},{"class":264,"line":265},[1862],{"type":28,"tag":262,"props":1863,"children":1864},{"style":447},[1865],{"type":34,"value":1866},"// Nouvelle implémentation pour portefeuille électronique (e-wallet)\n",{"type":28,"tag":262,"props":1868,"children":1869},{"class":264,"line":292},[1870,1874,1878,1883,1887,1891],{"type":28,"tag":262,"props":1871,"children":1872},{"style":269},[1873],{"type":34,"value":272},{"type":28,"tag":262,"props":1875,"children":1876},{"style":269},[1877],{"type":34,"value":277},{"type":28,"tag":262,"props":1879,"children":1880},{"style":280},[1881],{"type":34,"value":1882}," EWalletPayment",{"type":28,"tag":262,"props":1884,"children":1885},{"style":269},[1886],{"type":34,"value":1504},{"type":28,"tag":262,"props":1888,"children":1889},{"style":280},[1890],{"type":34,"value":1440},{"type":28,"tag":262,"props":1892,"children":1893},{"style":286},[1894],{"type":34,"value":289},{"type":28,"tag":262,"props":1896,"children":1897},{"class":264,"line":318},[1898,1902],{"type":28,"tag":262,"props":1899,"children":1900},{"style":1518},[1901],{"type":34,"value":1521},{"type":28,"tag":262,"props":1903,"children":1904},{"style":1524},[1905],{"type":34,"value":1527},{"type":28,"tag":262,"props":1907,"children":1908},{"class":264,"line":327},[1909,1913,1917,1921,1925],{"type":28,"tag":262,"props":1910,"children":1911},{"style":269},[1912],{"type":34,"value":333},{"type":28,"tag":262,"props":1914,"children":1915},{"style":269},[1916],{"type":34,"value":426},{"type":28,"tag":262,"props":1918,"children":1919},{"style":336},[1920],{"type":34,"value":1142},{"type":28,"tag":262,"props":1922,"children":1923},{"style":286},[1924],{"type":34,"value":436},{"type":28,"tag":262,"props":1926,"children":1927},{"style":286},[1928],{"type":34,"value":289},{"type":28,"tag":262,"props":1930,"children":1931},{"class":264,"line":365},[1932,1936,1940,1944,1948,1952,1956,1961],{"type":28,"tag":262,"props":1933,"children":1934},{"style":307},[1935],{"type":34,"value":459},{"type":28,"tag":262,"props":1937,"children":1938},{"style":286},[1939],{"type":34,"value":377},{"type":28,"tag":262,"props":1941,"children":1942},{"style":307},[1943],{"type":34,"value":468},{"type":28,"tag":262,"props":1945,"children":1946},{"style":286},[1947],{"type":34,"value":377},{"type":28,"tag":262,"props":1949,"children":1950},{"style":336},[1951],{"type":34,"value":477},{"type":28,"tag":262,"props":1953,"children":1954},{"style":286},[1955],{"type":34,"value":343},{"type":28,"tag":262,"props":1957,"children":1958},{"style":484},[1959],{"type":34,"value":1960},"\"Paiement via portefeuille électronique\"",{"type":28,"tag":262,"props":1962,"children":1963},{"style":286},[1964],{"type":34,"value":501},{"type":28,"tag":262,"props":1966,"children":1967},{"class":264,"line":399},[1968],{"type":28,"tag":262,"props":1969,"children":1970},{"style":286},[1971],{"type":34,"value":405},{"type":28,"tag":262,"props":1973,"children":1974},{"class":264,"line":408},[1975],{"type":28,"tag":262,"props":1976,"children":1977},{"style":286},[1978],{"type":34,"value":626},{"type":28,"tag":37,"props":1980,"children":1981},{},[1982,1984,1989],{"type":34,"value":1983},"On peut maintenant utiliser cette nouvelle méthode de paiement sans toucher à la classe ",{"type":28,"tag":229,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":34,"value":1097},{"type":34,"value":1851},{"type":28,"tag":252,"props":1991,"children":1993},{"className":254,"code":1992,"language":256,"meta":7,"style":7},"public class Main {\n    public static void main(String[] args) {\n        PaymentProcessor processor = new PaymentProcessor();\n\n        // Utilisation de la carte bancaire\n        PaymentMethod creditCard = new CreditCardPayment();\n        processor.processPayment(creditCard);\n\n        // Utilisation de PayPal\n        PaymentMethod paypal = new PayPalPayment();\n        processor.processPayment(paypal);\n\n        // Utilisation d'un portefeuille électronique\n        PaymentMethod ewallet = new EWalletPayment();\n        processor.processPayment(ewallet);\n    }\n}\n",[1994],{"type":28,"tag":229,"props":1995,"children":1996},{"__ignoreMap":7},[1997,2017,2064,2094,2101,2109,2138,2167,2174,2182,2210,2238,2245,2253,2281,2309,2316],{"type":28,"tag":262,"props":1998,"children":1999},{"class":264,"line":265},[2000,2004,2008,2013],{"type":28,"tag":262,"props":2001,"children":2002},{"style":269},[2003],{"type":34,"value":272},{"type":28,"tag":262,"props":2005,"children":2006},{"style":269},[2007],{"type":34,"value":277},{"type":28,"tag":262,"props":2009,"children":2010},{"style":280},[2011],{"type":34,"value":2012}," Main",{"type":28,"tag":262,"props":2014,"children":2015},{"style":286},[2016],{"type":34,"value":289},{"type":28,"tag":262,"props":2018,"children":2019},{"class":264,"line":292},[2020,2024,2029,2033,2038,2042,2046,2051,2056,2060],{"type":28,"tag":262,"props":2021,"children":2022},{"style":269},[2023],{"type":34,"value":333},{"type":28,"tag":262,"props":2025,"children":2026},{"style":269},[2027],{"type":34,"value":2028}," static",{"type":28,"tag":262,"props":2030,"children":2031},{"style":269},[2032],{"type":34,"value":426},{"type":28,"tag":262,"props":2034,"children":2035},{"style":336},[2036],{"type":34,"value":2037}," main",{"type":28,"tag":262,"props":2039,"children":2040},{"style":286},[2041],{"type":34,"value":343},{"type":28,"tag":262,"props":2043,"children":2044},{"style":269},[2045],{"type":34,"value":348},{"type":28,"tag":262,"props":2047,"children":2048},{"style":286},[2049],{"type":34,"value":2050},"[]",{"type":28,"tag":262,"props":2052,"children":2053},{"style":351},[2054],{"type":34,"value":2055}," args",{"type":28,"tag":262,"props":2057,"children":2058},{"style":286},[2059],{"type":34,"value":358},{"type":28,"tag":262,"props":2061,"children":2062},{"style":286},[2063],{"type":34,"value":289},{"type":28,"tag":262,"props":2065,"children":2066},{"class":264,"line":318},[2067,2072,2077,2081,2086,2090],{"type":28,"tag":262,"props":2068,"children":2069},{"style":301},[2070],{"type":34,"value":2071},"        PaymentProcessor",{"type":28,"tag":262,"props":2073,"children":2074},{"style":307},[2075],{"type":34,"value":2076}," processor ",{"type":28,"tag":262,"props":2078,"children":2079},{"style":385},[2080],{"type":34,"value":388},{"type":28,"tag":262,"props":2082,"children":2083},{"style":269},[2084],{"type":34,"value":2085}," new",{"type":28,"tag":262,"props":2087,"children":2088},{"style":336},[2089],{"type":34,"value":1122},{"type":28,"tag":262,"props":2091,"children":2092},{"style":286},[2093],{"type":34,"value":1461},{"type":28,"tag":262,"props":2095,"children":2096},{"class":264,"line":327},[2097],{"type":28,"tag":262,"props":2098,"children":2099},{"emptyLinePlaceholder":12},[2100],{"type":34,"value":324},{"type":28,"tag":262,"props":2102,"children":2103},{"class":264,"line":365},[2104],{"type":28,"tag":262,"props":2105,"children":2106},{"style":447},[2107],{"type":34,"value":2108},"        // Utilisation de la carte bancaire\n",{"type":28,"tag":262,"props":2110,"children":2111},{"class":264,"line":399},[2112,2117,2122,2126,2130,2134],{"type":28,"tag":262,"props":2113,"children":2114},{"style":301},[2115],{"type":34,"value":2116},"        PaymentMethod",{"type":28,"tag":262,"props":2118,"children":2119},{"style":307},[2120],{"type":34,"value":2121}," creditCard ",{"type":28,"tag":262,"props":2123,"children":2124},{"style":385},[2125],{"type":34,"value":388},{"type":28,"tag":262,"props":2127,"children":2128},{"style":269},[2129],{"type":34,"value":2085},{"type":28,"tag":262,"props":2131,"children":2132},{"style":336},[2133],{"type":34,"value":1499},{"type":28,"tag":262,"props":2135,"children":2136},{"style":286},[2137],{"type":34,"value":1461},{"type":28,"tag":262,"props":2139,"children":2140},{"class":264,"line":408},[2141,2146,2150,2154,2158,2163],{"type":28,"tag":262,"props":2142,"children":2143},{"style":307},[2144],{"type":34,"value":2145},"        processor",{"type":28,"tag":262,"props":2147,"children":2148},{"style":286},[2149],{"type":34,"value":377},{"type":28,"tag":262,"props":2151,"children":2152},{"style":336},[2153],{"type":34,"value":1819},{"type":28,"tag":262,"props":2155,"children":2156},{"style":286},[2157],{"type":34,"value":343},{"type":28,"tag":262,"props":2159,"children":2160},{"style":307},[2161],{"type":34,"value":2162},"creditCard",{"type":28,"tag":262,"props":2164,"children":2165},{"style":286},[2166],{"type":34,"value":501},{"type":28,"tag":262,"props":2168,"children":2169},{"class":264,"line":416},[2170],{"type":28,"tag":262,"props":2171,"children":2172},{"emptyLinePlaceholder":12},[2173],{"type":34,"value":324},{"type":28,"tag":262,"props":2175,"children":2176},{"class":264,"line":443},[2177],{"type":28,"tag":262,"props":2178,"children":2179},{"style":447},[2180],{"type":34,"value":2181},"        // Utilisation de PayPal\n",{"type":28,"tag":262,"props":2183,"children":2184},{"class":264,"line":453},[2185,2189,2194,2198,2202,2206],{"type":28,"tag":262,"props":2186,"children":2187},{"style":301},[2188],{"type":34,"value":2116},{"type":28,"tag":262,"props":2190,"children":2191},{"style":307},[2192],{"type":34,"value":2193}," paypal ",{"type":28,"tag":262,"props":2195,"children":2196},{"style":385},[2197],{"type":34,"value":388},{"type":28,"tag":262,"props":2199,"children":2200},{"style":269},[2201],{"type":34,"value":2085},{"type":28,"tag":262,"props":2203,"children":2204},{"style":336},[2205],{"type":34,"value":1630},{"type":28,"tag":262,"props":2207,"children":2208},{"style":286},[2209],{"type":34,"value":1461},{"type":28,"tag":262,"props":2211,"children":2212},{"class":264,"line":504},[2213,2217,2221,2225,2229,2234],{"type":28,"tag":262,"props":2214,"children":2215},{"style":307},[2216],{"type":34,"value":2145},{"type":28,"tag":262,"props":2218,"children":2219},{"style":286},[2220],{"type":34,"value":377},{"type":28,"tag":262,"props":2222,"children":2223},{"style":336},[2224],{"type":34,"value":1819},{"type":28,"tag":262,"props":2226,"children":2227},{"style":286},[2228],{"type":34,"value":343},{"type":28,"tag":262,"props":2230,"children":2231},{"style":307},[2232],{"type":34,"value":2233},"paypal",{"type":28,"tag":262,"props":2235,"children":2236},{"style":286},[2237],{"type":34,"value":501},{"type":28,"tag":262,"props":2239,"children":2240},{"class":264,"line":512},[2241],{"type":28,"tag":262,"props":2242,"children":2243},{"emptyLinePlaceholder":12},[2244],{"type":34,"value":324},{"type":28,"tag":262,"props":2246,"children":2247},{"class":264,"line":520},[2248],{"type":28,"tag":262,"props":2249,"children":2250},{"style":447},[2251],{"type":34,"value":2252},"        // Utilisation d'un portefeuille électronique\n",{"type":28,"tag":262,"props":2254,"children":2255},{"class":264,"line":558},[2256,2260,2265,2269,2273,2277],{"type":28,"tag":262,"props":2257,"children":2258},{"style":301},[2259],{"type":34,"value":2116},{"type":28,"tag":262,"props":2261,"children":2262},{"style":307},[2263],{"type":34,"value":2264}," ewallet ",{"type":28,"tag":262,"props":2266,"children":2267},{"style":385},[2268],{"type":34,"value":388},{"type":28,"tag":262,"props":2270,"children":2271},{"style":269},[2272],{"type":34,"value":2085},{"type":28,"tag":262,"props":2274,"children":2275},{"style":336},[2276],{"type":34,"value":1882},{"type":28,"tag":262,"props":2278,"children":2279},{"style":286},[2280],{"type":34,"value":1461},{"type":28,"tag":262,"props":2282,"children":2283},{"class":264,"line":567},[2284,2288,2292,2296,2300,2305],{"type":28,"tag":262,"props":2285,"children":2286},{"style":307},[2287],{"type":34,"value":2145},{"type":28,"tag":262,"props":2289,"children":2290},{"style":286},[2291],{"type":34,"value":377},{"type":28,"tag":262,"props":2293,"children":2294},{"style":336},[2295],{"type":34,"value":1819},{"type":28,"tag":262,"props":2297,"children":2298},{"style":286},[2299],{"type":34,"value":343},{"type":28,"tag":262,"props":2301,"children":2302},{"style":307},[2303],{"type":34,"value":2304},"ewallet",{"type":28,"tag":262,"props":2306,"children":2307},{"style":286},[2308],{"type":34,"value":501},{"type":28,"tag":262,"props":2310,"children":2311},{"class":264,"line":612},[2312],{"type":28,"tag":262,"props":2313,"children":2314},{"style":286},[2315],{"type":34,"value":405},{"type":28,"tag":262,"props":2317,"children":2318},{"class":264,"line":620},[2319],{"type":28,"tag":262,"props":2320,"children":2321},{"style":286},[2322],{"type":34,"value":626},{"type":28,"tag":183,"props":2324,"children":2325},{},[],{"type":28,"tag":1009,"props":2327,"children":2328},{"type":1011},[2329],{"type":28,"tag":37,"props":2330,"children":2331},{},[2332,2337],{"type":28,"tag":198,"props":2333,"children":2334},{},[2335],{"type":34,"value":2336},"Utilisez des interfaces ou des classes abstraites",{"type":34,"value":2338}," pour éviter de devoir modifier des classes déjà existantes. Cela facilitera l'extension de votre application avec de nouvelles fonctionnalités à l'avenir.",{"type":28,"tag":29,"props":2340,"children":2342},{"id":2341},"_3-principe-de-substitution-de-liskov-liskov-substitution-principle-lsp",[2343],{"type":34,"value":2344},"3. Principe de Substitution de Liskov (Liskov Substitution Principle - LSP)",{"type":28,"tag":37,"props":2346,"children":2347},{},[2348],{"type":34,"value":2349},"Le principe de substitution de Liskov (LSP) stipule que les sous-classes doivent pouvoir être substituées à leurs classes mères sans que cela ne perturbe le bon fonctionnement du programme. Autrement dit, une classe dérivée doit pouvoir remplacer la classe parente sans modifier le comportement attendu du système.",{"type":28,"tag":206,"props":2351,"children":2353},{"id":2352},"pourquoi-cest-important-2",[2354],{"type":34,"value":211},{"type":28,"tag":37,"props":2356,"children":2357},{},[2358],{"type":34,"value":2359},"Si vous brisez ce principe, l'héritage peut causer des problèmes inattendus. Par exemple, certaines méthodes ou comportements pourraient ne pas fonctionner correctement, ce qui peut engendrer des bugs subtils et rendre le système imprévisible.",{"type":28,"tag":206,"props":2361,"children":2363},{"id":2362},"exemple-concret-en-java-2",[2364],{"type":34,"value":222},{"type":28,"tag":37,"props":2366,"children":2367},{},[2368,2370,2376,2378,2384],{"type":34,"value":2369},"Imaginons que nous ayons une classe ",{"type":28,"tag":229,"props":2371,"children":2373},{"className":2372},[],[2374],{"type":34,"value":2375},"Rectangle",{"type":34,"value":2377}," et une sous-classe ",{"type":28,"tag":229,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":34,"value":2383},"Square",{"type":34,"value":2385}," (carré), puisque, mathématiquement, un carré est un cas particulier de rectangle.",{"type":28,"tag":245,"props":2387,"children":2389},{"id":2388},"exemple-sans-lsp",[2390],{"type":34,"value":2391},"Exemple sans LSP :",{"type":28,"tag":37,"props":2393,"children":2394},{},[2395,2397,2402,2404,2409],{"type":34,"value":2396},"Voici une implémentation basique où ",{"type":28,"tag":229,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":34,"value":2383},{"type":34,"value":2403}," hérite de ",{"type":28,"tag":229,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":34,"value":2375},{"type":34,"value":1851},{"type":28,"tag":252,"props":2411,"children":2413},{"className":254,"code":2412,"language":256,"meta":7,"style":7},"public class Rectangle {\n    protected int width;\n    protected int height;\n\n    public void setWidth(int width) {\n        this.width = width;\n    }\n\n\n\n    public void setHeight(int height) {\n        this.height = height;\n    }\n\n    public int getArea() {\n        return width * height;\n    }\n}\n\npublic class Square extends Rectangle {\n    @Override\n    public void setWidth(int width) {\n        this.width = width;\n        this.height = width; // Contraintes du carré\n    }\n\n    @Override\n    public void setHeight(int height) {\n        this.height = height;\n        this.width = height; // Contraintes du carré\n    }\n}\n",[2414],{"type":28,"tag":229,"props":2415,"children":2416},{"__ignoreMap":7},[2417,2437,2459,2479,2486,2523,2551,2558,2565,2572,2579,2615,2643,2650,2657,2681,2707,2714,2721,2728,2757,2768,2803,2830,2863,2870,2877,2888,2924,2952,2984,2992],{"type":28,"tag":262,"props":2418,"children":2419},{"class":264,"line":265},[2420,2424,2428,2433],{"type":28,"tag":262,"props":2421,"children":2422},{"style":269},[2423],{"type":34,"value":272},{"type":28,"tag":262,"props":2425,"children":2426},{"style":269},[2427],{"type":34,"value":277},{"type":28,"tag":262,"props":2429,"children":2430},{"style":280},[2431],{"type":34,"value":2432}," Rectangle",{"type":28,"tag":262,"props":2434,"children":2435},{"style":286},[2436],{"type":34,"value":289},{"type":28,"tag":262,"props":2438,"children":2439},{"class":264,"line":292},[2440,2445,2450,2455],{"type":28,"tag":262,"props":2441,"children":2442},{"style":269},[2443],{"type":34,"value":2444},"    protected",{"type":28,"tag":262,"props":2446,"children":2447},{"style":269},[2448],{"type":34,"value":2449}," int",{"type":28,"tag":262,"props":2451,"children":2452},{"style":307},[2453],{"type":34,"value":2454}," width",{"type":28,"tag":262,"props":2456,"children":2457},{"style":286},[2458],{"type":34,"value":315},{"type":28,"tag":262,"props":2460,"children":2461},{"class":264,"line":318},[2462,2466,2470,2475],{"type":28,"tag":262,"props":2463,"children":2464},{"style":269},[2465],{"type":34,"value":2444},{"type":28,"tag":262,"props":2467,"children":2468},{"style":269},[2469],{"type":34,"value":2449},{"type":28,"tag":262,"props":2471,"children":2472},{"style":307},[2473],{"type":34,"value":2474}," height",{"type":28,"tag":262,"props":2476,"children":2477},{"style":286},[2478],{"type":34,"value":315},{"type":28,"tag":262,"props":2480,"children":2481},{"class":264,"line":327},[2482],{"type":28,"tag":262,"props":2483,"children":2484},{"emptyLinePlaceholder":12},[2485],{"type":34,"value":324},{"type":28,"tag":262,"props":2487,"children":2488},{"class":264,"line":365},[2489,2493,2497,2502,2506,2511,2515,2519],{"type":28,"tag":262,"props":2490,"children":2491},{"style":269},[2492],{"type":34,"value":333},{"type":28,"tag":262,"props":2494,"children":2495},{"style":269},[2496],{"type":34,"value":426},{"type":28,"tag":262,"props":2498,"children":2499},{"style":336},[2500],{"type":34,"value":2501}," setWidth",{"type":28,"tag":262,"props":2503,"children":2504},{"style":286},[2505],{"type":34,"value":343},{"type":28,"tag":262,"props":2507,"children":2508},{"style":269},[2509],{"type":34,"value":2510},"int",{"type":28,"tag":262,"props":2512,"children":2513},{"style":351},[2514],{"type":34,"value":2454},{"type":28,"tag":262,"props":2516,"children":2517},{"style":286},[2518],{"type":34,"value":358},{"type":28,"tag":262,"props":2520,"children":2521},{"style":286},[2522],{"type":34,"value":289},{"type":28,"tag":262,"props":2524,"children":2525},{"class":264,"line":399},[2526,2530,2534,2539,2543,2547],{"type":28,"tag":262,"props":2527,"children":2528},{"style":369},[2529],{"type":34,"value":372},{"type":28,"tag":262,"props":2531,"children":2532},{"style":286},[2533],{"type":34,"value":377},{"type":28,"tag":262,"props":2535,"children":2536},{"style":307},[2537],{"type":34,"value":2538},"width ",{"type":28,"tag":262,"props":2540,"children":2541},{"style":385},[2542],{"type":34,"value":388},{"type":28,"tag":262,"props":2544,"children":2545},{"style":307},[2546],{"type":34,"value":2454},{"type":28,"tag":262,"props":2548,"children":2549},{"style":286},[2550],{"type":34,"value":315},{"type":28,"tag":262,"props":2552,"children":2553},{"class":264,"line":408},[2554],{"type":28,"tag":262,"props":2555,"children":2556},{"style":286},[2557],{"type":34,"value":405},{"type":28,"tag":262,"props":2559,"children":2560},{"class":264,"line":416},[2561],{"type":28,"tag":262,"props":2562,"children":2563},{"emptyLinePlaceholder":12},[2564],{"type":34,"value":324},{"type":28,"tag":262,"props":2566,"children":2567},{"class":264,"line":443},[2568],{"type":28,"tag":262,"props":2569,"children":2570},{"emptyLinePlaceholder":12},[2571],{"type":34,"value":324},{"type":28,"tag":262,"props":2573,"children":2574},{"class":264,"line":453},[2575],{"type":28,"tag":262,"props":2576,"children":2577},{"emptyLinePlaceholder":12},[2578],{"type":34,"value":324},{"type":28,"tag":262,"props":2580,"children":2581},{"class":264,"line":504},[2582,2586,2590,2595,2599,2603,2607,2611],{"type":28,"tag":262,"props":2583,"children":2584},{"style":269},[2585],{"type":34,"value":333},{"type":28,"tag":262,"props":2587,"children":2588},{"style":269},[2589],{"type":34,"value":426},{"type":28,"tag":262,"props":2591,"children":2592},{"style":336},[2593],{"type":34,"value":2594}," setHeight",{"type":28,"tag":262,"props":2596,"children":2597},{"style":286},[2598],{"type":34,"value":343},{"type":28,"tag":262,"props":2600,"children":2601},{"style":269},[2602],{"type":34,"value":2510},{"type":28,"tag":262,"props":2604,"children":2605},{"style":351},[2606],{"type":34,"value":2474},{"type":28,"tag":262,"props":2608,"children":2609},{"style":286},[2610],{"type":34,"value":358},{"type":28,"tag":262,"props":2612,"children":2613},{"style":286},[2614],{"type":34,"value":289},{"type":28,"tag":262,"props":2616,"children":2617},{"class":264,"line":512},[2618,2622,2626,2631,2635,2639],{"type":28,"tag":262,"props":2619,"children":2620},{"style":369},[2621],{"type":34,"value":372},{"type":28,"tag":262,"props":2623,"children":2624},{"style":286},[2625],{"type":34,"value":377},{"type":28,"tag":262,"props":2627,"children":2628},{"style":307},[2629],{"type":34,"value":2630},"height ",{"type":28,"tag":262,"props":2632,"children":2633},{"style":385},[2634],{"type":34,"value":388},{"type":28,"tag":262,"props":2636,"children":2637},{"style":307},[2638],{"type":34,"value":2474},{"type":28,"tag":262,"props":2640,"children":2641},{"style":286},[2642],{"type":34,"value":315},{"type":28,"tag":262,"props":2644,"children":2645},{"class":264,"line":520},[2646],{"type":28,"tag":262,"props":2647,"children":2648},{"style":286},[2649],{"type":34,"value":405},{"type":28,"tag":262,"props":2651,"children":2652},{"class":264,"line":558},[2653],{"type":28,"tag":262,"props":2654,"children":2655},{"emptyLinePlaceholder":12},[2656],{"type":34,"value":324},{"type":28,"tag":262,"props":2658,"children":2659},{"class":264,"line":567},[2660,2664,2668,2673,2677],{"type":28,"tag":262,"props":2661,"children":2662},{"style":269},[2663],{"type":34,"value":333},{"type":28,"tag":262,"props":2665,"children":2666},{"style":269},[2667],{"type":34,"value":2449},{"type":28,"tag":262,"props":2669,"children":2670},{"style":336},[2671],{"type":34,"value":2672}," getArea",{"type":28,"tag":262,"props":2674,"children":2675},{"style":286},[2676],{"type":34,"value":436},{"type":28,"tag":262,"props":2678,"children":2679},{"style":286},[2680],{"type":34,"value":289},{"type":28,"tag":262,"props":2682,"children":2683},{"class":264,"line":612},[2684,2689,2694,2699,2703],{"type":28,"tag":262,"props":2685,"children":2686},{"style":269},[2687],{"type":34,"value":2688},"        return",{"type":28,"tag":262,"props":2690,"children":2691},{"style":307},[2692],{"type":34,"value":2693}," width ",{"type":28,"tag":262,"props":2695,"children":2696},{"style":385},[2697],{"type":34,"value":2698},"*",{"type":28,"tag":262,"props":2700,"children":2701},{"style":307},[2702],{"type":34,"value":2474},{"type":28,"tag":262,"props":2704,"children":2705},{"style":286},[2706],{"type":34,"value":315},{"type":28,"tag":262,"props":2708,"children":2709},{"class":264,"line":620},[2710],{"type":28,"tag":262,"props":2711,"children":2712},{"style":286},[2713],{"type":34,"value":405},{"type":28,"tag":262,"props":2715,"children":2716},{"class":264,"line":991},[2717],{"type":28,"tag":262,"props":2718,"children":2719},{"style":286},[2720],{"type":34,"value":626},{"type":28,"tag":262,"props":2722,"children":2723},{"class":264,"line":999},[2724],{"type":28,"tag":262,"props":2725,"children":2726},{"emptyLinePlaceholder":12},[2727],{"type":34,"value":324},{"type":28,"tag":262,"props":2729,"children":2730},{"class":264,"line":1721},[2731,2735,2739,2744,2749,2753],{"type":28,"tag":262,"props":2732,"children":2733},{"style":269},[2734],{"type":34,"value":272},{"type":28,"tag":262,"props":2736,"children":2737},{"style":269},[2738],{"type":34,"value":277},{"type":28,"tag":262,"props":2740,"children":2741},{"style":280},[2742],{"type":34,"value":2743}," Square",{"type":28,"tag":262,"props":2745,"children":2746},{"style":269},[2747],{"type":34,"value":2748}," extends",{"type":28,"tag":262,"props":2750,"children":2751},{"style":280},[2752],{"type":34,"value":2432},{"type":28,"tag":262,"props":2754,"children":2755},{"style":286},[2756],{"type":34,"value":289},{"type":28,"tag":262,"props":2758,"children":2759},{"class":264,"line":1729},[2760,2764],{"type":28,"tag":262,"props":2761,"children":2762},{"style":1518},[2763],{"type":34,"value":1521},{"type":28,"tag":262,"props":2765,"children":2766},{"style":1524},[2767],{"type":34,"value":1527},{"type":28,"tag":262,"props":2769,"children":2770},{"class":264,"line":1737},[2771,2775,2779,2783,2787,2791,2795,2799],{"type":28,"tag":262,"props":2772,"children":2773},{"style":269},[2774],{"type":34,"value":333},{"type":28,"tag":262,"props":2776,"children":2777},{"style":269},[2778],{"type":34,"value":426},{"type":28,"tag":262,"props":2780,"children":2781},{"style":336},[2782],{"type":34,"value":2501},{"type":28,"tag":262,"props":2784,"children":2785},{"style":286},[2786],{"type":34,"value":343},{"type":28,"tag":262,"props":2788,"children":2789},{"style":269},[2790],{"type":34,"value":2510},{"type":28,"tag":262,"props":2792,"children":2793},{"style":351},[2794],{"type":34,"value":2454},{"type":28,"tag":262,"props":2796,"children":2797},{"style":286},[2798],{"type":34,"value":358},{"type":28,"tag":262,"props":2800,"children":2801},{"style":286},[2802],{"type":34,"value":289},{"type":28,"tag":262,"props":2804,"children":2805},{"class":264,"line":1746},[2806,2810,2814,2818,2822,2826],{"type":28,"tag":262,"props":2807,"children":2808},{"style":369},[2809],{"type":34,"value":372},{"type":28,"tag":262,"props":2811,"children":2812},{"style":286},[2813],{"type":34,"value":377},{"type":28,"tag":262,"props":2815,"children":2816},{"style":307},[2817],{"type":34,"value":2538},{"type":28,"tag":262,"props":2819,"children":2820},{"style":385},[2821],{"type":34,"value":388},{"type":28,"tag":262,"props":2823,"children":2824},{"style":307},[2825],{"type":34,"value":2454},{"type":28,"tag":262,"props":2827,"children":2828},{"style":286},[2829],{"type":34,"value":315},{"type":28,"tag":262,"props":2831,"children":2832},{"class":264,"line":1766},[2833,2837,2841,2845,2849,2853,2858],{"type":28,"tag":262,"props":2834,"children":2835},{"style":369},[2836],{"type":34,"value":372},{"type":28,"tag":262,"props":2838,"children":2839},{"style":286},[2840],{"type":34,"value":377},{"type":28,"tag":262,"props":2842,"children":2843},{"style":307},[2844],{"type":34,"value":2630},{"type":28,"tag":262,"props":2846,"children":2847},{"style":385},[2848],{"type":34,"value":388},{"type":28,"tag":262,"props":2850,"children":2851},{"style":307},[2852],{"type":34,"value":2454},{"type":28,"tag":262,"props":2854,"children":2855},{"style":286},[2856],{"type":34,"value":2857},";",{"type":28,"tag":262,"props":2859,"children":2860},{"style":447},[2861],{"type":34,"value":2862}," // Contraintes du carré\n",{"type":28,"tag":262,"props":2864,"children":2865},{"class":264,"line":1804},[2866],{"type":28,"tag":262,"props":2867,"children":2868},{"style":286},[2869],{"type":34,"value":405},{"type":28,"tag":262,"props":2871,"children":2872},{"class":264,"line":1826},[2873],{"type":28,"tag":262,"props":2874,"children":2875},{"emptyLinePlaceholder":12},[2876],{"type":34,"value":324},{"type":28,"tag":262,"props":2878,"children":2879},{"class":264,"line":1834},[2880,2884],{"type":28,"tag":262,"props":2881,"children":2882},{"style":1518},[2883],{"type":34,"value":1521},{"type":28,"tag":262,"props":2885,"children":2886},{"style":1524},[2887],{"type":34,"value":1527},{"type":28,"tag":262,"props":2889,"children":2891},{"class":264,"line":2890},28,[2892,2896,2900,2904,2908,2912,2916,2920],{"type":28,"tag":262,"props":2893,"children":2894},{"style":269},[2895],{"type":34,"value":333},{"type":28,"tag":262,"props":2897,"children":2898},{"style":269},[2899],{"type":34,"value":426},{"type":28,"tag":262,"props":2901,"children":2902},{"style":336},[2903],{"type":34,"value":2594},{"type":28,"tag":262,"props":2905,"children":2906},{"style":286},[2907],{"type":34,"value":343},{"type":28,"tag":262,"props":2909,"children":2910},{"style":269},[2911],{"type":34,"value":2510},{"type":28,"tag":262,"props":2913,"children":2914},{"style":351},[2915],{"type":34,"value":2474},{"type":28,"tag":262,"props":2917,"children":2918},{"style":286},[2919],{"type":34,"value":358},{"type":28,"tag":262,"props":2921,"children":2922},{"style":286},[2923],{"type":34,"value":289},{"type":28,"tag":262,"props":2925,"children":2927},{"class":264,"line":2926},29,[2928,2932,2936,2940,2944,2948],{"type":28,"tag":262,"props":2929,"children":2930},{"style":369},[2931],{"type":34,"value":372},{"type":28,"tag":262,"props":2933,"children":2934},{"style":286},[2935],{"type":34,"value":377},{"type":28,"tag":262,"props":2937,"children":2938},{"style":307},[2939],{"type":34,"value":2630},{"type":28,"tag":262,"props":2941,"children":2942},{"style":385},[2943],{"type":34,"value":388},{"type":28,"tag":262,"props":2945,"children":2946},{"style":307},[2947],{"type":34,"value":2474},{"type":28,"tag":262,"props":2949,"children":2950},{"style":286},[2951],{"type":34,"value":315},{"type":28,"tag":262,"props":2953,"children":2955},{"class":264,"line":2954},30,[2956,2960,2964,2968,2972,2976,2980],{"type":28,"tag":262,"props":2957,"children":2958},{"style":369},[2959],{"type":34,"value":372},{"type":28,"tag":262,"props":2961,"children":2962},{"style":286},[2963],{"type":34,"value":377},{"type":28,"tag":262,"props":2965,"children":2966},{"style":307},[2967],{"type":34,"value":2538},{"type":28,"tag":262,"props":2969,"children":2970},{"style":385},[2971],{"type":34,"value":388},{"type":28,"tag":262,"props":2973,"children":2974},{"style":307},[2975],{"type":34,"value":2474},{"type":28,"tag":262,"props":2977,"children":2978},{"style":286},[2979],{"type":34,"value":2857},{"type":28,"tag":262,"props":2981,"children":2982},{"style":447},[2983],{"type":34,"value":2862},{"type":28,"tag":262,"props":2985,"children":2987},{"class":264,"line":2986},31,[2988],{"type":28,"tag":262,"props":2989,"children":2990},{"style":286},[2991],{"type":34,"value":405},{"type":28,"tag":262,"props":2993,"children":2995},{"class":264,"line":2994},32,[2996],{"type":28,"tag":262,"props":2997,"children":2998},{"style":286},[2999],{"type":34,"value":626},{"type":28,"tag":37,"props":3001,"children":3002},{},[3003,3005,3010,3012,3017,3019,3025,3027,3033],{"type":34,"value":3004},"À première vue, cela semble correct. Cependant, cette implémentation brise le principe de substitution de Liskov. Si l'on remplace un ",{"type":28,"tag":229,"props":3006,"children":3008},{"className":3007},[],[3009],{"type":34,"value":2375},{"type":34,"value":3011}," par un ",{"type":28,"tag":229,"props":3013,"children":3015},{"className":3014},[],[3016],{"type":34,"value":2383},{"type":34,"value":3018},", le comportement de la méthode ",{"type":28,"tag":229,"props":3020,"children":3022},{"className":3021},[],[3023],{"type":34,"value":3024},"setWidth()",{"type":34,"value":3026}," ou ",{"type":28,"tag":229,"props":3028,"children":3030},{"className":3029},[],[3031],{"type":34,"value":3032},"setHeight()",{"type":34,"value":3034}," devient imprévisible. Un carré ne peut pas fonctionner exactement comme un rectangle, car modifier la largeur affecte également la hauteur (et vice versa). Cela peut causer des bugs, notamment si on essaye de modifier indépendamment la largeur et la hauteur d’un carré en tant que rectangle.",{"type":28,"tag":245,"props":3036,"children":3038},{"id":3037},"exemple-avec-lsp-appliqué",[3039],{"type":34,"value":3040},"Exemple avec LSP appliqué :",{"type":28,"tag":37,"props":3042,"children":3043},{},[3044],{"type":34,"value":3045},"Pour respecter le principe de substitution de Liskov, il est préférable d’éviter d’utiliser l’héritage ici, car un carré n'est pas un rectangle en termes de comportement. Nous devrions plutôt créer des classes distinctes qui n’essaient pas d’être substituées l'une à l'autre.",{"type":28,"tag":252,"props":3047,"children":3049},{"className":254,"code":3048,"language":256,"meta":7,"style":7},"// Classe Rectangle\npublic class Rectangle {\n    private int width;\n    private int height;\n\n    public void setWidth(int width) {\n        this.width = width;\n    }\n\n    public void setHeight(int height) {\n        this.height = height;\n    }\n\n    public int getArea() {\n        return width * height;\n    }\n}\n\n// Classe Square avec son propre comportement\npublic class Square {\n    private int side;\n\n    public void setSide(int side) {\n        this.side = side;\n    }\n\n    public int getArea() {\n        return side * side;\n    }\n}\n",[3050],{"type":28,"tag":229,"props":3051,"children":3052},{"__ignoreMap":7},[3053,3061,3080,3099,3118,3125,3160,3187,3194,3201,3236,3263,3270,3277,3300,3323,3330,3337,3344,3352,3371,3391,3398,3434,3462,3469,3476,3499,3523,3530],{"type":28,"tag":262,"props":3054,"children":3055},{"class":264,"line":265},[3056],{"type":28,"tag":262,"props":3057,"children":3058},{"style":447},[3059],{"type":34,"value":3060},"// Classe Rectangle\n",{"type":28,"tag":262,"props":3062,"children":3063},{"class":264,"line":292},[3064,3068,3072,3076],{"type":28,"tag":262,"props":3065,"children":3066},{"style":269},[3067],{"type":34,"value":272},{"type":28,"tag":262,"props":3069,"children":3070},{"style":269},[3071],{"type":34,"value":277},{"type":28,"tag":262,"props":3073,"children":3074},{"style":280},[3075],{"type":34,"value":2432},{"type":28,"tag":262,"props":3077,"children":3078},{"style":286},[3079],{"type":34,"value":289},{"type":28,"tag":262,"props":3081,"children":3082},{"class":264,"line":318},[3083,3087,3091,3095],{"type":28,"tag":262,"props":3084,"children":3085},{"style":269},[3086],{"type":34,"value":298},{"type":28,"tag":262,"props":3088,"children":3089},{"style":269},[3090],{"type":34,"value":2449},{"type":28,"tag":262,"props":3092,"children":3093},{"style":307},[3094],{"type":34,"value":2454},{"type":28,"tag":262,"props":3096,"children":3097},{"style":286},[3098],{"type":34,"value":315},{"type":28,"tag":262,"props":3100,"children":3101},{"class":264,"line":327},[3102,3106,3110,3114],{"type":28,"tag":262,"props":3103,"children":3104},{"style":269},[3105],{"type":34,"value":298},{"type":28,"tag":262,"props":3107,"children":3108},{"style":269},[3109],{"type":34,"value":2449},{"type":28,"tag":262,"props":3111,"children":3112},{"style":307},[3113],{"type":34,"value":2474},{"type":28,"tag":262,"props":3115,"children":3116},{"style":286},[3117],{"type":34,"value":315},{"type":28,"tag":262,"props":3119,"children":3120},{"class":264,"line":365},[3121],{"type":28,"tag":262,"props":3122,"children":3123},{"emptyLinePlaceholder":12},[3124],{"type":34,"value":324},{"type":28,"tag":262,"props":3126,"children":3127},{"class":264,"line":399},[3128,3132,3136,3140,3144,3148,3152,3156],{"type":28,"tag":262,"props":3129,"children":3130},{"style":269},[3131],{"type":34,"value":333},{"type":28,"tag":262,"props":3133,"children":3134},{"style":269},[3135],{"type":34,"value":426},{"type":28,"tag":262,"props":3137,"children":3138},{"style":336},[3139],{"type":34,"value":2501},{"type":28,"tag":262,"props":3141,"children":3142},{"style":286},[3143],{"type":34,"value":343},{"type":28,"tag":262,"props":3145,"children":3146},{"style":269},[3147],{"type":34,"value":2510},{"type":28,"tag":262,"props":3149,"children":3150},{"style":351},[3151],{"type":34,"value":2454},{"type":28,"tag":262,"props":3153,"children":3154},{"style":286},[3155],{"type":34,"value":358},{"type":28,"tag":262,"props":3157,"children":3158},{"style":286},[3159],{"type":34,"value":289},{"type":28,"tag":262,"props":3161,"children":3162},{"class":264,"line":408},[3163,3167,3171,3175,3179,3183],{"type":28,"tag":262,"props":3164,"children":3165},{"style":369},[3166],{"type":34,"value":372},{"type":28,"tag":262,"props":3168,"children":3169},{"style":286},[3170],{"type":34,"value":377},{"type":28,"tag":262,"props":3172,"children":3173},{"style":307},[3174],{"type":34,"value":2538},{"type":28,"tag":262,"props":3176,"children":3177},{"style":385},[3178],{"type":34,"value":388},{"type":28,"tag":262,"props":3180,"children":3181},{"style":307},[3182],{"type":34,"value":2454},{"type":28,"tag":262,"props":3184,"children":3185},{"style":286},[3186],{"type":34,"value":315},{"type":28,"tag":262,"props":3188,"children":3189},{"class":264,"line":416},[3190],{"type":28,"tag":262,"props":3191,"children":3192},{"style":286},[3193],{"type":34,"value":405},{"type":28,"tag":262,"props":3195,"children":3196},{"class":264,"line":443},[3197],{"type":28,"tag":262,"props":3198,"children":3199},{"emptyLinePlaceholder":12},[3200],{"type":34,"value":324},{"type":28,"tag":262,"props":3202,"children":3203},{"class":264,"line":453},[3204,3208,3212,3216,3220,3224,3228,3232],{"type":28,"tag":262,"props":3205,"children":3206},{"style":269},[3207],{"type":34,"value":333},{"type":28,"tag":262,"props":3209,"children":3210},{"style":269},[3211],{"type":34,"value":426},{"type":28,"tag":262,"props":3213,"children":3214},{"style":336},[3215],{"type":34,"value":2594},{"type":28,"tag":262,"props":3217,"children":3218},{"style":286},[3219],{"type":34,"value":343},{"type":28,"tag":262,"props":3221,"children":3222},{"style":269},[3223],{"type":34,"value":2510},{"type":28,"tag":262,"props":3225,"children":3226},{"style":351},[3227],{"type":34,"value":2474},{"type":28,"tag":262,"props":3229,"children":3230},{"style":286},[3231],{"type":34,"value":358},{"type":28,"tag":262,"props":3233,"children":3234},{"style":286},[3235],{"type":34,"value":289},{"type":28,"tag":262,"props":3237,"children":3238},{"class":264,"line":504},[3239,3243,3247,3251,3255,3259],{"type":28,"tag":262,"props":3240,"children":3241},{"style":369},[3242],{"type":34,"value":372},{"type":28,"tag":262,"props":3244,"children":3245},{"style":286},[3246],{"type":34,"value":377},{"type":28,"tag":262,"props":3248,"children":3249},{"style":307},[3250],{"type":34,"value":2630},{"type":28,"tag":262,"props":3252,"children":3253},{"style":385},[3254],{"type":34,"value":388},{"type":28,"tag":262,"props":3256,"children":3257},{"style":307},[3258],{"type":34,"value":2474},{"type":28,"tag":262,"props":3260,"children":3261},{"style":286},[3262],{"type":34,"value":315},{"type":28,"tag":262,"props":3264,"children":3265},{"class":264,"line":512},[3266],{"type":28,"tag":262,"props":3267,"children":3268},{"style":286},[3269],{"type":34,"value":405},{"type":28,"tag":262,"props":3271,"children":3272},{"class":264,"line":520},[3273],{"type":28,"tag":262,"props":3274,"children":3275},{"emptyLinePlaceholder":12},[3276],{"type":34,"value":324},{"type":28,"tag":262,"props":3278,"children":3279},{"class":264,"line":558},[3280,3284,3288,3292,3296],{"type":28,"tag":262,"props":3281,"children":3282},{"style":269},[3283],{"type":34,"value":333},{"type":28,"tag":262,"props":3285,"children":3286},{"style":269},[3287],{"type":34,"value":2449},{"type":28,"tag":262,"props":3289,"children":3290},{"style":336},[3291],{"type":34,"value":2672},{"type":28,"tag":262,"props":3293,"children":3294},{"style":286},[3295],{"type":34,"value":436},{"type":28,"tag":262,"props":3297,"children":3298},{"style":286},[3299],{"type":34,"value":289},{"type":28,"tag":262,"props":3301,"children":3302},{"class":264,"line":567},[3303,3307,3311,3315,3319],{"type":28,"tag":262,"props":3304,"children":3305},{"style":269},[3306],{"type":34,"value":2688},{"type":28,"tag":262,"props":3308,"children":3309},{"style":307},[3310],{"type":34,"value":2693},{"type":28,"tag":262,"props":3312,"children":3313},{"style":385},[3314],{"type":34,"value":2698},{"type":28,"tag":262,"props":3316,"children":3317},{"style":307},[3318],{"type":34,"value":2474},{"type":28,"tag":262,"props":3320,"children":3321},{"style":286},[3322],{"type":34,"value":315},{"type":28,"tag":262,"props":3324,"children":3325},{"class":264,"line":612},[3326],{"type":28,"tag":262,"props":3327,"children":3328},{"style":286},[3329],{"type":34,"value":405},{"type":28,"tag":262,"props":3331,"children":3332},{"class":264,"line":620},[3333],{"type":28,"tag":262,"props":3334,"children":3335},{"style":286},[3336],{"type":34,"value":626},{"type":28,"tag":262,"props":3338,"children":3339},{"class":264,"line":991},[3340],{"type":28,"tag":262,"props":3341,"children":3342},{"emptyLinePlaceholder":12},[3343],{"type":34,"value":324},{"type":28,"tag":262,"props":3345,"children":3346},{"class":264,"line":999},[3347],{"type":28,"tag":262,"props":3348,"children":3349},{"style":447},[3350],{"type":34,"value":3351},"// Classe Square avec son propre comportement\n",{"type":28,"tag":262,"props":3353,"children":3354},{"class":264,"line":1721},[3355,3359,3363,3367],{"type":28,"tag":262,"props":3356,"children":3357},{"style":269},[3358],{"type":34,"value":272},{"type":28,"tag":262,"props":3360,"children":3361},{"style":269},[3362],{"type":34,"value":277},{"type":28,"tag":262,"props":3364,"children":3365},{"style":280},[3366],{"type":34,"value":2743},{"type":28,"tag":262,"props":3368,"children":3369},{"style":286},[3370],{"type":34,"value":289},{"type":28,"tag":262,"props":3372,"children":3373},{"class":264,"line":1729},[3374,3378,3382,3387],{"type":28,"tag":262,"props":3375,"children":3376},{"style":269},[3377],{"type":34,"value":298},{"type":28,"tag":262,"props":3379,"children":3380},{"style":269},[3381],{"type":34,"value":2449},{"type":28,"tag":262,"props":3383,"children":3384},{"style":307},[3385],{"type":34,"value":3386}," side",{"type":28,"tag":262,"props":3388,"children":3389},{"style":286},[3390],{"type":34,"value":315},{"type":28,"tag":262,"props":3392,"children":3393},{"class":264,"line":1737},[3394],{"type":28,"tag":262,"props":3395,"children":3396},{"emptyLinePlaceholder":12},[3397],{"type":34,"value":324},{"type":28,"tag":262,"props":3399,"children":3400},{"class":264,"line":1746},[3401,3405,3409,3414,3418,3422,3426,3430],{"type":28,"tag":262,"props":3402,"children":3403},{"style":269},[3404],{"type":34,"value":333},{"type":28,"tag":262,"props":3406,"children":3407},{"style":269},[3408],{"type":34,"value":426},{"type":28,"tag":262,"props":3410,"children":3411},{"style":336},[3412],{"type":34,"value":3413}," setSide",{"type":28,"tag":262,"props":3415,"children":3416},{"style":286},[3417],{"type":34,"value":343},{"type":28,"tag":262,"props":3419,"children":3420},{"style":269},[3421],{"type":34,"value":2510},{"type":28,"tag":262,"props":3423,"children":3424},{"style":351},[3425],{"type":34,"value":3386},{"type":28,"tag":262,"props":3427,"children":3428},{"style":286},[3429],{"type":34,"value":358},{"type":28,"tag":262,"props":3431,"children":3432},{"style":286},[3433],{"type":34,"value":289},{"type":28,"tag":262,"props":3435,"children":3436},{"class":264,"line":1766},[3437,3441,3445,3450,3454,3458],{"type":28,"tag":262,"props":3438,"children":3439},{"style":369},[3440],{"type":34,"value":372},{"type":28,"tag":262,"props":3442,"children":3443},{"style":286},[3444],{"type":34,"value":377},{"type":28,"tag":262,"props":3446,"children":3447},{"style":307},[3448],{"type":34,"value":3449},"side ",{"type":28,"tag":262,"props":3451,"children":3452},{"style":385},[3453],{"type":34,"value":388},{"type":28,"tag":262,"props":3455,"children":3456},{"style":307},[3457],{"type":34,"value":3386},{"type":28,"tag":262,"props":3459,"children":3460},{"style":286},[3461],{"type":34,"value":315},{"type":28,"tag":262,"props":3463,"children":3464},{"class":264,"line":1804},[3465],{"type":28,"tag":262,"props":3466,"children":3467},{"style":286},[3468],{"type":34,"value":405},{"type":28,"tag":262,"props":3470,"children":3471},{"class":264,"line":1826},[3472],{"type":28,"tag":262,"props":3473,"children":3474},{"emptyLinePlaceholder":12},[3475],{"type":34,"value":324},{"type":28,"tag":262,"props":3477,"children":3478},{"class":264,"line":1834},[3479,3483,3487,3491,3495],{"type":28,"tag":262,"props":3480,"children":3481},{"style":269},[3482],{"type":34,"value":333},{"type":28,"tag":262,"props":3484,"children":3485},{"style":269},[3486],{"type":34,"value":2449},{"type":28,"tag":262,"props":3488,"children":3489},{"style":336},[3490],{"type":34,"value":2672},{"type":28,"tag":262,"props":3492,"children":3493},{"style":286},[3494],{"type":34,"value":436},{"type":28,"tag":262,"props":3496,"children":3497},{"style":286},[3498],{"type":34,"value":289},{"type":28,"tag":262,"props":3500,"children":3501},{"class":264,"line":2890},[3502,3506,3511,3515,3519],{"type":28,"tag":262,"props":3503,"children":3504},{"style":269},[3505],{"type":34,"value":2688},{"type":28,"tag":262,"props":3507,"children":3508},{"style":307},[3509],{"type":34,"value":3510}," side ",{"type":28,"tag":262,"props":3512,"children":3513},{"style":385},[3514],{"type":34,"value":2698},{"type":28,"tag":262,"props":3516,"children":3517},{"style":307},[3518],{"type":34,"value":3386},{"type":28,"tag":262,"props":3520,"children":3521},{"style":286},[3522],{"type":34,"value":315},{"type":28,"tag":262,"props":3524,"children":3525},{"class":264,"line":2926},[3526],{"type":28,"tag":262,"props":3527,"children":3528},{"style":286},[3529],{"type":34,"value":405},{"type":28,"tag":262,"props":3531,"children":3532},{"class":264,"line":2954},[3533],{"type":28,"tag":262,"props":3534,"children":3535},{"style":286},[3536],{"type":34,"value":626},{"type":28,"tag":183,"props":3538,"children":3539},{},[],{"type":28,"tag":1009,"props":3541,"children":3542},{"type":1011},[3543],{"type":28,"tag":37,"props":3544,"children":3545},{},[3546,3551],{"type":28,"tag":198,"props":3547,"children":3548},{},[3549],{"type":34,"value":3550},"Évitez l'héritage si les comportements diffèrent",{"type":34,"value":3552}," trop entre la classe parente et la sous-classe. Utilisez des classes séparées ou le polymorphisme si nécessaire, pour éviter les surprises lors de l'exécution du programme.",{"type":28,"tag":29,"props":3554,"children":3556},{"id":3555},"_4-principe-de-ségrégation-des-interfaces-interface-segregation-principle-isp",[3557],{"type":34,"value":3558},"4. Principe de Ségrégation des Interfaces (Interface Segregation Principle - ISP)",{"type":28,"tag":37,"props":3560,"children":3561},{},[3562],{"type":34,"value":3563},"Le principe de ségrégation des interfaces stipule qu'un client ne doit pas être forcé d'implémenter des interfaces dont il n'a pas besoin. Cela signifie qu’il vaut mieux avoir plusieurs petites interfaces spécifiques à des besoins qu'une seule interface générale contenant des méthodes inutiles pour certains clients.",{"type":28,"tag":206,"props":3565,"children":3567},{"id":3566},"pourquoi-cest-important-3",[3568],{"type":34,"value":211},{"type":28,"tag":37,"props":3570,"children":3571},{},[3572],{"type":34,"value":3573},"Lorsqu'une interface devient trop grande et généraliste, cela force les classes qui l'implémentent à supporter des méthodes dont elles n'ont pas besoin. Cela conduit à un couplage excessif et rend le code plus difficile à maintenir. En divisant une interface en plusieurs interfaces plus petites et spécifiques, chaque classe implémente uniquement ce dont elle a réellement besoin, rendant le système plus flexible et modulaire.",{"type":28,"tag":206,"props":3575,"children":3577},{"id":3576},"exemple-concret-en-java-3",[3578],{"type":34,"value":222},{"type":28,"tag":37,"props":3580,"children":3581},{},[3582,3584,3590],{"type":34,"value":3583},"Imaginons que nous ayons un système qui gère différentes sortes d'oiseaux. Nous avons une interface ",{"type":28,"tag":229,"props":3585,"children":3587},{"className":3586},[],[3588],{"type":34,"value":3589},"Bird",{"type":34,"value":3591}," qui contient des méthodes communes pour les oiseaux.",{"type":28,"tag":245,"props":3593,"children":3595},{"id":3594},"exemple-sans-isp",[3596],{"type":34,"value":3597},"Exemple sans ISP :",{"type":28,"tag":37,"props":3599,"children":3600},{},[3601],{"type":34,"value":3602},"Voici une interface qui regroupe trop de responsabilités :",{"type":28,"tag":252,"props":3604,"children":3606},{"className":254,"code":3605,"language":256,"meta":7,"style":7},"public interface Bird {\n    void fly();\n    void swim();\n    void makeSound();\n}\n",[3607],{"type":28,"tag":229,"props":3608,"children":3609},{"__ignoreMap":7},[3610,3630,3646,3662,3678],{"type":28,"tag":262,"props":3611,"children":3612},{"class":264,"line":265},[3613,3617,3621,3626],{"type":28,"tag":262,"props":3614,"children":3615},{"style":269},[3616],{"type":34,"value":272},{"type":28,"tag":262,"props":3618,"children":3619},{"style":269},[3620],{"type":34,"value":1435},{"type":28,"tag":262,"props":3622,"children":3623},{"style":280},[3624],{"type":34,"value":3625}," Bird",{"type":28,"tag":262,"props":3627,"children":3628},{"style":286},[3629],{"type":34,"value":289},{"type":28,"tag":262,"props":3631,"children":3632},{"class":264,"line":292},[3633,3637,3642],{"type":28,"tag":262,"props":3634,"children":3635},{"style":269},[3636],{"type":34,"value":1452},{"type":28,"tag":262,"props":3638,"children":3639},{"style":336},[3640],{"type":34,"value":3641}," fly",{"type":28,"tag":262,"props":3643,"children":3644},{"style":286},[3645],{"type":34,"value":1461},{"type":28,"tag":262,"props":3647,"children":3648},{"class":264,"line":318},[3649,3653,3658],{"type":28,"tag":262,"props":3650,"children":3651},{"style":269},[3652],{"type":34,"value":1452},{"type":28,"tag":262,"props":3654,"children":3655},{"style":336},[3656],{"type":34,"value":3657}," swim",{"type":28,"tag":262,"props":3659,"children":3660},{"style":286},[3661],{"type":34,"value":1461},{"type":28,"tag":262,"props":3663,"children":3664},{"class":264,"line":327},[3665,3669,3674],{"type":28,"tag":262,"props":3666,"children":3667},{"style":269},[3668],{"type":34,"value":1452},{"type":28,"tag":262,"props":3670,"children":3671},{"style":336},[3672],{"type":34,"value":3673}," makeSound",{"type":28,"tag":262,"props":3675,"children":3676},{"style":286},[3677],{"type":34,"value":1461},{"type":28,"tag":262,"props":3679,"children":3680},{"class":264,"line":365},[3681],{"type":28,"tag":262,"props":3682,"children":3683},{"style":286},[3684],{"type":34,"value":626},{"type":28,"tag":37,"props":3686,"children":3687},{},[3688,3690,3696,3698,3704,3706,3712],{"type":34,"value":3689},"Toutes les classes qui implémentent cette interface devront fournir des implémentations pour ",{"type":28,"tag":229,"props":3691,"children":3693},{"className":3692},[],[3694],{"type":34,"value":3695},"fly()",{"type":34,"value":3697},", ",{"type":28,"tag":229,"props":3699,"children":3701},{"className":3700},[],[3702],{"type":34,"value":3703},"swim()",{"type":34,"value":3705},", et ",{"type":28,"tag":229,"props":3707,"children":3709},{"className":3708},[],[3710],{"type":34,"value":3711},"makeSound()",{"type":34,"value":3713},". Cela peut poser problème pour des oiseaux comme les pingouins, qui ne volent pas mais nagent, ou les autruches, qui ne nagent ni ne volent.",{"type":28,"tag":37,"props":3715,"children":3716},{},[3717],{"type":34,"value":3718},"Voici une implémentation pour un pingouin, qui enfreint clairement l'ISP :",{"type":28,"tag":252,"props":3720,"children":3722},{"className":254,"code":3721,"language":256,"meta":7,"style":7},"public class Penguin implements Bird {\n    @Override\n    public void fly() {\n        // Pingouin ne peut pas voler, on laisse la méthode vide\n    }\n\n    @Override\n    public void swim() {\n        System.out.println(\"Le pingouin nage.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"Le pingouin émet un son.\");\n    }\n}\n",[3723],{"type":28,"tag":229,"props":3724,"children":3725},{"__ignoreMap":7},[3726,3754,3765,3788,3796,3803,3810,3821,3844,3880,3887,3894,3905,3928,3964,3971],{"type":28,"tag":262,"props":3727,"children":3728},{"class":264,"line":265},[3729,3733,3737,3742,3746,3750],{"type":28,"tag":262,"props":3730,"children":3731},{"style":269},[3732],{"type":34,"value":272},{"type":28,"tag":262,"props":3734,"children":3735},{"style":269},[3736],{"type":34,"value":277},{"type":28,"tag":262,"props":3738,"children":3739},{"style":280},[3740],{"type":34,"value":3741}," Penguin",{"type":28,"tag":262,"props":3743,"children":3744},{"style":269},[3745],{"type":34,"value":1504},{"type":28,"tag":262,"props":3747,"children":3748},{"style":280},[3749],{"type":34,"value":3625},{"type":28,"tag":262,"props":3751,"children":3752},{"style":286},[3753],{"type":34,"value":289},{"type":28,"tag":262,"props":3755,"children":3756},{"class":264,"line":292},[3757,3761],{"type":28,"tag":262,"props":3758,"children":3759},{"style":1518},[3760],{"type":34,"value":1521},{"type":28,"tag":262,"props":3762,"children":3763},{"style":1524},[3764],{"type":34,"value":1527},{"type":28,"tag":262,"props":3766,"children":3767},{"class":264,"line":318},[3768,3772,3776,3780,3784],{"type":28,"tag":262,"props":3769,"children":3770},{"style":269},[3771],{"type":34,"value":333},{"type":28,"tag":262,"props":3773,"children":3774},{"style":269},[3775],{"type":34,"value":426},{"type":28,"tag":262,"props":3777,"children":3778},{"style":336},[3779],{"type":34,"value":3641},{"type":28,"tag":262,"props":3781,"children":3782},{"style":286},[3783],{"type":34,"value":436},{"type":28,"tag":262,"props":3785,"children":3786},{"style":286},[3787],{"type":34,"value":289},{"type":28,"tag":262,"props":3789,"children":3790},{"class":264,"line":327},[3791],{"type":28,"tag":262,"props":3792,"children":3793},{"style":447},[3794],{"type":34,"value":3795},"        // Pingouin ne peut pas voler, on laisse la méthode vide\n",{"type":28,"tag":262,"props":3797,"children":3798},{"class":264,"line":365},[3799],{"type":28,"tag":262,"props":3800,"children":3801},{"style":286},[3802],{"type":34,"value":405},{"type":28,"tag":262,"props":3804,"children":3805},{"class":264,"line":399},[3806],{"type":28,"tag":262,"props":3807,"children":3808},{"emptyLinePlaceholder":12},[3809],{"type":34,"value":324},{"type":28,"tag":262,"props":3811,"children":3812},{"class":264,"line":408},[3813,3817],{"type":28,"tag":262,"props":3814,"children":3815},{"style":1518},[3816],{"type":34,"value":1521},{"type":28,"tag":262,"props":3818,"children":3819},{"style":1524},[3820],{"type":34,"value":1527},{"type":28,"tag":262,"props":3822,"children":3823},{"class":264,"line":416},[3824,3828,3832,3836,3840],{"type":28,"tag":262,"props":3825,"children":3826},{"style":269},[3827],{"type":34,"value":333},{"type":28,"tag":262,"props":3829,"children":3830},{"style":269},[3831],{"type":34,"value":426},{"type":28,"tag":262,"props":3833,"children":3834},{"style":336},[3835],{"type":34,"value":3657},{"type":28,"tag":262,"props":3837,"children":3838},{"style":286},[3839],{"type":34,"value":436},{"type":28,"tag":262,"props":3841,"children":3842},{"style":286},[3843],{"type":34,"value":289},{"type":28,"tag":262,"props":3845,"children":3846},{"class":264,"line":443},[3847,3851,3855,3859,3863,3867,3871,3876],{"type":28,"tag":262,"props":3848,"children":3849},{"style":307},[3850],{"type":34,"value":459},{"type":28,"tag":262,"props":3852,"children":3853},{"style":286},[3854],{"type":34,"value":377},{"type":28,"tag":262,"props":3856,"children":3857},{"style":307},[3858],{"type":34,"value":468},{"type":28,"tag":262,"props":3860,"children":3861},{"style":286},[3862],{"type":34,"value":377},{"type":28,"tag":262,"props":3864,"children":3865},{"style":336},[3866],{"type":34,"value":477},{"type":28,"tag":262,"props":3868,"children":3869},{"style":286},[3870],{"type":34,"value":343},{"type":28,"tag":262,"props":3872,"children":3873},{"style":484},[3874],{"type":34,"value":3875},"\"Le pingouin nage.\"",{"type":28,"tag":262,"props":3877,"children":3878},{"style":286},[3879],{"type":34,"value":501},{"type":28,"tag":262,"props":3881,"children":3882},{"class":264,"line":453},[3883],{"type":28,"tag":262,"props":3884,"children":3885},{"style":286},[3886],{"type":34,"value":405},{"type":28,"tag":262,"props":3888,"children":3889},{"class":264,"line":504},[3890],{"type":28,"tag":262,"props":3891,"children":3892},{"emptyLinePlaceholder":12},[3893],{"type":34,"value":324},{"type":28,"tag":262,"props":3895,"children":3896},{"class":264,"line":512},[3897,3901],{"type":28,"tag":262,"props":3898,"children":3899},{"style":1518},[3900],{"type":34,"value":1521},{"type":28,"tag":262,"props":3902,"children":3903},{"style":1524},[3904],{"type":34,"value":1527},{"type":28,"tag":262,"props":3906,"children":3907},{"class":264,"line":520},[3908,3912,3916,3920,3924],{"type":28,"tag":262,"props":3909,"children":3910},{"style":269},[3911],{"type":34,"value":333},{"type":28,"tag":262,"props":3913,"children":3914},{"style":269},[3915],{"type":34,"value":426},{"type":28,"tag":262,"props":3917,"children":3918},{"style":336},[3919],{"type":34,"value":3673},{"type":28,"tag":262,"props":3921,"children":3922},{"style":286},[3923],{"type":34,"value":436},{"type":28,"tag":262,"props":3925,"children":3926},{"style":286},[3927],{"type":34,"value":289},{"type":28,"tag":262,"props":3929,"children":3930},{"class":264,"line":558},[3931,3935,3939,3943,3947,3951,3955,3960],{"type":28,"tag":262,"props":3932,"children":3933},{"style":307},[3934],{"type":34,"value":459},{"type":28,"tag":262,"props":3936,"children":3937},{"style":286},[3938],{"type":34,"value":377},{"type":28,"tag":262,"props":3940,"children":3941},{"style":307},[3942],{"type":34,"value":468},{"type":28,"tag":262,"props":3944,"children":3945},{"style":286},[3946],{"type":34,"value":377},{"type":28,"tag":262,"props":3948,"children":3949},{"style":336},[3950],{"type":34,"value":477},{"type":28,"tag":262,"props":3952,"children":3953},{"style":286},[3954],{"type":34,"value":343},{"type":28,"tag":262,"props":3956,"children":3957},{"style":484},[3958],{"type":34,"value":3959},"\"Le pingouin émet un son.\"",{"type":28,"tag":262,"props":3961,"children":3962},{"style":286},[3963],{"type":34,"value":501},{"type":28,"tag":262,"props":3965,"children":3966},{"class":264,"line":567},[3967],{"type":28,"tag":262,"props":3968,"children":3969},{"style":286},[3970],{"type":34,"value":405},{"type":28,"tag":262,"props":3972,"children":3973},{"class":264,"line":612},[3974],{"type":28,"tag":262,"props":3975,"children":3976},{"style":286},[3977],{"type":34,"value":626},{"type":28,"tag":37,"props":3979,"children":3980},{},[3981,3983,3988,3990,3995],{"type":34,"value":3982},"La méthode ",{"type":28,"tag":229,"props":3984,"children":3986},{"className":3985},[],[3987],{"type":34,"value":3695},{"type":34,"value":3989}," est ici inutile, mais nous devons quand même la définir parce que l'interface ",{"type":28,"tag":229,"props":3991,"children":3993},{"className":3992},[],[3994],{"type":34,"value":3589},{"type":34,"value":3996}," l'impose. Cela entraîne du code mort et une mauvaise conception.",{"type":28,"tag":245,"props":3998,"children":4000},{"id":3999},"exemple-avec-isp-appliqué",[4001],{"type":34,"value":4002},"Exemple avec ISP appliqué :",{"type":28,"tag":37,"props":4004,"children":4005},{},[4006,4008,4013],{"type":34,"value":4007},"Pour corriger cela, nous allons séparer l'interface ",{"type":28,"tag":229,"props":4009,"children":4011},{"className":4010},[],[4012],{"type":34,"value":3589},{"type":34,"value":4014}," en plusieurs petites interfaces spécifiques à des capacités d’oiseaux.",{"type":28,"tag":252,"props":4016,"children":4018},{"className":254,"code":4017,"language":256,"meta":7,"style":7},"// Interface pour les oiseaux qui volent\npublic interface FlyingBird {\n    void fly();\n}\n\n// Interface pour les oiseaux qui nagent\npublic interface SwimmingBird {\n    void swim();\n}\n\n// Interface pour les oiseaux qui émettent des sons\npublic interface SoundingBird {\n    void makeSound();\n}\n",[4019],{"type":28,"tag":229,"props":4020,"children":4021},{"__ignoreMap":7},[4022,4030,4050,4065,4072,4079,4087,4107,4122,4129,4136,4144,4164,4179],{"type":28,"tag":262,"props":4023,"children":4024},{"class":264,"line":265},[4025],{"type":28,"tag":262,"props":4026,"children":4027},{"style":447},[4028],{"type":34,"value":4029},"// Interface pour les oiseaux qui volent\n",{"type":28,"tag":262,"props":4031,"children":4032},{"class":264,"line":292},[4033,4037,4041,4046],{"type":28,"tag":262,"props":4034,"children":4035},{"style":269},[4036],{"type":34,"value":272},{"type":28,"tag":262,"props":4038,"children":4039},{"style":269},[4040],{"type":34,"value":1435},{"type":28,"tag":262,"props":4042,"children":4043},{"style":280},[4044],{"type":34,"value":4045}," FlyingBird",{"type":28,"tag":262,"props":4047,"children":4048},{"style":286},[4049],{"type":34,"value":289},{"type":28,"tag":262,"props":4051,"children":4052},{"class":264,"line":318},[4053,4057,4061],{"type":28,"tag":262,"props":4054,"children":4055},{"style":269},[4056],{"type":34,"value":1452},{"type":28,"tag":262,"props":4058,"children":4059},{"style":336},[4060],{"type":34,"value":3641},{"type":28,"tag":262,"props":4062,"children":4063},{"style":286},[4064],{"type":34,"value":1461},{"type":28,"tag":262,"props":4066,"children":4067},{"class":264,"line":327},[4068],{"type":28,"tag":262,"props":4069,"children":4070},{"style":286},[4071],{"type":34,"value":626},{"type":28,"tag":262,"props":4073,"children":4074},{"class":264,"line":365},[4075],{"type":28,"tag":262,"props":4076,"children":4077},{"emptyLinePlaceholder":12},[4078],{"type":34,"value":324},{"type":28,"tag":262,"props":4080,"children":4081},{"class":264,"line":399},[4082],{"type":28,"tag":262,"props":4083,"children":4084},{"style":447},[4085],{"type":34,"value":4086},"// Interface pour les oiseaux qui nagent\n",{"type":28,"tag":262,"props":4088,"children":4089},{"class":264,"line":408},[4090,4094,4098,4103],{"type":28,"tag":262,"props":4091,"children":4092},{"style":269},[4093],{"type":34,"value":272},{"type":28,"tag":262,"props":4095,"children":4096},{"style":269},[4097],{"type":34,"value":1435},{"type":28,"tag":262,"props":4099,"children":4100},{"style":280},[4101],{"type":34,"value":4102}," SwimmingBird",{"type":28,"tag":262,"props":4104,"children":4105},{"style":286},[4106],{"type":34,"value":289},{"type":28,"tag":262,"props":4108,"children":4109},{"class":264,"line":416},[4110,4114,4118],{"type":28,"tag":262,"props":4111,"children":4112},{"style":269},[4113],{"type":34,"value":1452},{"type":28,"tag":262,"props":4115,"children":4116},{"style":336},[4117],{"type":34,"value":3657},{"type":28,"tag":262,"props":4119,"children":4120},{"style":286},[4121],{"type":34,"value":1461},{"type":28,"tag":262,"props":4123,"children":4124},{"class":264,"line":443},[4125],{"type":28,"tag":262,"props":4126,"children":4127},{"style":286},[4128],{"type":34,"value":626},{"type":28,"tag":262,"props":4130,"children":4131},{"class":264,"line":453},[4132],{"type":28,"tag":262,"props":4133,"children":4134},{"emptyLinePlaceholder":12},[4135],{"type":34,"value":324},{"type":28,"tag":262,"props":4137,"children":4138},{"class":264,"line":504},[4139],{"type":28,"tag":262,"props":4140,"children":4141},{"style":447},[4142],{"type":34,"value":4143},"// Interface pour les oiseaux qui émettent des sons\n",{"type":28,"tag":262,"props":4145,"children":4146},{"class":264,"line":512},[4147,4151,4155,4160],{"type":28,"tag":262,"props":4148,"children":4149},{"style":269},[4150],{"type":34,"value":272},{"type":28,"tag":262,"props":4152,"children":4153},{"style":269},[4154],{"type":34,"value":1435},{"type":28,"tag":262,"props":4156,"children":4157},{"style":280},[4158],{"type":34,"value":4159}," SoundingBird",{"type":28,"tag":262,"props":4161,"children":4162},{"style":286},[4163],{"type":34,"value":289},{"type":28,"tag":262,"props":4165,"children":4166},{"class":264,"line":520},[4167,4171,4175],{"type":28,"tag":262,"props":4168,"children":4169},{"style":269},[4170],{"type":34,"value":1452},{"type":28,"tag":262,"props":4172,"children":4173},{"style":336},[4174],{"type":34,"value":3673},{"type":28,"tag":262,"props":4176,"children":4177},{"style":286},[4178],{"type":34,"value":1461},{"type":28,"tag":262,"props":4180,"children":4181},{"class":264,"line":558},[4182],{"type":28,"tag":262,"props":4183,"children":4184},{"style":286},[4185],{"type":34,"value":626},{"type":28,"tag":37,"props":4187,"children":4188},{},[4189],{"type":34,"value":4190},"Maintenant, nous pouvons créer des classes qui implémentent uniquement les interfaces dont elles ont besoin :",{"type":28,"tag":252,"props":4192,"children":4194},{"className":254,"code":4193,"language":256,"meta":7,"style":7},"// Le pingouin nage et émet des sons, mais ne vole pas\npublic class Penguin implements SwimmingBird, SoundingBird {\n    @Override\n    public void swim() {\n        System.out.println(\"Le pingouin nage.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"Le pingouin émet un son.\");\n    }\n}\n\n// L'aigle vole et émet des sons\npublic class Eagle implements FlyingBird, SoundingBird {\n    @Override\n    public void fly() {\n        System.out.println(\"L'aigle vole.\");\n    }\n\n    @Override\n    public void makeSound() {\n        System.out.println(\"L'aigle émet un son.\");\n    }\n}\n",[4195],{"type":28,"tag":229,"props":4196,"children":4197},{"__ignoreMap":7},[4198,4206,4241,4252,4275,4310,4317,4324,4335,4358,4393,4400,4407,4414,4422,4458,4469,4492,4528,4535,4542,4553,4576,4612,4619],{"type":28,"tag":262,"props":4199,"children":4200},{"class":264,"line":265},[4201],{"type":28,"tag":262,"props":4202,"children":4203},{"style":447},[4204],{"type":34,"value":4205},"// Le pingouin nage et émet des sons, mais ne vole pas\n",{"type":28,"tag":262,"props":4207,"children":4208},{"class":264,"line":292},[4209,4213,4217,4221,4225,4229,4233,4237],{"type":28,"tag":262,"props":4210,"children":4211},{"style":269},[4212],{"type":34,"value":272},{"type":28,"tag":262,"props":4214,"children":4215},{"style":269},[4216],{"type":34,"value":277},{"type":28,"tag":262,"props":4218,"children":4219},{"style":280},[4220],{"type":34,"value":3741},{"type":28,"tag":262,"props":4222,"children":4223},{"style":269},[4224],{"type":34,"value":1504},{"type":28,"tag":262,"props":4226,"children":4227},{"style":280},[4228],{"type":34,"value":4102},{"type":28,"tag":262,"props":4230,"children":4231},{"style":286},[4232],{"type":34,"value":929},{"type":28,"tag":262,"props":4234,"children":4235},{"style":280},[4236],{"type":34,"value":4159},{"type":28,"tag":262,"props":4238,"children":4239},{"style":286},[4240],{"type":34,"value":289},{"type":28,"tag":262,"props":4242,"children":4243},{"class":264,"line":318},[4244,4248],{"type":28,"tag":262,"props":4245,"children":4246},{"style":1518},[4247],{"type":34,"value":1521},{"type":28,"tag":262,"props":4249,"children":4250},{"style":1524},[4251],{"type":34,"value":1527},{"type":28,"tag":262,"props":4253,"children":4254},{"class":264,"line":327},[4255,4259,4263,4267,4271],{"type":28,"tag":262,"props":4256,"children":4257},{"style":269},[4258],{"type":34,"value":333},{"type":28,"tag":262,"props":4260,"children":4261},{"style":269},[4262],{"type":34,"value":426},{"type":28,"tag":262,"props":4264,"children":4265},{"style":336},[4266],{"type":34,"value":3657},{"type":28,"tag":262,"props":4268,"children":4269},{"style":286},[4270],{"type":34,"value":436},{"type":28,"tag":262,"props":4272,"children":4273},{"style":286},[4274],{"type":34,"value":289},{"type":28,"tag":262,"props":4276,"children":4277},{"class":264,"line":365},[4278,4282,4286,4290,4294,4298,4302,4306],{"type":28,"tag":262,"props":4279,"children":4280},{"style":307},[4281],{"type":34,"value":459},{"type":28,"tag":262,"props":4283,"children":4284},{"style":286},[4285],{"type":34,"value":377},{"type":28,"tag":262,"props":4287,"children":4288},{"style":307},[4289],{"type":34,"value":468},{"type":28,"tag":262,"props":4291,"children":4292},{"style":286},[4293],{"type":34,"value":377},{"type":28,"tag":262,"props":4295,"children":4296},{"style":336},[4297],{"type":34,"value":477},{"type":28,"tag":262,"props":4299,"children":4300},{"style":286},[4301],{"type":34,"value":343},{"type":28,"tag":262,"props":4303,"children":4304},{"style":484},[4305],{"type":34,"value":3875},{"type":28,"tag":262,"props":4307,"children":4308},{"style":286},[4309],{"type":34,"value":501},{"type":28,"tag":262,"props":4311,"children":4312},{"class":264,"line":399},[4313],{"type":28,"tag":262,"props":4314,"children":4315},{"style":286},[4316],{"type":34,"value":405},{"type":28,"tag":262,"props":4318,"children":4319},{"class":264,"line":408},[4320],{"type":28,"tag":262,"props":4321,"children":4322},{"emptyLinePlaceholder":12},[4323],{"type":34,"value":324},{"type":28,"tag":262,"props":4325,"children":4326},{"class":264,"line":416},[4327,4331],{"type":28,"tag":262,"props":4328,"children":4329},{"style":1518},[4330],{"type":34,"value":1521},{"type":28,"tag":262,"props":4332,"children":4333},{"style":1524},[4334],{"type":34,"value":1527},{"type":28,"tag":262,"props":4336,"children":4337},{"class":264,"line":443},[4338,4342,4346,4350,4354],{"type":28,"tag":262,"props":4339,"children":4340},{"style":269},[4341],{"type":34,"value":333},{"type":28,"tag":262,"props":4343,"children":4344},{"style":269},[4345],{"type":34,"value":426},{"type":28,"tag":262,"props":4347,"children":4348},{"style":336},[4349],{"type":34,"value":3673},{"type":28,"tag":262,"props":4351,"children":4352},{"style":286},[4353],{"type":34,"value":436},{"type":28,"tag":262,"props":4355,"children":4356},{"style":286},[4357],{"type":34,"value":289},{"type":28,"tag":262,"props":4359,"children":4360},{"class":264,"line":453},[4361,4365,4369,4373,4377,4381,4385,4389],{"type":28,"tag":262,"props":4362,"children":4363},{"style":307},[4364],{"type":34,"value":459},{"type":28,"tag":262,"props":4366,"children":4367},{"style":286},[4368],{"type":34,"value":377},{"type":28,"tag":262,"props":4370,"children":4371},{"style":307},[4372],{"type":34,"value":468},{"type":28,"tag":262,"props":4374,"children":4375},{"style":286},[4376],{"type":34,"value":377},{"type":28,"tag":262,"props":4378,"children":4379},{"style":336},[4380],{"type":34,"value":477},{"type":28,"tag":262,"props":4382,"children":4383},{"style":286},[4384],{"type":34,"value":343},{"type":28,"tag":262,"props":4386,"children":4387},{"style":484},[4388],{"type":34,"value":3959},{"type":28,"tag":262,"props":4390,"children":4391},{"style":286},[4392],{"type":34,"value":501},{"type":28,"tag":262,"props":4394,"children":4395},{"class":264,"line":504},[4396],{"type":28,"tag":262,"props":4397,"children":4398},{"style":286},[4399],{"type":34,"value":405},{"type":28,"tag":262,"props":4401,"children":4402},{"class":264,"line":512},[4403],{"type":28,"tag":262,"props":4404,"children":4405},{"style":286},[4406],{"type":34,"value":626},{"type":28,"tag":262,"props":4408,"children":4409},{"class":264,"line":520},[4410],{"type":28,"tag":262,"props":4411,"children":4412},{"emptyLinePlaceholder":12},[4413],{"type":34,"value":324},{"type":28,"tag":262,"props":4415,"children":4416},{"class":264,"line":558},[4417],{"type":28,"tag":262,"props":4418,"children":4419},{"style":447},[4420],{"type":34,"value":4421},"// L'aigle vole et émet des sons\n",{"type":28,"tag":262,"props":4423,"children":4424},{"class":264,"line":567},[4425,4429,4433,4438,4442,4446,4450,4454],{"type":28,"tag":262,"props":4426,"children":4427},{"style":269},[4428],{"type":34,"value":272},{"type":28,"tag":262,"props":4430,"children":4431},{"style":269},[4432],{"type":34,"value":277},{"type":28,"tag":262,"props":4434,"children":4435},{"style":280},[4436],{"type":34,"value":4437}," Eagle",{"type":28,"tag":262,"props":4439,"children":4440},{"style":269},[4441],{"type":34,"value":1504},{"type":28,"tag":262,"props":4443,"children":4444},{"style":280},[4445],{"type":34,"value":4045},{"type":28,"tag":262,"props":4447,"children":4448},{"style":286},[4449],{"type":34,"value":929},{"type":28,"tag":262,"props":4451,"children":4452},{"style":280},[4453],{"type":34,"value":4159},{"type":28,"tag":262,"props":4455,"children":4456},{"style":286},[4457],{"type":34,"value":289},{"type":28,"tag":262,"props":4459,"children":4460},{"class":264,"line":612},[4461,4465],{"type":28,"tag":262,"props":4462,"children":4463},{"style":1518},[4464],{"type":34,"value":1521},{"type":28,"tag":262,"props":4466,"children":4467},{"style":1524},[4468],{"type":34,"value":1527},{"type":28,"tag":262,"props":4470,"children":4471},{"class":264,"line":620},[4472,4476,4480,4484,4488],{"type":28,"tag":262,"props":4473,"children":4474},{"style":269},[4475],{"type":34,"value":333},{"type":28,"tag":262,"props":4477,"children":4478},{"style":269},[4479],{"type":34,"value":426},{"type":28,"tag":262,"props":4481,"children":4482},{"style":336},[4483],{"type":34,"value":3641},{"type":28,"tag":262,"props":4485,"children":4486},{"style":286},[4487],{"type":34,"value":436},{"type":28,"tag":262,"props":4489,"children":4490},{"style":286},[4491],{"type":34,"value":289},{"type":28,"tag":262,"props":4493,"children":4494},{"class":264,"line":991},[4495,4499,4503,4507,4511,4515,4519,4524],{"type":28,"tag":262,"props":4496,"children":4497},{"style":307},[4498],{"type":34,"value":459},{"type":28,"tag":262,"props":4500,"children":4501},{"style":286},[4502],{"type":34,"value":377},{"type":28,"tag":262,"props":4504,"children":4505},{"style":307},[4506],{"type":34,"value":468},{"type":28,"tag":262,"props":4508,"children":4509},{"style":286},[4510],{"type":34,"value":377},{"type":28,"tag":262,"props":4512,"children":4513},{"style":336},[4514],{"type":34,"value":477},{"type":28,"tag":262,"props":4516,"children":4517},{"style":286},[4518],{"type":34,"value":343},{"type":28,"tag":262,"props":4520,"children":4521},{"style":484},[4522],{"type":34,"value":4523},"\"L'aigle vole.\"",{"type":28,"tag":262,"props":4525,"children":4526},{"style":286},[4527],{"type":34,"value":501},{"type":28,"tag":262,"props":4529,"children":4530},{"class":264,"line":999},[4531],{"type":28,"tag":262,"props":4532,"children":4533},{"style":286},[4534],{"type":34,"value":405},{"type":28,"tag":262,"props":4536,"children":4537},{"class":264,"line":1721},[4538],{"type":28,"tag":262,"props":4539,"children":4540},{"emptyLinePlaceholder":12},[4541],{"type":34,"value":324},{"type":28,"tag":262,"props":4543,"children":4544},{"class":264,"line":1729},[4545,4549],{"type":28,"tag":262,"props":4546,"children":4547},{"style":1518},[4548],{"type":34,"value":1521},{"type":28,"tag":262,"props":4550,"children":4551},{"style":1524},[4552],{"type":34,"value":1527},{"type":28,"tag":262,"props":4554,"children":4555},{"class":264,"line":1737},[4556,4560,4564,4568,4572],{"type":28,"tag":262,"props":4557,"children":4558},{"style":269},[4559],{"type":34,"value":333},{"type":28,"tag":262,"props":4561,"children":4562},{"style":269},[4563],{"type":34,"value":426},{"type":28,"tag":262,"props":4565,"children":4566},{"style":336},[4567],{"type":34,"value":3673},{"type":28,"tag":262,"props":4569,"children":4570},{"style":286},[4571],{"type":34,"value":436},{"type":28,"tag":262,"props":4573,"children":4574},{"style":286},[4575],{"type":34,"value":289},{"type":28,"tag":262,"props":4577,"children":4578},{"class":264,"line":1746},[4579,4583,4587,4591,4595,4599,4603,4608],{"type":28,"tag":262,"props":4580,"children":4581},{"style":307},[4582],{"type":34,"value":459},{"type":28,"tag":262,"props":4584,"children":4585},{"style":286},[4586],{"type":34,"value":377},{"type":28,"tag":262,"props":4588,"children":4589},{"style":307},[4590],{"type":34,"value":468},{"type":28,"tag":262,"props":4592,"children":4593},{"style":286},[4594],{"type":34,"value":377},{"type":28,"tag":262,"props":4596,"children":4597},{"style":336},[4598],{"type":34,"value":477},{"type":28,"tag":262,"props":4600,"children":4601},{"style":286},[4602],{"type":34,"value":343},{"type":28,"tag":262,"props":4604,"children":4605},{"style":484},[4606],{"type":34,"value":4607},"\"L'aigle émet un son.\"",{"type":28,"tag":262,"props":4609,"children":4610},{"style":286},[4611],{"type":34,"value":501},{"type":28,"tag":262,"props":4613,"children":4614},{"class":264,"line":1766},[4615],{"type":28,"tag":262,"props":4616,"children":4617},{"style":286},[4618],{"type":34,"value":405},{"type":28,"tag":262,"props":4620,"children":4621},{"class":264,"line":1804},[4622],{"type":28,"tag":262,"props":4623,"children":4624},{"style":286},[4625],{"type":34,"value":626},{"type":28,"tag":183,"props":4627,"children":4628},{},[],{"type":28,"tag":1009,"props":4630,"children":4631},{"type":1011},[4632],{"type":28,"tag":37,"props":4633,"children":4634},{},[4635,4640],{"type":28,"tag":198,"props":4636,"children":4637},{},[4638],{"type":34,"value":4639},"Divisez vos interfaces selon les besoins réels",{"type":34,"value":4641},". Ne regroupez pas des méthodes non liées dans une même interface. Cela rendra vos classes plus légères et plus faciles à tester.",{"type":28,"tag":29,"props":4643,"children":4645},{"id":4644},"_5-principe-dinversion-des-dépendances-dependency-inversion-principle-dip",[4646],{"type":34,"value":4647},"5. Principe d'Inversion des Dépendances (Dependency Inversion Principle - DIP)",{"type":28,"tag":37,"props":4649,"children":4650},{},[4651],{"type":34,"value":4652},"Le principe d'inversion des dépendances stipule que les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Tous deux doivent dépendre d'abstractions. En d'autres termes, plutôt que de lier directement des classes concrètes, il est préférable de dépendre d'interfaces ou de classes abstraites.",{"type":28,"tag":206,"props":4654,"children":4656},{"id":4655},"pourquoi-cest-important-4",[4657],{"type":34,"value":211},{"type":28,"tag":37,"props":4659,"children":4660},{},[4661],{"type":34,"value":4662},"Lorsque des modules de haut niveau dépendent directement de modules de bas niveau, cela crée un fort couplage entre les composants du système. Cela rend le code rigide, difficile à modifier ou à tester. En introduisant des abstractions, on peut rendre le code plus flexible et facilitant le changement des implémentations de bas niveau sans impacter le reste du système.",{"type":28,"tag":206,"props":4664,"children":4666},{"id":4665},"exemple-concret-en-java-4",[4667],{"type":34,"value":222},{"type":28,"tag":37,"props":4669,"children":4670},{},[4671,4672,4678],{"type":34,"value":2369},{"type":28,"tag":229,"props":4673,"children":4675},{"className":4674},[],[4676],{"type":34,"value":4677},"NotificationService",{"type":34,"value":4679}," qui envoie des notifications par email. Si cette classe dépend directement d'une implémentation concrète d'email, nous brisons le DIP.",{"type":28,"tag":245,"props":4681,"children":4683},{"id":4682},"exemple-sans-dip",[4684],{"type":34,"value":4685},"Exemple sans DIP :",{"type":28,"tag":37,"props":4687,"children":4688},{},[4689,4691,4697],{"type":34,"value":4690},"Voici une implémentation où le service de notification dépend directement de la classe ",{"type":28,"tag":229,"props":4692,"children":4694},{"className":4693},[],[4695],{"type":34,"value":4696},"EmailService",{"type":34,"value":1851},{"type":28,"tag":252,"props":4699,"children":4701},{"className":254,"code":4700,"language":256,"meta":7,"style":7},"public class EmailService {\n    public void sendEmail(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\npublic class NotificationService {\n    private EmailService emailService;\n\n    public NotificationService() {\n        this.emailService = new EmailService();\n    }\n\n    public void sendNotification(String message) {\n        emailService.sendEmail(message);\n    }\n}\n",[4702],{"type":28,"tag":229,"props":4703,"children":4704},{"__ignoreMap":7},[4705,4725,4762,4806,4813,4820,4827,4847,4867,4874,4893,4925,4932,4939,4975,5005,5012],{"type":28,"tag":262,"props":4706,"children":4707},{"class":264,"line":265},[4708,4712,4716,4721],{"type":28,"tag":262,"props":4709,"children":4710},{"style":269},[4711],{"type":34,"value":272},{"type":28,"tag":262,"props":4713,"children":4714},{"style":269},[4715],{"type":34,"value":277},{"type":28,"tag":262,"props":4717,"children":4718},{"style":280},[4719],{"type":34,"value":4720}," EmailService",{"type":28,"tag":262,"props":4722,"children":4723},{"style":286},[4724],{"type":34,"value":289},{"type":28,"tag":262,"props":4726,"children":4727},{"class":264,"line":292},[4728,4732,4736,4741,4745,4749,4754,4758],{"type":28,"tag":262,"props":4729,"children":4730},{"style":269},[4731],{"type":34,"value":333},{"type":28,"tag":262,"props":4733,"children":4734},{"style":269},[4735],{"type":34,"value":426},{"type":28,"tag":262,"props":4737,"children":4738},{"style":336},[4739],{"type":34,"value":4740}," sendEmail",{"type":28,"tag":262,"props":4742,"children":4743},{"style":286},[4744],{"type":34,"value":343},{"type":28,"tag":262,"props":4746,"children":4747},{"style":301},[4748],{"type":34,"value":348},{"type":28,"tag":262,"props":4750,"children":4751},{"style":351},[4752],{"type":34,"value":4753}," message",{"type":28,"tag":262,"props":4755,"children":4756},{"style":286},[4757],{"type":34,"value":358},{"type":28,"tag":262,"props":4759,"children":4760},{"style":286},[4761],{"type":34,"value":289},{"type":28,"tag":262,"props":4763,"children":4764},{"class":264,"line":318},[4765,4769,4773,4777,4781,4785,4789,4794,4798,4802],{"type":28,"tag":262,"props":4766,"children":4767},{"style":307},[4768],{"type":34,"value":459},{"type":28,"tag":262,"props":4770,"children":4771},{"style":286},[4772],{"type":34,"value":377},{"type":28,"tag":262,"props":4774,"children":4775},{"style":307},[4776],{"type":34,"value":468},{"type":28,"tag":262,"props":4778,"children":4779},{"style":286},[4780],{"type":34,"value":377},{"type":28,"tag":262,"props":4782,"children":4783},{"style":336},[4784],{"type":34,"value":477},{"type":28,"tag":262,"props":4786,"children":4787},{"style":286},[4788],{"type":34,"value":343},{"type":28,"tag":262,"props":4790,"children":4791},{"style":484},[4792],{"type":34,"value":4793},"\"Envoi de l'email : \"",{"type":28,"tag":262,"props":4795,"children":4796},{"style":385},[4797],{"type":34,"value":492},{"type":28,"tag":262,"props":4799,"children":4800},{"style":307},[4801],{"type":34,"value":4753},{"type":28,"tag":262,"props":4803,"children":4804},{"style":286},[4805],{"type":34,"value":501},{"type":28,"tag":262,"props":4807,"children":4808},{"class":264,"line":327},[4809],{"type":28,"tag":262,"props":4810,"children":4811},{"style":286},[4812],{"type":34,"value":405},{"type":28,"tag":262,"props":4814,"children":4815},{"class":264,"line":365},[4816],{"type":28,"tag":262,"props":4817,"children":4818},{"style":286},[4819],{"type":34,"value":626},{"type":28,"tag":262,"props":4821,"children":4822},{"class":264,"line":399},[4823],{"type":28,"tag":262,"props":4824,"children":4825},{"emptyLinePlaceholder":12},[4826],{"type":34,"value":324},{"type":28,"tag":262,"props":4828,"children":4829},{"class":264,"line":408},[4830,4834,4838,4843],{"type":28,"tag":262,"props":4831,"children":4832},{"style":269},[4833],{"type":34,"value":272},{"type":28,"tag":262,"props":4835,"children":4836},{"style":269},[4837],{"type":34,"value":277},{"type":28,"tag":262,"props":4839,"children":4840},{"style":280},[4841],{"type":34,"value":4842}," NotificationService",{"type":28,"tag":262,"props":4844,"children":4845},{"style":286},[4846],{"type":34,"value":289},{"type":28,"tag":262,"props":4848,"children":4849},{"class":264,"line":416},[4850,4854,4858,4863],{"type":28,"tag":262,"props":4851,"children":4852},{"style":269},[4853],{"type":34,"value":298},{"type":28,"tag":262,"props":4855,"children":4856},{"style":301},[4857],{"type":34,"value":4720},{"type":28,"tag":262,"props":4859,"children":4860},{"style":307},[4861],{"type":34,"value":4862}," emailService",{"type":28,"tag":262,"props":4864,"children":4865},{"style":286},[4866],{"type":34,"value":315},{"type":28,"tag":262,"props":4868,"children":4869},{"class":264,"line":443},[4870],{"type":28,"tag":262,"props":4871,"children":4872},{"emptyLinePlaceholder":12},[4873],{"type":34,"value":324},{"type":28,"tag":262,"props":4875,"children":4876},{"class":264,"line":453},[4877,4881,4885,4889],{"type":28,"tag":262,"props":4878,"children":4879},{"style":269},[4880],{"type":34,"value":333},{"type":28,"tag":262,"props":4882,"children":4883},{"style":336},[4884],{"type":34,"value":4842},{"type":28,"tag":262,"props":4886,"children":4887},{"style":286},[4888],{"type":34,"value":436},{"type":28,"tag":262,"props":4890,"children":4891},{"style":286},[4892],{"type":34,"value":289},{"type":28,"tag":262,"props":4894,"children":4895},{"class":264,"line":504},[4896,4900,4904,4909,4913,4917,4921],{"type":28,"tag":262,"props":4897,"children":4898},{"style":369},[4899],{"type":34,"value":372},{"type":28,"tag":262,"props":4901,"children":4902},{"style":286},[4903],{"type":34,"value":377},{"type":28,"tag":262,"props":4905,"children":4906},{"style":307},[4907],{"type":34,"value":4908},"emailService ",{"type":28,"tag":262,"props":4910,"children":4911},{"style":385},[4912],{"type":34,"value":388},{"type":28,"tag":262,"props":4914,"children":4915},{"style":269},[4916],{"type":34,"value":2085},{"type":28,"tag":262,"props":4918,"children":4919},{"style":336},[4920],{"type":34,"value":4720},{"type":28,"tag":262,"props":4922,"children":4923},{"style":286},[4924],{"type":34,"value":1461},{"type":28,"tag":262,"props":4926,"children":4927},{"class":264,"line":512},[4928],{"type":28,"tag":262,"props":4929,"children":4930},{"style":286},[4931],{"type":34,"value":405},{"type":28,"tag":262,"props":4933,"children":4934},{"class":264,"line":520},[4935],{"type":28,"tag":262,"props":4936,"children":4937},{"emptyLinePlaceholder":12},[4938],{"type":34,"value":324},{"type":28,"tag":262,"props":4940,"children":4941},{"class":264,"line":558},[4942,4946,4950,4955,4959,4963,4967,4971],{"type":28,"tag":262,"props":4943,"children":4944},{"style":269},[4945],{"type":34,"value":333},{"type":28,"tag":262,"props":4947,"children":4948},{"style":269},[4949],{"type":34,"value":426},{"type":28,"tag":262,"props":4951,"children":4952},{"style":336},[4953],{"type":34,"value":4954}," sendNotification",{"type":28,"tag":262,"props":4956,"children":4957},{"style":286},[4958],{"type":34,"value":343},{"type":28,"tag":262,"props":4960,"children":4961},{"style":301},[4962],{"type":34,"value":348},{"type":28,"tag":262,"props":4964,"children":4965},{"style":351},[4966],{"type":34,"value":4753},{"type":28,"tag":262,"props":4968,"children":4969},{"style":286},[4970],{"type":34,"value":358},{"type":28,"tag":262,"props":4972,"children":4973},{"style":286},[4974],{"type":34,"value":289},{"type":28,"tag":262,"props":4976,"children":4977},{"class":264,"line":567},[4978,4983,4987,4992,4996,5001],{"type":28,"tag":262,"props":4979,"children":4980},{"style":307},[4981],{"type":34,"value":4982},"        emailService",{"type":28,"tag":262,"props":4984,"children":4985},{"style":286},[4986],{"type":34,"value":377},{"type":28,"tag":262,"props":4988,"children":4989},{"style":336},[4990],{"type":34,"value":4991},"sendEmail",{"type":28,"tag":262,"props":4993,"children":4994},{"style":286},[4995],{"type":34,"value":343},{"type":28,"tag":262,"props":4997,"children":4998},{"style":307},[4999],{"type":34,"value":5000},"message",{"type":28,"tag":262,"props":5002,"children":5003},{"style":286},[5004],{"type":34,"value":501},{"type":28,"tag":262,"props":5006,"children":5007},{"class":264,"line":612},[5008],{"type":28,"tag":262,"props":5009,"children":5010},{"style":286},[5011],{"type":34,"value":405},{"type":28,"tag":262,"props":5013,"children":5014},{"class":264,"line":620},[5015],{"type":28,"tag":262,"props":5016,"children":5017},{"style":286},[5018],{"type":34,"value":626},{"type":28,"tag":37,"props":5020,"children":5021},{},[5022,5024,5029,5031,5036,5038,5043],{"type":34,"value":5023},"Dans cet exemple, ",{"type":28,"tag":229,"props":5025,"children":5027},{"className":5026},[],[5028],{"type":34,"value":4677},{"type":34,"value":5030}," est étroitement couplé à ",{"type":28,"tag":229,"props":5032,"children":5034},{"className":5033},[],[5035],{"type":34,"value":4696},{"type":34,"value":5037},". Si nous voulions envoyer une notification par SMS au lieu d’un email, nous devrions modifier la classe ",{"type":28,"tag":229,"props":5039,"children":5041},{"className":5040},[],[5042],{"type":34,"value":4677},{"type":34,"value":5044},", ce qui va à l'encontre du principe DIP.",{"type":28,"tag":245,"props":5046,"children":5048},{"id":5047},"exemple-avec-dip-appliqué",[5049],{"type":34,"value":5050},"Exemple avec DIP appliqué :",{"type":28,"tag":37,"props":5052,"children":5053},{},[5054,5056,5062],{"type":34,"value":5055},"Pour respecter le principe d'inversion des dépendances, nous allons introduire une abstraction sous forme d'une interface ",{"type":28,"tag":229,"props":5057,"children":5059},{"className":5058},[],[5060],{"type":34,"value":5061},"NotificationSender",{"type":34,"value":5063}," que toutes les implémentations concrètes (Email, SMS, etc.) respecteront.",{"type":28,"tag":252,"props":5065,"children":5067},{"className":254,"code":5066,"language":256,"meta":7,"style":7},"// Interface pour les services d'envoi de notifications\npublic interface NotificationSender {\n    void send(String message);\n}\n\n// Implémentation pour l'email\npublic class EmailSender implements NotificationSender {\n    @Override\n    public void send(String message) {\n        System.out.println(\"Envoi de l'email : \" + message);\n    }\n}\n\n// Implémentation pour SMS\npublic class SMSSender implements NotificationSender {\n    @Override\n    public void send(String message) {\n        System.out.println(\"Envoi du SMS : \" + message);\n    }\n}\n\n// Service de notification utilisant l'interface NotificationSender\npublic class NotificationService {\n    private NotificationSender sender;\n\n    // Injection de dépendance via le constructeur\n    public NotificationService(NotificationSender sender) {\n        this.sender = sender;\n    }\n\n    public void sendNotification(String message) {\n        sender.send(message);\n    }\n}\n",[5068],{"type":28,"tag":229,"props":5069,"children":5070},{"__ignoreMap":7},[5071,5079,5099,5127,5134,5141,5149,5177,5188,5223,5266,5273,5280,5287,5295,5323,5334,5369,5413,5420,5427,5434,5442,5461,5481,5488,5496,5527,5555,5562,5569,5604,5633,5641],{"type":28,"tag":262,"props":5072,"children":5073},{"class":264,"line":265},[5074],{"type":28,"tag":262,"props":5075,"children":5076},{"style":447},[5077],{"type":34,"value":5078},"// Interface pour les services d'envoi de notifications\n",{"type":28,"tag":262,"props":5080,"children":5081},{"class":264,"line":292},[5082,5086,5090,5095],{"type":28,"tag":262,"props":5083,"children":5084},{"style":269},[5085],{"type":34,"value":272},{"type":28,"tag":262,"props":5087,"children":5088},{"style":269},[5089],{"type":34,"value":1435},{"type":28,"tag":262,"props":5091,"children":5092},{"style":280},[5093],{"type":34,"value":5094}," NotificationSender",{"type":28,"tag":262,"props":5096,"children":5097},{"style":286},[5098],{"type":34,"value":289},{"type":28,"tag":262,"props":5100,"children":5101},{"class":264,"line":318},[5102,5106,5111,5115,5119,5123],{"type":28,"tag":262,"props":5103,"children":5104},{"style":269},[5105],{"type":34,"value":1452},{"type":28,"tag":262,"props":5107,"children":5108},{"style":336},[5109],{"type":34,"value":5110}," send",{"type":28,"tag":262,"props":5112,"children":5113},{"style":286},[5114],{"type":34,"value":343},{"type":28,"tag":262,"props":5116,"children":5117},{"style":301},[5118],{"type":34,"value":348},{"type":28,"tag":262,"props":5120,"children":5121},{"style":351},[5122],{"type":34,"value":4753},{"type":28,"tag":262,"props":5124,"children":5125},{"style":286},[5126],{"type":34,"value":501},{"type":28,"tag":262,"props":5128,"children":5129},{"class":264,"line":327},[5130],{"type":28,"tag":262,"props":5131,"children":5132},{"style":286},[5133],{"type":34,"value":626},{"type":28,"tag":262,"props":5135,"children":5136},{"class":264,"line":365},[5137],{"type":28,"tag":262,"props":5138,"children":5139},{"emptyLinePlaceholder":12},[5140],{"type":34,"value":324},{"type":28,"tag":262,"props":5142,"children":5143},{"class":264,"line":399},[5144],{"type":28,"tag":262,"props":5145,"children":5146},{"style":447},[5147],{"type":34,"value":5148},"// Implémentation pour l'email\n",{"type":28,"tag":262,"props":5150,"children":5151},{"class":264,"line":408},[5152,5156,5160,5165,5169,5173],{"type":28,"tag":262,"props":5153,"children":5154},{"style":269},[5155],{"type":34,"value":272},{"type":28,"tag":262,"props":5157,"children":5158},{"style":269},[5159],{"type":34,"value":277},{"type":28,"tag":262,"props":5161,"children":5162},{"style":280},[5163],{"type":34,"value":5164}," EmailSender",{"type":28,"tag":262,"props":5166,"children":5167},{"style":269},[5168],{"type":34,"value":1504},{"type":28,"tag":262,"props":5170,"children":5171},{"style":280},[5172],{"type":34,"value":5094},{"type":28,"tag":262,"props":5174,"children":5175},{"style":286},[5176],{"type":34,"value":289},{"type":28,"tag":262,"props":5178,"children":5179},{"class":264,"line":416},[5180,5184],{"type":28,"tag":262,"props":5181,"children":5182},{"style":1518},[5183],{"type":34,"value":1521},{"type":28,"tag":262,"props":5185,"children":5186},{"style":1524},[5187],{"type":34,"value":1527},{"type":28,"tag":262,"props":5189,"children":5190},{"class":264,"line":443},[5191,5195,5199,5203,5207,5211,5215,5219],{"type":28,"tag":262,"props":5192,"children":5193},{"style":269},[5194],{"type":34,"value":333},{"type":28,"tag":262,"props":5196,"children":5197},{"style":269},[5198],{"type":34,"value":426},{"type":28,"tag":262,"props":5200,"children":5201},{"style":336},[5202],{"type":34,"value":5110},{"type":28,"tag":262,"props":5204,"children":5205},{"style":286},[5206],{"type":34,"value":343},{"type":28,"tag":262,"props":5208,"children":5209},{"style":301},[5210],{"type":34,"value":348},{"type":28,"tag":262,"props":5212,"children":5213},{"style":351},[5214],{"type":34,"value":4753},{"type":28,"tag":262,"props":5216,"children":5217},{"style":286},[5218],{"type":34,"value":358},{"type":28,"tag":262,"props":5220,"children":5221},{"style":286},[5222],{"type":34,"value":289},{"type":28,"tag":262,"props":5224,"children":5225},{"class":264,"line":453},[5226,5230,5234,5238,5242,5246,5250,5254,5258,5262],{"type":28,"tag":262,"props":5227,"children":5228},{"style":307},[5229],{"type":34,"value":459},{"type":28,"tag":262,"props":5231,"children":5232},{"style":286},[5233],{"type":34,"value":377},{"type":28,"tag":262,"props":5235,"children":5236},{"style":307},[5237],{"type":34,"value":468},{"type":28,"tag":262,"props":5239,"children":5240},{"style":286},[5241],{"type":34,"value":377},{"type":28,"tag":262,"props":5243,"children":5244},{"style":336},[5245],{"type":34,"value":477},{"type":28,"tag":262,"props":5247,"children":5248},{"style":286},[5249],{"type":34,"value":343},{"type":28,"tag":262,"props":5251,"children":5252},{"style":484},[5253],{"type":34,"value":4793},{"type":28,"tag":262,"props":5255,"children":5256},{"style":385},[5257],{"type":34,"value":492},{"type":28,"tag":262,"props":5259,"children":5260},{"style":307},[5261],{"type":34,"value":4753},{"type":28,"tag":262,"props":5263,"children":5264},{"style":286},[5265],{"type":34,"value":501},{"type":28,"tag":262,"props":5267,"children":5268},{"class":264,"line":504},[5269],{"type":28,"tag":262,"props":5270,"children":5271},{"style":286},[5272],{"type":34,"value":405},{"type":28,"tag":262,"props":5274,"children":5275},{"class":264,"line":512},[5276],{"type":28,"tag":262,"props":5277,"children":5278},{"style":286},[5279],{"type":34,"value":626},{"type":28,"tag":262,"props":5281,"children":5282},{"class":264,"line":520},[5283],{"type":28,"tag":262,"props":5284,"children":5285},{"emptyLinePlaceholder":12},[5286],{"type":34,"value":324},{"type":28,"tag":262,"props":5288,"children":5289},{"class":264,"line":558},[5290],{"type":28,"tag":262,"props":5291,"children":5292},{"style":447},[5293],{"type":34,"value":5294},"// Implémentation pour SMS\n",{"type":28,"tag":262,"props":5296,"children":5297},{"class":264,"line":567},[5298,5302,5306,5311,5315,5319],{"type":28,"tag":262,"props":5299,"children":5300},{"style":269},[5301],{"type":34,"value":272},{"type":28,"tag":262,"props":5303,"children":5304},{"style":269},[5305],{"type":34,"value":277},{"type":28,"tag":262,"props":5307,"children":5308},{"style":280},[5309],{"type":34,"value":5310}," SMSSender",{"type":28,"tag":262,"props":5312,"children":5313},{"style":269},[5314],{"type":34,"value":1504},{"type":28,"tag":262,"props":5316,"children":5317},{"style":280},[5318],{"type":34,"value":5094},{"type":28,"tag":262,"props":5320,"children":5321},{"style":286},[5322],{"type":34,"value":289},{"type":28,"tag":262,"props":5324,"children":5325},{"class":264,"line":612},[5326,5330],{"type":28,"tag":262,"props":5327,"children":5328},{"style":1518},[5329],{"type":34,"value":1521},{"type":28,"tag":262,"props":5331,"children":5332},{"style":1524},[5333],{"type":34,"value":1527},{"type":28,"tag":262,"props":5335,"children":5336},{"class":264,"line":620},[5337,5341,5345,5349,5353,5357,5361,5365],{"type":28,"tag":262,"props":5338,"children":5339},{"style":269},[5340],{"type":34,"value":333},{"type":28,"tag":262,"props":5342,"children":5343},{"style":269},[5344],{"type":34,"value":426},{"type":28,"tag":262,"props":5346,"children":5347},{"style":336},[5348],{"type":34,"value":5110},{"type":28,"tag":262,"props":5350,"children":5351},{"style":286},[5352],{"type":34,"value":343},{"type":28,"tag":262,"props":5354,"children":5355},{"style":301},[5356],{"type":34,"value":348},{"type":28,"tag":262,"props":5358,"children":5359},{"style":351},[5360],{"type":34,"value":4753},{"type":28,"tag":262,"props":5362,"children":5363},{"style":286},[5364],{"type":34,"value":358},{"type":28,"tag":262,"props":5366,"children":5367},{"style":286},[5368],{"type":34,"value":289},{"type":28,"tag":262,"props":5370,"children":5371},{"class":264,"line":991},[5372,5376,5380,5384,5388,5392,5396,5401,5405,5409],{"type":28,"tag":262,"props":5373,"children":5374},{"style":307},[5375],{"type":34,"value":459},{"type":28,"tag":262,"props":5377,"children":5378},{"style":286},[5379],{"type":34,"value":377},{"type":28,"tag":262,"props":5381,"children":5382},{"style":307},[5383],{"type":34,"value":468},{"type":28,"tag":262,"props":5385,"children":5386},{"style":286},[5387],{"type":34,"value":377},{"type":28,"tag":262,"props":5389,"children":5390},{"style":336},[5391],{"type":34,"value":477},{"type":28,"tag":262,"props":5393,"children":5394},{"style":286},[5395],{"type":34,"value":343},{"type":28,"tag":262,"props":5397,"children":5398},{"style":484},[5399],{"type":34,"value":5400},"\"Envoi du SMS : \"",{"type":28,"tag":262,"props":5402,"children":5403},{"style":385},[5404],{"type":34,"value":492},{"type":28,"tag":262,"props":5406,"children":5407},{"style":307},[5408],{"type":34,"value":4753},{"type":28,"tag":262,"props":5410,"children":5411},{"style":286},[5412],{"type":34,"value":501},{"type":28,"tag":262,"props":5414,"children":5415},{"class":264,"line":999},[5416],{"type":28,"tag":262,"props":5417,"children":5418},{"style":286},[5419],{"type":34,"value":405},{"type":28,"tag":262,"props":5421,"children":5422},{"class":264,"line":1721},[5423],{"type":28,"tag":262,"props":5424,"children":5425},{"style":286},[5426],{"type":34,"value":626},{"type":28,"tag":262,"props":5428,"children":5429},{"class":264,"line":1729},[5430],{"type":28,"tag":262,"props":5431,"children":5432},{"emptyLinePlaceholder":12},[5433],{"type":34,"value":324},{"type":28,"tag":262,"props":5435,"children":5436},{"class":264,"line":1737},[5437],{"type":28,"tag":262,"props":5438,"children":5439},{"style":447},[5440],{"type":34,"value":5441},"// Service de notification utilisant l'interface NotificationSender\n",{"type":28,"tag":262,"props":5443,"children":5444},{"class":264,"line":1746},[5445,5449,5453,5457],{"type":28,"tag":262,"props":5446,"children":5447},{"style":269},[5448],{"type":34,"value":272},{"type":28,"tag":262,"props":5450,"children":5451},{"style":269},[5452],{"type":34,"value":277},{"type":28,"tag":262,"props":5454,"children":5455},{"style":280},[5456],{"type":34,"value":4842},{"type":28,"tag":262,"props":5458,"children":5459},{"style":286},[5460],{"type":34,"value":289},{"type":28,"tag":262,"props":5462,"children":5463},{"class":264,"line":1766},[5464,5468,5472,5477],{"type":28,"tag":262,"props":5465,"children":5466},{"style":269},[5467],{"type":34,"value":298},{"type":28,"tag":262,"props":5469,"children":5470},{"style":301},[5471],{"type":34,"value":5094},{"type":28,"tag":262,"props":5473,"children":5474},{"style":307},[5475],{"type":34,"value":5476}," sender",{"type":28,"tag":262,"props":5478,"children":5479},{"style":286},[5480],{"type":34,"value":315},{"type":28,"tag":262,"props":5482,"children":5483},{"class":264,"line":1804},[5484],{"type":28,"tag":262,"props":5485,"children":5486},{"emptyLinePlaceholder":12},[5487],{"type":34,"value":324},{"type":28,"tag":262,"props":5489,"children":5490},{"class":264,"line":1826},[5491],{"type":28,"tag":262,"props":5492,"children":5493},{"style":447},[5494],{"type":34,"value":5495},"    // Injection de dépendance via le constructeur\n",{"type":28,"tag":262,"props":5497,"children":5498},{"class":264,"line":1834},[5499,5503,5507,5511,5515,5519,5523],{"type":28,"tag":262,"props":5500,"children":5501},{"style":269},[5502],{"type":34,"value":333},{"type":28,"tag":262,"props":5504,"children":5505},{"style":336},[5506],{"type":34,"value":4842},{"type":28,"tag":262,"props":5508,"children":5509},{"style":286},[5510],{"type":34,"value":343},{"type":28,"tag":262,"props":5512,"children":5513},{"style":301},[5514],{"type":34,"value":5061},{"type":28,"tag":262,"props":5516,"children":5517},{"style":351},[5518],{"type":34,"value":5476},{"type":28,"tag":262,"props":5520,"children":5521},{"style":286},[5522],{"type":34,"value":358},{"type":28,"tag":262,"props":5524,"children":5525},{"style":286},[5526],{"type":34,"value":289},{"type":28,"tag":262,"props":5528,"children":5529},{"class":264,"line":2890},[5530,5534,5538,5543,5547,5551],{"type":28,"tag":262,"props":5531,"children":5532},{"style":369},[5533],{"type":34,"value":372},{"type":28,"tag":262,"props":5535,"children":5536},{"style":286},[5537],{"type":34,"value":377},{"type":28,"tag":262,"props":5539,"children":5540},{"style":307},[5541],{"type":34,"value":5542},"sender ",{"type":28,"tag":262,"props":5544,"children":5545},{"style":385},[5546],{"type":34,"value":388},{"type":28,"tag":262,"props":5548,"children":5549},{"style":307},[5550],{"type":34,"value":5476},{"type":28,"tag":262,"props":5552,"children":5553},{"style":286},[5554],{"type":34,"value":315},{"type":28,"tag":262,"props":5556,"children":5557},{"class":264,"line":2926},[5558],{"type":28,"tag":262,"props":5559,"children":5560},{"style":286},[5561],{"type":34,"value":405},{"type":28,"tag":262,"props":5563,"children":5564},{"class":264,"line":2954},[5565],{"type":28,"tag":262,"props":5566,"children":5567},{"emptyLinePlaceholder":12},[5568],{"type":34,"value":324},{"type":28,"tag":262,"props":5570,"children":5571},{"class":264,"line":2986},[5572,5576,5580,5584,5588,5592,5596,5600],{"type":28,"tag":262,"props":5573,"children":5574},{"style":269},[5575],{"type":34,"value":333},{"type":28,"tag":262,"props":5577,"children":5578},{"style":269},[5579],{"type":34,"value":426},{"type":28,"tag":262,"props":5581,"children":5582},{"style":336},[5583],{"type":34,"value":4954},{"type":28,"tag":262,"props":5585,"children":5586},{"style":286},[5587],{"type":34,"value":343},{"type":28,"tag":262,"props":5589,"children":5590},{"style":301},[5591],{"type":34,"value":348},{"type":28,"tag":262,"props":5593,"children":5594},{"style":351},[5595],{"type":34,"value":4753},{"type":28,"tag":262,"props":5597,"children":5598},{"style":286},[5599],{"type":34,"value":358},{"type":28,"tag":262,"props":5601,"children":5602},{"style":286},[5603],{"type":34,"value":289},{"type":28,"tag":262,"props":5605,"children":5606},{"class":264,"line":2994},[5607,5612,5616,5621,5625,5629],{"type":28,"tag":262,"props":5608,"children":5609},{"style":307},[5610],{"type":34,"value":5611},"        sender",{"type":28,"tag":262,"props":5613,"children":5614},{"style":286},[5615],{"type":34,"value":377},{"type":28,"tag":262,"props":5617,"children":5618},{"style":336},[5619],{"type":34,"value":5620},"send",{"type":28,"tag":262,"props":5622,"children":5623},{"style":286},[5624],{"type":34,"value":343},{"type":28,"tag":262,"props":5626,"children":5627},{"style":307},[5628],{"type":34,"value":5000},{"type":28,"tag":262,"props":5630,"children":5631},{"style":286},[5632],{"type":34,"value":501},{"type":28,"tag":262,"props":5634,"children":5636},{"class":264,"line":5635},33,[5637],{"type":28,"tag":262,"props":5638,"children":5639},{"style":286},[5640],{"type":34,"value":405},{"type":28,"tag":262,"props":5642,"children":5644},{"class":264,"line":5643},34,[5645],{"type":28,"tag":262,"props":5646,"children":5647},{"style":286},[5648],{"type":34,"value":626},{"type":28,"tag":37,"props":5650,"children":5651},{},[5652,5654,5659,5661,5667,5669,5674,5676,5681,5683,5689,5691,5696],{"type":34,"value":5653},"Maintenant, ",{"type":28,"tag":229,"props":5655,"children":5657},{"className":5656},[],[5658],{"type":34,"value":4677},{"type":34,"value":5660}," ne dépend plus d'une implémentation concrète comme ",{"type":28,"tag":229,"props":5662,"children":5664},{"className":5663},[],[5665],{"type":34,"value":5666},"EmailSender",{"type":34,"value":5668},", mais d'une abstraction (",{"type":28,"tag":229,"props":5670,"children":5672},{"className":5671},[],[5673],{"type":34,"value":5061},{"type":34,"value":5675},"). Cela permet de changer facilement l'implémentation sans toucher à la classe ",{"type":28,"tag":229,"props":5677,"children":5679},{"className":5678},[],[5680],{"type":34,"value":4677},{"type":34,"value":5682},". Par exemple, pour envoyer des SMS à la place des emails, il suffit de passer un ",{"type":28,"tag":229,"props":5684,"children":5686},{"className":5685},[],[5687],{"type":34,"value":5688},"SMSSender",{"type":34,"value":5690}," au lieu d’un ",{"type":28,"tag":229,"props":5692,"children":5694},{"className":5693},[],[5695],{"type":34,"value":5666},{"type":34,"value":1851},{"type":28,"tag":252,"props":5698,"children":5700},{"className":254,"code":5699,"language":256,"meta":7,"style":7},"public class Main {\n    public static void main(String[] args) {\n        // Envoi de notification par email\n        NotificationSender emailSender = new EmailSender();\n        NotificationService notificationService = new NotificationService(emailSender);\n        notificationService.sendNotification(\"Message par email\");\n\n        // Envoi de notification par SMS\n        NotificationSender smsSender = new SMSSender();\n        NotificationService smsNotificationService\n\n = new NotificationService(smsSender);\n        smsNotificationService.sendNotification(\"Message par SMS\");\n    }\n}\n",[5701],{"type":28,"tag":229,"props":5702,"children":5703},{"__ignoreMap":7},[5704,5723,5766,5774,5803,5841,5871,5878,5886,5914,5926,5933,5962,5991,5998],{"type":28,"tag":262,"props":5705,"children":5706},{"class":264,"line":265},[5707,5711,5715,5719],{"type":28,"tag":262,"props":5708,"children":5709},{"style":269},[5710],{"type":34,"value":272},{"type":28,"tag":262,"props":5712,"children":5713},{"style":269},[5714],{"type":34,"value":277},{"type":28,"tag":262,"props":5716,"children":5717},{"style":280},[5718],{"type":34,"value":2012},{"type":28,"tag":262,"props":5720,"children":5721},{"style":286},[5722],{"type":34,"value":289},{"type":28,"tag":262,"props":5724,"children":5725},{"class":264,"line":292},[5726,5730,5734,5738,5742,5746,5750,5754,5758,5762],{"type":28,"tag":262,"props":5727,"children":5728},{"style":269},[5729],{"type":34,"value":333},{"type":28,"tag":262,"props":5731,"children":5732},{"style":269},[5733],{"type":34,"value":2028},{"type":28,"tag":262,"props":5735,"children":5736},{"style":269},[5737],{"type":34,"value":426},{"type":28,"tag":262,"props":5739,"children":5740},{"style":336},[5741],{"type":34,"value":2037},{"type":28,"tag":262,"props":5743,"children":5744},{"style":286},[5745],{"type":34,"value":343},{"type":28,"tag":262,"props":5747,"children":5748},{"style":269},[5749],{"type":34,"value":348},{"type":28,"tag":262,"props":5751,"children":5752},{"style":286},[5753],{"type":34,"value":2050},{"type":28,"tag":262,"props":5755,"children":5756},{"style":351},[5757],{"type":34,"value":2055},{"type":28,"tag":262,"props":5759,"children":5760},{"style":286},[5761],{"type":34,"value":358},{"type":28,"tag":262,"props":5763,"children":5764},{"style":286},[5765],{"type":34,"value":289},{"type":28,"tag":262,"props":5767,"children":5768},{"class":264,"line":318},[5769],{"type":28,"tag":262,"props":5770,"children":5771},{"style":447},[5772],{"type":34,"value":5773},"        // Envoi de notification par email\n",{"type":28,"tag":262,"props":5775,"children":5776},{"class":264,"line":327},[5777,5782,5787,5791,5795,5799],{"type":28,"tag":262,"props":5778,"children":5779},{"style":301},[5780],{"type":34,"value":5781},"        NotificationSender",{"type":28,"tag":262,"props":5783,"children":5784},{"style":307},[5785],{"type":34,"value":5786}," emailSender ",{"type":28,"tag":262,"props":5788,"children":5789},{"style":385},[5790],{"type":34,"value":388},{"type":28,"tag":262,"props":5792,"children":5793},{"style":269},[5794],{"type":34,"value":2085},{"type":28,"tag":262,"props":5796,"children":5797},{"style":336},[5798],{"type":34,"value":5164},{"type":28,"tag":262,"props":5800,"children":5801},{"style":286},[5802],{"type":34,"value":1461},{"type":28,"tag":262,"props":5804,"children":5805},{"class":264,"line":365},[5806,5811,5816,5820,5824,5828,5832,5837],{"type":28,"tag":262,"props":5807,"children":5808},{"style":301},[5809],{"type":34,"value":5810},"        NotificationService",{"type":28,"tag":262,"props":5812,"children":5813},{"style":307},[5814],{"type":34,"value":5815}," notificationService ",{"type":28,"tag":262,"props":5817,"children":5818},{"style":385},[5819],{"type":34,"value":388},{"type":28,"tag":262,"props":5821,"children":5822},{"style":269},[5823],{"type":34,"value":2085},{"type":28,"tag":262,"props":5825,"children":5826},{"style":336},[5827],{"type":34,"value":4842},{"type":28,"tag":262,"props":5829,"children":5830},{"style":286},[5831],{"type":34,"value":343},{"type":28,"tag":262,"props":5833,"children":5834},{"style":307},[5835],{"type":34,"value":5836},"emailSender",{"type":28,"tag":262,"props":5838,"children":5839},{"style":286},[5840],{"type":34,"value":501},{"type":28,"tag":262,"props":5842,"children":5843},{"class":264,"line":399},[5844,5849,5853,5858,5862,5867],{"type":28,"tag":262,"props":5845,"children":5846},{"style":307},[5847],{"type":34,"value":5848},"        notificationService",{"type":28,"tag":262,"props":5850,"children":5851},{"style":286},[5852],{"type":34,"value":377},{"type":28,"tag":262,"props":5854,"children":5855},{"style":336},[5856],{"type":34,"value":5857},"sendNotification",{"type":28,"tag":262,"props":5859,"children":5860},{"style":286},[5861],{"type":34,"value":343},{"type":28,"tag":262,"props":5863,"children":5864},{"style":484},[5865],{"type":34,"value":5866},"\"Message par email\"",{"type":28,"tag":262,"props":5868,"children":5869},{"style":286},[5870],{"type":34,"value":501},{"type":28,"tag":262,"props":5872,"children":5873},{"class":264,"line":408},[5874],{"type":28,"tag":262,"props":5875,"children":5876},{"emptyLinePlaceholder":12},[5877],{"type":34,"value":324},{"type":28,"tag":262,"props":5879,"children":5880},{"class":264,"line":416},[5881],{"type":28,"tag":262,"props":5882,"children":5883},{"style":447},[5884],{"type":34,"value":5885},"        // Envoi de notification par SMS\n",{"type":28,"tag":262,"props":5887,"children":5888},{"class":264,"line":443},[5889,5893,5898,5902,5906,5910],{"type":28,"tag":262,"props":5890,"children":5891},{"style":301},[5892],{"type":34,"value":5781},{"type":28,"tag":262,"props":5894,"children":5895},{"style":307},[5896],{"type":34,"value":5897}," smsSender ",{"type":28,"tag":262,"props":5899,"children":5900},{"style":385},[5901],{"type":34,"value":388},{"type":28,"tag":262,"props":5903,"children":5904},{"style":269},[5905],{"type":34,"value":2085},{"type":28,"tag":262,"props":5907,"children":5908},{"style":336},[5909],{"type":34,"value":5310},{"type":28,"tag":262,"props":5911,"children":5912},{"style":286},[5913],{"type":34,"value":1461},{"type":28,"tag":262,"props":5915,"children":5916},{"class":264,"line":453},[5917,5921],{"type":28,"tag":262,"props":5918,"children":5919},{"style":301},[5920],{"type":34,"value":5810},{"type":28,"tag":262,"props":5922,"children":5923},{"style":307},[5924],{"type":34,"value":5925}," smsNotificationService\n",{"type":28,"tag":262,"props":5927,"children":5928},{"class":264,"line":504},[5929],{"type":28,"tag":262,"props":5930,"children":5931},{"emptyLinePlaceholder":12},[5932],{"type":34,"value":324},{"type":28,"tag":262,"props":5934,"children":5935},{"class":264,"line":512},[5936,5941,5945,5949,5953,5958],{"type":28,"tag":262,"props":5937,"children":5938},{"style":385},[5939],{"type":34,"value":5940}," =",{"type":28,"tag":262,"props":5942,"children":5943},{"style":269},[5944],{"type":34,"value":2085},{"type":28,"tag":262,"props":5946,"children":5947},{"style":336},[5948],{"type":34,"value":4842},{"type":28,"tag":262,"props":5950,"children":5951},{"style":286},[5952],{"type":34,"value":343},{"type":28,"tag":262,"props":5954,"children":5955},{"style":307},[5956],{"type":34,"value":5957},"smsSender",{"type":28,"tag":262,"props":5959,"children":5960},{"style":286},[5961],{"type":34,"value":501},{"type":28,"tag":262,"props":5963,"children":5964},{"class":264,"line":520},[5965,5970,5974,5978,5982,5987],{"type":28,"tag":262,"props":5966,"children":5967},{"style":307},[5968],{"type":34,"value":5969},"        smsNotificationService",{"type":28,"tag":262,"props":5971,"children":5972},{"style":286},[5973],{"type":34,"value":377},{"type":28,"tag":262,"props":5975,"children":5976},{"style":336},[5977],{"type":34,"value":5857},{"type":28,"tag":262,"props":5979,"children":5980},{"style":286},[5981],{"type":34,"value":343},{"type":28,"tag":262,"props":5983,"children":5984},{"style":484},[5985],{"type":34,"value":5986},"\"Message par SMS\"",{"type":28,"tag":262,"props":5988,"children":5989},{"style":286},[5990],{"type":34,"value":501},{"type":28,"tag":262,"props":5992,"children":5993},{"class":264,"line":558},[5994],{"type":28,"tag":262,"props":5995,"children":5996},{"style":286},[5997],{"type":34,"value":405},{"type":28,"tag":262,"props":5999,"children":6000},{"class":264,"line":567},[6001],{"type":28,"tag":262,"props":6002,"children":6003},{"style":286},[6004],{"type":34,"value":626},{"type":28,"tag":183,"props":6006,"children":6007},{},[],{"type":28,"tag":1009,"props":6009,"children":6010},{"type":1011},[6011],{"type":28,"tag":37,"props":6012,"children":6013},{},[6014,6019],{"type":28,"tag":198,"props":6015,"children":6016},{},[6017],{"type":34,"value":6018},"Injectez vos dépendances",{"type":34,"value":6020}," via des interfaces ou des classes abstraites plutôt que d'utiliser des classes concrètes. Cela rendra vos modules de haut niveau plus flexibles et plus faciles à modifier à l'avenir.",{"type":28,"tag":29,"props":6022,"children":6024},{"id":6023},"_6-exemples-concrets-de-chaque-principe-en-java",[6025],{"type":34,"value":6026},"6. Exemples concrets de chaque principe en Java",{"type":28,"tag":78,"props":6028,"children":6029},{},[6030,6054,6071,6102,6141],{"type":28,"tag":57,"props":6031,"children":6032},{},[6033,6038,6039],{"type":28,"tag":198,"props":6034,"children":6035},{},[6036],{"type":34,"value":6037},"Single Responsibility Principle (SRP)",{"type":34,"value":1851},{"type":28,"tag":53,"props":6040,"children":6041},{},[6042],{"type":28,"tag":57,"props":6043,"children":6044},{},[6045,6047,6052],{"type":34,"value":6046},"Exemple : Une classe ",{"type":28,"tag":229,"props":6048,"children":6050},{"className":6049},[],[6051],{"type":34,"value":234},{"type":34,"value":6053}," qui génère des rapports ne doit pas aussi gérer l'enregistrement des fichiers PDF. Divisez ces responsabilités en deux classes distinctes.",{"type":28,"tag":57,"props":6055,"children":6056},{},[6057,6062,6063],{"type":28,"tag":198,"props":6058,"children":6059},{},[6060],{"type":34,"value":6061},"Open/Closed Principle (OCP)",{"type":34,"value":1851},{"type":28,"tag":53,"props":6064,"children":6065},{},[6066],{"type":28,"tag":57,"props":6067,"children":6068},{},[6069],{"type":34,"value":6070},"Exemple : Une classe de traitement de paiements qui supporte plusieurs méthodes de paiement (carte bancaire, PayPal, e-wallet) doit être extensible via de nouvelles implémentations de méthodes de paiement sans modifier la classe de base.",{"type":28,"tag":57,"props":6072,"children":6073},{},[6074,6079,6080],{"type":28,"tag":198,"props":6075,"children":6076},{},[6077],{"type":34,"value":6078},"Liskov Substitution Principle (LSP)",{"type":34,"value":1851},{"type":28,"tag":53,"props":6081,"children":6082},{},[6083],{"type":28,"tag":57,"props":6084,"children":6085},{},[6086,6088,6093,6095,6100],{"type":34,"value":6087},"Exemple : Évitez d'utiliser l'héritage entre une classe ",{"type":28,"tag":229,"props":6089,"children":6091},{"className":6090},[],[6092],{"type":34,"value":2375},{"type":34,"value":6094}," et une classe ",{"type":28,"tag":229,"props":6096,"children":6098},{"className":6097},[],[6099],{"type":34,"value":2383},{"type":34,"value":6101}," si leurs comportements sont fondamentalement différents (comme les changements indépendants de largeur et de hauteur).",{"type":28,"tag":57,"props":6103,"children":6104},{},[6105,6110,6111],{"type":28,"tag":198,"props":6106,"children":6107},{},[6108],{"type":34,"value":6109},"Interface Segregation Principle (ISP)",{"type":34,"value":1851},{"type":28,"tag":53,"props":6112,"children":6113},{},[6114],{"type":28,"tag":57,"props":6115,"children":6116},{},[6117,6119,6125,6126,6132,6134,6139],{"type":34,"value":6118},"Exemple : Créez des interfaces spécifiques (",{"type":28,"tag":229,"props":6120,"children":6122},{"className":6121},[],[6123],{"type":34,"value":6124},"FlyingBird",{"type":34,"value":3697},{"type":28,"tag":229,"props":6127,"children":6129},{"className":6128},[],[6130],{"type":34,"value":6131},"SwimmingBird",{"type":34,"value":6133},", etc.) au lieu d'une seule interface générale ",{"type":28,"tag":229,"props":6135,"children":6137},{"className":6136},[],[6138],{"type":34,"value":3589},{"type":34,"value":6140}," qui oblige toutes les classes à implémenter des méthodes non pertinentes.",{"type":28,"tag":57,"props":6142,"children":6143},{},[6144,6149,6150],{"type":28,"tag":198,"props":6145,"children":6146},{},[6147],{"type":34,"value":6148},"Dependency Inversion Principle (DIP)",{"type":34,"value":1851},{"type":28,"tag":53,"props":6151,"children":6152},{},[6153],{"type":28,"tag":57,"props":6154,"children":6155},{},[6156,6158,6163,6165,6170],{"type":34,"value":6157},"Exemple : Au lieu de dépendre directement d'une classe ",{"type":28,"tag":229,"props":6159,"children":6161},{"className":6160},[],[6162],{"type":34,"value":4696},{"type":34,"value":6164},", utilisez une interface ",{"type":28,"tag":229,"props":6166,"children":6168},{"className":6167},[],[6169],{"type":34,"value":5061},{"type":34,"value":6171}," pour injecter des services d'envoi de notifications par email, SMS, etc.",{"type":28,"tag":183,"props":6173,"children":6174},{},[],{"type":28,"tag":29,"props":6176,"children":6178},{"id":6177},"_7-faq-sur-les-principes-solid-en-java",[6179],{"type":34,"value":6180},"7. FAQ sur les principes SOLID en Java",{"type":28,"tag":6182,"props":6183,"children":6184},"details",{},[6185,6191],{"type":28,"tag":6186,"props":6187,"children":6188},"summary",{},[6189],{"type":34,"value":6190},"Pourquoi appliquer les principes SOLID en Java ?",{"type":28,"tag":37,"props":6192,"children":6193},{},[6194],{"type":34,"value":6195},"Les principes SOLID permettent d’écrire un code plus propre, plus modulaire et plus maintenable. Ils réduisent les risques de bugs lors des modifications et facilitent l’ajout de nouvelles fonctionnalités sans impacter le code existant.",{"type":28,"tag":6182,"props":6197,"children":6198},{},[6199,6204],{"type":28,"tag":6186,"props":6200,"children":6201},{},[6202],{"type":34,"value":6203},"Est-ce que les principes SOLID sont applicables à tous les projets Java ?",{"type":28,"tag":37,"props":6205,"children":6206},{},[6207],{"type":34,"value":6208},"Oui, que vous travailliez sur de petits projets ou de grands systèmes, les principes SOLID sont bénéfiques pour maintenir la qualité du code. Cependant, je vous recommande de ne pas les appliquer à l’excès : comme toujours, utilisez le bon outil pour le bon problème.",{"type":28,"tag":6182,"props":6210,"children":6211},{},[6212,6217],{"type":28,"tag":6186,"props":6213,"children":6214},{},[6215],{"type":34,"value":6216},"Quel est le principe SOLID le plus important ?",{"type":28,"tag":37,"props":6218,"children":6219},{},[6220],{"type":34,"value":6221},"Tous les principes sont importants, mais si vous débutez, le SRP (principe de responsabilité unique) et le OCP (principe ouvert/fermé) sont souvent les plus critiques pour améliorer la maintenabilité de votre code.",{"type":28,"tag":6182,"props":6223,"children":6224},{},[6225,6230],{"type":28,"tag":6186,"props":6226,"children":6227},{},[6228],{"type":34,"value":6229},"Comment appliquer SOLID dans un projet existant ?",{"type":28,"tag":37,"props":6231,"children":6232},{},[6233],{"type":34,"value":6234},"Appliquez progressivement les principes en identifiant les endroits où le code est fortement couplé ou difficile à maintenir. Refactorisez au fur et à mesure, en créant des abstractions et en séparant les responsabilités lorsque nécessaire.",{"type":28,"tag":183,"props":6236,"children":6237},{},[],{"type":28,"tag":1024,"props":6239,"children":6244},{"cta":6240,"href":6241,"title":6242,"type":6243},"Accéder à l'assessment gratuit →","/mes-ressources","Ressource gratuite : Votre équipe livre-t-elle aussi vite qu'elle le pourrait ?","resource",[6245],{"type":28,"tag":37,"props":6246,"children":6247},{},[6248],{"type":34,"value":6249},"30 questions, 5 dimensions, score sur 100. Mesurez la maturité engineering de votre équipe et identifiez les 3 chantiers qui débloquent immédiatement votre vélocité.",{"type":28,"tag":6251,"props":6252,"children":6253},"style",{},[6254],{"type":34,"value":6255},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":292,"depth":292,"links":6257},[6258,6259,6263,6267,6271,6275,6279,6280],{"id":31,"depth":292,"text":35},{"id":188,"depth":292,"text":191,"children":6260},[6261,6262],{"id":208,"depth":318,"text":211},{"id":219,"depth":318,"text":222},{"id":1038,"depth":292,"text":1041,"children":6264},[6265,6266],{"id":1063,"depth":318,"text":211},{"id":1073,"depth":318,"text":222},{"id":2341,"depth":292,"text":2344,"children":6268},[6269,6270],{"id":2352,"depth":318,"text":211},{"id":2362,"depth":318,"text":222},{"id":3555,"depth":292,"text":3558,"children":6272},[6273,6274],{"id":3566,"depth":318,"text":211},{"id":3576,"depth":318,"text":222},{"id":4644,"depth":292,"text":4647,"children":6276},[6277,6278],{"id":4655,"depth":318,"text":211},{"id":4665,"depth":318,"text":222},{"id":6023,"depth":292,"text":6026},{"id":6177,"depth":292,"text":6180},"markdown","content:fr:architecture-craft:principes-solid-java-exemples.md","content","fr/architecture-craft/principes-solid-java-exemples.md","fr/architecture-craft/principes-solid-java-exemples","md",1775679826477]