{"id":9940,"date":"2026-05-21T15:55:49","date_gmt":"2026-05-21T07:55:49","guid":{"rendered":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"},"modified":"2026-05-30T16:07:04","modified_gmt":"2026-05-30T08:07:04","slug":"mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml","status":"publish","type":"post","link":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","title":{"rendered":"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML"},"content":{"rendered":"<h2 data-nodeid=\"111\"><strong data-nodeid=\"293\">Introducci\u00f3n<\/strong><\/h2>\n<p data-nodeid=\"112\">En el actual entorno complejo del desarrollo de software, la comunicaci\u00f3n clara y el modelado preciso del sistema son fundamentales para el \u00e9xito del proyecto. Entre las herramientas m\u00e1s poderosas en el kit de herramientas de un arquitecto de software est\u00e1 el\u00a0<strong data-nodeid=\"303\">Diagrama de clases UML<\/strong>\u2014un lenguaje visual que cierra la brecha entre los requisitos abstractos y la implementaci\u00f3n concreta.<\/p>\n<p data-nodeid=\"113\">Este estudio de caso explora c\u00f3mo los diagramas de clases sirven como el cimiento del dise\u00f1o orientado a objetos, permitiendo a los equipos modelar la estructura est\u00e1tica del sistema, definir relaciones entre entidades y establecer contratos claros para el desarrollo. A trav\u00e9s de un ejemplo pr\u00e1ctico de un sistema de gesti\u00f3n de pedidos para comercio electr\u00f3nico, demostraremos c\u00f3mo refinar progresivamente los diagramas de clases desde tres perspectivas de desarrollo\u2014conceptual, especificaci\u00f3n e implementaci\u00f3n\u2014mientras aprovechamos\u00a0<strong data-nodeid=\"311\">PlantUML<\/strong>\u00a0para documentaci\u00f3n ejecutable y controlada por versiones.<\/p>\n<p data-nodeid=\"114\">Ya sea que usted sea un analista de negocios modelando conceptos del dominio, un desarrollador dise\u00f1ando APIs o un l\u00edder de equipo asegurando la consistencia arquitect\u00f3nica, esta gu\u00eda proporciona ideas pr\u00e1cticas para crear diagramas de clases que promuevan la claridad, reduzcan la ambig\u00fcedad y aceleren la entrega.<\/p>\n<hr data-nodeid=\"115\"\/>\n<h2 data-nodeid=\"116\"><strong data-nodeid=\"318\">Comprender los diagramas de clases: repaso de conceptos fundamentales<\/strong><\/h2>\n<p data-nodeid=\"117\"><em data-nodeid=\"322\">(Resumido a partir de conocimientos fundamentales)<\/em><\/p>\n<p data-nodeid=\"118\">Un\u00a0<strong data-nodeid=\"328\">Diagrama de clases<\/strong>\u00a0en UML es un diagrama de estructura est\u00e1tica que visualiza:<\/p>\n<ul data-nodeid=\"119\">\n<li data-nodeid=\"120\">\n<p data-nodeid=\"121\"><strong data-nodeid=\"333\">Clases<\/strong>: Planos que definen objetos con atributos (estado) y operaciones (comportamiento)<\/p>\n<\/li>\n<li data-nodeid=\"122\">\n<p data-nodeid=\"123\"><strong data-nodeid=\"338\">Relaciones<\/strong>: Herencia, asociaci\u00f3n, agregaci\u00f3n, composici\u00f3n y dependencia<\/p>\n<\/li>\n<li data-nodeid=\"124\">\n<p data-nodeid=\"125\"><strong data-nodeid=\"357\">Restricciones<\/strong>: Visibilidad (<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>), multiplicidad (<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>), y navegabilidad<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"126\"><strong data-nodeid=\"361\">Elementos clave de notaci\u00f3n<\/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>Editar PlantUML en 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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"128\"><strong data-nodeid=\"365\">Referencia r\u00e1pida de tipos de relaci\u00f3n<\/strong><\/h3>\n<table data-nodeid=\"130\">\n<thead data-nodeid=\"131\">\n<tr data-nodeid=\"132\">\n<th data-nodeid=\"134\">Tipo<\/th>\n<th data-nodeid=\"135\">S\u00edmbolo<\/th>\n<th data-nodeid=\"136\">Significado<\/th>\n<th data-nodeid=\"137\">Ejemplo<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"142\">\n<tr data-nodeid=\"143\">\n<td data-nodeid=\"144\"><strong data-nodeid=\"373\">Herencia<\/strong><\/td>\n<td data-nodeid=\"145\">`\u2013<\/td>\n<td data-nodeid=\"146\">&gt;`<\/td>\n<td data-nodeid=\"147\">\u201ces-un\u201d<\/td>\n<\/tr>\n<tr data-nodeid=\"150\">\n<td data-nodeid=\"151\"><strong data-nodeid=\"384\">Asociaci\u00f3n<\/strong><\/td>\n<td data-nodeid=\"152\"><code data-backticks=\"1\" data-nodeid=\"385\">--<\/code><\/td>\n<td data-nodeid=\"153\">Enlace estructural<\/td>\n<td data-nodeid=\"154\"><code data-backticks=\"1\" data-nodeid=\"387\">Order -- Customer<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"155\">\n<td data-nodeid=\"156\"><strong data-nodeid=\"391\">Agregaci\u00f3n<\/strong><\/td>\n<td data-nodeid=\"157\"><code data-backticks=\"1\" data-nodeid=\"392\">o--<\/code><\/td>\n<td data-nodeid=\"158\">\u201ctiene-un\u201d (d\u00e9bil)<\/td>\n<td data-nodeid=\"159\"><code data-backticks=\"1\" data-nodeid=\"397\">Warehouse o-- Product<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"160\">\n<td data-nodeid=\"161\"><strong data-nodeid=\"401\">Composici\u00f3n<\/strong><\/td>\n<td data-nodeid=\"162\"><code data-backticks=\"1\" data-nodeid=\"402\">*--<\/code><\/td>\n<td data-nodeid=\"163\">\u201cposee-un\u201d (fuerte)<\/td>\n<td data-nodeid=\"164\"><code data-backticks=\"1\" data-nodeid=\"407\">Order *-- OrderItem<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"165\">\n<td data-nodeid=\"166\"><strong data-nodeid=\"411\">Dependencia<\/strong><\/td>\n<td data-nodeid=\"167\"><code data-backticks=\"1\" data-nodeid=\"412\">..&gt;<\/code><\/td>\n<td data-nodeid=\"168\">\u201cusa\u201d (temporal)<\/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\">Estudio de caso: Sistema de gesti\u00f3n de pedidos de comercio electr\u00f3nico<\/strong><\/h2>\n<h3 data-nodeid=\"172\"><strong data-nodeid=\"425\">Requisitos del negocio<\/strong><\/h3>\n<p data-nodeid=\"173\">Una tienda en l\u00ednea necesita un sistema para:<\/p>\n<ol data-nodeid=\"174\">\n<li data-nodeid=\"175\">\n<p data-nodeid=\"176\">Gestionar clientes, productos y pedidos<\/p>\n<\/li>\n<li data-nodeid=\"177\">\n<p data-nodeid=\"178\">Soportar art\u00edculos de pedido con cantidades y precios<\/p>\n<\/li>\n<li data-nodeid=\"179\">\n<p data-nodeid=\"180\">Gestionar m\u00faltiples m\u00e9todos de pago<\/p>\n<\/li>\n<li data-nodeid=\"181\">\n<p data-nodeid=\"182\">Rastrear el estado del pedido a trav\u00e9s de un ciclo de vida<\/p>\n<\/li>\n<li data-nodeid=\"183\">\n<p data-nodeid=\"184\">Permitir que los productos pertenezcan a categor\u00edas<\/p>\n<\/li>\n<li data-nodeid=\"185\">\n<p data-nodeid=\"186\">Soportar compra como invitado (asociaci\u00f3n de cliente opcional)<\/p>\n<\/li>\n<\/ol>\n<h3 data-nodeid=\"187\"><strong data-nodeid=\"436\">Fase 1: Modelo conceptual (perspectiva del dominio)<\/strong><\/h3>\n<p data-nodeid=\"188\"><em data-nodeid=\"440\">Independiente del lenguaje, centrado en conceptos del mundo real<\/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>Editar PlantUML en 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:VLEnQjn04Eq5-eT1ZS5W4xTN11EVYnG14yuVCDuTEmkh6R4x2iGc7vJYAdTfzMEPNProfmkaqkXftflPzrQtMJ7fsCUsqMclOnJu8fxiuOGT3JfYtC1M-i11m9F1FILdDKLocgPt3axQfcrSn9pXBWPY9NXh6m2M_YbHgPoaH7A_eW3uaCYvOC2Mxldxj3Vqvr7h8OaVdSgvcAViKXWgiRmFfXBa4sPQqUzGwKNIjCV_2vnE91_yCc_wRIULBSrWWPx9VSDJWCozkUg5LNQY65U2dvNwXJ3BEcGD7lrnyKSEba6eCdbyqdz47l3bGEwdNog-x6HG0OBVqYuXPtH_xQYhr0AJitLtWVfXSVO2lb94cygKssP9gxlfuEeAkW_NrvVTui864c4ChmWVs-Q0bSRBqdbJErV7svGheoP8bR24jzO-O-20vW41yPepDzT1tMcG6nWegOqmplbUnxMgOMNzF58qkK5IwMqRDcyj_LHoB9VvcEGZByTEPB5aimKX8WIpXwkrXyi_92pzFyf7FN6-V1uPtEnespm7XZAkZBqbzlQB_G40\" \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\nt\u00edtulo Modelo conceptual: Dominio de comercio electr\u00f3nico\r\n\r\nclass Cliente {\r\n  nombre\r\n  correoElectr\u00f3nico\r\n  direcci\u00f3nDeEnv\u00edo\r\n}\r\n\r\nclass Producto {\r\n  nombre\r\n  descripci\u00f3n\r\n  precioBase\r\n}\r\n\r\nclass Categor\u00eda {\r\n  nombre\r\n  descripci\u00f3n\r\n}\r\n\r\nclass Pedido {\r\n  n\u00fameroDePedido\r\n  fechaDePedido\r\n  estado\r\n  montoTotal\r\n}\r\n\r\nclass ItemDePedido {\r\n  cantidad\r\n  precioUnitario\r\n  subtotal\r\n}\r\n\r\nclass Pago {\r\n  m\u00e9todoDePago\r\n  idDeTransacci\u00f3n\r\n  monto\r\n  marcaDeTiempo\r\n}\r\n\r\n' Relaciones\r\nCliente \"1\" -- \"0..*\" Pedido : realiza &gt;\r\nPedido \"1\" *-- \"1..*\" ItemDePedido : contiene &gt;\r\nProducto \"1\" -- \"0..*\" ItemDePedido : aparece en &gt;\r\nProducto \"0..*\" -- \"1\" Categor\u00eda : pertenece a &gt;\r\nPedido \"1\" -- \"1..*\" Pago : resuelto por &gt;\r\n\r\nnota derecha de Pedido\r\n  Un Pedido representa la intenci\u00f3n de compra\r\n  y la transacci\u00f3n de un cliente\r\nfin nota\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:VLEnQjn04Eq5-eT1ZS5W4xTN11EVYnG14yuVCDuTEmkh6R4x2iGc7vJYAdTfzMEPNProfmkaqkXftflPzrQtMJ7fsCUsqMclOnJu8fxiuOGT3JfYtC1M-i11m9F1FILdDKLocgPt3axQfcrSn9pXBWPY9NXh6m2M_YbHgPoaH7A_eW3uaCYvOC2Mxldxj3Vqvr7h8OaVdSgvcAViKXWgiRmFfXBa4sPQqUzGwKNIjCV_2vnE91_yCc_wRIULBSrWWPx9VSDJWCozkUg5LNQY65U2dvNwXJ3BEcGD7lrnyKSEba6eCdbyqdz47l3bGEwdNog-x6HG0OBVqYuXPtH_xQYhr0AJitLtWVfXSVO2lb94cygKssP9gxlfuEeAkW_NrvVTui864c4ChmWVs-Q0bSRBqdbJErV7svGheoP8bR24jzO-O-20vW41yPepDzT1tMcG6nWegOqmplbUnxMgOMNzF58qkK5IwMqRDcyj_LHoB9VvcEGZByTEPB5aimKX8WIpXwkrXyi_92pzFyf7FN6-V1uPtEnespm7XZAkZBqbzlQB_G40\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"190\"><strong data-nodeid=\"444\">Decisiones clave de dise\u00f1o:<\/strong><\/p>\n<ul data-nodeid=\"191\">\n<li data-nodeid=\"192\">\n<p data-nodeid=\"193\">Composici\u00f3n (<code data-backticks=\"1\" data-nodeid=\"446\">*--<\/code>) entre\u00a0<code data-backticks=\"1\" data-nodeid=\"448\">Pedido<\/code>\u00a0y\u00a0<code data-backticks=\"1\" data-nodeid=\"450\">ItemDePedido<\/code>: Los art\u00edculos no pueden existir sin un pedido<\/p>\n<\/li>\n<li data-nodeid=\"194\">\n<p data-nodeid=\"195\">Asociaci\u00f3n entre\u00a0<code data-backticks=\"1\" data-nodeid=\"453\">Producto<\/code>\u00a0y\u00a0<code data-backticks=\"1\" data-nodeid=\"455\">Categor\u00eda<\/code>: Los productos pueden ser reclasificados<\/p>\n<\/li>\n<li data-nodeid=\"196\">\n<p data-nodeid=\"197\">Multiplicidad\u00a0<code data-backticks=\"1\" data-nodeid=\"458\">0..*<\/code>\u00a0para Cliente-Pedido: admite compra como invitado<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"198\"\/>\n<h3 data-nodeid=\"199\"><strong data-nodeid=\"463\">Fase 2: Modelo de especificaci\u00f3n (perspectiva de interfaz)<\/strong><\/h3>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">Enf\u00f3quese en los contratos de software, ocultando los detalles de implementaci\u00f3n<\/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>Editar PlantUML en 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:TLHBZjim3DqRy1suQu86EO1H15CWcm0pc44o5s1a9jLKbbo9Cf0MFL9NFS9Sh9Jif77YMLdYvubyVEP3OFGS6rCM_Fw7et7mv6gIJqr0eIMb3rgXqkz_RGKRo-GFg2WaTo3VQQLTMPI5xZq_OVFiQ_Axx2BuLHO0dvKdPCgEcOg1NKD-KrUmOw_jSG6QgGaLFEh0NtBKHWphr-VLl89ybtC6EXBtA2v7NI1kus9Rdn_SCN8CjmaB2Da-vFL1Wh9tpX3QlceqAfeppgjZD1FlFZbBfxBuFIRX1KyDMNxnJhWApWz4jFrzyDuNrVQEDJ5g8yKDWTBM_7BPKeY6CvodGxJr6Oqzse2AjRFNcDYuQ7aeL62sEUcCSbFtndO2vVpfPe3VI7t_sabHkDT6ysacdTHHyVL3Fo9Q5by5WdV3fQSa5afpdPZ5zVotEH9p5s9UtG79CT1LrCHCEgVheJLbC8IBE8PsRZBw5kzqcSqVIZDxEOdYeW4nJAZglf01uhycnancwuZCNjDMYvva9cFDVO8rjMHhiagZF3R-_vRBrSHGAuW1OJKPVAVS2fGJmhJz8EF2RIKxeOjaEag1PM657C0zlkLTCafC3QtfeAti62FuLhJBJkJl4Gp2aGAdXPFoMgfrxS8ofJnY0DsqXbA5ifE4XW1j96aUElGQFSmQhRmxRwO5DCuw4QoSYDLoNXRoAAJAKeKFmfkildy0\" \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\nt\u00edtulo Modelo de especificaci\u00f3n: Interfaces de servicio\r\n\r\ninterfaz IOrderService {\r\n  +createOrder(customerId: String, items: List&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\ninterfaz IPaymentProcessor {\r\n  +processPayment(orderId: String, paymentDetails: PaymentDTO): PaymentResult\r\n  +refundPayment(transactionId: String, amount: Money): RefundResult\r\n}\r\n\r\ninterfaz IInventoryService {\r\n  +checkAvailability(productId: String, quantity: int): boolean\r\n  +reserveItems(orderId: String, items: List&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: List&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' Dependencias\r\nIOrderService ..&gt; IInventoryService : usa &gt;\r\nIOrderService ..&gt; IPaymentProcessor : coordina &gt;\r\nIOrderService ..&gt; OrderDTO : devuelve &gt;\r\n\r\nnota abajo de IOrderService\r\n  Define el contrato para la gesti\u00f3n de pedidos.\r\n  Las implementaciones pueden variar (microservicio, monolito, etc.)\r\nfin nota\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:TLHBZjim3DqRy1suQu86EO1H15CWcm0pc44o5s1a9jLKbbo9Cf0MFL9NFS9Sh9Jif77YMLdYvubyVEP3OFGS6rCM_Fw7et7mv6gIJqr0eIMb3rgXqkz_RGKRo-GFg2WaTo3VQQLTMPI5xZq_OVFiQ_Axx2BuLHO0dvKdPCgEcOg1NKD-KrUmOw_jSG6QgGaLFEh0NtBKHWphr-VLl89ybtC6EXBtA2v7NI1kus9Rdn_SCN8CjmaB2Da-vFL1Wh9tpX3QlceqAfeppgjZD1FlFZbBfxBuFIRX1KyDMNxnJhWApWz4jFrzyDuNrVQEDJ5g8yKDWTBM_7BPKeY6CvodGxJr6Oqzse2AjRFNcDYuQ7aeL62sEUcCSbFtndO2vVpfPe3VI7t_sabHkDT6ysacdTHHyVL3Fo9Q5by5WdV3fQSa5afpdPZ5zVotEH9p5s9UtG79CT1LrCHCEgVheJLbC8IBE8PsRZBw5kzqcSqVIZDxEOdYeW4nJAZglf01uhycnancwuZCNjDMYvva9cFDVO8rjMHhiagZF3R-_vRBrSHGAuW1OJKPVAVS2fGJmhJz8EF2RIKxeOjaEag1PM657C0zlkLTCafC3QtfeAti62FuLhJBJkJl4Gp2aGAdXPFoMgfrxS8ofJnY0DsqXbA5ifE4XW1j96aUElGQFSmQhRmxRwO5DCuw4QoSYDLoNXRoAAJAKeKFmfkildy0\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"202\"><strong data-nodeid=\"471\">Beneficios arquitect\u00f3nicos:<\/strong><\/p>\n<ul data-nodeid=\"203\">\n<li data-nodeid=\"204\">\n<p data-nodeid=\"205\">La segregaci\u00f3n de interfaz permite despliegue independiente<\/p>\n<\/li>\n<li data-nodeid=\"206\">\n<p data-nodeid=\"207\">Los DTOs desacoplan los modelos internos de los contratos de API<\/p>\n<\/li>\n<li data-nodeid=\"208\">\n<p data-nodeid=\"209\">Las dependencias muestran claramente los l\u00edmites de los servicios para microservicios<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"210\"\/>\n<h3 data-nodeid=\"211\"><strong data-nodeid=\"478\">Fase 3: Modelo de implementaci\u00f3n (perspectiva de c\u00f3digo)<\/strong><\/h3>\n<p data-nodeid=\"212\"><em data-nodeid=\"482\">Detalles espec\u00edficos de tecnolog\u00eda para la implementaci\u00f3n de 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>Editar PlantUML en 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:TLNRRXen47r7uXz6UIa9i5LVLsq40HfH4K10-ZvPJuZLNNlZ2n6jyabzwYVanphU2zT4GbvxBcTcZiT3ppeqpcTfi-7U_ZgVQhZJWlWZ26IMfvIHSfZ8jtygXa6AbcnG_S0DVbxcHgert6Zjcerc8yTdJuuWqLb4l6Ha4egq4MGY1f5k2t-Q3O0aeC0io4i1GBSt5b1OZaKCz_VZOIs_GxLTwPbYM6-TPanEezhLDgnTwM3OIj0cAEXRVpAv1Eaeip5Cf7LVYsXZ5bnNJaMm8JfY0vrW6hOhcL6bPbgSP-V2RraSAetJ3jD-fhroCTp8zP0IcM5QQikrZKA4MAtSQE4JjfkNcmuyksqCKhdB63PQYigUuoS-3Ha4yDRbEN0xG_EhRvTFCiz9j0xSNyDoGci8VaHjeE9ZPWikgbhFjQT5L1RF7eixBSgfP5v9DpSoeG-PMPDR-WVtVfcxKaZvx93wkfRvQ3eSZwQhKNaSpARVnukx_d1MdaVJd-E3msenkjqT1_tfO3IfZXpezUEEpN4RcZwoP3PSos7JpalLyb0JsEfxfr-a8G6LyorVvWioEVEZyxbzmVs2ScsbqsPRtS9USCGUNqL2rbQOhQC7qm7Xz2xUWhWo6zfi9x2vLhRkxmscKd1EbNP83cLgM-z3x3krw_FWLUHOSr7Sq6akzVivCdglQxbvo3pYxnEYQchRoHEQDRNmxC5r8473yGQyLkap_igWifWugHLNxDEgCzk67hqIBRTNXroNBWom3foZCzIYSDcZr4tpYJKfJqIjY6T2ESOklbp0LRVBtoYwkZXuX77ehN2NnGI5wzeXYgvFcodckPgJuk7AFpOyKHzur1p51nCQCXAINsJXscmeVc60a2A36M8I0-WkhL3EXFN1gaoiDoe7DFTuXZa5NwyG73uK4F0GkZ-aXaxRAFWFzgCMMBds1e4R1b9jWSgaUCTUEHdB8nWLKw5OnG8XXMQGHwaWf10Ixd7b_3Vq7m00\" \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\nt\u00edtulo Modelo de implementaci\u00f3n: Clases de Java\/Spring Boot\r\n\r\npaquete com.ecommerce.order.entity {\r\n  clase Order {\r\n    -@Id orderId: UUID\r\n    -@ManyToOne customer: Customer\r\n    -@OneToMany(cascade=ALL) items: List&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  clase 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    PENDIENTE\r\n    CONFIRMADO\r\n    ENVIADO\r\n    ENTREGADO\r\n    CANCELADO\r\n  }\r\n}\r\n\r\npaquete com.ecommerce.payment.service {\r\n  clase 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  interfaz 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' Relaciones\r\nOrder \"1\" *-- \"1..*\" OrderItem : composici\u00f3n &gt;\r\nOrder ..&gt; PaymentService : depende de &gt;\r\nPaymentService ..&gt; PaymentGateway : implementa mediante &gt;\r\n\r\nnota a la derecha de OrderItem\r\n  La anotaci\u00f3n @Entity se mapea a una tabla de base de datos.\r\n  Cascade=ALL asegura que los elementos se persistan con el pedido.\r\nfin nota\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:TLNRRXen47r7uXz6UIa9i5LVLsq40HfH4K10-ZvPJuZLNNlZ2n6jyabzwYVanphU2zT4GbvxBcTcZiT3ppeqpcTfi-7U_ZgVQhZJWlWZ26IMfvIHSfZ8jtygXa6AbcnG_S0DVbxcHgert6Zjcerc8yTdJuuWqLb4l6Ha4egq4MGY1f5k2t-Q3O0aeC0io4i1GBSt5b1OZaKCz_VZOIs_GxLTwPbYM6-TPanEezhLDgnTwM3OIj0cAEXRVpAv1Eaeip5Cf7LVYsXZ5bnNJaMm8JfY0vrW6hOhcL6bPbgSP-V2RraSAetJ3jD-fhroCTp8zP0IcM5QQikrZKA4MAtSQE4JjfkNcmuyksqCKhdB63PQYigUuoS-3Ha4yDRbEN0xG_EhRvTFCiz9j0xSNyDoGci8VaHjeE9ZPWikgbhFjQT5L1RF7eixBSgfP5v9DpSoeG-PMPDR-WVtVfcxKaZvx93wkfRvQ3eSZwQhKNaSpARVnukx_d1MdaVJd-E3msenkjqT1_tfO3IfZXpezUEEpN4RcZwoP3PSos7JpalLyb0JsEfxfr-a8G6LyorVvWioEVEZyxbzmVs2ScsbqsPRtS9USCGUNqL2rbQOhQC7qm7Xz2xUWhWo6zfi9x2vLhRkxmscKd1EbNP83cLgM-z3x3krw_FWLUHOSr7Sq6akzVivCdglQxbvo3pYxnEYQchRoHEQDRNmxC5r8473yGQyLkap_igWifWugHLNxDEgCzk67hqIBRTNXroNBWom3foZCzIYSDcZr4tpYJKfJqIjY6T2ESOklbp0LRVBtoYwkZXuX77ehN2NnGI5wzeXYgvFcodckPgJuk7AFpOyKHzur1p51nCQCXAINsJXscmeVc60a2A36M8I0-WkhL3EXFN1gaoiDoe7DFTuXZa5NwyG73uK4F0GkZ-aXaxRAFWFzgCMMBds1e4R1b9jWSgaUCTUEHdB8nWLKw5OnG8XXMQGHwaWf10Ixd7b_3Vq7m00\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"214\"><strong data-nodeid=\"486\">Destacados de la implementaci\u00f3n:<\/strong><\/p>\n<ul data-nodeid=\"215\">\n<li data-nodeid=\"216\">\n<p data-nodeid=\"217\">Anotaciones JPA (<code data-backticks=\"1\" data-nodeid=\"488\">@Entity<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"490\">@ManyToOne<\/code>) para mapeo ORM<\/p>\n<\/li>\n<li data-nodeid=\"218\">\n<p data-nodeid=\"219\">Inyecci\u00f3n de dependencias (<code data-backticks=\"1\" data-nodeid=\"493\">@Autowired<\/code>) para acoplamiento d\u00e9bil<\/p>\n<\/li>\n<li data-nodeid=\"220\">\n<p data-nodeid=\"221\">Enum para gesti\u00f3n segura de estados de pedidos<\/p>\n<\/li>\n<li data-nodeid=\"222\">\n<p data-nodeid=\"223\">M\u00e9todos auxiliares privados (<code data-backticks=\"1\" data-nodeid=\"497\">-validarDetallesPago<\/code>) encapsulan la l\u00f3gica<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"224\"\/>\n<h2 data-nodeid=\"225\"><strong data-nodeid=\"504\">Patrones avanzados y mejores pr\u00e1cticas<\/strong><\/h2>\n<h3 data-nodeid=\"226\"><strong data-nodeid=\"508\">1. Manejo de visibilidad y encapsulamiento<\/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>Editar PlantUML en 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:PL7DIWCn4Bulx3iCUAceBx28rAg7WeU5YlTfCcu7aapD94KG-rAzUUsBcQGUn9uIlldc-qdccZ2cx5tV6OUgy90f95nWC1WPuRFl0Av2zXJbD1fWbIA7gGqcIYjqLcQN0onuUYJ37bqTtMZ5pz0DQv8Yx5uY1aLZM0Bf0Cy5l_s3tLNsXK5diiEu38aYwIoX5dyhUUtep76FsN8JR_I0DTHEsFRTLz_rNP1447dQ992tVprR6HYFtsl7fgI-7vUmnOXW71SUAT17rHHjBM2ClCDQxwcydnNWvYZN40HA0L8k2Nztq5U5rgVibH0JrysnobT6K3uU0cmbWkPr_GLgBlj2US-KQ81NFWdQeXIb70uygnVmnuFDJlgEWeLQiE_cvLh-ymS0\" \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 CuentaBancaria {\r\n  +numeroCuenta: String\r\n  +getSaldo(): BigDecimal\r\n  -saldo: BigDecimal\r\n  -historialTransacciones: List&lt;Transaccion&gt;\r\n  #calcularInteres(tasa: double): BigDecimal\r\n  ~auditoriaInterna(): void\r\n}\r\n\r\nnote right of CuentaBancaria\r\n  + P\u00fablico: API para clientes externos\r\n  - Privado: Estado interno, no accesible externamente\r\n  # Protegido: Para extensi\u00f3n por subclases\r\n  ~ Paquete: Visible dentro del mismo m\u00f3dulo\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:PL7DIWCn4Bulx3iCUAceBx28rAg7WeU5YlTfCcu7aapD94KG-rAzUUsBcQGUn9uIlldc-qdccZ2cx5tV6OUgy90f95nWC1WPuRFl0Av2zXJbD1fWbIA7gGqcIYjqLcQN0onuUYJ37bqTtMZ5pz0DQv8Yx5uY1aLZM0Bf0Cy5l_s3tLNsXK5diiEu38aYwIoX5dyhUUtep76FsN8JR_I0DTHEsFRTLz_rNP1447dQ992tVprR6HYFtsl7fgI-7vUmnOXW71SUAT17rHHjBM2ClCDQxwcydnNWvYZN40HA0L8k2Nztq5U5rgVibH0JrysnobT6K3uU0cmbWkPr_GLgBlj2US-KQ81NFWdQeXIb70uygnVmnuFDJlgEWeLQiE_cvLh-ymS0\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">2. Multiplicidad en escenarios del mundo real<\/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>Editar PlantUML en 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:NLBDJjj04BvRyZkCSca20P5hf5QXQGyz5HNn09FTYJkmkxDTZoiaXCIhjFU-0DUy2K_2sCGDS1kDlx_vrgjMiMWNGrsvW6qBQoo5LTOISy4MxkeAu1YRGWsMRqfncelupgaiuM8_pS5XKlReby19PqluBUm7ug-ETSzZV_6VUQc5KsF0ZKWWJ7LrNrTZWX6szquIDuL6ph3AXHoRp6TkljWKCGnhIfSgxkQzwWUuIfPmE0joHvv0AL61Cq28dVifBLW7kt-k2zBs-3LwFAoWq9OA9SS8T8jECL9IWWMCLTJLkzOcYmaSdPp0vEpqz6Xok6W9JgmfSuTFVRGafhCHLOdz1J-eiGR00iOkAEV0RcYr__Rqy1TwDVW8txDTdp3Cn_JJkFlJcdJSFQRP25uOykkhk5qIcCecS8CgXMNsIdNnHjLKs1auIm6wffY3FV5MBByborIs70ukBv7E0vYBHHbStX0FrRxGFVlUcvA7_lowMjbeF-0p\" \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 CarritoCompras {\r\n  +agregarItem(producto: Producto, cantidad: int): void\r\n  +quitarItem(idProducto: String): boolean\r\n}\r\n\r\nclass Producto {\r\n  +nombre: String\r\n  +precio: BigDecimal\r\n  +enStock: boolean\r\n}\r\n\r\n' Un carrito puede tener 0 a muchos art\u00edculos\r\n' Cada art\u00edculo referencia exactamente 1 producto\r\nCarritoCompras \"1\" *-- \"0..*\" Producto : contiene &gt;\r\n\r\nnote bottom\r\n  Reglas de multiplicidad:\r\n  \u2022 0..* = Opcional, muchos (m\u00e1s com\u00fan)\r\n  \u2022 1 = Exactamente uno (obligatorio)\r\n  \u2022 0..1 = Opcional, \u00fanico (por ejemplo, foto de perfil)\r\n  \u2022 1..* = Al menos uno (por ejemplo, art\u00edculos de pedido)\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:NLBDJjj04BvRyZkCSca20P5hf5QXQGyz5HNn09FTYJkmkxDTZoiaXCIhjFU-0DUy2K_2sCGDS1kDlx_vrgjMiMWNGrsvW6qBQoo5LTOISy4MxkeAu1YRGWsMRqfncelupgaiuM8_pS5XKlReby19PqluBUm7ug-ETSzZV_6VUQc5KsF0ZKWWJ7LrNrTZWX6szquIDuL6ph3AXHoRp6TkljWKCGnhIfSgxkQzwWUuIfPmE0joHvv0AL61Cq28dVifBLW7kt-k2zBs-3LwFAoWq9OA9SS8T8jECL9IWWMCLTJLkzOcYmaSdPp0vEpqz6Xok6W9JgmfSuTFVRGafhCHLOdz1J-eiGR00iOkAEV0RcYr__Rqy1TwDVW8txDTdp3Cn_JJkFlJcdJSFQRP25uOykkhk5qIcCecS8CgXMNsIdNnHjLKs1auIm6wffY3FV5MBByborIs70ukBv7E0vYBHHbStX0FrRxGFVlUcvA7_lowMjbeF-0p\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"230\"><strong data-nodeid=\"516\">3. Clases abstractas frente a 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>Editar PlantUML en 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:ZL9BJiD03Dr7cZjOOWCAlK34ebBL1GlOX0kuYTCQJUnenkc2pwdOiUt5S5f0H21WP-Lz_COlosoOREnZA72JBM5Zq4JC6MxLkEC66rQ1nr00dBMKZGLTmLf1RObbUmHwaeptzFLR-Mb7icTCvnSLR5GZeHpXH5kU26ajvZDE-5wv3SLpA4B1OfGwR6YMOzqZnrEO4lCeDejH_h3f5xFwfdwtah6df7SKgLFvd-NiEbTFYyNtd7-HVF_a96e4YRSx0-rcX2d0ohiW-BWbLh3smbg5Hll1YsCVI-1-YEGTcCiEBmAED8nnqb-VdlvGmKhzq6WAmvZq4h8EcdopSn5sb4XS0ltXDHgxMoX8MfYoXMBfe_yXRm00\" \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 Notificacion {\r\n  #destinatario: String\r\n  #mensaje: String\r\n  +abstract enviar(): boolean\r\n  +registrarEntrega(): void\r\n}\r\n\r\ninterface NotificacionEmail {\r\n  +asunto: String\r\n  +enviar(): boolean\r\n}\r\n\r\ninterface NotificacionSMS {\r\n  +numeroTelefono: String\r\n  +enviar(): boolean\r\n}\r\n\r\nNotificacion &lt;|-- NotificacionEmail\r\nNotificacion &lt;|-- NotificacionSMS\r\n\r\nnote right of Notificacion\r\n  Clase abstracta: Estado compartido + implementaci\u00f3n parcial\r\n  Interfaz: Contrato puro, soporte para herencia m\u00faltiple\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:ZL9BJiD03Dr7cZjOOWCAlK34ebBL1GlOX0kuYTCQJUnenkc2pwdOiUt5S5f0H21WP-Lz_COlosoOREnZA72JBM5Zq4JC6MxLkEC66rQ1nr00dBMKZGLTmLf1RObbUmHwaeptzFLR-Mb7icTCvnSLR5GZeHpXH5kU26ajvZDE-5wv3SLpA4B1OfGwR6YMOzqZnrEO4lCeDejH_h3f5xFwfdwtah6df7SKgLFvd-NiEbTFYyNtd7-HVF_a96e4YRSx0-rcX2d0ohiW-BWbLh3smbg5Hll1YsCVI-1-YEGTcCiEBmAED8nnqb-VdlvGmKhzq6WAmvZq4h8EcdopSn5sb4XS0ltXDHgxMoX8MfYoXMBfe_yXRm00\" \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>Editar PlantUML en VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<hr data-nodeid=\"232\"\/>\n<h2 data-nodeid=\"233\"><strong data-nodeid=\"522\">Errores comunes y c\u00f3mo evitarlos<\/strong><\/h2>\n<table data-nodeid=\"235\">\n<thead data-nodeid=\"236\">\n<tr data-nodeid=\"237\">\n<th data-nodeid=\"239\">Error com\u00fan<\/th>\n<th data-nodeid=\"240\">S\u00edntoma<\/th>\n<th data-nodeid=\"241\">Soluci\u00f3n<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"245\">\n<tr data-nodeid=\"246\">\n<td data-nodeid=\"247\"><strong data-nodeid=\"529\">Sobredise\u00f1o<\/strong><\/td>\n<td data-nodeid=\"248\">Diagramas con m\u00e1s de 50 clases, dif\u00edciles de leer<\/td>\n<td data-nodeid=\"249\">Comience con un modelo conceptual; divida en m\u00faltiples diagramas por contexto acotado<\/td>\n<\/tr>\n<tr data-nodeid=\"250\">\n<td data-nodeid=\"251\"><strong data-nodeid=\"535\">Confundir agregaci\u00f3n\/composici\u00f3n<\/strong><\/td>\n<td data-nodeid=\"252\">Gesti\u00f3n de ciclo de vida de objetos poco clara<\/td>\n<td data-nodeid=\"253\">Pregunte: \u00abSi se destruye el todo, \u00bflos componentes sobreviven?\u00bb Si no \u2192 use composici\u00f3n (<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\">Ignorar la navegabilidad<\/strong><\/td>\n<td data-nodeid=\"256\">Flechas bidireccionales en todas partes<\/td>\n<td data-nodeid=\"257\">A\u00f1adir flechas de navegabilidad solo donde sea necesario recorrer el c\u00f3digo<\/td>\n<\/tr>\n<tr data-nodeid=\"258\">\n<td data-nodeid=\"259\"><strong data-nodeid=\"553\">Mezclar niveles de abstracci\u00f3n<\/strong><\/td>\n<td data-nodeid=\"260\">DTOs mezclados con clases de entidad en el mismo diagrama<\/td>\n<td data-nodeid=\"261\">Separar diagramas por perspectiva (conceptual\/especificaci\u00f3n\/implantaci\u00f3n)<\/td>\n<\/tr>\n<tr data-nodeid=\"262\">\n<td data-nodeid=\"263\"><strong data-nodeid=\"559\">Descuidar el control de versiones<\/strong><\/td>\n<td data-nodeid=\"264\">Los diagramas se vuelven obsoletos<\/td>\n<td data-nodeid=\"265\">Usar archivos de texto PlantUML en Git; generar im\u00e1genes en la canalizaci\u00f3n CI\/CD<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"266\"\/>\n<h2 data-nodeid=\"267\"><strong data-nodeid=\"565\">Recomendaci\u00f3n de herramientas: \u00bfPor qu\u00e9 PlantUML?<\/strong><\/h2>\n<p data-nodeid=\"268\">Para el estudio de caso anterior,\u00a0<strong data-nodeid=\"595\">PlantUML<\/strong>\u00a0fue elegido porque:<br \/>\n\u2705\u00a0<strong data-nodeid=\"596\">Basado en texto<\/strong>: Los diagramas son c\u00f3digo\u2014versionables, comparables con diff, revisables<br \/>\n\u2705\u00a0<strong data-nodeid=\"597\">Portable<\/strong>: Renderiza localmente o mediante servicio en la nube; se integra con Confluence, GitHub, VS Code<br \/>\n\u2705\u00a0<strong data-nodeid=\"598\">Mantenible<\/strong>: Actualiza la l\u00f3gica del diagrama sin tener que redibujar los cuadros<br \/>\n\u2705\u00a0<strong data-nodeid=\"599\">Colaborativo<\/strong>: Los no dise\u00f1adores pueden contribuir mediante una sintaxis sencilla<\/p>\n<p data-nodeid=\"269\"><strong data-nodeid=\"603\">Flujo de trabajo de ejemplo:<\/strong><\/p>\n<pre class=\"lang-bash\" data-nodeid=\"270\"><code data-language=\"bash\"># 1. Escribir el diagrama como texto\r\necho '@startumlnclass User { +name: String }n@enduml' &gt; UserDiagram.puml\r\n\r\n# 2. Generar PNG\/SVG\r\nplantuml -tpng UserDiagram.puml\r\n\r\n# 3. Confirmar ambos archivos .puml e imagen generada en Git\r\ngit add UserDiagram.puml UserDiagram.png\r\n<\/code><\/pre>\n<hr data-nodeid=\"271\"\/>\n<h2 data-nodeid=\"272\"><strong data-nodeid=\"607\">Conclusi\u00f3n<\/strong><\/h2>\n<p data-nodeid=\"273\">Los diagramas de clases son mucho m\u00e1s que ejercicios acad\u00e9micos: son artefactos vivos que impulsan la alineaci\u00f3n, reducen la deuda t\u00e9cnica y aceleran la incorporaci\u00f3n en todo el ciclo de vida del desarrollo de software. Como se demuestra en nuestro estudio de caso de comercio electr\u00f3nico, el verdadero poder de los diagramas de clases surge cuando evolucionan a trav\u00e9s de tres perspectivas cr\u00edticas:<\/p>\n<p data-nodeid=\"274\">\ud83d\udd39\u00a0<strong data-nodeid=\"626\">Conceptual<\/strong>: Sostenga a los interesados en una comprensi\u00f3n compartida del dominio<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"627\">Especificaci\u00f3n<\/strong>: Defina interfaces limpias para una arquitectura modular<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"628\">Implementaci\u00f3n<\/strong>: Gu\u00ede a los desarrolladores con planos precisos y conscientes de la tecnolog\u00eda<\/p>\n<p data-nodeid=\"275\">Al adoptar\u00a0<strong data-nodeid=\"638\">PlantUML<\/strong>Al adoptar PlantUML para pr\u00e1cticas de diagramas como c\u00f3digo, los equipos ganan la agilidad para iterar los dise\u00f1os junto con el c\u00f3digo, asegurando que la documentaci\u00f3n nunca se quede atr\u00e1s respecto a la implementaci\u00f3n. Recuerde: el mejor diagrama de clases no es el m\u00e1s detallado, sino aquel que responde a las preguntas adecuadas para su audiencia en el momento adecuado.<\/p>\n<p data-nodeid=\"276\"><strong data-nodeid=\"643\">Conclusi\u00f3n final<\/strong>: Comience de forma simple, valide con los interesados, refine de forma incremental y siempre relacione los elementos del diagrama con un valor de negocio tangible. Cuando los diagramas de clases se convierten en herramientas colaborativas en lugar de entregables, pasan de ser una carga a convertirse en catalizadores para un software mejor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n En el actual entorno complejo del desarrollo de software, la comunicaci\u00f3n clara y el modelado preciso del sistema son fundamentales para el \u00e9xito del proyecto. Entre las herramientas m\u00e1s poderosas en el kit de herramientas de un arquitecto de software est\u00e1 el\u00a0Diagrama de clases UML\u2014un lenguaje visual que cierra la brecha entre los requisitos [&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-9940","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>Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol<\/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\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n En el actual entorno complejo del desarrollo de software, la comunicaci\u00f3n clara y el modelado preciso del sistema son fundamentales para el \u00e9xito del proyecto. Entre las herramientas m\u00e1s poderosas en el kit de herramientas de un arquitecto de software est\u00e1 el\u00a0Diagrama de clases UML\u2014un lenguaje visual que cierra la brecha entre los requisitos [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:site_name\" content=\"Visual Paradigm Blog Espa\u00f1ol\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T07:55:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-30T08:07:04+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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"url\":\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"name\":\"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol\",\"isPartOf\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/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:07:04+00:00\",\"author\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/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\/es\/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\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/#website\",\"url\":\"https:\/\/blog.visual-paradigm.com\/es\/\",\"name\":\"Visual Paradigm Blog Espa\u00f1ol\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.visual-paradigm.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/es\/#\/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\/es\/author\/vpadminuser\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol","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\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_locale":"es_ES","og_type":"article","og_title":"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol","og_description":"Introducci\u00f3n En el actual entorno complejo del desarrollo de software, la comunicaci\u00f3n clara y el modelado preciso del sistema son fundamentales para el \u00e9xito del proyecto. Entre las herramientas m\u00e1s poderosas en el kit de herramientas de un arquitecto de software est\u00e1 el\u00a0Diagrama de clases UML\u2014un lenguaje visual que cierra la brecha entre los requisitos [&hellip;]","og_url":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_site_name":"Visual Paradigm Blog Espa\u00f1ol","article_published_time":"2026-05-21T07:55:49+00:00","article_modified_time":"2026-05-30T08:07:04+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":{"Escrito por":"Admin","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","url":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","name":"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML - Visual Paradigm Blog Espa\u00f1ol","isPartOf":{"@id":"https:\/\/blog.visual-paradigm.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/blog.visual-paradigm.com\/es\/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:07:04+00:00","author":{"@id":"https:\/\/blog.visual-paradigm.com\/es\/#\/schema\/person\/a649c442f11a53040710ddec750926c6"},"breadcrumb":{"@id":"https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.visual-paradigm.com\/es\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.visual-paradigm.com\/es\/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\/es\/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\/es\/"},{"@type":"ListItem","position":2,"name":"Dominar los diagramas de clases UML: un estudio de caso pr\u00e1ctico en el dise\u00f1o de sistemas con PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/blog.visual-paradigm.com\/es\/#website","url":"https:\/\/blog.visual-paradigm.com\/es\/","name":"Visual Paradigm Blog Espa\u00f1ol","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.visual-paradigm.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blog.visual-paradigm.com\/es\/#\/schema\/person\/a649c442f11a53040710ddec750926c6","name":"Admin","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blog.visual-paradigm.com\/es\/#\/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\/es\/author\/vpadminuser\/"}]}},"modified_by":"Admin","_links":{"self":[{"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/posts\/9940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/comments?post=9940"}],"version-history":[{"count":0,"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/posts\/9940\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/media?parent=9940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/categories?post=9940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/es\/wp-json\/wp\/v2\/tags?post=9940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}