{"id":534,"date":"2026-08-14T08:16:11","date_gmt":"2026-08-14T08:16:11","guid":{"rendered":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/"},"modified":"2026-09-03T15:28:09","modified_gmt":"2026-09-03T15:28:09","slug":"1106-2","status":"publish","type":"post","link":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/","title":{"rendered":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>En g\u00e9nie logiciel orient\u00e9 objet, le <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/uml-class-diagram-tutorial\/\">diagramme de classes<\/a>est l&#8217;artefact le plus r\u00e9pandu mais souvent mal utilis\u00e9. Souvent r\u00e9duit \u00e0 un simple sch\u00e9ma de base de donn\u00e9es en notation UML ou trait\u00e9 comme une correspondance directe 1:1 de la structure du code, un v\u00e9ritable diagramme de classes est une sp\u00e9cification rigoureuse de <strong>la structure statique, les contrats de type et les relations s\u00e9mantiques<\/strong>. C&#8217;est le plan d&#8217;architecture qui comble le foss\u00e9 entre les concepts du domaine m\u00e9tier et la conception logicielle ex\u00e9cutable.<\/p>\n<p>Malgr\u00e9 la domination des m\u00e9thodologies agiles et du d\u00e9veloppement pilot\u00e9 par les tests, le <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/what-is-class-diagram\/\">diagramme de classes<\/a>reste la r\u00e9f\u00e9rence absolue pour d\u00e9finir les contrats d&#8217;API, valider les mod\u00e8les de domaine avec les parties prenantes et assurer l&#8217;int\u00e9grit\u00e9 structurelle avant le d\u00e9but de l&#8217;impl\u00e9mentation. Cependant, produire un diagramme de classe de niveau professionnel n\u00e9cessite plus que de dessiner des bo\u00eetes et des fl\u00e8ches. Il exige un respect strict des niveaux d&#8217;abstraction (conceptuel, logique, physique), une compr\u00e9hension pr\u00e9cise de la s\u00e9mantique des relations (association vs agr\u00e9gation vs composition) et une application disciplin\u00e9e des principes SOLID pour pr\u00e9venir la d\u00e9gradation structurelle.<\/p>\n<p id=\"LTosBzR\"><img loading=\"lazy\" alt=\"Diagramme montrant comment les diagrammes de classes font le pont entre les concepts m\u00e9tier et le code gr\u00e2ce aux niveaux d'abstraction et \u00e0 la s\u00e9mantique des relations.\" class=\"alignnone size-full wp-image-1107\" decoding=\"async\" height=\"572\" loading=\"lazy\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-300x168.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-768x429.png 768w\" width=\"1024\"\/><\/p>\n<p>Ce guide fournit une r\u00e9f\u00e9rence compl\u00e8te pour le vocabulaire des diagrammes de classes, la hi\u00e9rarchie d&#8217;abstraction, les r\u00e8gles de relation et les invariants de qualit\u00e9. Que vous mod\u00e9lisiez un domaine complexe de gestion de commandes ou conceviez un contrat d&#8217;API de microservice, les sections suivantes \u00e9tablissent le cadre pr\u00e9cis n\u00e9cessaire pour cr\u00e9er des diagrammes de classes analytiquement solides, architecturalement robustes et pratiquement utiles. Tous les exemples sont rendus en utilisant PlantUML, fournissant des sp\u00e9cifications ex\u00e9cutables qui peuvent \u00eatre versionn\u00e9es et int\u00e9gr\u00e9es dans des pipelines CI\/CD.<\/p>\n<hr\/>\n<h2>1. Les blocs de construction fondamentaux : le vocabulaire du \u00ab diagramme de classes \u00bb<\/h2>\n<p>Avant d&#8217;aborder les niveaux d&#8217;abstraction, vous devez ma\u00eetriser les \u00e9l\u00e9ments fondamentaux. Ceux-ci sont coh\u00e9rents \u00e0 travers les normes UML 2.x mais diff\u00e8rent consid\u00e9rablement en <em>intention s\u00e9mantique<\/em>selon le niveau d&#8217;abstraction.<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\">\u00c9l\u00e9ment<\/th>\n<th align=\"left\">Objectif<\/th>\n<th align=\"left\">Notation<\/th>\n<th align=\"left\">Contrainte cl\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Classe<\/strong><\/td>\n<td align=\"left\">Un plan pour les objets ; encapsule l&#8217;\u00e9tat (attributs) et le comportement (m\u00e9thodes)<\/td>\n<td align=\"left\">Rectangle avec 3 compartiments (Nom, Attributs, Op\u00e9rations)<\/td>\n<td align=\"left\">Le nom doit \u00eatre un nom singulier ; les attributs doivent \u00eatre typ\u00e9s ; la visibilit\u00e9 marqu\u00e9e (+, -, #)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Interface<\/strong><\/td>\n<td align=\"left\">Un contrat sp\u00e9cifiant le comportement sans impl\u00e9mentation<\/td>\n<td align=\"left\">Rectangle avec le st\u00e9r\u00e9otype \u00abinterface\u00bb ou la notation en forme de sucette<\/td>\n<td align=\"left\">Aucun attribut (sauf les constantes) ; toutes les op\u00e9rations sont publiques et abstraites<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>\u00c9num\u00e9ration<\/strong><\/td>\n<td align=\"left\">Un ensemble fixe de valeurs nomm\u00e9es<\/td>\n<td align=\"left\">Rectangle avec le st\u00e9r\u00e9otype \u00ab\u00e9num\u00e9ration\u00bb<\/td>\n<td align=\"left\">Valeurs list\u00e9es dans le compartiment de nom ; aucune op\u00e9ration g\u00e9n\u00e9ralement<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Association<\/strong><\/td>\n<td align=\"left\">Relation structurelle indiquant que des objets sont connect\u00e9s<\/td>\n<td align=\"left\">Ligne pleine avec multiplicit\u00e9 optionnelle<\/td>\n<td align=\"left\">Doit avoir des noms de r\u00f4le aux deux extr\u00e9mit\u00e9s pour plus de clart\u00e9 ; multiplicit\u00e9 obligatoire<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Agr\u00e9gation<\/strong><\/td>\n<td align=\"left\">Relation faible \u00ab poss\u00e8de-un \u00bb ; la partie peut exister ind\u00e9pendamment<\/td>\n<td align=\"left\">Ligne pleine avec losange vide \u00e0 l&#8217;extr\u00e9mit\u00e9 du tout<\/td>\n<td align=\"left\">Cycle de vie de la partie ind\u00e9pendant du tout ; propri\u00e9t\u00e9 partag\u00e9e possible<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Composition<\/strong><\/td>\n<td align=\"left\">Relation forte \u00ab poss\u00e8de-un \u00bb ; la partie ne peut pas exister sans le tout<\/td>\n<td align=\"left\">Ligne pleine avec losange plein \u00e0 l&#8217;extr\u00e9mit\u00e9 du tout<\/td>\n<td align=\"left\">Cycle de vie de la partie li\u00e9 au tout ; propri\u00e9t\u00e9 exclusive<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>H\u00e9ritage<\/strong><\/td>\n<td align=\"left\">Relation \u00ab est-un \u00bb ; la sous-classe h\u00e9rite de la structure\/comportement<\/td>\n<td align=\"left\">Ligne pleine avec triangle vide pointant vers le parent<\/td>\n<td align=\"left\">Le principe de substitution de Liskov doit \u00eatre respect\u00e9 ; \u00e9viter les hi\u00e9rarchies profondes<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>R\u00e9alisation<\/strong><\/td>\n<td align=\"left\">Relation \u00ab impl\u00e9mente \u00bb ; la classe remplit le contrat de l&#8217;interface<\/td>\n<td align=\"left\">Ligne pointill\u00e9e avec triangle vide pointant vers l&#8217;interface<\/td>\n<td align=\"left\">La classe doit impl\u00e9menter toutes les op\u00e9rations de l&#8217;interface<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>D\u00e9pendance<\/strong><\/td>\n<td align=\"left\">Relation \u00ab utilise \u00bb ; couplage temporaire ou faible<\/td>\n<td align=\"left\">Fl\u00e8che ouverte pointill\u00e9e<\/td>\n<td align=\"left\">Minimiser ; indique une cible potentielle de refactoring<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Conventions de d\u00e9nomination (Cruciales pour la clart\u00e9)<\/h3>\n<ul>\n<li>\n<p><strong>Classes :<\/strong>\u00a0Noms singuliers en PascalCase \u2192<code data-backticks=\"1\">Ordre<\/code>,\u00a0<code data-backticks=\"1\">ProfilClient<\/code>,\u00a0<code data-backticks=\"1\">Passerelle de Paiement<\/code>. Jamais au pluriel (<code data-backticks=\"1\">Commandes<\/code>) ou bas\u00e9 sur un verbe (<code data-backticks=\"1\">TraiterCommande<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>Attributs :<\/strong> camelCase + type \u2192 <code data-backticks=\"1\">orderId: UUID<\/code>,\u00a0<code data-backticks=\"1\">createdAt: DateTime<\/code>. Pr\u00e9fixe de visibilit\u00e9 obligatoire : <code data-backticks=\"1\">+<\/code> public, <code data-backticks=\"1\">-<\/code> priv\u00e9, <code data-backticks=\"1\">#<\/code> prot\u00e9g\u00e9.<\/p>\n<\/li>\n<li>\n<p><strong>Op\u00e9rations :<\/strong> camelCase phrase verbale + type de retour \u2192 <code data-backticks=\"1\">+calculerTotal() : Decimal<\/code>,\u00a0<code data-backticks=\"1\">-validerAdresse() : Boolean<\/code>. Param\u00e8tres typ\u00e9s : <code data-backticks=\"1\">(quantity: Integer, price: Decimal)<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Relations :<\/strong> Noms de r\u00f4les aux deux extr\u00e9mit\u00e9s \u2192 <code data-backticks=\"1\">Client [1] passe [0..*] Commande<\/code>. Multiplicit\u00e9 toujours sp\u00e9cifi\u00e9e : <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>2. La hi\u00e9rarchie d&#8217;abstraction : Conceptuelle, Logique, Physique<\/h2>\n<p>La dimension la plus critique dans la mod\u00e9lisation des diagrammes de classes est <strong>niveau d&#8217;abstraction<\/strong>. Confondre ces niveaux est la principale source d&#8217;\u00e9chec du mod\u00e8le. Chaque niveau sert des parties prenantes et des objectifs distincts. Ce ne sont pas des \u00e9tapes s\u00e9quentielles \u00e0 abandonner, mais des vues parall\u00e8les maintenues tout au long du cycle de vie.<\/p>\n<h3>2.1 Diagramme de classes conceptuel : La v\u00e9rit\u00e9 du domaine<\/h3>\n<ul>\n<li>\n<p><strong>Focus :<\/strong>Entit\u00e9s m\u00e9tier, relations et r\u00e8gles <em>ind\u00e9pendant de toute technologie ou impl\u00e9mentation<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Ignore d\u00e9lib\u00e9r\u00e9ment :<\/strong>Langages de programmation, bases de donn\u00e9es, frameworks, API, pr\u00e9occupations de performance, formats de s\u00e9rialisation.<\/p>\n<\/li>\n<li>\n<p><strong>Attributs :<\/strong>Propri\u00e9t\u00e9s uniquement significatives sur le plan m\u00e9tier. Aucun ID sauf si pertinent pour le m\u00e9tier (par exemple, <code data-backticks=\"1\">num\u00e9ro de s\u00e9curit\u00e9 sociale<\/code>,\u00a0<code data-backticks=\"1\">ISBN<\/code>). Aucune cl\u00e9 \u00e9trang\u00e8re.<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9thodes :<\/strong> Rarement affich\u00e9. S&#8217;il est pr\u00e9sent, repr\u00e9sente <em>comportements m\u00e9tier<\/em>\u00a0(<code data-backticks=\"1\">calculateDiscount()<\/code>,\u00a0<code data-backticks=\"1\">isEligibleForRenewal()<\/code>), pas des getters\/setters.<\/p>\n<\/li>\n<li>\n<p><strong>Relations :<\/strong> Refl\u00e8te la s\u00e9mantique du monde r\u00e9el. Les multiplicit\u00e9s refl\u00e8tent les r\u00e8gles m\u00e9tier, pas les contraintes de stockage.<\/p>\n<\/li>\n<li>\n<p><strong>Parties prenantes :<\/strong> Experts du domaine, analystes m\u00e9tier, propri\u00e9taires de produit, auditeurs.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilit\u00e9 :<\/strong> \u00c9lev\u00e9e. Change uniquement lorsque la compr\u00e9hension m\u00e9tier \u00e9volue.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemple : Domaine conceptuel de commande<\/h4>\n<p id=\"wgJeAyU\"><img loading=\"lazy\" alt=\"Diagramme de classes conceptuel pour le domaine de Commande montrant les relations entre Client, Commande, Produit et Adresse de livraison.\" class=\"alignnone size-full wp-image-1109\" decoding=\"async\" height=\"874\" loading=\"lazy\" sizes=\"auto, (max-width: 1916px) 100vw, 1916px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png 1916w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-300x137.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1024x467.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-768x350.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1536x701.png 1536w\" width=\"1916\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJDRXCn4BwljEymv9AsA5MvHW8rJOgq8dzAceghkpj9h7hjnJyX1I5nxHs91-2KvzWx3y6JCECaRL8uUMOyyytVPrywBwmFfOBSw1mh7uHg6LkWRHMc55AdoIk_n1AXKb5pzr9NmeeIbDJe7oe4O_tI7DxaIZZNyTxAk-0n8-If_89maIPBMI3aqkOATqg955ouD4aJBxr2w4cn813AoAwCXEwfE5Jmv_iFwCNIjXwcB8KcuMGL2AtUU8dsbE5YB7ILHEtXQve0p8DIGq78RPXISNh1HYGeHPPhFZj5OT4vjfTOtg5rIrdT428vy94ctmwWzwaZU1nQJtX6vuDjD5mV71b6V3cD6jjVvqBbGP7NZV52dPoIoy1eV8YNqaqfQoNk5CQRAsCK2dsKUsnD4UIkB_so9tSVMFymOoLewSTMvlYSv02e4nl6lbnP8PtHMqJdBQ8_miobVpWscA2zPLjtAtLDWJjirA4yR7gBUZKPpR9-VpHafJiQliycW_gHbUkFu_gnbssLVdOxsKgTuN3MP_4PD2uZearlEiDUPz9ZUJov7cIp0OktsNZdtuG-KOVtxw2G5dClZTQec4xMoWNpGZM5aWjD12U5LacwNX0BYm3KQ9JJPCUXnfi6j2XkwLlle75nVdxMUEP06ogcAZdlBUn-rg9dz5cp_vlelzzRcodj6VP5H4lXFEAJ_Czkse3hgjuK4c-9ciU5xVDGNVyF5LlJMDXUlPcBu7b6sX1XOqzWva_Tf4ccLuBxpv_U5BJJ9B8LtiBlNoULbUkEzP9UCjG_uLCGr8wlD_7fyToz5Tf97ZbDlqaOmWCLui7McuKaXpIXtm8eVAx2ccTF4Ij-YqKJr_Kc3npBMo-0gqoJInBff_eB\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml conceptual-order-domain\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\nhide circle\r\nhide methods\r\n\r\ntitle Diagramme de classes conceptuel \u2014 Domaine de commande (vue m\u00e9tier)\r\n\r\nclass Client {\r\n  fullName : String\r\n  email : EmailAddress\r\n  membershipTier : Tier\r\n}\r\n\r\nclass Commande {\r\n  orderDate : Date\r\n  status : OrderStatus\r\n  +calculateTotal() : Money\r\n  +isShippable() : Boolean\r\n}\r\n\r\nclass Produit {\r\n  name : String\r\n  sku : SKU\r\n  unitPrice : Money\r\n}\r\n\r\nclass AdresseLivraison {\r\n  street : String\r\n  city : String\r\n  country : CountryCode\r\n}\r\n\r\nenum OrderStatus {\r\n  BROUILLON\r\n  CONFIRM\u00c9\r\n  EXP\u00c9DI\u00c9\r\n  LIVR\u00c9\r\n  ANNUL\u00c9\r\n}\r\n\r\nenum Tier {\r\n  STANDARD\r\n  PREMIUM\r\n  VIP\r\n}\r\n\r\n' Les liens directionnels corrigent l'alignement de l'angle du triangle\r\nClient \"1\" -right-&gt; \"0..*\" Commande : passe\r\nCommande \"1\" *--down-&gt; \"1..*\" Produit : contient\r\nCommande \"1\" -left-&gt; \"1\" AdresseLivraison : exp\u00e9dieVers\r\nClient \"1\" -down-&gt; \"0..1\" AdresseLivraison : adresseParD\u00e9faut\r\n\r\nnote right of Commande\r\nInvariance m\u00e9tier :\r\nTotal = \u03a3(prixArticle \u00d7 quantit\u00e9)\r\n\r\nLes transitions d'\u00e9tat sont r\u00e9gies \r\npar le flux de travail d'ex\u00e9cution\r\nend note\r\n@enduml\r\n\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJDRXCn4BwljEymv9AsA5MvHW8rJOgq8dzAceghkpj9h7hjnJyX1I5nxHs91-2KvzWx3y6JCECaRL8uUMOyyytVPrywBwmFfOBSw1mh7uHg6LkWRHMc55AdoIk_n1AXKb5pzr9NmeeIbDJe7oe4O_tI7DxaIZZNyTxAk-0n8-If_89maIPBMI3aqkOATqg955ouD4aJBxr2w4cn813AoAwCXEwfE5Jmv_iFwCNIjXwcB8KcuMGL2AtUU8dsbE5YB7ILHEtXQve0p8DIGq78RPXISNh1HYGeHPPhFZj5OT4vjfTOtg5rIrdT428vy94ctmwWzwaZU1nQJtX6vuDjD5mV71b6V3cD6jjVvqBbGP7NZV52dPoIoy1eV8YNqaqfQoNk5CQRAsCK2dsKUsnD4UIkB_so9tSVMFymOoLewSTMvlYSv02e4nl6lbnP8PtHMqJdBQ8_miobVpWscA2zPLjtAtLDWJjirA4yR7gBUZKPpR9-VpHafJiQliycW_gHbUkFu_gnbssLVdOxsKgTuN3MP_4PD2uZearlEiDUPz9ZUJov7cIp0OktsNZdtuG-KOVtxw2G5dClZTQec4xMoWNpGZM5aWjD12U5LacwNX0BYm3KQ9JJPCUXnfi6j2XkwLlle75nVdxMUEP06ogcAZdlBUn-rg9dz5cp_vlelzzRcodj6VP5H4lXFEAJ_Czkse3hgjuK4c-9ciU5xVDGNVyF5LlJMDXUlPcBu7b6sX1XOqzWva_Tf4ccLuBxpv_U5BJJ9B8LtiBlNoULbUkEzP9UCjG_uLCGr8wlD_7fyToz5Tf97ZbDlqaOmWCLui7McuKaXpIXtm8eVAx2ccTF4Ij-YqKJr_Kc3npBMo-0gqoJInBff_eB\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p id=\"QCXQrCz\"><img loading=\"lazy\" alt=\"Diagramme de classes conceptuel pour le domaine de Commande montrant les relations entre Client, Commande et Produit.\" class=\"alignnone size-full wp-image-1111\" decoding=\"async\" height=\"539\" loading=\"lazy\" sizes=\"auto, (max-width: 771px) 100vw, 771px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png 771w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-300x210.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-768x537.png 768w\" width=\"771\"\/><\/p>\n<p><strong>Observations cl\u00e9s :<\/strong><\/p>\n<ul>\n<li>\n<p>Aucun ID, aucune cl\u00e9 \u00e9trang\u00e8re, aucune annotation de persistance.<\/p>\n<\/li>\n<li>\n<p>Les m\u00e9thodes expriment la logique m\u00e9tier, pas l&#8217;acc\u00e8s aux donn\u00e9es.<\/p>\n<\/li>\n<li>\n<p>Les multiplicit\u00e9s refl\u00e8tent les r\u00e8gles m\u00e9tier (<code data-backticks=\"1\">Commande<\/code>\u00a0<em>doit<\/em> contenir au moins un <code data-backticks=\"1\">Produit<\/code>).<\/p>\n<\/li>\n<li>\n<p>Composition (<code data-backticks=\"1\">*--<\/code>) utilis\u00e9e l\u00e0 o\u00f9 la s\u00e9mantique m\u00e9tier l&#8217;exige (les articles ne peuvent pas exister sans commande).<\/p>\n<\/li>\n<li>\n<p>Les \u00e9num\u00e9rations capturent les vocabulaires m\u00e9tier, et non les codes techniques.<\/p>\n<\/li>\n<\/ul>\n<h3>2.2 Diagramme de classes logique : La sp\u00e9cification logicielle<\/h3>\n<ul>\n<li>\n<p><strong>Focus :<\/strong> Conception logicielle ind\u00e9pendante de la plateforme. D\u00e9finit les types, les interfaces et les contrats <em>sans s&#8217;engager sur des technologies sp\u00e9cifiques<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Inclut :<\/strong> Classes abstraites, interfaces, types g\u00e9n\u00e9riques, mod\u00e8les de conception, types de gestion d&#8217;erreurs.<\/p>\n<\/li>\n<li>\n<p><strong>Attributs :<\/strong> Typ\u00e9s avec des types neutres de plateforme (<code data-backticks=\"1\">String<\/code>,\u00a0<code data-backticks=\"1\">Decimal<\/code>,\u00a0<code data-backticks=\"1\">DateTime<\/code>,\u00a0<code data-backticks=\"1\">UUID<\/code>). Inclut les attributs d&#8217;identit\u00e9 (<code data-backticks=\"1\">id<\/code>) et les attributs d\u00e9riv\u00e9s (<code data-backticks=\"1\">\/total<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9thodes :<\/strong> Signatures compl\u00e8tes incluant les param\u00e8tres, les types de retour et les exceptions. Les getters\/setters sont omis sauf s&#8217;ils sont significatifs sur le plan comportemental.<\/p>\n<\/li>\n<li>\n<p><strong>Relations :<\/strong> Multiplicit\u00e9s pr\u00e9cises, fl\u00e8ches de navigabilit\u00e9, noms de r\u00f4les. Les interfaces sont r\u00e9alis\u00e9es explicitement.<\/p>\n<\/li>\n<li>\n<p><strong>Parties prenantes :<\/strong> Architectes, d\u00e9veloppeurs seniors, concepteurs d&#8217;API.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilit\u00e9 :<\/strong> Moyenne. \u00c9volue avec l&#8217;affinement du design mais reste stable face aux choix d&#8217;impl\u00e9mentation.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemple : Conception logique du service de commande<\/h4>\n<p id=\"ClcVxRL\"><img loading=\"lazy\" alt=\"Diagramme de classes logique pour le service de Commande montrant les interfaces, les DTO et les entit\u00e9s du domaine.\" class=\"alignnone size-full wp-image-1113\" decoding=\"async\" height=\"869\" loading=\"lazy\" sizes=\"auto, (max-width: 1917px) 100vw, 1917px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png 1917w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-300x136.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1024x464.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-768x348.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1536x696.png 1536w\" width=\"1917\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLTRjf047v7uWxJz2L_fksh5Q6aq0Saf5GbES3Y7SYazgwpEuwI_aWzH0_Gnt8ERjAJTDPhWo448Naztyn-y-zBpyfnLUIGsoLbAa-iq-WIZ-wHCkpttl0T5WXbhiZqU_uhcL8vLK1E1lcvHB2ExsmNoNBb_HMpetd5ECcicT4tXFVzNh_7n0vXJ6efcdAjngYElkP_g13-_VeDiyXUmxOeb973ySYQ34icQu2CNgzAD5ePhhLo5JnaN5XNu4bW8a7SGiaba-iGKNlbztuFv7UMEHJz6ZhE2ft2Q2iOHSwJ5EhNYMvibiZHWFG6QfN6DzUDLbLgkMZ6YYlVrJm7NyiQGLGGyqTBGl0pE1rp0MhksIcIq3ugZv-CPEsvTVmjQKZXzdOoRjuVqVcGanIcrYmROOnENx68ntAweG8RABgt3tNfQ_S0drWIx0-ua6ILPrk4c7PSIM9yi1DW0uLscJ0M0PsIvujf8nYsjdTKbcIMLrexz46jEKNy7LjMUN0PCofKtbPHvLaL2dyJuEEJVLoLPVuy9f_Pol2nRWwYrPmEfhzrRHDlwQokCjuFzw5ICIyfJAJRbkWQe3B4drtejdr_V3Nd5vvskTlmlszIwX13gMOoJsrvaoooxif2F2w8H_4qiXhR0AoK9W-2ZbMNzcNpRmVbSB7Fg5lDsE8Y-O8omvw7RRolL_L5nya4RKXj79bTnjVRw-nmTz2XXXEQOSE-knakVWm6i2D9mQrNAYSlUTm11eDXCoKfBDT_NOl3qOSZE4qIUGu6fqVRJafbZqcle64OTdMJP5W_j_d1ftAzqeGGvdgh71WF54dk5HVNArZ_0Tc-J0uqTcqscKr1klWUMNJ3pI5yOsN3YA5sbk8QtKb8IEAKYXggQl-TaauCOja7Gek-ZYlkPtyEC_aKK2qKma5jBczsBgm-NA5j8HyH1FalgZeNzqeaNbGNP22uq-zTojAHpz5_\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml logical-order-service\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitre Diagramme de classes logique \u2014 Service de commande (Conception ind\u00e9pendante de la plateforme)\r\n\r\ninterface IOrderService {\r\n    +createOrder(cmd: CreateOrderCommand): OrderId\r\n    +getOrder(id: OrderId): OrderDTO\r\n    +updateStatus(id: OrderId, status: OrderStatus): void\r\n}\r\n\r\nclasse abstraite BaseEntity {\r\n    #id : UUID\r\n    #version : Long\r\n    #createdAt : DateTime\r\n    #updatedAt : DateTime\r\n}\r\n\r\nclasse Order extends BaseEntity {\r\n    -customerId : UUID\r\n    -status : OrderStatus\r\n    -lineItems : List&lt;LineItem&gt;\r\n    -shippingAddress : Address\r\n    \/total : Decimal\r\n    +calculateTotal(): Decimal\r\n    +applyDiscount(discount: Discount): void\r\n}\r\n\r\nclasse LineItem {\r\n    -productId : UUID\r\n    -quantity : Integer\r\n    -unitPrice : Decimal\r\n    +subtotal(): Decimal\r\n}\r\n\r\nclasse Address {\r\n    -street : String\r\n    -city : String\r\n    -country : CountryCode\r\n    -postalCode : String\r\n}\r\n\r\nclasse CreateOrderCommand {\r\n    +customerId : UUID\r\n    +items : List&lt;OrderItemRequest&gt;\r\n    +shippingAddress : Address\r\n}\r\n\r\nclasse OrderDTO {\r\n    +orderId : UUID\r\n    +status : OrderStatus\r\n    +total : Decimal\r\n    +items : List&lt;LineItemDTO&gt;\r\n}\r\n\r\nIOrderService &lt;|.. OrderService : r\u00e9alise\r\nOrderService ..&gt; Order : g\u00e8re\r\nOrder \"1\" *-- \"1..*\" LineItem : contient &gt;\r\nOrder \"1\" --&gt; \"1\" Address : exp\u00e9die vers &gt;\r\nOrder ..&gt; CreateOrderCommand : cr\u00e9\u00e9 \u00e0 partir de\r\nOrder ..&gt; OrderDTO : projet\u00e9 vers\r\n\r\nnote \u00e0 droite de IOrderService\r\n  Limite du contrat :\r\n  Entr\u00e9es : commandes, Sorties : DTO.\r\n  Les objets du domaine ne fuient jamais.\r\nfin note\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLTRjf047v7uWxJz2L_fksh5Q6aq0Saf5GbES3Y7SYazgwpEuwI_aWzH0_Gnt8ERjAJTDPhWo448Naztyn-y-zBpyfnLUIGsoLbAa-iq-WIZ-wHCkpttl0T5WXbhiZqU_uhcL8vLK1E1lcvHB2ExsmNoNBb_HMpetd5ECcicT4tXFVzNh_7n0vXJ6efcdAjngYElkP_g13-_VeDiyXUmxOeb973ySYQ34icQu2CNgzAD5ePhhLo5JnaN5XNu4bW8a7SGiaba-iGKNlbztuFv7UMEHJz6ZhE2ft2Q2iOHSwJ5EhNYMvibiZHWFG6QfN6DzUDLbLgkMZ6YYlVrJm7NyiQGLGGyqTBGl0pE1rp0MhksIcIq3ugZv-CPEsvTVmjQKZXzdOoRjuVqVcGanIcrYmROOnENx68ntAweG8RABgt3tNfQ_S0drWIx0-ua6ILPrk4c7PSIM9yi1DW0uLscJ0M0PsIvujf8nYsjdTKbcIMLrexz46jEKNy7LjMUN0PCofKtbPHvLaL2dyJuEEJVLoLPVuy9f_Pol2nRWwYrPmEfhzrRHDlwQokCjuFzw5ICIyfJAJRbkWQe3B4drtejdr_V3Nd5vvskTlmlszIwX13gMOoJsrvaoooxif2F2w8H_4qiXhR0AoK9W-2ZbMNzcNpRmVbSB7Fg5lDsE8Y-O8omvw7RRolL_L5nya4RKXj79bTnjVRw-nmTz2XXXEQOSE-knakVWm6i2D9mQrNAYSlUTm11eDXCoKfBDT_NOl3qOSZE4qIUGu6fqVRJafbZqcle64OTdMJP5W_j_d1ftAzqeGGvdgh71WF54dk5HVNArZ_0Tc-J0uqTcqscKr1klWUMNJ3pI5yOsN3YA5sbk8QtKb8IEAKYXggQl-TaauCOja7Gek-ZYlkPtyEC_aKK2qKma5jBczsBgm-NA5j8HyH1FalgZeNzqeaNbGNP22uq-zTojAHpz5_\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Observations cl\u00e9s :<\/strong><\/p>\n<ul>\n<li>\n<p>L&#8217;interface d\u00e9finit le contrat de service ; l&#8217;impl\u00e9mentation est cach\u00e9e.<\/p>\n<\/li>\n<li>\n<p>Le motif Commande\/DTO s\u00e9pare les entr\u00e9es\/sorties du mod\u00e8le de domaine.<\/p>\n<\/li>\n<li>\n<p>L&#8217;entit\u00e9 de base fournit l&#8217;identit\u00e9 et la version transversales.<\/p>\n<\/li>\n<li>\n<p>Attribut d\u00e9riv\u00e9 <code data-backticks=\"1\">\/total<\/code> signale une valeur calcul\u00e9e.<\/p>\n<\/li>\n<li>\n<p>Les fl\u00e8ches de navigabilit\u00e9 indiquent la direction de la d\u00e9pendance.<\/p>\n<\/li>\n<li>\n<p>Aucune annotation ORM, aucun type de base de donn\u00e9es, aucune d\u00e9pendance de framework.<\/p>\n<\/li>\n<\/ul>\n<h3>2.3 Diagramme de classes physique : La r\u00e9alit\u00e9 de l&#8217;impl\u00e9mentation<\/h3>\n<ul>\n<li>\n<p><strong>Focus :<\/strong> R\u00e9alisation sp\u00e9cifique \u00e0 la technologie. Inclut les frameworks, les ORM, la s\u00e9rialisation, les pr\u00e9occupations d&#8217;infrastructure.<\/p>\n<\/li>\n<li>\n<p><strong>Inclut :<\/strong> Annotations (<code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">@JsonProperty<\/code>,\u00a0<code data-backticks=\"1\">@Autowired<\/code>), types de collections concr\u00e8tes (<code data-backticks=\"1\">ArrayList<\/code>,\u00a0<code data-backticks=\"1\">HashSet<\/code>), types mapp\u00e9s \u00e0 la base de donn\u00e9es (<code data-backticks=\"1\">VARCHAR(255)<\/code>,\u00a0<code data-backticks=\"1\">BIGINT<\/code>), classes de base du framework.<\/p>\n<\/li>\n<li>\n<p><strong>Attributs :<\/strong> Types sp\u00e9cifiques au framework, marqueurs de chargement diff\u00e9r\u00e9, configurations de cache.<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9thodes :<\/strong> Rappels de cycle de vie (<code data-backticks=\"1\">@PostConstruct<\/code>), points d&#8217;int\u00e9gration du framework, crochets de s\u00e9rialisation.<\/p>\n<\/li>\n<li>\n<p><strong>Relations :<\/strong> Strat\u00e9gies de r\u00e9cup\u00e9ration (<code data-backticks=\"1\">LAZY<\/code>,\u00a0<code data-backticks=\"1\">EAGER<\/code>), r\u00e8gles de cascade, mappages de tables de jointure.<\/p>\n<\/li>\n<li>\n<p><strong>Parties prenantes :<\/strong> D\u00e9veloppeurs, DBA, DevOps, QA.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilit\u00e9 :<\/strong> Faible. Change avec chaque mise \u00e0 niveau ou optimisation technologique.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemple : Impl\u00e9mentation physique JPA\/Spring<\/h4>\n<p id=\"rvEprlH\"><img loading=\"lazy\" alt=\"Diagramme de classes physique JPA\/Spring Boot montrant l'entit\u00e9 Commande avec des annotations et des relations.\" class=\"alignnone size-full wp-image-1114\" decoding=\"async\" height=\"814\" loading=\"lazy\" sizes=\"auto, (max-width: 1726px) 100vw, 1726px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png 1726w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-300x141.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1024x483.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-768x362.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1536x724.png 1536w\" width=\"1726\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bv7uXscN2sn8NOkhO30s8gmQ6mP4gczYORTmpBj_6NcB2bDA-KX-WIzytFuJV8aFRC_x8AXQhc0sPtld3dpdM--OUIHEyoKP7QzzIBcicTS0gxtY-NjrW-u1WNCIYvqk-L_5TfonnMJGWDkBJ3ZS6sQCx7ateyHdLXc2DFOwBdu7TX5kzLkeK09x4RmD20JAC3WYwK_Py2-V_kBtMh2FJ-nYL6AQq95Tm_ZrtFhX4xPjJ7O3Rb6EMnBWmLVIeWqLp3evANx3Y7orEm-FBElxHQZpsYQiD4xqE0uGlAHomoAYPv8s1Nxy65wKm8_KX9XT3cxAPu8CZCwBI4J8pEb8vr96TOVhBZqq2qZuioZKU2c1tblTQQArQFvud7w_bqLG4t0p1CuBtYUFvKnzneMvaUkjv7Yra9olIstsJbdCVSnJs0mditEgHLspVKZABFXSe0ksvKJkZL5K661EU3RMVayhCfIIqWIIAfYri9Q8dkS90vy22f79NpXkFO2D1RFhz4WbuIw5kaDn49nMKoSaPZYJD9s5m4HTVSXVvvkOoZuamWLrwsiYlx_tGpaBGpn6Aq0u_LWDlxvfvAQqPqHkcfbhQ1F8Y5sZ_Ss1rIT-YzYiCuaMOo7MlZNcCyPptcXaAb6I0zNievO3A8SN5wSCn819NXJ1MTQu8CJCR2ZXEVD3ajMp5Pz_hg_XWITudhmvkAYLga3m20Y38VnAFooXiV51lR09qz0R3ADBk0dnMXY4ZXHq8vPG-T61c1ZcMANSt0ROY3eAgYLnqXa1H8Qlb1YfifA9kYBd4wZPzFcv8wKSORcYt2xGvBBu16igQGGnbwWSTiJ4R2Xz0_PKWg_pXKqjbQIuORARlVcgkFZW8ZAaqUnIeYP-aLfZjscfCvIm08jak9zjwpjPd5V4TCiKv2qt8hJBWzsmE0t19ruTcTv_VPjZZhFCmyhOivMGfCdJNQE5zNcjojY9ZmMqSEzgCBeeiBzzioFWXvu2hkWlFZ2pJkN7VQgrwFVVlzLf_Q5AtPeaBhXZ_gbFJOJzdh3_BVsl8Ohlb1BlpzyGTdLNiUFXfni-B7WHkf-_u_XVYiee6nHu4KR1BOqIBGpiwgTwJszz-6UjTHcuqWmmHF2pFTlVxFwLeZNtANFJvw1PYgSfk2G5QnmzyBAwLOEaESdPQZINI886PHbvRN9mcdR09ESqTNfJ2R8ubBwhs1HA5821LBbB5HDWgGX_Vlu1m00\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml physical-order-jpa\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitle Diagram de classes physique \u2014 Entit\u00e9 Commande (JPA\/Spring Boot)\r\n\r\n@Entity\r\n@Table(name=\"orders\")\r\nclass Order {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @Version\r\n    -version : Long\r\n    @Column(nullable=false)\r\n    -customerId : UUID\r\n    @Enumerated(STRING)\r\n    -status : OrderStatus\r\n    @OneToMany(mappedBy=\"order\", cascade=ALL, orphanRemoval=true)\r\n    -lineItems : Set&lt;LineItem&gt;\r\n    @Embedded\r\n    -shippingAddress : Address\r\n    @Transient\r\n    \/total : BigDecimal\r\n    +calculateTotal(): BigDecimal\r\n}\r\n\r\n@Entity\r\n@Table(name=\"line_items\")\r\nclass LineItem {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @ManyToOne(fetch=LAZY)\r\n    @JoinColumn(name=\"order_id\", nullable=false)\r\n    -order : Order\r\n    @Column(nullable=false)\r\n    -productId : UUID\r\n    @Column(nullable=false)\r\n    -quantity : Integer\r\n    @Column(precision=10, scale=2)\r\n    -unitPrice : BigDecimal\r\n}\r\n\r\n@Embeddable\r\nclass Address {\r\n    @Column(length=200)\r\n    -street : String\r\n    @Column(length=100)\r\n    -city : String\r\n    @Enumerated(STRING)\r\n    -country : CountryCode\r\n    @Column(length=20)\r\n    -postalCode : String\r\n}\r\n\r\n@Service\r\n@Transactional\r\nclass OrderServiceImpl implements IOrderService {\r\n    @Autowired\r\n    -orderRepo : OrderRepository\r\n    @Autowired\r\n    -eventPublisher : ApplicationEventPublisher\r\n    +createOrder(cmd: CreateOrderCommand): UUID\r\n    +getOrder(id: UUID): OrderDTO\r\n}\r\n\r\n@Repository\r\ninterface OrderRepository extends JpaRepository&lt;Order, UUID&gt; {\r\n    +findByCustomerId(customerId: UUID): List&lt;Order&gt;\r\n    +findByStatus(status: OrderStatus): Page&lt;Order&gt;\r\n}\r\n\r\nOrder \"1\" *-- \"1..*\" LineItem : mappedBy=\"order\"ncascade=ALLnorphanRemoval=true\r\nOrder \"1\" --&gt; \"1\" Address : @Embedded\r\nOrderServiceImpl ..&gt; OrderRepository : @Autowired\r\nOrderServiceImpl ..&gt; ApplicationEventPublisher : @Autowired\r\nOrderRepository ..|&gt; JpaRepository : extends\r\n\r\nnote bottom of Order\r\n  Notes de performance :\r\n  \u2022 lineItems charg\u00e9s en mode LAZY\r\n  \u2022 total calcul\u00e9 en m\u00e9moire\r\n  \u2022 le champ Version active la verrouillage optimiste\r\nend note\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bv7uXscN2sn8NOkhO30s8gmQ6mP4gczYORTmpBj_6NcB2bDA-KX-WIzytFuJV8aFRC_x8AXQhc0sPtld3dpdM--OUIHEyoKP7QzzIBcicTS0gxtY-NjrW-u1WNCIYvqk-L_5TfonnMJGWDkBJ3ZS6sQCx7ateyHdLXc2DFOwBdu7TX5kzLkeK09x4RmD20JAC3WYwK_Py2-V_kBtMh2FJ-nYL6AQq95Tm_ZrtFhX4xPjJ7O3Rb6EMnBWmLVIeWqLp3evANx3Y7orEm-FBElxHQZpsYQiD4xqE0uGlAHomoAYPv8s1Nxy65wKm8_KX9XT3cxAPu8CZCwBI4J8pEb8vr96TOVhBZqq2qZuioZKU2c1tblTQQArQFvud7w_bqLG4t0p1CuBtYUFvKnzneMvaUkjv7Yra9olIstsJbdCVSnJs0mditEgHLspVKZABFXSe0ksvKJkZL5K661EU3RMVayhCfIIqWIIAfYri9Q8dkS90vy22f79NpXkFO2D1RFhz4WbuIw5kaDn49nMKoSaPZYJD9s5m4HTVSXVvvkOoZuamWLrwsiYlx_tGpaBGpn6Aq0u_LWDlxvfvAQqPqHkcfbhQ1F8Y5sZ_Ss1rIT-YzYiCuaMOo7MlZNcCyPptcXaAb6I0zNievO3A8SN5wSCn819NXJ1MTQu8CJCR2ZXEVD3ajMp5Pz_hg_XWITudhmvkAYLga3m20Y38VnAFooXiV51lR09qz0R3ADBk0dnMXY4ZXHq8vPG-T61c1ZcMANSt0ROY3eAgYLnqXa1H8Qlb1YfifA9kYBd4wZPzFcv8wKSORcYt2xGvBBu16igQGGnbwWSTiJ4R2Xz0_PKWg_pXKqjbQIuORARlVcgkFZW8ZAaqUnIeYP-aLfZjscfCvIm08jak9zjwpjPd5V4TCiKv2qt8hJBWzsmE0t19ruTcTv_VPjZZhFCmyhOivMGfCdJNQE5zNcjojY9ZmMqSEzgCBeeiBzzioFWXvu2hkWlFZ2pJkN7VQgrwFVVlzLf_Q5AtPeaBhXZ_gbFJOJzdh3_BVsl8Ohlb1BlpzyGTdLNiUFXfni-B7WHkf-_u_XVYiee6nHu4KR1BOqIBGpiwgTwJszz-6UjTHcuqWmmHF2pFTlVxFwLeZNtANFJvw1PYgSfk2G5QnmzyBAwLOEaESdPQZINI886PHbvRN9mcdR09ESqTNfJ2R8ubBwhs1HA5821LBbB5HDWgGX_Vlu1m00\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Modifier PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Observations cl\u00e9s :<\/strong><\/p>\n<ul>\n<li>\n<p>Les annotations JPA d\u00e9finissent explicitement la mappage de persistance.<\/p>\n<\/li>\n<li>\n<p>Les strat\u00e9gies de r\u00e9cup\u00e9ration et les r\u00e8gles de cascade sont document\u00e9es sur les relations.<\/p>\n<\/li>\n<li>\n<p>Les st\u00e9r\u00e9otypes Spring (<code data-backticks=\"1\">@Service<\/code>,\u00a0<code data-backticks=\"1\">@Repository<\/code>) marquent les r\u00f4les d&#8217;infrastructure.<\/p>\n<\/li>\n<li>\n<p>Les types concrets (<code data-backticks=\"1\">BigDecimal<\/code>,\u00a0<code data-backticks=\"1\">Set<\/code>,\u00a0<code data-backticks=\"1\">Page<\/code>) remplacent les abstractions.<\/p>\n<\/li>\n<li>\n<p>Le Repository \u00e9tend une interface du framework : le couplage technologique est explicite.<\/p>\n<\/li>\n<li>\n<p>Les d\u00e9cisions critiques pour la performance (chargement diff\u00e9r\u00e9, champs transitoires) sont annot\u00e9es.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>3. S\u00e9mantique des relations : la pr\u00e9cision compte<\/h2>\n<p>L&#8217;utilisation incorrecte des types de relation est l&#8217;erreur structurelle la plus courante. Chacun porte des s\u00e9mantiques sp\u00e9cifiques de cycle de vie, de propri\u00e9t\u00e9 et de cardinalit\u00e9.<\/p>\n<h3>3.1 Matrice de d\u00e9cision<\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Question<\/th>\n<th align=\"left\">Association<\/th>\n<th align=\"left\">Agr\u00e9gation<\/th>\n<th align=\"left\">Composition<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">La partie peut-elle exister sans le tout ?<\/td>\n<td align=\"left\">N\/A<\/td>\n<td align=\"left\">Oui<\/td>\n<td align=\"left\">Non<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">La propri\u00e9t\u00e9 est-elle exclusive ?<\/td>\n<td align=\"left\">Non<\/td>\n<td align=\"left\">Non<\/td>\n<td align=\"left\">Oui<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Le cycle de vie est-il g\u00e9r\u00e9 par l&#8217;ensemble ?<\/td>\n<td align=\"left\">Non<\/td>\n<td align=\"left\">Non<\/td>\n<td align=\"left\">Oui<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Multiplicit\u00e9 typique \u00e0 l&#8217;extr\u00e9mit\u00e9 de la partie<\/td>\n<td align=\"left\">N&#8217;importe laquelle<\/td>\n<td align=\"left\">0..*<\/td>\n<td align=\"left\">1..* (g\u00e9n\u00e9ralement)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Exemple<\/td>\n<td align=\"left\">L&#8217;utilisateur emprunte un livre<\/td>\n<td align=\"left\">Le d\u00e9partement a un professeur<\/td>\n<td align=\"left\">La commande contient un article de ligne<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Cascade de suppression ?<\/td>\n<td align=\"left\">Jamais<\/td>\n<td align=\"left\">Optionnel<\/td>\n<td align=\"left\">Obligatoire<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">R\u00e9f\u00e9rences partag\u00e9es autoris\u00e9es ?<\/td>\n<td align=\"left\">Oui<\/td>\n<td align=\"left\">Oui<\/td>\n<td align=\"left\">Non<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3.2 Erreurs courantes et corrections<\/h3>\n<p>\u274c\u00a0<strong>Utiliser la composition pour des r\u00e9f\u00e9rences partag\u00e9es :<\/strong>\u00a0<code data-backticks=\"1\">Biblioth\u00e8que *-- Livre<\/code> est incorrect si les livres peuvent \u00eatre emprunt\u00e9s\/d\u00e9plac\u00e9s. Utilisez l&#8217;agr\u00e9gation ou l&#8217;association.<br \/>\n\u2705\u00a0<strong>Correction :<\/strong>\u00a0<code data-backticks=\"1\">Biblioth\u00e8que o-- Livre<\/code> (agr\u00e9gation) ou <code data-backticks=\"1\">Biblioth\u00e8que -- Livre<\/code> (association avec un r\u00f4le <code data-backticks=\"1\">d\u00e9tient<\/code>).<\/p>\n<p>\u274c\u00a0<strong>Utiliser l&#8217;agr\u00e9gation lorsque le cycle de vie est li\u00e9 :<\/strong>\u00a0<code data-backticks=\"1\">Commande o-- Ligne de commande<\/code> est incorrect si les lignes de commande n&#8217;ont pas de sens sans commandes.<br \/>\n\u2705\u00a0<strong>Correction :<\/strong>\u00a0<code data-backticks=\"1\">Commande *-- Ligne de commande<\/code> (composition).<\/p>\n<p>\u274c\u00a0<strong>Omission de la multiplicit\u00e9 :<\/strong> Chaque extr\u00e9mit\u00e9 d&#8217;une relation doit sp\u00e9cifier la cardinalit\u00e9. Les hypoth\u00e8ses par d\u00e9faut varient selon l&#8217;outil et entra\u00eenent une ambigu\u00eft\u00e9.<br \/>\n\u2705\u00a0<strong>Correction :<\/strong> Toujours annoter : <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<p>\u274c\u00a0<strong>Navigation bidirectionnelle sans justification :<\/strong> Les associations bidirectionnelles cr\u00e9ent un couplage fort et des cycles de s\u00e9rialisation.<br \/>\n\u2705\u00a0<strong>Correction :<\/strong> Par d\u00e9faut, privil\u00e9gier la navigation unidirectionnelle. Ajouter une navigation inverse uniquement lorsque les requ\u00eates m\u00e9tier l&#8217;exigent. Documenter la justification.<\/p>\n<p>\u274c\u00a0<strong>H\u00e9ritage pour la r\u00e9utilisation de code :<\/strong> Utiliser l&#8217;h\u00e9ritage uniquement pour partager des attributs\/m\u00e9thodes viole le principe LSP et cr\u00e9e des classes de base fragiles.<br \/>\n\u2705\u00a0<strong>Correction :<\/strong> Privil\u00e9gier la composition sur l&#8217;h\u00e9ritage. Extraire le comportement partag\u00e9 dans des strat\u00e9gies\/visiteurs\/services inject\u00e9s via une interface.<\/p>\n<hr\/>\n<h2>4. Mappage des niveaux d&#8217;abstraction au cycle de d\u00e9veloppement<\/h2>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Phase<\/th>\n<th align=\"left\">Diagramme principal<\/th>\n<th align=\"left\">Diagramme secondaire<\/th>\n<th align=\"left\">Activit\u00e9s cl\u00e9s<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>D\u00e9couverte<\/strong><\/td>\n<td align=\"left\">Conceptuel<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Entretiens m\u00e9tier, extraction du langage ubiquitaire, validation des r\u00e8gles m\u00e9tier<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Analyse<\/strong><\/td>\n<td align=\"left\">Conceptuel \u2192 Logique<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Identifier les contextes born\u00e9s, d\u00e9finir les limites des services, extraire les interfaces<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Conception<\/strong><\/td>\n<td align=\"left\">Logique<\/td>\n<td align=\"left\">Conceptuel (r\u00e9f\u00e9rence)<\/td>\n<td align=\"left\">Appliquer des mod\u00e8les de conception, d\u00e9finir des contrats, valider par rapport aux principes SOLID<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Impl\u00e9mentation<\/strong><\/td>\n<td align=\"left\">Physique<\/td>\n<td align=\"left\">Logique (tra\u00e7abilit\u00e9)<\/td>\n<td align=\"left\">G\u00e9n\u00e9rer du code\/sch\u00e9mas, configurer des frameworks, \u00e9crire des tests<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Maintenance<\/strong><\/td>\n<td align=\"left\">Physique \u2194 Logique \u2194 Conceptuel<\/td>\n<td align=\"left\">Tout<\/td>\n<td align=\"left\">Refactoriser avec tra\u00e7abilit\u00e9, mettre \u00e0 jour le mod\u00e8le m\u00e9tier lors des changements de domaine<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>R\u00e8gle critique :<\/strong>Ne sautez jamais le niveau conceptuel. Les \u00e9quipes qui passent directement au niveau logique\/physique produisent des syst\u00e8mes techniquement corrects mais erron\u00e9s sur le plan m\u00e9tier. Le diagramme conceptuel est votre police d&#8217;assurance contre la construction efficace de la mauvaise chose.<\/p>\n<hr\/>\n<h2>5. Invariants de qualit\u00e9 : Les r\u00e8gles non n\u00e9gociables<\/h2>\n<h3>5.1 Int\u00e9grit\u00e9 structurelle<\/h3>\n<ol>\n<li>\n<p><strong>Responsabilit\u00e9 unique :<\/strong>Chaque classe correspond \u00e0 exactement une raison de changement. Si vous devez utiliser \u00ab et \u00bb pour d\u00e9crire son objectif, s\u00e9parez-la.<\/p>\n<\/li>\n<li>\n<p><strong>Conformit\u00e9 de Liskov :<\/strong>Les sous-classes doivent \u00eatre substituables aux classes parentes sans casser le code client. Testez avec des collections polymorphes.<\/p>\n<\/li>\n<li>\n<p><strong>S\u00e9gr\u00e9gation des interfaces :<\/strong>Aucun client ne doit \u00eatre contraint de d\u00e9pendre de m\u00e9thodes inutilis\u00e9es. S\u00e9parez les interfaces lourdes en interfaces coh\u00e9rentes et sp\u00e9cifiques \u00e0 un r\u00f4le.<\/p>\n<\/li>\n<li>\n<p><strong>Inversion des d\u00e9pendances :<\/strong>Les modules de haut niveau d\u00e9pendent d&#8217;abstractions, pas de concr\u00e9tions. Les diagrammes physiques doivent l&#8217;illustrer via des interfaces, et non des classes concr\u00e8tes.<\/p>\n<\/li>\n<li>\n<p><strong>Multiplicit\u00e9 explicite :<\/strong>Chaque extr\u00e9mit\u00e9 d&#8217;association est annot\u00e9e. Aucun d\u00e9faut implicite.<\/p>\n<\/li>\n<li>\n<p><strong>Navigabilit\u00e9 justifi\u00e9e :<\/strong>Unidirectionnel par d\u00e9faut. Bidirectionnel uniquement avec une exigence de requ\u00eate m\u00e9tier document\u00e9e.<\/p>\n<\/li>\n<\/ol>\n<h3>5.2 Discipline d&#8217;abstraction<\/h3>\n<ol start=\"7\">\n<li>\n<p><strong>Puret\u00e9 des niveaux :<\/strong>Aucune technologie dans le conceptuel. Aucun jargon m\u00e9tier dans le physique sans lien vers un glossaire. Le niveau logique reste neutre par rapport \u00e0 la plateforme.<\/p>\n<\/li>\n<li>\n<p><strong>Tra\u00e7abilit\u00e9 maintenue :<\/strong>Chaque \u00e9l\u00e9ment physique remonte \u00e0 un anc\u00eatre logique. Chaque \u00e9l\u00e9ment logique remonte \u00e0 un anc\u00eatre conceptuel. Les lacunes indiquent des exigences manquantes ou du surdimensionnement.<\/p>\n<\/li>\n<li>\n<p><strong>Maintenance parall\u00e8le :<\/strong> Les mises \u00e0 jour se propagent \u00e0 travers les niveaux. Les identifiants de version sont synchronis\u00e9s. Les journaux de modification font r\u00e9f\u00e9rence \u00e0 tous les diagrammes concern\u00e9s.<\/p>\n<\/li>\n<li>\n<p><strong>Alignement des parties prenantes :<\/strong> Le conceptuel est valid\u00e9 par le m\u00e9tier. Le logique est examin\u00e9 par les architectes. Le physique est approuv\u00e9 par l&#8217;\u00e9quipe de d\u00e9veloppement. Des revues transversales sont effectu\u00e9es aux points d&#8217;int\u00e9gration.<\/p>\n<\/li>\n<\/ol>\n<h3>5.3 Contraintes pragmatiques<\/h3>\n<ol start=\"11\">\n<li>\n<p><strong>Limite de taille du diagramme :<\/strong> Maximum 15 \u00e0 20 classes par diagramme. D\u00e9composer en sous-domaines ou paquets. Utiliser des diagrammes de paquets pour la navigation.<\/p>\n<\/li>\n<li>\n<p><strong>S\u00e9lectivit\u00e9 des attributs\/op\u00e9rations :<\/strong> Afficher uniquement ce qui est pertinent pour l&#8217;objectif du diagramme. Masquer les getters\/setters sauf s&#8217;ils sont comportementaux. Omettre les membres h\u00e9rit\u00e9s sauf s&#8217;ils sont red\u00e9finis.<\/p>\n<\/li>\n<li>\n<p><strong>Notes plut\u00f4t que surcharge :<\/strong> Utiliser des notes pour les invariants, les contraintes et la justification. Ne pas encoder les r\u00e8gles m\u00e9tier dans les noms d&#8217;attributs ou les signatures de m\u00e9thodes.<\/p>\n<\/li>\n<li>\n<p><strong>Sp\u00e9cifications ex\u00e9cutables :<\/strong> PlantUML\/YAML\/Mermaid sont pr\u00e9f\u00e9r\u00e9s aux outils graphiques. Versionn\u00e9s. Comparables (diff). Int\u00e9gr\u00e9s \u00e0 l&#8217;int\u00e9gration continue (CI).<\/p>\n<\/li>\n<li>\n<p><strong>Documentation vivante :<\/strong> Les diagrammes sont mis \u00e0 jour avec le code. Des diagrammes obsol\u00e8tes sont pires que l&#8217;absence de diagrammes. Automatiser la g\u00e9n\u00e9ration \u00e0 partir du code lorsque c&#8217;est possible (ing\u00e9nierie inverse), mais curatoriser manuellement pour une clart\u00e9 conceptuelle\/logique.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2>6. Contre-mod\u00e8les : Reconna\u00eetre et corriger les \u00e9checs courants<\/h2>\n<h3>6.1 Mod\u00e8le de domaine an\u00e9mique<\/h3>\n<p><strong>Sympt\u00f4me :<\/strong> Les classes sont de simples conteneurs de donn\u00e9es avec uniquement des getters\/setters. La logique m\u00e9tier est dispers\u00e9e dans les services\/utilitaires.<br \/>\n<strong>Cause :<\/strong> Pens\u00e9e proc\u00e9durale d\u00e9guis\u00e9e en POO ; peur des mod\u00e8les de domaine riches ; incompr\u00e9hension de la s\u00e9paration des responsabilit\u00e9s.<br \/>\n<strong>Impact :<\/strong> Perte de l&#8217;encapsulation ; logique dupliqu\u00e9e ; tests difficiles ; r\u00e8gles m\u00e9tier invisibles dans le mod\u00e8le.<br \/>\n<strong>Correction :<\/strong> D\u00e9placer le comportement dans les classes de domaine. Les services orchestrent, n&#8217;impl\u00e9mentent pas. Valider avec des experts m\u00e9tier : \u00ab Une personne du m\u00e9tier reconna\u00eetrait-elle ce comportement comme appartenant \u00e0 cette entit\u00e9 ? \u00bb<\/p>\n<h3>6.2 Physicalisation pr\u00e9matur\u00e9e<\/h3>\n<p><strong>Sympt\u00f4me :<\/strong> Les diagrammes conceptuels incluent <code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">VARCHAR<\/code>,\u00a0<code data-backticks=\"1\">Cl\u00e9 \u00e9trang\u00e8re<\/code>. Les parties prenantes sont confondues par le bruit technique.<br \/>\n<strong>Cause :<\/strong>  Les analystes se tournent par d\u00e9faut vers des technologies connues ; pression pour \u00ab \u00eatre pragmatique \u00bb ; manque de discipline en mati\u00e8re d&#8217;abstraction.<br \/>\n<strong>Impact :<\/strong>  Exigences coupl\u00e9es \u00e0 la pile technologique ; r\u00e9\u00e9valuation impossible ; d\u00e9sengagement des m\u00e9tiers.<br \/>\n<strong>Correction :<\/strong>  Interdire certains termes lors des s\u00e9ances de conception. Examiner avec les parties prenantes non techniques avant de poursuivre. Maintenir des fichiers s\u00e9par\u00e9s par niveau d&#8217;abstraction.<\/p>\n<h3>6.3 Abus de l&#8217;h\u00e9ritage<\/h3>\n<p><strong>Sympt\u00f4me :<\/strong>  Hi\u00e9rarchies profondes (&gt;3 niveaux) ; sous-classes qui red\u00e9finissent de mani\u00e8re incoh\u00e9rente le comportement de la classe parente ; classes de base avec une logique conditionnelle bas\u00e9e sur le sous-type.<br \/>\n<strong>Cause :<\/strong>  Motivation de la r\u00e9utilisation de code ; pens\u00e9e taxonomique ; incompr\u00e9hension du polymorphisme.<br \/>\n<strong>Impact :<\/strong>  Probl\u00e8me de la classe de base fragile ; violation du principe LSP ; complexit\u00e9 exponentielle des tests.<br \/>\n<strong>Correction :<\/strong>  Aplatir les hi\u00e9rarchies. Extraire les comportements variables dans des strat\u00e9gies ou des politiques. Privil\u00e9gier la composition. Appliquer le principe \u00ab Dire, ne pas demander \u00bb.<\/p>\n<h3>6.4 Classe Dieu \/ Blob<\/h3>\n<p><strong>Sympt\u00f4me :<\/strong>  Classe unique avec plus de 20 attributs, plus de 30 m\u00e9thodes, d\u00e9pendant de plus de 10 autres classes.<br \/>\n<strong>Cause :<\/strong>  Ajout incr\u00e9mental de fonctionnalit\u00e9s sans refactoring ; absence de m\u00e9triques de coh\u00e9sion ; anti-mod\u00e8le du \u00ab gestionnaire \u00bb centralis\u00e9.<br \/>\n<strong>Impact :<\/strong>  Non maintenable ; non testable ; bloque le d\u00e9veloppement parall\u00e8le ; surcharge cognitive.<br \/>\n<strong>Correction :<\/strong>  Appliquer les refactorings Extraire une classe \/ Extraire une m\u00e9thode. Identifier des clusters coh\u00e9rents d&#8217;attributs\/m\u00e9thodes. D\u00e9l\u00e9guer \u00e0 des collaborateurs sp\u00e9cialis\u00e9s. Mesurer la complexit\u00e9 cyclomatique et le LCOM4.<\/p>\n<h3>6.5 D\u00e9gradation synchronis\u00e9e<\/h3>\n<p><strong>Sympt\u00f4me :<\/strong> Le code \u00e9volue, mais les diagrammes stagnent. Les nouveaux employ\u00e9s apprennent \u00e0 partir de mod\u00e8les obsol\u00e8tes. Les audits \u00e9chouent.<br \/>\n<strong>Cause :<\/strong> Les diagrammes sont trait\u00e9s comme des livrables, et non comme des artefacts vivants. Aucune int\u00e9gration \u00e0 l&#8217;int\u00e9gration continue (CI). Charge de mise \u00e0 jour manuelle.<br \/>\n<strong>Impact :<\/strong> Perte de connaissances ; d\u00e9rive architecturale ; risque de non-conformit\u00e9.<br \/>\n<strong>Correction :<\/strong> Int\u00e9grer la validation des diagrammes dans l&#8217;int\u00e9gration continue (CI). G\u00e9n\u00e9rer automatiquement les vues physiques \u00e0 partir du code. Exiger la mise \u00e0 jour des diagrammes dans les listes de v\u00e9rification des demandes de fusion (PR). Traiter les diagrammes comme des artefacts de source de premi\u00e8re classe.<\/p>\n<hr\/>\n<h2>7. Liste de v\u00e9rification avant de publier un diagramme de classes<\/h2>\n<p>Utilisez cette \u00e9tape de validation avant de consid\u00e9rer tout diagramme de classes comme termin\u00e9 :<\/p>\n<h3>V\u00e9rifications universelles<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Niveau d&#8217;abstraction explicitement indiqu\u00e9 dans le titre\/en-t\u00eate<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Toutes les classes nomm\u00e9es avec des noms communs au singulier<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Toutes les relations ont une multiplicit\u00e9 aux deux extr\u00e9mit\u00e9s<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Noms de r\u00f4les pr\u00e9sents sur toutes les associations<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Modificateurs de visibilit\u00e9 sp\u00e9cifi\u00e9s pour tous les attributs\/op\u00e9rations<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Le diagramme respecte la limite cognitive (&lt;20 classes) ou est d\u00e9compos\u00e9<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Les notes sont utilis\u00e9es pour les invariants\/contraintes, pas pour la surcharge<\/p>\n<\/li>\n<\/ul>\n<h3>V\u00e9rifications sp\u00e9cifiques au niveau<\/h3>\n<p><strong>Conceptuel :<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Z\u00e9ro r\u00e9f\u00e9rence technologique<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Comportements m\u00e9tier mod\u00e9lis\u00e9s, pas de CRUD<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Valid\u00e9 par la signature d&#8217;un expert du domaine<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Langage ubiquitaire coh\u00e9rent avec le glossaire<\/p>\n<\/li>\n<\/ul>\n<p><strong>Logique :<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Types uniquement neutres par rapport \u00e0 la plateforme<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Interfaces d\u00e9finies pour toutes les limites de service<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Mod\u00e8les de conception appliqu\u00e9s intentionnellement (document\u00e9s)<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Tra\u00e7able vers le mod\u00e8le conceptuel<\/p>\n<\/li>\n<\/ul>\n<p><strong>Physique :<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Annotations technologiques compl\u00e8tes et exactes<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Strat\u00e9gies de r\u00e9cup\u00e9ration\/propagation sp\u00e9cifi\u00e9es<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Tra\u00e7able vers le mod\u00e8le logique<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Implications en mati\u00e8re de performance document\u00e9es<\/p>\n<\/li>\n<\/ul>\n<h3>V\u00e9rifications inter-niveaux<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Modifications propag\u00e9es \u00e0 tous les niveaux concern\u00e9s<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Identifiants de version synchronis\u00e9s<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Liens du glossaire maintenus entre les termes m\u00e9tier et techniques<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Public adapt\u00e9 aux parties prenantes confirm\u00e9 pour chaque niveau<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>8. Conclusion : La valeur strat\u00e9gique d&#8217;une mod\u00e9lisation disciplin\u00e9e<\/h2>\n<p>Un <a href=\"https:\/\/online.visual-paradigm.com\/diagrams\/solutions\/free-class-diagram-tool\/\">diagramme de classes<\/a> est plus qu&#8217;une documentation : c&#8217;est une sp\u00e9cification ex\u00e9cutable de l&#8217;intention architecturale. En maintenant rigoureusement les trois niveaux d&#8217;abstraction, en appliquant les s\u00e9mantiques des relations et en respectant les invariants SOLID, vous transformez le diagramme de classes d&#8217;une image statique en un artefact d&#8217;ing\u00e9nierie dynamique qui \u00e9vite les retouches co\u00fbteuses, garantit l&#8217;alignement m\u00e9tier et permet une \u00e9volution durable.<\/p>\n<p>La distinction entre les mod\u00e8les conceptuel, logique et physique n&#8217;est pas acad\u00e9mique : c&#8217;est la principale d\u00e9fense contre les deux \u00e9checs les plus co\u00fbteux dans les projets logiciels : construire la mauvaise chose correctement, et construire la bonne chose incorrectement. Le mod\u00e8le conceptuel garantit que vous comprenez le probl\u00e8me. Le mod\u00e8le logique garantit que vous avez con\u00e7u une solution solide. Le mod\u00e8le physique garantit que vous pouvez le construire et l&#8217;exploiter de mani\u00e8re fiable.<\/p>\n<p><a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">PlantUML<\/a> \u00e9l\u00e8ve cette pratique du domaine de l&#8217;art \u00e0 celui de l&#8217;ing\u00e9nierie. Bas\u00e9 sur du texte, g\u00e9r\u00e9 par un syst\u00e8me de version, capable de g\u00e9n\u00e9rer des diff\u00e9rences et int\u00e9grable dans un pipeline CI, <a href=\"https:\/\/www.visual-paradigm.com\/features\/vpascode\/\">les diagrammes PlantUML<\/a> sont du code source, pas de simples d\u00e9corations. Ils participent au m\u00eame cycle de vie que le code de votre application et sont soumis aux m\u00eames disciplines de revue, de test et de maintenance.<\/p>\n<p>Alors que vous appliquez ces concepts, rappelez-vous : la mesure ultime du succ\u00e8s d&#8217;un <a href=\"https:\/\/w3.cs.jmu.edu\/bernstdh\/web\/common\/labs\/skills_visualparadigm_class-diagrams\/index.php\">diagramme de classes<\/a>n&#8217;est pas son \u00e9l\u00e9gance esth\u00e9tique ou sa conformit\u00e9 \u00e0 l&#8217;UML, mais son utilit\u00e9 analytique. R\u00e9v\u00e8le-t-il des complexit\u00e9s cach\u00e9es ? Expose-t-il des invariants viol\u00e9s ? Aligne-t-il des parties prenantes diverses autour d&#8217;une compr\u00e9hension partag\u00e9e ? Survit-il au contact avec la r\u00e9alit\u00e9 ?<\/p>\n<p class=\"\">Utilisez les listes de contr\u00f4le comme des portes. Consid\u00e9rez les <a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">mod\u00e8les PlantUML<\/a>comme des normes vivantes. Maintenez la tra\u00e7abilit\u00e9 sans compromis. Et n&#8217;oubliez jamais : l&#8217;objectif n&#8217;est pas des diagrammes parfaits, mais un meilleur logiciel. Lorsqu&#8217;il est ex\u00e9cut\u00e9 avec discipline, la mod\u00e9lisation de diagrammes de classes reste l&#8217;un des outils les plus puissants pour ma\u00eetriser la complexit\u00e9 et livrer des syst\u00e8mes qui ne sont pas seulement bien construits, mais v\u00e9ritablement adapt\u00e9s \u00e0 leur objectif.<\/p>\n<h3>R\u00e9f\u00e9rences<\/h3>\n<ol>\n<li>\n<p><a href=\"https:\/\/blog.visual-paradigm.com\/from-concept-to-code-a-comprehensive-uml-class-diagram-guide-case-study\/\"><strong>Du concept au code : un guide complet des diagrammes de classes UML et une \u00e9tude de cas<\/strong><\/a>: Un guide approfondi couvrant la syntaxe des diagrammes de classes UML, les relations et une \u00e9tude de cas r\u00e9elle d&#8217;une plateforme de livraison de repas.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/tw\/docs\/mastering-uml-2-5-a-use-case-driven-approach-to-agile-modeling\/module-3-the-skeleton-the-7-structural-uml-diagrams\/practical-3-structural-implementation\/\"><strong>Pratique 3 : Impl\u00e9mentation structurelle<\/strong><\/a>: Une session pratique sur la construction d&#8217;un diagramme de classes de mod\u00e8le de domaine, incluant l&#8217;utilisation de la g\u00e9n\u00e9ration par IA et du raffinement manuel dans Visual Paradigm.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/skills.visual-paradigm.com\/docs\/uml-basics-diagrams-for-beginners\/mastering-class-diagrams-beginner\/class-diagram-example-simple-uml-project\/\"><strong>Exemples pratiques : Construction d&#8217;un diagramme de classes simple<\/strong><\/a>: Un tutoriel convivial pour les d\u00e9butants qui explique pas \u00e0 pas la construction d&#8217;un diagramme de classes simple pour un syst\u00e8me de gestion de biblioth\u00e8que, d\u00e9finissant les classes, les attributs et les relations.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/tutorials.visual-paradigm.com\/how-to-generate-complex-class-diagrams-visual-paradigm-ai\/\"><strong>Comment g\u00e9n\u00e9rer des diagrammes de classes complexes \u00e0 l&#8217;aide du g\u00e9n\u00e9rateur UML par IA de Visual Paradigm<\/strong><\/a>: Un tutoriel ax\u00e9 sur l&#8217;utilisation de l&#8217;outil d&#8217;IA pour g\u00e9n\u00e9rer des diagrammes de classes complexes pour des applications d&#8217;entreprise, avec des instructions \u00e9tape par \u00e9tape et des meilleures pratiques.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/pt\/docs\/streamlining-the-software-lifecycle-integrating-ai-use-case-modeling-with-visual-paradigms-all-in-one-platform\/5-behavioral-and-structural-design\/5-3-static-structure-class-diagrams\/\"><strong>5.3 Structure statique (diagrammes de classes)<\/strong><\/a>: Un guide sur la d\u00e9rivation automatique de diagrammes de classes \u00e0 partir de sp\u00e9cifications de cas d&#8217;utilisation et de diagrammes de s\u00e9quence gr\u00e2ce \u00e0 l&#8217;IA, avec des exemples pratiques comme une application de r\u00e9servation de restaurant.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/ja\/docs\/mastering-uml-visual-modeling-in-the-visual-paradigm-ai-ecosystem\/module-4-mastery-of-structural-modeling-the-static-view\/ai-class-diagram-generation\/\"><strong>G\u00e9n\u00e9ration de diagrammes de classes par IA<\/strong><\/a>: Un article approfondi sur l&#8217;utilisation du chatbot d&#8217;IA pour g\u00e9n\u00e9rer des diagrammes de classes conformes \u00e0 UML 2.5 \u00e0 partir de descriptions en langage naturel et les affiner de mani\u00e8re it\u00e9rative.<\/p>\n<\/li>\n<li>\n<p class=\"\"><a href=\"https:\/\/blog.visual-paradigm.com\/fr\/beginners-guide-to-class-diagrams\/\"><strong>Guide de d\u00e9marrage pour les diagrammes de classes<\/strong><\/a>: Un guide fondamental (disponible dans plusieurs langues) qui pr\u00e9sente les composants des diagrammes de classes et montre comment les cr\u00e9er \u00e0 l&#8217;aide de Visual Paradigm Online.<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introduction En g\u00e9nie logiciel orient\u00e9 objet, le diagramme de classesest l&#8217;artefact le plus r\u00e9pandu mais souvent mal utilis\u00e9. Souvent r\u00e9duit \u00e0 un simple sch\u00e9ma de base de donn\u00e9es en notation&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","inline_featured_image":false,"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","_fifu_image_alt":"","fifu_alt":"","_fifu_alt":"","fifu_image_title":"","_fifu_image_title":"","fifu_input_alt":"","vp_image_hash":"","footnotes":""},"categories":[1],"tags":[],"asset-category":[],"class_list":["post-534","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","vp_image_hash":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"og:description\" content=\"Introduction En g\u00e9nie logiciel orient\u00e9 objet, le diagramme de classesest l&#8217;artefact le plus r\u00e9pandu mais souvent mal utilis\u00e9. Souvent r\u00e9duit \u00e0 un simple sch\u00e9ma de base de donn\u00e9es en notation&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\" \/>\n<meta property=\"og:site_name\" content=\"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-14T08:16:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-03T15:28:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" \/>\n<meta name=\"author\" content=\"curtis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\"},\"author\":{\"name\":\"curtis\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\"},\"headline\":\"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\"},\"wordCount\":3954,\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\",\"name\":\"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage\",\"url\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.ai-diagrams.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#website\",\"url\":\"https:\/\/www.ai-diagrams.com\/fr\/\",\"name\":\"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.ai-diagrams.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#organization\",\"name\":\"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\",\"url\":\"https:\/\/www.ai-diagrams.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/fr\/wp-content\/uploads\/sites\/18\/2026\/03\/ai-diagram-logo.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/fr\/wp-content\/uploads\/sites\/18\/2026\/03\/ai-diagram-logo.png\",\"width\":648,\"height\":648,\"caption\":\"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\",\"name\":\"curtis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"caption\":\"curtis\"},\"url\":\"https:\/\/www.ai-diagrams.com\/fr\/author\/curtis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","og_description":"Introduction En g\u00e9nie logiciel orient\u00e9 objet, le diagramme de classesest l&#8217;artefact le plus r\u00e9pandu mais souvent mal utilis\u00e9. Souvent r\u00e9duit \u00e0 un simple sch\u00e9ma de base de donn\u00e9es en notation&hellip;","og_url":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/","og_site_name":"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","article_published_time":"2026-08-14T08:16:11+00:00","article_modified_time":"2026-09-03T15:28:09+00:00","og_image":[{"url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","type":"","width":"","height":""}],"author":"curtis","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":false,"Dur\u00e9e de lecture estim\u00e9e":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#article","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/"},"author":{"name":"curtis","@id":"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1"},"headline":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/"},"wordCount":3954,"publisher":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/#organization"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","articleSection":["Uncategorized"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/","url":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/","name":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion - AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","breadcrumb":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ai-diagrams.com\/fr\/1106-2\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#primaryimage","url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","contentUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ai-diagrams.com\/fr\/1106-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ai-diagrams.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Ma\u00eetriser la mod\u00e9lisation des diagrammes de classes : abstraction, relations et r\u00e8gles de coh\u00e9sion"}]},{"@type":"WebSite","@id":"https:\/\/www.ai-diagrams.com\/fr\/#website","url":"https:\/\/www.ai-diagrams.com\/fr\/","name":"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","description":"","publisher":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ai-diagrams.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.ai-diagrams.com\/fr\/#organization","name":"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News","url":"https:\/\/www.ai-diagrams.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.ai-diagrams.com\/fr\/wp-content\/uploads\/sites\/18\/2026\/03\/ai-diagram-logo.png","contentUrl":"https:\/\/www.ai-diagrams.com\/fr\/wp-content\/uploads\/sites\/18\/2026\/03\/ai-diagram-logo.png","width":648,"height":648,"caption":"AI Diagrams Fran\u00e7ais\u2013 Explore Artificial Intelligence Trends &amp; News"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1","name":"curtis","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.ai-diagrams.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","caption":"curtis"},"url":"https:\/\/www.ai-diagrams.com\/fr\/author\/curtis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/posts\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/comments?post=534"}],"version-history":[{"count":0,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/posts\/534\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/media?parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/categories?post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/tags?post=534"},{"taxonomy":"asset-category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/fr\/wp-json\/wp\/v2\/asset-category?post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}