{"id":9912,"date":"2026-05-21T15:55:49","date_gmt":"2026-05-21T07:55:49","guid":{"rendered":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"},"modified":"2026-05-30T16:08:16","modified_gmt":"2026-05-30T08:08:16","slug":"mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml","status":"publish","type":"post","link":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","title":{"rendered":"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML"},"content":{"rendered":"<h2 data-nodeid=\"111\"><strong data-nodeid=\"293\">Introduction<\/strong><\/h2>\n<p data-nodeid=\"112\">Dans le paysage actuel du d\u00e9veloppement logiciel complexe, une communication claire et une mod\u00e9lisation pr\u00e9cise du syst\u00e8me sont essentielles pour le succ\u00e8s du projet. Parmi les outils les plus puissants dans l&#8217;arsenal d&#8217;un architecte logiciel se trouve le\u00a0<strong data-nodeid=\"303\">Diagramme de classes UML<\/strong>\u2014un langage visuel qui comble le foss\u00e9 entre les exigences abstraites et la mise en \u0153uvre concr\u00e8te.<\/p>\n<p data-nodeid=\"113\">Cette \u00e9tude de cas explore comment les diagrammes de classes constituent le pilier de la conception orient\u00e9e objet, permettant aux \u00e9quipes de mod\u00e9liser la structure statique du syst\u00e8me, de d\u00e9finir les relations entre les entit\u00e9s et d&#8217;\u00e9tablir des contrats clairs pour le d\u00e9veloppement. \u00c0 travers un exemple concret d&#8217;un syst\u00e8me de gestion des commandes e-commerce, nous montrerons comment affiner progressivement les diagrammes de classes selon trois perspectives de d\u00e9veloppement \u2014 conceptuelle, de sp\u00e9cification et d&#8217;impl\u00e9mentation \u2014 tout en exploitant\u00a0<strong data-nodeid=\"311\">PlantUML<\/strong>\u00a0pour une documentation ex\u00e9cutable et contr\u00f4l\u00e9e par version.<\/p>\n<p data-nodeid=\"114\">Que vous soyez analyste m\u00e9tier mod\u00e9lisant des concepts de domaine, d\u00e9veloppeur concevant des API ou chef d&#8217;\u00e9quipe veillant \u00e0 la coh\u00e9rence architecturale, ce guide fournit des \u00e9l\u00e9ments concrets pour cr\u00e9er des diagrammes de classes qui favorisent la clart\u00e9, r\u00e9duisent l&#8217;ambigu\u00eft\u00e9 et acc\u00e9l\u00e8rent la livraison.<\/p>\n<hr data-nodeid=\"115\"\/>\n<h2 data-nodeid=\"116\"><strong data-nodeid=\"318\">Comprendre les diagrammes de classes : rappel des concepts fondamentaux<\/strong><\/h2>\n<p data-nodeid=\"117\"><em data-nodeid=\"322\">(Condens\u00e9 \u00e0 partir des connaissances fondamentales)<\/em><\/p>\n<p data-nodeid=\"118\">Un\u00a0<strong data-nodeid=\"328\">Diagramme de classes<\/strong>\u00a0en UML est un diagramme de structure statique qui visualise :<\/p>\n<ul data-nodeid=\"119\">\n<li data-nodeid=\"120\">\n<p data-nodeid=\"121\"><strong data-nodeid=\"333\">Classes<\/strong>: Des plans d\u00e9finissant des objets avec des attributs (\u00e9tat) et des op\u00e9rations (comportement)<\/p>\n<\/li>\n<li data-nodeid=\"122\">\n<p data-nodeid=\"123\"><strong data-nodeid=\"338\">Relations<\/strong>: H\u00e9ritage, association, agr\u00e9gation, composition et d\u00e9pendance<\/p>\n<\/li>\n<li data-nodeid=\"124\">\n<p data-nodeid=\"125\"><strong data-nodeid=\"357\">Contraintes<\/strong>: Visibilit\u00e9 (<code data-backticks=\"1\" data-nodeid=\"343\">+<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"345\">-<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"347\">#<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"349\">~<\/code>), multiplicit\u00e9 (<code data-backticks=\"1\" data-nodeid=\"351\">1<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"353\">0..*<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"355\">1..5<\/code>), et navigabilit\u00e9<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"126\"><strong data-nodeid=\"361\">\u00c9l\u00e9ments de notation cl\u00e9s<\/p>\n<p><\/strong><\/h3>\n<p id=\"UHnOxfB\"><img alt=\"\" class=\"alignnone size-full wp-image-24654\" decoding=\"async\" height=\"184\" loading=\"lazy\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png 424w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-300x130.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-150x65.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-400x174.png 400w\" width=\"424\"\/><\/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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" 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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" \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\" data-nodeid=\"127\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass Order {\r\n  -orderId: String\r\n  -orderDate: Date\r\n  +calculateTotal(): Double\r\n  +addItem(item: Product, qty: int): void\r\n}\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" \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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" 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<h3 data-nodeid=\"128\"><strong data-nodeid=\"365\">R\u00e9f\u00e9rence rapide des types de relations<\/strong><\/h3>\n<table data-nodeid=\"130\">\n<thead data-nodeid=\"131\">\n<tr data-nodeid=\"132\">\n<th data-nodeid=\"134\">Type<\/th>\n<th data-nodeid=\"135\">Symbole<\/th>\n<th data-nodeid=\"136\">Signification<\/th>\n<th data-nodeid=\"137\">Exemple<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"142\">\n<tr data-nodeid=\"143\">\n<td data-nodeid=\"144\"><strong data-nodeid=\"373\">H\u00e9ritage<\/strong><\/td>\n<td data-nodeid=\"145\">`\u2013<\/td>\n<td data-nodeid=\"146\">&gt;`<\/td>\n<td data-nodeid=\"147\">\u00ab est-un \u00bb<\/td>\n<\/tr>\n<tr data-nodeid=\"150\">\n<td data-nodeid=\"151\"><strong data-nodeid=\"384\">Association<\/strong><\/td>\n<td data-nodeid=\"152\"><code data-backticks=\"1\" data-nodeid=\"385\">--<\/code><\/td>\n<td data-nodeid=\"153\">Lien structurel<\/td>\n<td data-nodeid=\"154\"><code data-backticks=\"1\" data-nodeid=\"387\">Commande -- Client<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"155\">\n<td data-nodeid=\"156\"><strong data-nodeid=\"391\">Agr\u00e9gation<\/strong><\/td>\n<td data-nodeid=\"157\"><code data-backticks=\"1\" data-nodeid=\"392\">o--<\/code><\/td>\n<td data-nodeid=\"158\">\u00ab poss\u00e8de-un \u00bb (faible)<\/td>\n<td data-nodeid=\"159\"><code data-backticks=\"1\" data-nodeid=\"397\">Entrep\u00f4t o-- Produit<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"160\">\n<td data-nodeid=\"161\"><strong data-nodeid=\"401\">Composition<\/strong><\/td>\n<td data-nodeid=\"162\"><code data-backticks=\"1\" data-nodeid=\"402\">*--<\/code><\/td>\n<td data-nodeid=\"163\">\u00ab poss\u00e8de-un \u00bb (fort)<\/td>\n<td data-nodeid=\"164\"><code data-backticks=\"1\" data-nodeid=\"407\">Commande *-- \u00c9l\u00e9mentCommande<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"165\">\n<td data-nodeid=\"166\"><strong data-nodeid=\"411\">D\u00e9pendance<\/strong><\/td>\n<td data-nodeid=\"167\"><code data-backticks=\"1\" data-nodeid=\"412\">..&gt;<\/code><\/td>\n<td data-nodeid=\"168\">\u00ab utilise \u00bb (temporaire)<\/td>\n<td data-nodeid=\"169\"><code data-backticks=\"1\" data-nodeid=\"417\">PaymentService ..&gt; Logger<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"170\"\/>\n<h2 data-nodeid=\"171\"><strong data-nodeid=\"421\">\u00c9tude de cas : syst\u00e8me de gestion des commandes e-commerce<\/strong><\/h2>\n<h3 data-nodeid=\"172\"><strong data-nodeid=\"425\">Exigences m\u00e9tiers<\/strong><\/h3>\n<p data-nodeid=\"173\">Un d\u00e9taillant en ligne a besoin d&#8217;un syst\u00e8me capable de :<\/p>\n<ol data-nodeid=\"174\">\n<li data-nodeid=\"175\">\n<p data-nodeid=\"176\">G\u00e9rer les clients, les produits et les commandes<\/p>\n<\/li>\n<li data-nodeid=\"177\">\n<p data-nodeid=\"178\">Prendre en charge les \u00e9l\u00e9ments de commande avec quantit\u00e9s et tarification<\/p>\n<\/li>\n<li data-nodeid=\"179\">\n<p data-nodeid=\"180\">G\u00e9rer plusieurs m\u00e9thodes de paiement<\/p>\n<\/li>\n<li data-nodeid=\"181\">\n<p data-nodeid=\"182\">Suivre l&#8217;\u00e9tat de la commande tout au long de son cycle de vie<\/p>\n<\/li>\n<li data-nodeid=\"183\">\n<p data-nodeid=\"184\">Permettre aux produits d&#8217;appartenir \u00e0 des cat\u00e9gories<\/p>\n<\/li>\n<li data-nodeid=\"185\">\n<p data-nodeid=\"186\">Prendre en charge le paiement sans compte (association client facultative)<\/p>\n<\/li>\n<\/ol>\n<h3 data-nodeid=\"187\"><strong data-nodeid=\"436\">Phase 1 : Mod\u00e8le conceptuel (point de vue domaine)<\/strong><\/h3>\n<p data-nodeid=\"188\"><em data-nodeid=\"440\">Ind\u00e9pendant du langage, ax\u00e9 sur les concepts du monde r\u00e9el<\/em><\/p>\n<\/p>\n<p id=\"AjOBHwj\"><img alt=\"\" class=\"alignnone size-full wp-image-24655\" decoding=\"async\" height=\"688\" loading=\"lazy\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb.png 865w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-300x239.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-768x611.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-150x119.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-400x318.png 400w\" width=\"865\"\/><\/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#plantuml:VLDDJyCm3BrNwd-mUa526cBN7X3Jne730F4FtCHiaV95uXmcn7_7QJj61U9KEtb-VdvExpDZuk9isx1XIx0DNb7aWXRsGPFjuM6r3SvHKWIxuD3ujcaRPJ5ds9RCGQxWesq0F3ggNnAGhK4-cXYDFsoqJfHpstnUIbzIq4Nnib9JLib4Di7NTC1CByaeMbHkaUaGqkcVqX_evwJF-a8DdueRA7sdEo4RfJ9ooJNYm6WtBXJFluaUcTn4zbxGYsEd6XTlUDOfJ6KOAPRJuicHdwUDKx8dFWOzjapeCwgg_N4ymBczN1b7eit5cUuANibYHLPpHV3t2hfr1wiLTBStDzVTF7OFqQAY37TjCvrKr7M5hI-mSQWULF0isnt1v-tyGJgZCKR2bC7u1Nu2ZWswowPw6CW6VyZYxbBBHShPeXuoiRn43SEfOjl61oP8vd1a26-JY6hDnizJ9eholAGs0uAQ_RWQbnbBKaTvHIAJApbw_TFjjY4vgForpxqayYTy0G00\" 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>\u00c9diter 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#plantuml:TLF1IiH03BqN-W-XbmLXHQzx4D7h2YBw0M4cxWQccJgJYY3-YqUz-1FzCJFThRjLF4sQllVo-ZAzp8f9-pRKbR86WfleXmyxNHH7dVOKO0K-jiX2G4iNsvQIexggAnSmPxWEJABmMbS04jjoaA53AT0dofdM_9oGSvIwUZiGRrFqFS-Pdh9Bt2aNB42N-EKACyrurwZ3voOcfl-fnt1pZE8dS6_suzGRUQXq_6o1QA-bQgCeYjv7nJ2JNFD6QAxxr1kIbIRN3yAAd7QAiSz_HMwHgVr9hYNTHazJixJOMy6FN2mab8nkYcLlh9JRQ2cYucRAQ05t5B0WSrtjTzESDx1SGdDsUdhI709PGHVG4LmOSEeLw4d1de_O-PUkogtGKT8uq_xcwhyPs7MOSFXI2rhoZBSZZCEQuwtkIRj1m_iVVmTxFnck81ax39y4nYoCkfAe18atMuNu2CShVf1ol_UAYJhZPbCX20ksGqfwu1VejZY6J0e1GGzBi9UzW1lJhIiI3sLO6Nff3_OtVGC0\" \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\" data-nodeid=\"189\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitle Mod\u00e8le conceptuel : domaine e-commerce\r\n\r\nclass Client {\r\n  nom\r\n  email\r\n  adresseLivraison\r\n}\r\n\r\nclass Produit {\r\n  nom\r\n  description\r\n  prixBase\r\n}\r\n\r\nclass Cat\u00e9gorie {\r\n  nom\r\n  description\r\n}\r\n\r\nclass Commande {\r\n  numeroCommande\r\n  dateCommande\r\n  statut\r\n  montantTotal\r\n}\r\n\r\nclass LigneCommande {\r\n  quantite\r\n  prixUnitaire\r\n  sousTotal\r\n}\r\n\r\nclass Paiement {\r\n  methodePaiement\r\n  identifiantTransaction\r\n  montant\r\n  horodatage\r\n}\r\n\r\n' Relations\r\nClient \"1\" -- \"0..*\" Commande : place &gt;\r\nCommande \"1\" *-- \"1..*\" LigneCommande : contient &gt;\r\nProduit \"1\" -- \"0..*\" LigneCommande : appara\u00eet dans &gt;\r\nProduit \"0..*\" -- \"1\" Cat\u00e9gorie : appartient \u00e0 &gt;\r\nCommande \"1\" -- \"1..*\" Paiement : r\u00e9gl\u00e9e par &gt;\r\n\r\nnote right of Commande\r\n  Une commande repr\u00e9sente l'intention d'achat\r\n  et la transaction d'un client\r\nend note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLF1IiH03BqN-W-XbmLXHQzx4D7h2YBw0M4cxWQccJgJYY3-YqUz-1FzCJFThRjLF4sQllVo-ZAzp8f9-pRKbR86WfleXmyxNHH7dVOKO0K-jiX2G4iNsvQIexggAnSmPxWEJABmMbS04jjoaA53AT0dofdM_9oGSvIwUZiGRrFqFS-Pdh9Bt2aNB42N-EKACyrurwZ3voOcfl-fnt1pZE8dS6_suzGRUQXq_6o1QA-bQgCeYjv7nJ2JNFD6QAxxr1kIbIRN3yAAd7QAiSz_HMwHgVr9hYNTHazJixJOMy6FN2mab8nkYcLlh9JRQ2cYucRAQ05t5B0WSrtjTzESDx1SGdDsUdhI709PGHVG4LmOSEeLw4d1de_O-PUkogtGKT8uq_xcwhyPs7MOSFXI2rhoZBSZZCEQuwtkIRj1m_iVVmTxFnck81ax39y4nYoCkfAe18atMuNu2CShVf1ol_UAYJhZPbCX20ksGqfwu1VejZY6J0e1GGzBi9UzW1lJhIiI3sLO6Nff3_OtVGC0\" \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#plantuml:VLDDJyCm3BrNwd-mUa526cBN7X3Jne730F4FtCHiaV95uXmcn7_7QJj61U9KEtb-VdvExpDZuk9isx1XIx0DNb7aWXRsGPFjuM6r3SvHKWIxuD3ujcaRPJ5ds9RCGQxWesq0F3ggNnAGhK4-cXYDFsoqJfHpstnUIbzIq4Nnib9JLib4Di7NTC1CByaeMbHkaUaGqkcVqX_evwJF-a8DdueRA7sdEo4RfJ9ooJNYm6WtBXJFluaUcTn4zbxGYsEd6XTlUDOfJ6KOAPRJuicHdwUDKx8dFWOzjapeCwgg_N4ymBczN1b7eit5cUuANibYHLPpHV3t2hfr1wiLTBStDzVTF7OFqQAY37TjCvrKr7M5hI-mSQWULF0isnt1v-tyGJgZCKR2bC7u1Nu2ZWswowPw6CW6VyZYxbBBHShPeXuoiRn43SEfOjl61oP8vd1a26-JY6hDnizJ9eholAGs0uAQ_RWQbnbBKaTvHIAJApbw_TFjjY4vgForpxqayYTy0G00\" 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>\u00c9diter PlantUML dans VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"190\"><strong data-nodeid=\"444\">D\u00e9cisions cl\u00e9s de conception :<\/strong><\/p>\n<ul data-nodeid=\"191\">\n<li data-nodeid=\"192\">\n<p data-nodeid=\"193\">Composition (<code data-backticks=\"1\" data-nodeid=\"446\">*--<\/code>) entre\u00a0<code data-backticks=\"1\" data-nodeid=\"448\">Commande<\/code>\u00a0et\u00a0<code data-backticks=\"1\" data-nodeid=\"450\">LigneCommande<\/code>: Les \u00e9l\u00e9ments ne peuvent exister sans commande<\/p>\n<\/li>\n<li data-nodeid=\"194\">\n<p data-nodeid=\"195\">Association entre\u00a0<code data-backticks=\"1\" data-nodeid=\"453\">Produit<\/code>\u00a0et\u00a0<code data-backticks=\"1\" data-nodeid=\"455\">Cat\u00e9gorie<\/code>: Les produits peuvent \u00eatre r\u00e9cat\u00e9goris\u00e9s<\/p>\n<\/li>\n<li data-nodeid=\"196\">\n<p data-nodeid=\"197\">Multiplicit\u00e9\u00a0<code data-backticks=\"1\" data-nodeid=\"458\">0..*<\/code>\u00a0pour Client-Commande : Prise en charge du paiement invit\u00e9<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"198\"\/>\n<h3 data-nodeid=\"199\"><strong data-nodeid=\"463\">Phase 2 : Mod\u00e8le de sp\u00e9cification (perspective interface)<\/strong><\/h3>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">Focus sur les contrats logiciels, masquage des d\u00e9tails d&#8217;impl\u00e9mentation<\/em><\/p>\n<\/p>\n<p id=\"fNvtqQK\"><img alt=\"\" class=\"alignnone size-full wp-image-24656\" decoding=\"async\" height=\"436\" loading=\"lazy\" sizes=\"auto, (max-width: 1632px) 100vw, 1632px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04.png 1632w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-300x80.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-1030x275.png 1030w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-768x205.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-1536x410.png 1536w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-150x40.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-400x107.png 400w\" width=\"1632\"\/><\/p>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">\u00a0<\/em><\/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#plantuml:TLHBRkCm3DqRy1suQu89SW1Z47I0R0nCqIBf1LIPJeJAb4UY0XZ5t7resSuaZhipoSV7tvEV0olFiR5vneOjmh55RMgZ5Hj7yE8gj0KSqL-CHYY9qTTAOyYpF3EJ1UMhhz1FgAyy0_YXFIh655Zf6DWrwCjAkDWREct0C3QXWDycyC-4AiMnVt_ThGj8jdmdeXFomE8IwaennyMscWeUMN4CyuGDXEGVymQGi7muPr7HqBMoEjg9vzsniWjrNnnXbsT_PrjuKrs3n6_UoOQ2y-Ccsi4UeuzTjKDWZwoCbUv6eCorlXe73D5oelDOHwecDlQAWjBzjMuvLUCYyTYfq1nIqiGoRxoaYt0vtyrEU4Rz-UiYNQaFOmrtAncbYfflA_s9YaGwNG52EDkcno24s5zsuHgt2ZWaP19TZzuz4Cbdm1lKmbKkpbJZRDgg4Axo6CUPPGmZFYWpkRyLPufoBukh2iIneAl7HaQA_wAutsJotYrpK3KP4PJSv5vrJx375gb2qgP_ZVSlSBlTBHorW1Wmm6uH_Q3T0hIJZHcIn_1DqdM_1NZaw2dXyemSevoFPRFWwlk_Gp_K7cj3Gifdb28a4jOCjTHC5u96aJfXtyssHvTDQvELxXuatC55-GvMZT7UXO5t0uqZ9o8zRm1PRzTv9kk1lfM-fMSnv2_t3m00\" 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#plantuml:TLHTRjim37utu3lmRGaMv03647H0NWoqQ97q0ehCf49bqPEe0C6m-opdoCL6oquME-wRn9zF7ybFV0giFCVQvXaRzWWlL5t-MeGA8JINipPxenKRSb10wHZzNcaCoOt-Q3JcMPwPgmFALr-XttOk-9rd0D-rHyMO73CT0rEDlgmAsB8txh00mrY70fvDOFoHmagnhDzVL_C2qbtE2Uc0tC5GYhfXZEDYKrrVtBBY6CO92mZ9tkTrGOAo8xAeN4TRMHtj5UUTMDc9Tr_8uIdF_epQyAPEDJf-yoJT2kJxLZJTlVS-icewnnfP6Ili-a2fQtwxR314omdEupwwweh6NhcWT3kiUqnLKtJSCnMOJKgweeo9b-ueMEHFenb-eFxyUHHMQcUiuTDCIgcYvlkNVaNbH4Md0WHmr4sFhLwmdUp4D0OIsAJG9BesVFM09CU0Tr4JOpcIgVhYj5KXtFJHrpFAw6fyq6OoVotFvEPM63STY652MOzCUeZ_iXZsCba7xUnqxOn8IgOorDqtM5_E3RfAEL5NdWq_uNAvcXXh0P5ba05XDPdm8E02D4dNoBalKcuTBi0ZK_HTO9uvOeITIajZaDRM9CptHie2sJcQd6YOeP5ai0eE6DBcgMJXQAfhvUIqRBEUnMBgnbxEBSaaWW0DnhP8E2flqCEiDjfJlwKMK9CZ4Uw7797rSfvdyYwqt5gEJz8zsOB_0000\" \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\" data-nodeid=\"201\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitre Mod\u00e8le de sp\u00e9cification : Interfaces de service\r\n\r\ninterface IOrderService {\r\n  +createOrder(customerId: String, items: Liste&lt;OrderItemDTO&gt;): OrderDTO\r\n  +getOrder(orderId: String): OrderDTO\r\n  +updateOrderStatus(orderId: String, status: OrderStatus): boolean\r\n  +calculateOrderTotal(orderId: String): Money\r\n}\r\n\r\ninterface IPaymentProcessor {\r\n  +processPayment(orderId: String, paymentDetails: PaymentDTO): PaymentResult\r\n  +refundPayment(transactionId: String, amount: Money): RefundResult\r\n}\r\n\r\ninterface IInventoryService {\r\n  +checkAvailability(productId: String, quantity: int): boolean\r\n  +reserveItems(orderId: String, items: Liste&lt;ReservationItem&gt;): boolean\r\n  +releaseReservation(orderId: String): void\r\n}\r\n\r\nclass OrderDTO {\r\n  +orderId: String\r\n  +customerId: String\r\n  +items: Liste&lt;OrderItemDTO&gt;\r\n  +total: Money\r\n  +status: OrderStatus\r\n}\r\n\r\nclass OrderItemDTO {\r\n  +productId: String\r\n  +quantity: int\r\n  +unitPrice: Money\r\n}\r\n\r\n' D\u00e9pendances\r\nIOrderService ..&gt; IInventoryService : utilise &gt;\r\nIOrderService ..&gt; IPaymentProcessor : coordonne &gt;\r\nIOrderService ..&gt; OrderDTO : retourne &gt;\r\n\r\nnote bas de IOrderService\r\n  D\u00e9finit le contrat pour la gestion des commandes.\r\n  Les impl\u00e9mentations peuvent varier (microservice, monolithe, etc.)\r\nfin note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLHTRjim37utu3lmRGaMv03647H0NWoqQ97q0ehCf49bqPEe0C6m-opdoCL6oquME-wRn9zF7ybFV0giFCVQvXaRzWWlL5t-MeGA8JINipPxenKRSb10wHZzNcaCoOt-Q3JcMPwPgmFALr-XttOk-9rd0D-rHyMO73CT0rEDlgmAsB8txh00mrY70fvDOFoHmagnhDzVL_C2qbtE2Uc0tC5GYhfXZEDYKrrVtBBY6CO92mZ9tkTrGOAo8xAeN4TRMHtj5UUTMDc9Tr_8uIdF_epQyAPEDJf-yoJT2kJxLZJTlVS-icewnnfP6Ili-a2fQtwxR314omdEupwwweh6NhcWT3kiUqnLKtJSCnMOJKgweeo9b-ueMEHFenb-eFxyUHHMQcUiuTDCIgcYvlkNVaNbH4Md0WHmr4sFhLwmdUp4D0OIsAJG9BesVFM09CU0Tr4JOpcIgVhYj5KXtFJHrpFAw6fyq6OoVotFvEPM63STY652MOzCUeZ_iXZsCba7xUnqxOn8IgOorDqtM5_E3RfAEL5NdWq_uNAvcXXh0P5ba05XDPdm8E02D4dNoBalKcuTBi0ZK_HTO9uvOeITIajZaDRM9CptHie2sJcQd6YOeP5ai0eE6DBcgMJXQAfhvUIqRBEUnMBgnbxEBSaaWW0DnhP8E2flqCEiDjfJlwKMK9CZ4Uw7797rSfvdyYwqt5gEJz8zsOB_0000\" \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#plantuml:TLHBRkCm3DqRy1suQu89SW1Z47I0R0nCqIBf1LIPJeJAb4UY0XZ5t7resSuaZhipoSV7tvEV0olFiR5vneOjmh55RMgZ5Hj7yE8gj0KSqL-CHYY9qTTAOyYpF3EJ1UMhhz1FgAyy0_YXFIh655Zf6DWrwCjAkDWREct0C3QXWDycyC-4AiMnVt_ThGj8jdmdeXFomE8IwaennyMscWeUMN4CyuGDXEGVymQGi7muPr7HqBMoEjg9vzsniWjrNnnXbsT_PrjuKrs3n6_UoOQ2y-Ccsi4UeuzTjKDWZwoCbUv6eCorlXe73D5oelDOHwecDlQAWjBzjMuvLUCYyTYfq1nIqiGoRxoaYt0vtyrEU4Rz-UiYNQaFOmrtAncbYfflA_s9YaGwNG52EDkcno24s5zsuHgt2ZWaP19TZzuz4Cbdm1lKmbKkpbJZRDgg4Axo6CUPPGmZFYWpkRyLPufoBukh2iIneAl7HaQA_wAutsJotYrpK3KP4PJSv5vrJx375gb2qgP_ZVSlSBlTBHorW1Wmm6uH_Q3T0hIJZHcIn_1DqdM_1NZaw2dXyemSevoFPRFWwlk_Gp_K7cj3Gifdb28a4jOCjTHC5u96aJfXtyssHvTDQvELxXuatC55-GvMZT7UXO5t0uqZ9o8zRm1PRzTv9kk1lfM-fMSnv2_t3m00\" 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 data-nodeid=\"202\"><strong data-nodeid=\"471\">Avantages architecturaux :<\/strong><\/p>\n<ul data-nodeid=\"203\">\n<li data-nodeid=\"204\">\n<p data-nodeid=\"205\">La s\u00e9paration des interfaces permet un d\u00e9ploiement ind\u00e9pendant<\/p>\n<\/li>\n<li data-nodeid=\"206\">\n<p data-nodeid=\"207\">Les DTOs d\u00e9connectent les mod\u00e8les internes des contrats API<\/p>\n<\/li>\n<li data-nodeid=\"208\">\n<p data-nodeid=\"209\">Les d\u00e9pendances montrent clairement les fronti\u00e8res des services pour les microservices<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"210\"\/>\n<h3 data-nodeid=\"211\"><strong data-nodeid=\"478\">Phase 3 : Mod\u00e8le d&#8217;impl\u00e9mentation (perspective code)<\/strong><\/h3>\n<p data-nodeid=\"212\"><em data-nodeid=\"482\">D\u00e9tails sp\u00e9cifiques \u00e0 la technologie pour l&#8217;impl\u00e9mentation Java\/Spring Boot<\/em><\/p>\n<p id=\"ZSqOdQO\"><img alt=\"\" class=\"alignnone size-full wp-image-24657\" decoding=\"async\" height=\"959\" loading=\"lazy\" sizes=\"auto, (max-width: 1738px) 100vw, 1738px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a.png 1738w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-300x166.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-1030x568.png 1030w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-768x424.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-1536x848.png 1536w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-150x83.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-400x221.png 400w\" width=\"1738\"\/><\/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#plantuml:TLLBRzf04BuZyHz6kTG9uAfNgur2WBQk2450Ufzu9x2AxNNsGOIg_FVEsklmIYwBvptppOCROr5RL-JTZfKs9qYBAgU2IejMgXBkbA0yWJ-unQ_BIijo3RTAMHZbQ0oPRgVRgJ1xnZL1fegO-2b8PnGhBKZ7x4VQ7VphTW0oRmBtdjym00OtgO1QCnK9F3oauvP_X-LkfUvBTkkCLUmpWL7uQdLOkb9UCShGP2Zent0wlGHfgJ09JAMnt-jeAJEkWr4TR8oMM45bcFlFbImeY1aDwzYujblMH91OPJ4V5igLDe5RkHvJ9WlC6sdpzb087okgj18kOxrvyz675xjBG9RsCe6jaYBeS_pCvJu3xpowF7VSAr0_3yro8wkAH7HW_kQV4rXzy2DeFHIV8rjZ4MezbvuM4JHU7DOzhSi9F5TAEzSoeq-HMPDTkaVxSPdlfL3fYaFesrhcazaudVrgYD7zx6Uwk9k4WfQ_q_cy9SQJQVfticZ9qN0scaod3SbHtZuVrmftVkXZGthBXHnExBmHBGyb7ggXi-fLQX8GZ7zn9r-HaPaVqUVwDV0BgfIHLkbTQC6USGGTzo4ZOuBFw6XR-Y2iUe-te1T7ni_OEyDKgZJjS6ynbu9p2j8nMPIvYJvsiH_JWQkyLPrZYqNTdjDSskKvKlfeP7boI3yXWtcCL8jjBzkWNbE4P-lMXmmr1npn6_Bd02kDfS7C7omksULXBdkQdbmf8hiN-sINrf-nFfnxPrUBscJlfPsQBop9wvDeU1VvA3HtxEBR1LmD1lmRnrSN1rkO-Fcg--clw7Mh7yVNf_EKWA2AIc6WKJmH7rYqAF7gjKVQm5QYj-fsIcK9j5nlBAYdVIQ-Y9j9SuQnPANchXTO6R0AkBFuY8Q0VtAAlVPeVqnv8utJP9gR2XLfmrSLNgNTD4FC1fmw-DW-Xnic-B_aFm00\" 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#plantuml:TLNDRXen4BuZyGwZN482RDKhQYC8q9IA40IazybwGgpisXlRIuMgl4zv3bwiO-yklyd5Ni_FDpEVnxDTwz2uF4tgDIUT8RZNOlil8H2NCisIxIObvT19hQ03_GIj9Gk_S8LVvfcHQWctMhjwhLxBC7x59K6iquXuISd456aZo4GC8TqQ_jPh0B77W0SlBmG0xUv8GB0SYGuyFeu6bVmUrNgX7nJ3vjPfnkGaog_AXhKBxGqRCTeO1NtlZSTN81sbjWDZQHrz2-56BBaflKAq0JfY2nrZuZyNCgLIpQIudBs3tpmSIetJ3fDUgdFbEd0hbmEAPOf9eItM9WhXOpKoeqKUizsq-6Z1crjtG2ftrO6LbgAqv_XndlWCF7ZZwXoucQ9vxTdvYymo4eq3ztU_dF3gWnznwxdudDh0HLdhkVQqYDBYBSTmgQ6SKfOhwQP6nlGfCqjoy_p9VLpchXHIUNf8VLNBT3WPZ2PtnQ7_CFancjqFouBcFqVJQNKO3CUZtyDPTUpt9ltXU5mSEShxv_sQuTetV6J9hBYGmvQT5ghveSPJrSkT_YCD2IYTx_Wc_o0pCpqwdzi7ucUKQIkTDklo2lQ28-hu7cAojiHi73sN5WYdT_5cz9QJzJss4zXCArirzmeJAJYdKZiWXpAnZOyXzctQpZFl5NAik0ZNSvfBzNYEZ3vgMUuSCi_8P1upLN7RZ5_GBAc1Py-j1J4Q3jZdjSoV0omCAekn7rPSSfwKVTaqz9mhqN1xjKzsxlpyQi4vEaFDWiiUfUgQIzOaOHpoG2Y6sCNN2xXkjtcFekkBWnVOyRqLxj9FpvlAFefkJdkf0sAxoKW94EGDJzG77XL3_EnsqvbW9T6xrMjAyqaOBVr6-rny2UDBLAmlPdbtM8pa57cWm8gCXPmVkyEd97W-eGsxq4fjDsGZZz3VprTOeWa30BXH8E5_mdPJfcF1QkKWOqoUlUW5kA8O4lHyfAW4CTgpLE2pzLbtkNB-0_q7\" \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\" data-nodeid=\"213\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitre Mod\u00e8le d'impl\u00e9mentation : Classes Java\/Spring Boot\r\n\r\npackage com.ecommerce.order.entity {\r\n  class Order {\r\n    -@Id orderId: UUID\r\n    -@ManyToOne customer: Customer\r\n    -@OneToMany(cascade=ALL) items: Liste&lt;OrderItem&gt;\r\n    -orderDate: LocalDateTime\r\n    -status: OrderStatus\r\n    -totalAmount: BigDecimal\r\n    \r\n    +addItem(product: Product, qty: int): void\r\n    +calculateTotal(): BigDecimal\r\n    +markAsShipped(): void\r\n  }\r\n  \r\n  class OrderItem {\r\n    -@Id itemId: UUID\r\n    -@ManyToOne order: Order\r\n    -@ManyToOne product: Product\r\n    -quantity: int\r\n    -unitPrice: BigDecimal\r\n    \r\n    +getSubtotal(): BigDecimal\r\n  }\r\n  \r\n  enum OrderStatus {\r\n    PENDING\r\n    CONFIRMED\r\n    SHIPPED\r\n    DELIVERED\r\n    CANCELLED\r\n  }\r\n}\r\n\r\npackage com.ecommerce.payment.service {\r\n  class PaymentService {\r\n    -@Autowired paymentGateway: PaymentGateway\r\n    -@Autowired orderRepository: OrderRepository\r\n    \r\n    +processPayment(orderId: UUID, dto: PaymentRequest): PaymentResponse\r\n    -validatePaymentDetails(dto: PaymentRequest): void\r\n    -updateOrderPaymentStatus(orderId: UUID, status: PaymentStatus): void\r\n  }\r\n  \r\n  interface PaymentGateway {\r\n    +charge(amount: BigDecimal, card: CardDetails): TransactionResult\r\n    +refund(transactionId: String, amount: BigDecimal): RefundResult\r\n  }\r\n}\r\n\r\n' Relations\r\nOrder \"1\" *-- \"1..*\" OrderItem : composition &gt;\r\nOrder ..&gt; PaymentService : d\u00e9pend de &gt;\r\nPaymentService ..&gt; PaymentGateway : impl\u00e9mente via &gt;\r\n\r\nnote droite de OrderItem\r\n  L'annotation @Entity mappe vers une table de base de donn\u00e9es.\r\n  Cascade=ALL garantit que les \u00e9l\u00e9ments sont persistants avec la commande.\r\nfin note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLNDRXen4BuZyGwZN482RDKhQYC8q9IA40IazybwGgpisXlRIuMgl4zv3bwiO-yklyd5Ni_FDpEVnxDTwz2uF4tgDIUT8RZNOlil8H2NCisIxIObvT19hQ03_GIj9Gk_S8LVvfcHQWctMhjwhLxBC7x59K6iquXuISd456aZo4GC8TqQ_jPh0B77W0SlBmG0xUv8GB0SYGuyFeu6bVmUrNgX7nJ3vjPfnkGaog_AXhKBxGqRCTeO1NtlZSTN81sbjWDZQHrz2-56BBaflKAq0JfY2nrZuZyNCgLIpQIudBs3tpmSIetJ3fDUgdFbEd0hbmEAPOf9eItM9WhXOpKoeqKUizsq-6Z1crjtG2ftrO6LbgAqv_XndlWCF7ZZwXoucQ9vxTdvYymo4eq3ztU_dF3gWnznwxdudDh0HLdhkVQqYDBYBSTmgQ6SKfOhwQP6nlGfCqjoy_p9VLpchXHIUNf8VLNBT3WPZ2PtnQ7_CFancjqFouBcFqVJQNKO3CUZtyDPTUpt9ltXU5mSEShxv_sQuTetV6J9hBYGmvQT5ghveSPJrSkT_YCD2IYTx_Wc_o0pCpqwdzi7ucUKQIkTDklo2lQ28-hu7cAojiHi73sN5WYdT_5cz9QJzJss4zXCArirzmeJAJYdKZiWXpAnZOyXzctQpZFl5NAik0ZNSvfBzNYEZ3vgMUuSCi_8P1upLN7RZ5_GBAc1Py-j1J4Q3jZdjSoV0omCAekn7rPSSfwKVTaqz9mhqN1xjKzsxlpyQi4vEaFDWiiUfUgQIzOaOHpoG2Y6sCNN2xXkjtcFekkBWnVOyRqLxj9FpvlAFefkJdkf0sAxoKW94EGDJzG77XL3_EnsqvbW9T6xrMjAyqaOBVr6-rny2UDBLAmlPdbtM8pa57cWm8gCXPmVkyEd97W-eGsxq4fjDsGZZz3VprTOeWa30BXH8E5_mdPJfcF1QkKWOqoUlUW5kA8O4lHyfAW4CTgpLE2pzLbtkNB-0_q7\" \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#plantuml:TLLBRzf04BuZyHz6kTG9uAfNgur2WBQk2450Ufzu9x2AxNNsGOIg_FVEsklmIYwBvptppOCROr5RL-JTZfKs9qYBAgU2IejMgXBkbA0yWJ-unQ_BIijo3RTAMHZbQ0oPRgVRgJ1xnZL1fegO-2b8PnGhBKZ7x4VQ7VphTW0oRmBtdjym00OtgO1QCnK9F3oauvP_X-LkfUvBTkkCLUmpWL7uQdLOkb9UCShGP2Zent0wlGHfgJ09JAMnt-jeAJEkWr4TR8oMM45bcFlFbImeY1aDwzYujblMH91OPJ4V5igLDe5RkHvJ9WlC6sdpzb087okgj18kOxrvyz675xjBG9RsCe6jaYBeS_pCvJu3xpowF7VSAr0_3yro8wkAH7HW_kQV4rXzy2DeFHIV8rjZ4MezbvuM4JHU7DOzhSi9F5TAEzSoeq-HMPDTkaVxSPdlfL3fYaFesrhcazaudVrgYD7zx6Uwk9k4WfQ_q_cy9SQJQVfticZ9qN0scaod3SbHtZuVrmftVkXZGthBXHnExBmHBGyb7ggXi-fLQX8GZ7zn9r-HaPaVqUVwDV0BgfIHLkbTQC6USGGTzo4ZOuBFw6XR-Y2iUe-te1T7ni_OEyDKgZJjS6ynbu9p2j8nMPIvYJvsiH_JWQkyLPrZYqNTdjDSskKvKlfeP7boI3yXWtcCL8jjBzkWNbE4P-lMXmmr1npn6_Bd02kDfS7C7omksULXBdkQdbmf8hiN-sINrf-nFfnxPrUBscJlfPsQBop9wvDeU1VvA3HtxEBR1LmD1lmRnrSN1rkO-Fcg--clw7Mh7yVNf_EKWA2AIc6WKJmH7rYqAF7gjKVQm5QYj-fsIcK9j5nlBAYdVIQ-Y9j9SuQnPANchXTO6R0AkBFuY8Q0VtAAlVPeVqnv8utJP9gR2XLfmrSLNgNTD4FC1fmw-DW-Xnic-B_aFm00\" 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 data-nodeid=\"214\"><strong data-nodeid=\"486\">Points forts de l&#8217;impl\u00e9mentation :<\/strong><\/p>\n<ul data-nodeid=\"215\">\n<li data-nodeid=\"216\">\n<p data-nodeid=\"217\">Annotations JPA (<code data-backticks=\"1\" data-nodeid=\"488\">@Entity<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"490\">@ManyToOne<\/code>) pour le mapping ORM<\/p>\n<\/li>\n<li data-nodeid=\"218\">\n<p data-nodeid=\"219\">Injection de d\u00e9pendances (<code data-backticks=\"1\" data-nodeid=\"493\">@Autowired<\/code>) pour un couplage faible<\/p>\n<\/li>\n<li data-nodeid=\"220\">\n<p data-nodeid=\"221\">\u00c9num\u00e9ration pour une gestion s\u00e9curis\u00e9e des statuts de commande<\/p>\n<\/li>\n<li data-nodeid=\"222\">\n<p data-nodeid=\"223\">M\u00e9thodes d&#8217;aide priv\u00e9es (<code data-backticks=\"1\" data-nodeid=\"497\">-validerDetailsPaiement<\/code>) encapsulent la logique<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"224\"\/>\n<h2 data-nodeid=\"225\"><strong data-nodeid=\"504\">Mod\u00e8les avanc\u00e9s et bonnes pratiques<\/strong><\/h2>\n<h3 data-nodeid=\"226\"><strong data-nodeid=\"508\">1. Gestion de la visibilit\u00e9 et de l&#8217;encapsulation<\/strong><\/h3>\n<p id=\"CXceEyL\"><img alt=\"\" class=\"alignnone size-full wp-image-24658\" decoding=\"async\" height=\"229\" loading=\"lazy\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b.png 975w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-300x70.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-768x180.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-150x35.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-400x94.png 400w\" width=\"975\"\/><\/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#plantuml:PL7DIiH03BuN-Wu1Bolg2nIHxRA81P62uZsTPhjXfncOoQmkeizkseeAUqlcIxwVp3efHisZBmldCINOe1ngvq8MXO-o0BZ2fNlAOqUnWcUDBCEC3AGRz2YELfSLR7ZOakCH_GJUT0jozguH9Q5J3lB0IKCyLV1enUtB7t0tJLuuz2vxL6f4ALBILRIcWZxapjEPuXTFOuA-pZthvEWOk2-Bpx8e2mbA47dOAuJT_v1p46YDaLq5TTl0BaIWzuKAd6SIJRDpQ2CVPmVDZnBOzPIkmTZ1paGfiJdxtVQdEOVjcRfJwYkuD_AKk-NMqvmaoplRXnRT0GUZV-M5vurrpm89Hu8nzDbJMP3qavnLQoljuxu1\" 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#plantuml:PL7BIWD14Bmlx3yqU32Y-O5594Ol0GyB4U-TcNRJE8yutHC2Okv-IloD_J5d9nVHsr1LtLKrlH35fDcxjZ4EHU0X-ftI4eD1JWGVRGDm7RAd5CzK1sjD78PAn8rIuBIEpjBigeCb3uzasAERwBbC-3zqow8nyNkcvuH1q2Z781qy5Vps5tGtgIyCEfCTfLLGIgGpnNpemCQySVJFyOZPibPfg87saMtRVBPDsuIe18c7hK9y_TEpbe6-x6G37TptAzZ5dC2HW75CGGNeKBTAxG1zulruAjhnIr61pvOt4680D8P4k0G4I-0ko-HuIamvrKPbDXPWgEDzjPaa5AIKXXqca9XbNkzHansXH_E60nNz2vyNOmOX3c0p-F7R4_XeopUr3GKBKzMsMPHdkUmF\" \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\" data-nodeid=\"227\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass CompteBancaire {\r\n  +numeroCompte: String\r\n  +obtenirSolde(): BigDecimal\r\n  -solde: BigDecimal\r\n  -historiqueTransactions: List&lt;Transaction&gt;\r\n  #calculerInteret(taux: double): BigDecimal\r\n  ~auditInterne(): void\r\n}\r\n\r\nnote right of CompteBancaire\r\n  + Public : API pour les clients externes\r\n  - Priv\u00e9 : \u00c9tat interne, non accessible de l'ext\u00e9rieur\r\n  # Prot\u00e9g\u00e9 : Pour l'extension par sous-classe\r\n  ~ Package : Visible au sein du m\u00eame module\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#plantuml:PL7BIWD14Bmlx3yqU32Y-O5594Ol0GyB4U-TcNRJE8yutHC2Okv-IloD_J5d9nVHsr1LtLKrlH35fDcxjZ4EHU0X-ftI4eD1JWGVRGDm7RAd5CzK1sjD78PAn8rIuBIEpjBigeCb3uzasAERwBbC-3zqow8nyNkcvuH1q2Z781qy5Vps5tGtgIyCEfCTfLLGIgGpnNpemCQySVJFyOZPibPfg87saMtRVBPDsuIe18c7hK9y_TEpbe6-x6G37TptAzZ5dC2HW75CGGNeKBTAxG1zulruAjhnIr61pvOt4680D8P4k0G4I-0ko-HuIamvrKPbDXPWgEDzjPaa5AIKXXqca9XbNkzHansXH_E60nNz2vyNOmOX3c0p-F7R4_XeopUr3GKBKzMsMPHdkUmF\" \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#plantuml:PL7DIiH03BuN-Wu1Bolg2nIHxRA81P62uZsTPhjXfncOoQmkeizkseeAUqlcIxwVp3efHisZBmldCINOe1ngvq8MXO-o0BZ2fNlAOqUnWcUDBCEC3AGRz2YELfSLR7ZOakCH_GJUT0jozguH9Q5J3lB0IKCyLV1enUtB7t0tJLuuz2vxL6f4ALBILRIcWZxapjEPuXTFOuA-pZthvEWOk2-Bpx8e2mbA47dOAuJT_v1p46YDaLq5TTl0BaIWzuKAd6SIJRDpQ2CVPmVDZnBOzPIkmTZ1paGfiJdxtVQdEOVjcRfJwYkuD_AKk-NMqvmaoplRXnRT0GUZV-M5vurrpm89Hu8nzDbJMP3qavnLQoljuxu1\" 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<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">2. Multiplicit\u00e9 dans des sc\u00e9narios du monde r\u00e9el<\/p>\n<p><\/strong><\/h3>\n<p id=\"TInrWNg\"><img alt=\"\" class=\"alignnone size-full wp-image-24659\" decoding=\"async\" height=\"572\" loading=\"lazy\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0.png 441w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-231x300.png 231w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-116x150.png 116w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-400x519.png 400w\" width=\"441\"\/><\/p>\n<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">\u00a0<\/strong><\/h3>\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#plantuml:NPB1JiCm38RlbVeELYziOwlMQoNG1kom0m9fJn1IiqKaSKdSYGeXyImy6a-2sswmSOj__VxzsSeYiWhSE9icsgeOOREZkZP-UoiolAS9mAMggZMZ6zM1gaPp2O_3Omglt9PWF8zBs9EfUdT0HtiyRLXN9MmuIAZudeWiAfyc7sbod7d8Euppok6neHVgOBGeDsPxXzeuPNlL-0sJVlcVU05Bq1sxLXvsQeym1oPmohTW12fsbfNIkxw2WCyOq6kCW6zAissXW0DtcfmT8oiocCncaCtpV9BzGfUWoRCoFi9r1-29KPYOoNMSzurbKrkZ3RSG6eknxEJlpo_eSk0A7cesv9MT3f0ZHr7eoJdouwEr4D_gm4SUnQHyfPX2Epv9AyxIee1RiMA-pQVTJiz6ojfeRWB-9GyGImOveWpkquSM2XM6uMXYHrz1jrkQBEGfF-O7\" 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#plantuml:NP9DJiCm48NtaNA7KJUKdrPq6mb4-LjN80xWEjCoO8-3CqP528cZ85Rq7Ba99y5EcXPr5V-zzxvdvw8MvILOasVQgBg6cM923-zv1d2idbmGz5Clf0qELVSjOEPT6KXEu4NU2Y2Mmm9U7PMjg0vLvSdkP5HEU-6zUE9bF3rtpg3YFFl8isrqvxh9PcVxy-qyUguAkAJbDMgoohIBoFVYzFE-tm4yC5HTamg3W7OioEJX59elg4oe2OElOTEeJfAhH_KIi5y2twmNpTeZQmHSAIreaGKcK7MOURQvgi5a04UZ4GnEn-EZmRP5qOPIqfmd9dQ24LF4sOH-r_miOp2K23OOeSgG9cdMKAJTtyzlI7Pm1hTAntqbj3Zv1pwCX6aMGu9NyG5wrIHARdQuWM7eveQMIXnvFFndFjap3qof_n1NumXVFJfnYIxMNP3P-NTKqm3M4TTjGAVexpA9jBDMSPdoa4j8tVFi8WxZd_O7\" \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\" data-nodeid=\"229\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass Panier {\r\n  +ajouterArticle(article: Produit, qty: int): void\r\n  +supprimerArticle(idArticle: String): boolean\r\n}\r\n\r\nclass Produit {\r\n  +nom: String\r\n  +prix: BigDecimal\r\n  +enStock: boolean\r\n}\r\n\r\n' Un panier peut contenir 0 \u00e0 plusieurs articles\r\n' Chaque article r\u00e9f\u00e9rence exactement 1 produit\r\nPanier \"1\" *-- \"0..*\" Produit : contient &gt;\r\n\r\nnote bottom\r\n  R\u00e8gles de multiplicit\u00e9 :\r\n  \u2022 0..* = Facultatif, plusieurs (le plus courant)\r\n  \u2022 1 = Exactement un (obligatoire)\r\n  \u2022 0..1 = Facultatif, unique (ex. : photo de profil)\r\n  \u2022 1..* = Au moins un (ex. : articles de commande)\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#plantuml:NP9DJiCm48NtaNA7KJUKdrPq6mb4-LjN80xWEjCoO8-3CqP528cZ85Rq7Ba99y5EcXPr5V-zzxvdvw8MvILOasVQgBg6cM923-zv1d2idbmGz5Clf0qELVSjOEPT6KXEu4NU2Y2Mmm9U7PMjg0vLvSdkP5HEU-6zUE9bF3rtpg3YFFl8isrqvxh9PcVxy-qyUguAkAJbDMgoohIBoFVYzFE-tm4yC5HTamg3W7OioEJX59elg4oe2OElOTEeJfAhH_KIi5y2twmNpTeZQmHSAIreaGKcK7MOURQvgi5a04UZ4GnEn-EZmRP5qOPIqfmd9dQ24LF4sOH-r_miOp2K23OOeSgG9cdMKAJTtyzlI7Pm1hTAntqbj3Zv1pwCX6aMGu9NyG5wrIHARdQuWM7eveQMIXnvFFndFjap3qof_n1NumXVFJfnYIxMNP3P-NTKqm3M4TTjGAVexpA9jBDMSPdoa4j8tVFi8WxZd_O7\" \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#plantuml:NPB1JiCm38RlbVeELYziOwlMQoNG1kom0m9fJn1IiqKaSKdSYGeXyImy6a-2sswmSOj__VxzsSeYiWhSE9icsgeOOREZkZP-UoiolAS9mAMggZMZ6zM1gaPp2O_3Omglt9PWF8zBs9EfUdT0HtiyRLXN9MmuIAZudeWiAfyc7sbod7d8Euppok6neHVgOBGeDsPxXzeuPNlL-0sJVlcVU05Bq1sxLXvsQeym1oPmohTW12fsbfNIkxw2WCyOq6kCW6zAissXW0DtcfmT8oiocCncaCtpV9BzGfUWoRCoFi9r1-29KPYOoNMSzurbKrkZ3RSG6eknxEJlpo_eSk0A7cesv9MT3f0ZHr7eoJdouwEr4D_gm4SUnQHyfPX2Epv9AyxIee1RiMA-pQVTJiz6ojfeRWB-9GyGImOveWpkquSM2XM6uMXYHrz1jrkQBEGfF-O7\" 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<h3 data-nodeid=\"230\"><strong data-nodeid=\"516\">3. Classes abstraites vs. Interfaces<\/strong><\/h3>\n<p id=\"qaBNIMo\"><img alt=\"\" class=\"alignnone size-full wp-image-24660\" decoding=\"async\" height=\"374\" loading=\"lazy\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4.png 916w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-300x122.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-768x314.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-150x61.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-400x163.png 400w\" width=\"916\"\/><\/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#plantuml:ZPBDIiGm4CVlWRp3W1UbxWiK3olemOEBq2UOfjDs95yaamLHtzsqu69tz-0jpCTl_ZF_xBDWakAiLjXdIMW4ZCMSuH24HpOe73nyQWLmayXmPFBIGYU9_RH67UMC4_sDDITM9Z_SthNGXs09_PgqONeYoqTA7qlg67ZGwbihhTWBfH4DmRD3jfSIcbpwTp8R0St5Z3DMzzfT8SKvU3eKrrFw1sq3UFZQxIuLNYiw6xsGV122nDCi44ROPW4UDoPKOJCc6g2wLBiQYDKiHWlieYLNdJWrlloksy9RIGGc-1Lq3wvOuLeEx6TABEZhJNA9CIJHgcuBYoIjzlLPFy8F\" 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#plantuml:ZP9HIiD048RV0xd3W0ygjHS8FXIA3mNr9LvWcapIaTtPC3ifY7e0Zz9pv6Bkjb88YlgsxF_FD__Ex2eQgetUbGLkeoas1et36E4n67VSe74GU2qBW8kMeh6W8IjLK9koz4V1KupOp-uMPnp9FhoGNbrNi0t14SfH9r7gENb8xtclo358zkm3jsNnNXPbmMAa7JOq2tFdaTqfqIAEpsIpjZzr-mLMFzHVA1azQNWYHyCk2FqFEXlIxTjo-JtfNwQK89Ca685olpC8tSoG4wppIWXEC-Nah63wC3GOqlQmdmwm0FQ3cmwUn4wTiiJa76N0vlpw2jP14YNLZde3SHo6e0OjWRlSJGVbn2FmepCUSYr92pbSMQpICVsKJm00\" \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\" data-nodeid=\"231\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nabstract class Notification {\r\n  #destinataire: String\r\n  #message: String\r\n  +abstract envoyer(): boolean\r\n  +enregistrerLivraison(): void\r\n}\r\n\r\ninterface NotificationEmail {\r\n  +sujet: String\r\n  +envoyer(): boolean\r\n}\r\n\r\ninterface NotificationSMS {\r\n  +numeroTelephone: String\r\n  +envoyer(): boolean\r\n}\r\n\r\nNotification &lt;|-- NotificationEmail\r\nNotification &lt;|-- NotificationSMS\r\n\r\nnote right of Notification\r\n  Classe abstraite : \u00c9tat partag\u00e9 + impl\u00e9mentation partielle\r\n  Interface : Contrat pur, support de l'h\u00e9ritage multiple\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#plantuml:ZP9HIiD048RV0xd3W0ygjHS8FXIA3mNr9LvWcapIaTtPC3ifY7e0Zz9pv6Bkjb88YlgsxF_FD__Ex2eQgetUbGLkeoas1et36E4n67VSe74GU2qBW8kMeh6W8IjLK9koz4V1KupOp-uMPnp9FhoGNbrNi0t14SfH9r7gENb8xtclo358zkm3jsNnNXPbmMAa7JOq2tFdaTqfqIAEpsIpjZzr-mLMFzHVA1azQNWYHyCk2FqFEXlIxTjo-JtfNwQK89Ca685olpC8tSoG4wppIWXEC-Nah63wC3GOqlQmdmwm0FQ3cmwUn4wTiiJa76N0vlpw2jP14YNLZde3SHo6e0OjWRlSJGVbn2FmepCUSYr92pbSMQpICVsKJm00\" \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#plantuml:ZPBDIiGm4CVlWRp3W1UbxWiK3olemOEBq2UOfjDs95yaamLHtzsqu69tz-0jpCTl_ZF_xBDWakAiLjXdIMW4ZCMSuH24HpOe73nyQWLmayXmPFBIGYU9_RH67UMC4_sDDITM9Z_SthNGXs09_PgqONeYoqTA7qlg67ZGwbihhTWBfH4DmRD3jfSIcbpwTp8R0St5Z3DMzzfT8SKvU3eKrrFw1sq3UFZQxIuLNYiw6xsGV122nDCi44ROPW4UDoPKOJCc6g2wLBiQYDKiHWlieYLNdJWrlloksy9RIGGc-1Lq3wvOuLeEx6TABEZhJNA9CIJHgcuBYoIjzlLPFy8F\" 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<hr data-nodeid=\"232\"\/>\n<h2 data-nodeid=\"233\"><strong data-nodeid=\"522\">P\u00e9ch\u00e9s courants et comment les \u00e9viter<\/strong><\/h2>\n<table data-nodeid=\"235\">\n<thead data-nodeid=\"236\">\n<tr data-nodeid=\"237\">\n<th data-nodeid=\"239\">Pi\u00e8ge<\/th>\n<th data-nodeid=\"240\">Sympt\u00f4me<\/th>\n<th data-nodeid=\"241\">Solution<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"245\">\n<tr data-nodeid=\"246\">\n<td data-nodeid=\"247\"><strong data-nodeid=\"529\">Surconception<\/strong><\/td>\n<td data-nodeid=\"248\">Sch\u00e9mas avec plus de 50 classes, difficile \u00e0 lire<\/td>\n<td data-nodeid=\"249\">Commencez par un mod\u00e8le conceptuel ; divisez en plusieurs sch\u00e9mas par contexte born\u00e9<\/td>\n<\/tr>\n<tr data-nodeid=\"250\">\n<td data-nodeid=\"251\"><strong data-nodeid=\"535\">Confusion entre agr\u00e9gation et composition<\/strong><\/td>\n<td data-nodeid=\"252\">Gestion du cycle de vie des objets floue<\/td>\n<td data-nodeid=\"253\">Posez-vous la question : \u00ab Si l&#8217;ensemble est d\u00e9truit, les parties survivent-elles ? \u00bb Si non \u2192 utilisez la composition (<code data-backticks=\"1\" data-nodeid=\"542\">*--<\/code>)<\/td>\n<\/tr>\n<tr data-nodeid=\"254\">\n<td data-nodeid=\"255\"><strong data-nodeid=\"547\">Ignorer la navigabilit\u00e9<\/strong><\/td>\n<td data-nodeid=\"256\">Fl\u00e8ches bidirectionnelles partout<\/td>\n<td data-nodeid=\"257\">Ajouter des fl\u00e8ches de navigabilit\u00e9 uniquement l\u00e0 o\u00f9 une travers\u00e9e est n\u00e9cessaire dans le code<\/td>\n<\/tr>\n<tr data-nodeid=\"258\">\n<td data-nodeid=\"259\"><strong data-nodeid=\"553\">M\u00e9lange des niveaux d&#8217;abstraction<\/strong><\/td>\n<td data-nodeid=\"260\">DTOs m\u00e9lang\u00e9s avec des classes d&#8217;entit\u00e9 dans le m\u00eame diagramme<\/td>\n<td data-nodeid=\"261\">S\u00e9parer les diagrammes par perspective (conceptuelle\/sp\u00e9cification\/impl\u00e9mentation)<\/td>\n<\/tr>\n<tr data-nodeid=\"262\">\n<td data-nodeid=\"263\"><strong data-nodeid=\"559\">N\u00e9gliger le contr\u00f4le de version<\/strong><\/td>\n<td data-nodeid=\"264\">Les diagrammes deviennent obsol\u00e8tes<\/td>\n<td data-nodeid=\"265\">Utiliser des fichiers texte PlantUML dans Git ; g\u00e9n\u00e9rer les images dans le pipeline CI\/CD<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"266\"\/>\n<h2 data-nodeid=\"267\"><strong data-nodeid=\"565\">Recommandation d&#8217;outillage : Pourquoi PlantUML ?<\/strong><\/h2>\n<p data-nodeid=\"268\">Pour l&#8217;\u00e9tude de cas ci-dessus,\u00a0<strong data-nodeid=\"595\">PlantUML<\/strong>\u00a0a \u00e9t\u00e9 choisi car il :<br \/>\n\u2705\u00a0<strong data-nodeid=\"596\">Bas\u00e9 sur du texte<\/strong>: Les diagrammes sont du code \u2014 versionnables, comparables, r\u00e9visables<br \/>\n\u2705\u00a0<strong data-nodeid=\"597\">Portable<\/strong>: G\u00e9n\u00e8re localement ou via un service cloud ; s&#8217;int\u00e8gre \u00e0 Confluence, GitHub, VS Code<br \/>\n\u2705\u00a0<strong data-nodeid=\"598\">Maintenable<\/strong>: Mettre \u00e0 jour la logique du diagramme sans redessiner les bo\u00eetes<br \/>\n\u2705\u00a0<strong data-nodeid=\"599\">Collaboratif<\/strong>: Les non-designers peuvent contribuer via une syntaxe simple<\/p>\n<p data-nodeid=\"269\"><strong data-nodeid=\"603\">Workflow d&#8217;exemple :<\/strong><\/p>\n<pre class=\"lang-bash\" data-nodeid=\"270\"><code data-language=\"bash\"># 1. \u00c9crire le diagramme en texte\r\necho '@startumlnclass Utilisateur { +nom: Cha\u00eene }n@enduml' &gt; DiagrammeUtilisateur.puml\r\n\r\n# 2. G\u00e9n\u00e9rer PNG\/SVG\r\nplantuml -tpng DiagrammeUtilisateur.puml\r\n\r\n# 3. Valider \u00e0 la fois le fichier .puml et l'image g\u00e9n\u00e9r\u00e9e dans Git\r\ngit add DiagrammeUtilisateur.puml DiagrammeUtilisateur.png\r\n<\/code><\/pre>\n<hr data-nodeid=\"271\"\/>\n<h2 data-nodeid=\"272\"><strong data-nodeid=\"607\">Conclusion<\/strong><\/h2>\n<p data-nodeid=\"273\">Les diagrammes de classes sont bien plus que des exercices acad\u00e9miques : ce sont des artefacts vivants qui favorisent l&#8217;alignement, r\u00e9duisent la dette technique et acc\u00e9l\u00e8rent l&#8217;int\u00e9gration tout au long du cycle de vie du d\u00e9veloppement logiciel. Comme le montre notre \u00e9tude de cas e-commerce, la v\u00e9ritable puissance des diagrammes de classes appara\u00eet lorsque ceux-ci \u00e9voluent selon trois perspectives essentielles :<\/p>\n<p data-nodeid=\"274\">\ud83d\udd39\u00a0<strong data-nodeid=\"626\">Conceptuel<\/strong>: Placer les parties prenantes dans une compr\u00e9hension partag\u00e9e du domaine<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"627\">Sp\u00e9cification<\/strong>: D\u00e9finir des interfaces claires pour une architecture modulaire<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"628\">Impl\u00e9mentation<\/strong>: Guider les d\u00e9veloppeurs gr\u00e2ce \u00e0 des plans pr\u00e9cis et conscients des technologies<\/p>\n<p data-nodeid=\"275\">En adoptant\u00a0<strong data-nodeid=\"638\">PlantUML<\/strong>En adoptant PlantUML pour des pratiques de diagrammes en tant que code, les \u00e9quipes gagnent en agilit\u00e9 pour it\u00e9rer les conceptions en parall\u00e8le avec le code, garantissant que la documentation ne reste jamais en retard par rapport \u00e0 l&#8217;impl\u00e9mentation. Souvenez-vous : le meilleur diagramme de classes n&#8217;est pas le plus d\u00e9taill\u00e9 \u2014 c&#8217;est celui qui r\u00e9pond aux bonnes questions pour son public au bon moment.<\/p>\n<p data-nodeid=\"276\"><strong data-nodeid=\"643\">Point cl\u00e9 final<\/strong>: Commencez simplement, validez aupr\u00e8s des parties prenantes, affinez progressivement, et reliez toujours les \u00e9l\u00e9ments du diagramme \u00e0 une valeur m\u00e9tier concr\u00e8te. Lorsque les diagrammes de classes deviennent des outils collaboratifs plut\u00f4t que des livrables, ils se transforment de simples surcharges en catalyseurs de logiciels meilleurs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Dans le paysage actuel du d\u00e9veloppement logiciel complexe, une communication claire et une mod\u00e9lisation pr\u00e9cise du syst\u00e8me sont essentielles pour le succ\u00e8s du projet. Parmi les outils les plus puissants dans l&#8217;arsenal d&#8217;un architecte logiciel se trouve le\u00a0Diagramme de classes UML\u2014un langage visuel qui comble le foss\u00e9 entre les exigences abstraites et la mise [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[62,36],"tags":[],"class_list":["post-9912","post","type-post","status-publish","format-standard","hentry","category-ai","category-uml","loop-entry","clr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais<\/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:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais\" \/>\n<meta property=\"og:description\" content=\"Introduction Dans le paysage actuel du d\u00e9veloppement logiciel complexe, une communication claire et une mod\u00e9lisation pr\u00e9cise du syst\u00e8me sont essentielles pour le succ\u00e8s du projet. Parmi les outils les plus puissants dans l&#8217;arsenal d&#8217;un architecte logiciel se trouve le\u00a0Diagramme de classes UML\u2014un langage visuel qui comble le foss\u00e9 entre les exigences abstraites et la mise [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:site_name\" content=\"Visual Paradigm Blog Fran\u00e7ais\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T07:55:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-30T08:08:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\" \/>\n<meta name=\"author\" content=\"Admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"url\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"name\":\"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais\",\"isPartOf\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\",\"datePublished\":\"2026-05-21T07:55:49+00:00\",\"dateModified\":\"2026-05-30T08:08:16+00:00\",\"author\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\",\"url\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\",\"contentUrl\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.visual-paradigm.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/#website\",\"url\":\"https:\/\/blog.visual-paradigm.com\/fr\/\",\"name\":\"Visual Paradigm Blog Fran\u00e7ais\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.visual-paradigm.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"caption\":\"Admin\"},\"url\":\"https:\/\/blog.visual-paradigm.com\/fr\/author\/vpadminuser\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais","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:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_locale":"fr_FR","og_type":"article","og_title":"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais","og_description":"Introduction Dans le paysage actuel du d\u00e9veloppement logiciel complexe, une communication claire et une mod\u00e9lisation pr\u00e9cise du syst\u00e8me sont essentielles pour le succ\u00e8s du projet. Parmi les outils les plus puissants dans l&#8217;arsenal d&#8217;un architecte logiciel se trouve le\u00a0Diagramme de classes UML\u2014un langage visuel qui comble le foss\u00e9 entre les exigences abstraites et la mise [&hellip;]","og_url":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_site_name":"Visual Paradigm Blog Fran\u00e7ais","article_published_time":"2026-05-21T07:55:49+00:00","article_modified_time":"2026-05-30T08:08:16+00:00","og_image":[{"url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","type":"","width":"","height":""}],"author":"Admin","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Admin","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","url":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","name":"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML - Visual Paradigm Blog Fran\u00e7ais","isPartOf":{"@id":"https:\/\/blog.visual-paradigm.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","datePublished":"2026-05-21T07:55:49+00:00","dateModified":"2026-05-30T08:08:16+00:00","author":{"@id":"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/a649c442f11a53040710ddec750926c6"},"breadcrumb":{"@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage","url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","contentUrl":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.visual-paradigm.com\/fr\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.visual-paradigm.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Ma\u00eetriser les diagrammes de classes UML : une \u00e9tude de cas pratique en conception de syst\u00e8mes avec PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/blog.visual-paradigm.com\/fr\/#website","url":"https:\/\/blog.visual-paradigm.com\/fr\/","name":"Visual Paradigm Blog Fran\u00e7ais","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.visual-paradigm.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/a649c442f11a53040710ddec750926c6","name":"Admin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.visual-paradigm.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","caption":"Admin"},"url":"https:\/\/blog.visual-paradigm.com\/fr\/author\/vpadminuser\/"}]}},"modified_by":"Admin","_links":{"self":[{"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/posts\/9912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/comments?post=9912"}],"version-history":[{"count":0,"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/posts\/9912\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/media?parent=9912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/categories?post=9912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/fr\/wp-json\/wp\/v2\/tags?post=9912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}