{"id":11512,"date":"2026-10-13T13:27:33","date_gmt":"2026-10-13T05:27:33","guid":{"rendered":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/"},"modified":"2026-10-14T13:09:00","modified_gmt":"2026-10-14T05:09:00","slug":"uml-class-diagrams-for-data-modeling-with-plantuml","status":"publish","type":"post","link":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/","title":{"rendered":"Diagramas de clases UML para modelado de datos con PlantUML"},"content":{"rendered":"<p data-nodeid=\"15366\">Un <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/uml-class-diagram-tutorial\/\">diagrama de clases UML<\/a> describe la <strong data-nodeid=\"15522\">estructura<\/strong> de un sistema: las cosas que modela, sus propiedades y c\u00f3mo se relacionan. Para el modelado de datos, puede capturar conceptos y restricciones del dominio antes de comprometerse con tablas o c\u00f3digo de aplicaci\u00f3n.<\/p>\n<p><img alt=\"Diagrama de clases UML que modela las entidades Cliente, Pedido y Producto junto con la sintaxis de PlantUML y un flujo de trabajo de cuatro pasos para el modelado de datos con control de versiones.\" class=\"alignnone size-full wp-image-21887\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbee446b47.jpeg\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbee446b47.jpeg 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbee446b47-300x240.jpeg 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbee446b47-1024x819.jpeg 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbee446b47-768x615.jpeg 768w\" width=\"1402\"\/><\/p>\n<p data-nodeid=\"15367\"><a href=\"https:\/\/www.visual-paradigm.com\/features\/plantuml-editor\/\">PlantUML<\/a> hace que el diagrama sea reproducible: escribes texto, lo renderizas, revisas los cambios en el control de versiones y lo actualizas a medida que evoluciona el modelo. Complementa, no reemplaza, los esquemas de base de datos, las migraciones y las reglas de negocio detalladas.<\/p>\n<h2 data-nodeid=\"15368\">1. Elige el nivel de modelado<\/h2>\n<p data-nodeid=\"15369\">Un diagrama de modelado de datos \u00fatil generalmente se centra en un nivel a la vez:<\/p>\n<p><img alt=\"Diagrama que ilustra tres niveles de modelado de datos: conceptual, l\u00f3gico y f\u00edsico, mostrando un aumento de detalle desde los conceptos empresariales hasta la implementaci\u00f3n SQL.\" class=\"alignnone size-full wp-image-21890\" decoding=\"async\" height=\"941\" loading=\"lazy\" sizes=\"auto, (max-width: 1672px) 100vw, 1672px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc.png 1672w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc-300x169.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc-1024x576.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc-768x432.png 768w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf51130bc-1536x864.png 1536w\" width=\"1672\"\/><\/p>\n<ul data-nodeid=\"15370\">\n<li data-nodeid=\"15371\">\n<p data-nodeid=\"15372\"><strong data-nodeid=\"15534\">Conceptual:<\/strong> conceptos y relaciones de negocio, con un m\u00ednimo de detalle t\u00e9cnico. Ejemplo: <code data-backticks=\"1\" data-nodeid=\"15530\">Cliente<\/code> realiza <code data-backticks=\"1\" data-nodeid=\"15532\">Pedido<\/code>.<\/p>\n<\/li>\n<li data-nodeid=\"15373\">\n<p data-nodeid=\"15374\"><strong data-nodeid=\"15539\">L\u00f3gico:<\/strong> atributos, identificadores, multiplicidades y reglas, sin vincular el modelo a una base de datos espec\u00edfica.<\/p>\n<\/li>\n<li data-nodeid=\"15375\">\n<p data-nodeid=\"15376\"><strong data-nodeid=\"15544\">F\u00edsico:<\/strong> detalles de implementaci\u00f3n como tipos de columnas SQL, \u00edndices y restricciones espec\u00edficas de la base de datos.<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15377\">El ejemplo a continuaci\u00f3n es un <strong data-nodeid=\"15556\">modelo de dominio l\u00f3gico<\/strong>. Tipos como <code data-backticks=\"1\" data-nodeid=\"15550\">UUID<\/code>, <code data-backticks=\"1\" data-nodeid=\"15552\">Money<\/code>, y <code data-backticks=\"1\" data-nodeid=\"15554\">DateTime<\/code> son ilustrativos; decide sus representaciones concretas al elegir una tecnolog\u00eda.<\/p>\n<h2 data-nodeid=\"15378\">2. Fundamentos de PlantUML<\/h2>\n<p data-nodeid=\"15379\">Una clase tiene un nombre y puede listar atributos y operaciones:<\/p>\n<p id=\"pCSWdAu\"><img alt=\"Interfaz de VPasCode que muestra la sintaxis de PlantUML para una clase Cliente junto con su diagrama renderizado que muestra atributos y operaciones.\" class=\"alignnone size-full wp-image-21891\" decoding=\"async\" height=\"871\" loading=\"lazy\" sizes=\"auto, (max-width: 1916px) 100vw, 1916px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781.png 1916w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781-300x136.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781-1024x466.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781-768x349.png 768w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbf7ebe781-1536x698.png 1536w\" width=\"1916\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" 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\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" 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\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" \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=\"15380\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass Customer {\r\n  -id: UUID\r\n  +name: String\r\n  +email: String\r\n  +changeEmail(newEmail: String): 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\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" 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<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoWkIImgAStDuULApaaiBbPmBYqkoSzDBLAevkLIKD3DJB5I20trT05njFCISrEj589BYZBpqi42gRc9cJae8iaPYNdfgQuWSOsyr79NP0MQLWfb-Pafl5orl5mEgNafG5i1\" 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=\"15381\">Los marcadores de visibilidad son sugerencias de modelado opcionales:<\/p>\n<p><img alt=\"Infograf\u00eda de marcadores de visibilidad UML que muestra los s\u00edmbolos m\u00e1s, menos, numeral y tilde para los niveles de acceso p\u00fablico, privado, protegido y de paquete.\" class=\"alignnone size-full wp-image-21893\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbfd2a37c7.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbfd2a37c7.png 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbfd2a37c7-300x240.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbfd2a37c7-1024x819.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdbfd2a37c7-768x615.png 768w\" width=\"1402\"\/><\/p>\n<ul data-nodeid=\"15382\">\n<li data-nodeid=\"15383\">\n<p data-nodeid=\"15384\"><code data-backticks=\"1\" data-nodeid=\"15560\">+<\/code> p\u00fablico<\/p>\n<\/li>\n<li data-nodeid=\"15385\">\n<p data-nodeid=\"15386\"><code data-backticks=\"1\" data-nodeid=\"15562\">-<\/code> privado<\/p>\n<\/li>\n<li data-nodeid=\"15387\">\n<p data-nodeid=\"15388\"><code data-backticks=\"1\" data-nodeid=\"15564\">#<\/code> protegido<\/p>\n<\/li>\n<li data-nodeid=\"15389\">\n<p data-nodeid=\"15390\"><code data-backticks=\"1\" data-nodeid=\"15566\">~<\/code> visibilidad de paquete<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15391\">Para un diagrama de dominio o de datos, los atributos son lo m\u00e1s importante. Incluya operaciones solo cuando aclaren comportamientos importantes; evite convertir el diagrama en una lista completa de c\u00f3digo.<\/p>\n<h2 data-nodeid=\"15392\">3. Relaciones y multiplicidad<\/h2>\n<p data-nodeid=\"15393\">Las notaciones de relaci\u00f3n m\u00e1s \u00fatiles para el modelado de datos son:<\/p>\n<p><img alt=\"Diagrama UML que ilustra tipos de relaci\u00f3n como asociaci\u00f3n y agregaci\u00f3n, junto con notaciones de multiplicidad como 0..1 y 0..* con un ejemplo de cliente-pedido.\" class=\"alignnone size-full wp-image-21894\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc017126a5.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc017126a5.png 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc017126a5-300x240.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc017126a5-1024x819.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc017126a5-768x615.png 768w\" width=\"1402\"\/><\/p>\n<table data-nodeid=\"15395\">\n<thead data-nodeid=\"15396\">\n<tr data-nodeid=\"15397\">\n<th data-nodeid=\"15399\">Relaci\u00f3n<\/th>\n<th data-nodeid=\"15400\">PlantUML<\/th>\n<th data-nodeid=\"15401\">Significado<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"15405\">\n<tr data-nodeid=\"15406\">\n<td data-nodeid=\"15407\">Asociaci\u00f3n<\/td>\n<td data-nodeid=\"15408\"><code data-backticks=\"1\" data-nodeid=\"15575\">A -- B<\/code><\/td>\n<td data-nodeid=\"15409\">Existe una relaci\u00f3n entre A y B<\/td>\n<\/tr>\n<tr data-nodeid=\"15410\">\n<td data-nodeid=\"15411\">Asociaci\u00f3n dirigida<\/td>\n<td data-nodeid=\"15412\"><code data-backticks=\"1\" data-nodeid=\"15578\">A --&gt; B<\/code><\/td>\n<td data-nodeid=\"15413\">Una relaci\u00f3n navegable o direccional<\/td>\n<\/tr>\n<tr data-nodeid=\"15414\">\n<td data-nodeid=\"15415\">Agregaci\u00f3n<\/td>\n<td data-nodeid=\"15416\"><code data-backticks=\"1\" data-nodeid=\"15581\">A o-- B<\/code><\/td>\n<td data-nodeid=\"15417\">A tiene una parte, pero la parte puede existir de forma independiente<\/td>\n<\/tr>\n<tr data-nodeid=\"15418\">\n<td data-nodeid=\"15419\">Composici\u00f3n<\/td>\n<td data-nodeid=\"15420\"><code data-backticks=\"1\" data-nodeid=\"15584\">A *-- B<\/code><\/td>\n<td data-nodeid=\"15421\">A posee una parte cuyo ciclo de vida depende de ella<\/td>\n<\/tr>\n<tr data-nodeid=\"15422\">\n<td data-nodeid=\"15423\">Generalizaci\u00f3n<\/td>\n<td data-nodeid=\"15424\">`Hijo \u2014<\/td>\n<td data-nodeid=\"15425\">&gt; Padre`<\/td>\n<\/tr>\n<tr data-nodeid=\"15427\">\n<td data-nodeid=\"15428\">Realizaci\u00f3n de interfaz<\/td>\n<td data-nodeid=\"15429\">`Clase ..<\/td>\n<td data-nodeid=\"15430\">&gt; Interfaz`<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-nodeid=\"15432\">Las etiquetas de multiplicidad se sit\u00faan cerca de los extremos de la asociaci\u00f3n:<\/p>\n<ul data-nodeid=\"15433\">\n<li data-nodeid=\"15434\">\n<p data-nodeid=\"15435\"><code data-backticks=\"1\" data-nodeid=\"15597\">1<\/code> \u2014 exactamente uno<\/p>\n<\/li>\n<li data-nodeid=\"15436\">\n<p data-nodeid=\"15437\"><code data-backticks=\"1\" data-nodeid=\"15599\">0..1<\/code> \u2014 opcional, como m\u00e1ximo uno<\/p>\n<\/li>\n<li data-nodeid=\"15438\">\n<p data-nodeid=\"15439\"><code data-backticks=\"1\" data-nodeid=\"15601\">*<\/code> o <code data-backticks=\"1\" data-nodeid=\"15603\">0..*<\/code> \u2014 cero o m\u00e1s<\/p>\n<\/li>\n<li data-nodeid=\"15440\">\n<p data-nodeid=\"15441\"><code data-backticks=\"1\" data-nodeid=\"15605\">1..*<\/code> \u2014 uno o m\u00e1s<\/p>\n<\/li>\n<li data-nodeid=\"15442\">\n<p data-nodeid=\"15443\"><code data-backticks=\"1\" data-nodeid=\"15607\">2..5<\/code> \u2014 un rango acotado<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15444\">Por ejemplo:<\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoujBidFJIrIK39KKj3LLL0oqDFJKbBmBqe1Ybaf5EGa9gSM0m00\" 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\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoujBidFJIrIK39KKj3LLL0oqDFJKbBmBqe1Ybaf5EGa9gSM0m00\" 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\/editor\/#plantuml:Syx9JCqhILLGCbHIqDLLK3BGqzDIKWX8JSbCoLUmKaZEpybFJWG0\" \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=\"15445\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">Cliente \"1\" -- \"0..*\" Pedido : coloca\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Syx9JCqhILLGCbHIqDLLK3BGqzDIKWX8JSbCoLUmKaZEpybFJWG0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoujBidFJIrIK39KKj3LLL0oqDFJKbBmBqe1Ybaf5EGa9gSM0m00\" 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<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:SoujBidFJIrIK39KKj3LLL0oqDFJKbBmBqe1Ybaf5EGa9gSM0m00\" 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=\"15446\">Lea cuidadosamente las etiquetas en cada extremo: un cliente puede realizar cero o m\u00e1s pedidos; cada pedido est\u00e1 asociado con exactamente un cliente. Las etiquetas describen la relaci\u00f3n, no necesariamente la implementaci\u00f3n de clave for\u00e1nea de una base de datos en particular.<\/p>\n<h2 data-nodeid=\"15447\">4. Ejemplo resuelto: tienda en l\u00ednea<\/h2>\n<p data-nodeid=\"15448\">Este modelo incluye clientes, pedidos, l\u00edneas de pedido, productos y registros de pago. Demuestra identificadores, tipos similares a valores, un enumerado, composici\u00f3n y multiplicidades.<\/p>\n<p id=\"uuxvPiM\"><img alt=\"C\u00f3digo PlantUML y el diagrama de clases UML resultante que muestra un modelo de tienda en l\u00ednea con las entidades Cliente, Pedido, L\u00ednea de Pedido, Producto y Pago.\" class=\"alignnone size-full wp-image-21896\" decoding=\"async\" height=\"867\" loading=\"lazy\" sizes=\"auto, (max-width: 1913px) 100vw, 1913px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931.png 1913w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931-300x136.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931-1024x464.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931-768x348.png 768w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc05b51931-1536x696.png 1536w\" width=\"1913\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" 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\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" 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\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" \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=\"15449\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml ShopDomain\r\nskinparam classAttributeIconSize 0\r\nskinparam shadowing false\r\n\r\nhide methods\r\n\r\nclass Customer {\r\n  +customerId: UUID\r\n  +email: EmailAddress\r\n  +displayName: String\r\n}\r\n\r\nclass Order {\r\n  +orderId: UUID\r\n  +placedAt: DateTime\r\n  +status: OrderStatus\r\n  +total: Money\r\n}\r\n\r\nclass OrderLine {\r\n  +lineNumber: Integer\r\n  +quantity: PositiveInteger\r\n  +unitPrice: Money\r\n}\r\n\r\nclass Product {\r\n  +productId: UUID\r\n  +sku: SKU\r\n  +name: String\r\n  +currentPrice: Money\r\n}\r\n\r\nclass Payment {\r\n  +paymentId: UUID\r\n  +amount: Money\r\n  +status: PaymentStatus\r\n  +paidAt: DateTime [0..1]\r\n}\r\n\r\nclass Money &lt;&lt;value object&gt;&gt; {\r\n  +amount: Decimal\r\n  +currency: CurrencyCode\r\n}\r\n\r\nenum OrderStatus {\r\n  DRAFT\r\n  PLACED\r\n  PAID\r\n  FULFILLED\r\n  CANCELLED\r\n}\r\n\r\nenum PaymentStatus {\r\n  PENDING\r\n  AUTHORIZED\r\n  CAPTURED\r\n  FAILED\r\n  REFUNDED\r\n}\r\n\r\nCustomer \"1\" -- \"0..*\" Order : places\r\nOrder \"1\" *-- \"1..*\" OrderLine : contains\r\nOrderLine \"0..*\" --&gt; \"1\" Product : refers to\r\nOrder \"1\" -- \"0..*\" Payment : payment attempts\r\nOrder --&gt; OrderStatus\r\nPayment --&gt; PaymentStatus\r\nOrderLine --&gt; Money : unit price\r\nPayment --&gt; Money : amount\r\n\r\nnote right of OrderLine\r\n  quantity must be greater than zero\r\n  unitPrice is the price captured\r\n  when the order is placed\r\nend note\r\n\r\nnote right of Product\r\n  Product.currentPrice may change.\r\n  It does not replace OrderLine.unitPrice.\r\nend note\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" 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<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:VLHBRzim3Bu7o7yWSkoGeBqQHL4ZZyrObWP9VDcmWs8piLPByYIwHJhilqyFExRNOIVp-P7yIFdH4DDKYnBsXQeMIZ0knoFpp6N5D1EGbSoOc4ZpOqsOP4hk-Hl2RJ_652nNhroUuSHAW-FHU5Jm744W5IetJlSmCAyDAO4QVer701-oHato2D8qMNWZsWxA29Rk4-UvHcEyFUUcAjbbmmH6iBVzoFDuzBl3VjBv5LWvUO1gKpFCOufWmGWFNA0ts-6fDb58tdl5sqaHiqryKH8lxwkikSIcKcd5JIsEg2D89E4PjRV_h9aaJfS8jifmuY_OzzQIqrRp3FzLOgjLNcVK5AY2DXZ6FDUMWi-fL-I04C-grYZ_WyykmlfR_A0Dy9bGjQHhRe-d9hV7LCNuW5RuTZkRtNqVLFGuS7__mieQGHr_O4OF3qq3RR45PbomiZT2PjcRDz9SvTXWegn5Vs41Px6BLmSdRDVnVEddsCPXdbMwNYNhTJ3Euyry6PGERJ1MmDikDujayz69SNhuzBHBlhO0sqEw2_8gJXhOtNALRXPNrEkXJ-ucC9t2n99oCsbkD09_ZPQ_eBkO6nTqrmNv4ul0FZUo3x8DzTO6Qpfzy9djkKIWyOJQ0Aa-S5UytRijtqYC24L5rqOSvE0bj2dEyTVgktwSCsmu0dVOKBdB6oQt_h1inv1KXA3vkI1GfsvcnsNxTa1O5k68SDPehqi35Kp26shbegvl2BYTkS1G5Z9MKQqnTo6l1Khlyly35nT-0sxhERWEtdVIqEbF88Yp_eC2mIwGsJxEE7Cn2K6kq3Wmox-7xuQPNNkSzKi-Mj7-SFy0\" 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=\"15450\"><strong data-nodeid=\"15619\">\u00bfPor qu\u00e9 modelar <code data-backticks=\"1\" data-nodeid=\"15615\">OrderLine<\/code> expl\u00edcitamente?<\/strong> La relaci\u00f3n entre un pedido y un producto tiene sus propios datos: cantidad y el precio en el momento de la compra. Esto lo convierte en un concepto de dominio, no solo en un enlace simple.<\/p>\n<p data-nodeid=\"15451\"><strong data-nodeid=\"15628\">\u00bfPor qu\u00e9 composici\u00f3n desde <code data-backticks=\"1\" data-nodeid=\"15622\">Order<\/code> a <code data-backticks=\"1\" data-nodeid=\"15624\">OrderLine<\/code>?<\/strong> El ejemplo asume que una l\u00ednea de pedido pertenece a un pedido y no tiene significado independiente. Utilice la composici\u00f3n solo cuando esa regla de propiedad y ciclo de vida sea cierta en su dominio; la notaci\u00f3n UML no la impone en la base de datos.<\/p>\n<p data-nodeid=\"15452\"><strong data-nodeid=\"15633\">\u00bfPor qu\u00e9 distinguir entre precios actuales e hist\u00f3ricos?<\/strong> El precio de un producto puede cambiar despu\u00e9s de que se realiza un pedido. Mantener el precio del momento de la compra en la l\u00ednea de pedido conserva el monto hist\u00f3rico.<\/p>\n<h2 data-nodeid=\"15453\">5. Decisiones de modelado que importan<\/h2>\n<p><img alt=\"Infograf\u00eda de modelado de datos UML que ilustra seis decisiones clave: identificadores, valores opcionales, objetos de valor, enumeraciones, modelo frente a implementaci\u00f3n y legibilidad.\" class=\"alignnone size-full wp-image-21897\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc0b054731.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc0b054731.png 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc0b054731-300x240.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc0b054731-1024x819.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc0b054731-768x615.png 768w\" width=\"1402\"\/><\/p>\n<p data-nodeid=\"15454\"><strong data-nodeid=\"15643\">Identificadores:<\/strong> Marque los identificadores de manera consistente, como <code data-backticks=\"1\" data-nodeid=\"15639\">customerId<\/code> o <code data-backticks=\"1\" data-nodeid=\"15641\">orderId<\/code>. UML no define una notaci\u00f3n universal \u00fanica para claves primarias, por lo que elige una convenci\u00f3n y documentala. Un estereotipo o una nota pueden hacerlo expl\u00edcito:<\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" 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\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" 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\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" \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=\"15455\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">class Customer {\r\n  +customerId: UUID &lt;&lt;PK&gt;&gt;\r\n  +email: EmailAddress\r\n}\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" 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<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:Iyv9B2vMS2ujBidFJIrIgERbKb3GJePoFLEi5493FLqKR6m2lEtim7AfkOcPELOAhY3ACIMbABMuc9Uh5W00\" 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=\"15456\"><strong data-nodeid=\"15652\">Valores opcionales:<\/strong> Usa <code data-backticks=\"1\" data-nodeid=\"15648\">[0..1]<\/code> para un atributo opcional cuando esto sea claro para tus lectores, o anota la regla. Por ejemplo, un pago puede no tener <code data-backticks=\"1\" data-nodeid=\"15650\">paidAt<\/code> marca de tiempo hasta que tenga \u00e9xito.<\/p>\n<p data-nodeid=\"15457\"><strong data-nodeid=\"15661\">Objetos de valor:<\/strong> Un tipo como <code data-backticks=\"1\" data-nodeid=\"15657\">Money<\/code> o <code data-backticks=\"1\" data-nodeid=\"15659\">EmailAddress<\/code> puede representar un concepto con validaci\u00f3n o sem\u00e1ntica propia. Decide si debe aparecer como una clase separada, un tipo de atributo o una estructura de base de datos seg\u00fan la audiencia y el nivel de detalle.<\/p>\n<p data-nodeid=\"15458\"><strong data-nodeid=\"15666\">Enumeraciones y valores controlados:<\/strong> Usa una enumeraci\u00f3n cuando el conjunto permitido sea peque\u00f1o y relativamente estable. Si los valores necesitan descripciones independientes, ciclo de vida o administraci\u00f3n, modelalos como una clase en su lugar.<\/p>\n<p data-nodeid=\"15459\"><strong data-nodeid=\"15673\">Normalizaci\u00f3n e implementaci\u00f3n:<\/strong> Un diagrama de clases comunica conceptos y reglas; no resuelve cada detalle relacional. Por ejemplo, si <code data-backticks=\"1\" data-nodeid=\"15671\">Money<\/code> se convierte en dos columnas, una tabla separada o un tipo espec\u00edfico de base de datos es una decisi\u00f3n de implementaci\u00f3n.<\/p>\n<p data-nodeid=\"15460\"><strong data-nodeid=\"15678\">Mant\u00e9n los diagramas legibles:<\/strong> Divide un dominio grande en diagramas enfocados\u2014como pedidos, inventario e identidad\u2014y usa paquetes para agrupar clases relacionadas. Muestra solo los atributos relevantes para la pregunta que el diagrama debe responder.<\/p>\n<h2 data-nodeid=\"15461\">6. Construye un modelo a partir de los requisitos<\/h2>\n<p><img alt=\"Infograf\u00eda de seis pasos que ilustra c\u00f3mo construir un modelo UML a partir de requisitos, cubriendo la extracci\u00f3n de conceptos, la aclaraci\u00f3n de reglas y la revisi\u00f3n de casos l\u00edmite.\" class=\"alignnone size-full wp-image-21900\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc15b38d4a.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc15b38d4a.png 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc15b38d4a-300x240.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc15b38d4a-1024x819.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc15b38d4a-768x615.png 768w\" width=\"1402\"\/><\/p>\n<ol data-nodeid=\"15462\">\n<li data-nodeid=\"15463\">\n<p data-nodeid=\"15464\"><strong data-nodeid=\"15684\">Extrae conceptos candidatos<\/strong> del lenguaje del dominio: los sustantivos a menudo sugieren clases; los verbos a menudo sugieren relaciones o comportamiento.<\/p>\n<\/li>\n<li data-nodeid=\"15465\">\n<p data-nodeid=\"15466\"><strong data-nodeid=\"15689\">Aclarar reglas<\/strong> con preguntas concretas: \u00bfPuede existir un pedido sin un cliente? \u00bfPuede tener cero l\u00edneas? \u00bfPuede reintentarse un pago?<\/p>\n<\/li>\n<li data-nodeid=\"15467\">\n<p data-nodeid=\"15468\"><strong data-nodeid=\"15694\">Elegir un nivel de modelado<\/strong> y mantener las decisiones t\u00e9cnicas de base de datos fuera de un diagrama conceptual.<\/p>\n<\/li>\n<li data-nodeid=\"15469\">\n<p data-nodeid=\"15470\"><strong data-nodeid=\"15699\">Agregar atributos e identificadores<\/strong> solo cuando ayudan a explicar el modelo.<\/p>\n<\/li>\n<li data-nodeid=\"15471\">\n<p data-nodeid=\"15472\"><strong data-nodeid=\"15704\">Establecer multiplicidades<\/strong> de las reglas de negocio, verificando ambos extremos de cada relaci\u00f3n.<\/p>\n<\/li>\n<li data-nodeid=\"15473\">\n<p data-nodeid=\"15474\"><strong data-nodeid=\"15709\">Revisar casos extremos<\/strong>: eliminaci\u00f3n, registros hist\u00f3ricos, campos opcionales, intentos repetidos y valores cambiantes.<\/p>\n<\/li>\n<li data-nodeid=\"15475\">\n<p data-nodeid=\"15476\"><strong data-nodeid=\"15714\">Renderizar y revisar<\/strong> el diagrama con expertos del dominio e implementadores. Tr\u00e1telo como un modelo para validar, no simplemente como una imagen para aprobar.<\/p>\n<\/li>\n<\/ol>\n<h2 data-nodeid=\"15477\">7. Usar VPasCode y Visual Paradigm<\/h2>\n<p data-nodeid=\"15478\"><a href=\"https:\/\/www.visual-paradigm.com\/features\/vpascode\/\"><strong data-nodeid=\"15720\">VPasCode<\/strong><\/a> es un editor de<a href=\"https:\/\/www.visual-paradigm.com\/features\/diagram-as-code-tool\/\"> de texto a diagrama basado en navegador con soporte para PlantUML<\/a> y una vista previa en vivo. Su descripci\u00f3n de caracter\u00edsticas tambi\u00e9n incluye la generaci\u00f3n y modificaci\u00f3n de c\u00f3digo de diagramas mediante IA, as\u00ed como asistencia de sintaxis. Un flujo de trabajo pr\u00e1ctico es:<\/p>\n<p><img alt=\"Diagrama de flujo de trabajo de cinco pasos que muestra c\u00f3mo escribir, previsualizar, refinar, generar y validar diagramas de clases UML utilizando VPasCode y Visual Paradigm.\" class=\"alignnone size-full wp-image-21906\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1b31fa5f.png\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1b31fa5f.png 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1b31fa5f-300x240.png 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1b31fa5f-1024x819.png 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1b31fa5f-768x615.png 768w\" width=\"1402\"\/><\/p>\n<ol data-nodeid=\"15479\">\n<li data-nodeid=\"15480\">\n<p data-nodeid=\"15481\">Abra VPasCode y seleccione o ingrese PlantUML.<\/p>\n<\/li>\n<li data-nodeid=\"15482\">\n<p data-nodeid=\"15483\">Pegue el ejemplo anterior e inspeccione el diagrama renderizado.<\/p>\n<\/li>\n<li data-nodeid=\"15484\">\n<p data-nodeid=\"15485\">Itere sobre el c\u00f3digo fuente de PlantUML; mantenga el texto como el artefacto versionable.<\/p>\n<\/li>\n<li data-nodeid=\"15486\">\n<p data-nodeid=\"15487\">Use el asistente de IA, si est\u00e1 disponible en su espacio de trabajo, para redactar o revisar un primer borrador.<\/p>\n<\/li>\n<li data-nodeid=\"15488\">\n<p data-nodeid=\"15489\">Verifique usted mismo cada clase, relaci\u00f3n, multiplicidad y regla de negocio generada.<\/p>\n<\/li>\n<\/ol>\n<p data-nodeid=\"15490\">Las herramientas de diagramaci\u00f3n asistidas por IA de Visual Paradigm pueden generar diagramas editables a partir de descripciones en lenguaje natural. Su flujo de trabajo publicado describe generar un diagrama de clases a partir de una indicaci\u00f3n y luego refinar sus elementos y relaciones. Trate la salida de la IA como un<strong data-nodeid=\"15735\">borrador<\/strong>: puede inferir propiedad incorrecta, restricciones faltantes o clases injustificadas. La correcci\u00f3n del modelo a\u00fan depende de validarlo contra los requisitos.<\/p>\n<p data-nodeid=\"15491\">Por ejemplo, formule una indicaci\u00f3n a un asistente de IA con:<\/p>\n<blockquote data-nodeid=\"15492\">\n<p data-nodeid=\"15493\">Cree un diagrama de clases UML l\u00f3gico para una tienda en l\u00ednea. Los clientes realizan pedidos. Cada pedido contiene una o m\u00e1s l\u00edneas de pedido. Cada l\u00ednea de pedido se refiere a un producto y almacena la cantidad y el precio unitario en el momento de la compra. Los pedidos pueden tener m\u00faltiples intentos de pago. Incluya identificadores, multiplicidades y enumeraciones de estado de pedido y pago. Genere solo c\u00f3digo PlantUML.<\/p>\n<\/blockquote>\n<p data-nodeid=\"15494\">Luego, revise la salida contra los requisitos antes de aceptarla. Para obtener mejores resultados, especifique expl\u00edcitamente las suposiciones, por ejemplo, si los pedidos pueden ser borradores sin l\u00edneas y si los pagos pueden ser reembolsados.<\/p>\n<p data-nodeid=\"15495\">Visual Paradigm describe<a href=\"https:\/\/blog.visual-paradigm.com\/comprehensive-guide-to-the-benefits-of-vpascode-editor-in-visual-paradigms-ecosystem\/\">VPasCode<\/a> como un <a href=\"https:\/\/guides.visual-paradigm.com\/vpascode-ai-assisted-diagram-as-code-with-plantuml\/\">editor con capacidad para PlantUML<\/a> con renderizado en vivo y <a href=\"https:\/\/www.visual-paradigm.com\/guide\/mastering-vpascode-the-ultimate-guide-to-ai-powered-diagram-as-code-with-multi-engine-support\/\">generaci\u00f3n o modificaci\u00f3n asistida por IA<\/a>. Las herramientas y la disponibilidad pueden variar seg\u00fan la versi\u00f3n del producto o el espacio de trabajo.<\/p>\n<h2 data-nodeid=\"15496\">8. Una lista de verificaci\u00f3n de revisi\u00f3n compacta<\/h2>\n<p data-nodeid=\"15497\">Antes de compartir o implementar un diagrama de clases, verifique:<\/p>\n<p><img alt=\"Infograf\u00eda de lista de verificaci\u00f3n para revisi\u00f3n de diagramas de clases UML que enumera ocho criterios de validaci\u00f3n para modelos de PlantUML, incluidos conceptos de dominio, atributos y dependencias del ciclo de vida.\" class=\"alignnone size-full wp-image-21907\" decoding=\"async\" height=\"1122\" loading=\"lazy\" sizes=\"auto, (max-width: 1402px) 100vw, 1402px\" src=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1e4ca700.jpeg\" srcset=\"https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1e4ca700.jpeg 1402w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1e4ca700-300x240.jpeg 300w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1e4ca700-1024x819.jpeg 1024w, https:\/\/www.cybermedian.com\/wp-content\/uploads\/2026\/10\/img_6acdc1e4ca700-768x615.jpeg 768w\" width=\"1402\"\/><\/p>\n<ul data-nodeid=\"15498\">\n<li data-nodeid=\"15499\">\n<p data-nodeid=\"15500\">\u00bfRepresenta cada clase un concepto de dominio significativo?<\/p>\n<\/li>\n<li data-nodeid=\"15501\">\n<p data-nodeid=\"15502\">\u00bfSon claros los identificadores y los atributos importantes?<\/p>\n<\/li>\n<li data-nodeid=\"15503\">\n<p data-nodeid=\"15504\">\u00bfSon correctas las etiquetas de relaci\u00f3n y las multiplicidades en <strong data-nodeid=\"15751\">ambos<\/strong> extremos?<\/p>\n<\/li>\n<li data-nodeid=\"15505\">\n<p data-nodeid=\"15506\">\u00bfRefleja la composici\u00f3n una dependencia real del ciclo de vida?<\/p>\n<\/li>\n<li data-nodeid=\"15507\">\n<p data-nodeid=\"15508\">\u00bfSe conservan los hechos hist\u00f3ricos donde los valores actuales pueden cambiar?<\/p>\n<\/li>\n<li data-nodeid=\"15509\">\n<p data-nodeid=\"15510\">\u00bfSon visibles los valores opcionales y las restricciones empresariales?<\/p>\n<\/li>\n<li data-nodeid=\"15511\">\n<p data-nodeid=\"15512\">\u00bfEs el diagrama lo suficientemente enfocado para su audiencia?<\/p>\n<\/li>\n<li data-nodeid=\"15513\">\n<p data-nodeid=\"15514\">\u00bfSe ha verificado el contenido generado contra los requisitos reales?<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-nodeid=\"15515\">El mejor flujo de trabajo de diagramas como c\u00f3digo es <strong data-nodeid=\"15762\">IA para un borrador inicial, PlantUML para ediciones precisas e historial de versiones, y revisi\u00f3n humana para la correcci\u00f3n del dominio<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un diagrama de clases UML describe la estructura de un sistema: las cosas que modela, sus propiedades y c\u00f3mo se<\/p>\n","protected":false},"author":11,"featured_media":11513,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","_fifu_image_alt":"","fifu_alt":"","_fifu_alt":"","fifu_image_title":"","_fifu_image_title":"","fifu_input_alt":"","vp_image_hash":"","footnotes":""},"categories":[3,85,119],"tags":[],"asset-category":[],"class_list":["post-11512","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unified-modeling-language","category-visual-paradigm","category-vpascode-editor"],"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","vp_image_hash":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio\" \/>\n<meta property=\"og:description\" content=\"Un diagrama de clases UML describe la estructura de un sistema: las cosas que modela, sus propiedades y c\u00f3mo se\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\" \/>\n<meta property=\"og:site_name\" content=\"Cibermedio\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-13T05:27:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-14T05:09:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1402\" \/>\n\t<meta property=\"og:image:height\" content=\"1122\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"curtis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"curtis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"},\"author\":{\"name\":\"curtis\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\"},\"headline\":\"Diagramas de clases UML para modelado de datos con PlantUML\",\"datePublished\":\"2026-10-13T05:27:33+00:00\",\"dateModified\":\"2026-10-14T05:09:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"},\"wordCount\":1548,\"image\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg\",\"articleSection\":[\"Unified Modeling Language\",\"Visual Paradigm\",\"VPasCode Editor\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\",\"url\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\",\"name\":\"Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio\",\"isPartOf\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg\",\"datePublished\":\"2026-10-13T05:27:33+00:00\",\"dateModified\":\"2026-10-14T05:09:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\",\"url\":\"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg\",\"contentUrl\":\"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg\",\"width\":1402,\"height\":1122},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.cybermedian.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Diagramas de clases UML para modelado de datos con PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/#website\",\"url\":\"https:\/\/www.cybermedian.com\/es\/\",\"name\":\"Cibermedio\",\"description\":\"Aprendiendo una cosa nueva todos los d\u00edas\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cybermedian.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\",\"name\":\"curtis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"caption\":\"curtis\"},\"url\":\"https:\/\/www.cybermedian.com\/es\/author\/curtis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/","og_locale":"es_ES","og_type":"article","og_title":"Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio","og_description":"Un diagrama de clases UML describe la estructura de un sistema: las cosas que modela, sus propiedades y c\u00f3mo se","og_url":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/","og_site_name":"Cibermedio","article_published_time":"2026-10-13T05:27:33+00:00","article_modified_time":"2026-10-14T05:09:00+00:00","og_image":[{"width":1402,"height":1122,"url":"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg","type":"image\/jpeg"}],"author":"curtis","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"curtis","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#article","isPartOf":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/"},"author":{"name":"curtis","@id":"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d"},"headline":"Diagramas de clases UML para modelado de datos con PlantUML","datePublished":"2026-10-13T05:27:33+00:00","dateModified":"2026-10-14T05:09:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/"},"wordCount":1548,"image":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg","articleSection":["Unified Modeling Language","Visual Paradigm","VPasCode Editor"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/","url":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/","name":"Diagramas de clases UML para modelado de datos con PlantUML - Cibermedio","isPartOf":{"@id":"https:\/\/www.cybermedian.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg","datePublished":"2026-10-13T05:27:33+00:00","dateModified":"2026-10-14T05:09:00+00:00","author":{"@id":"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d"},"breadcrumb":{"@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage","url":"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg","contentUrl":"https:\/\/www.cybermedian.com\/es\/wp-content\/uploads\/sites\/8\/2026\/10\/img_6acdbee446b47.jpeg","width":1402,"height":1122},{"@type":"BreadcrumbList","@id":"https:\/\/www.cybermedian.com\/es\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cybermedian.com\/es\/"},{"@type":"ListItem","position":2,"name":"Diagramas de clases UML para modelado de datos con PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/www.cybermedian.com\/es\/#website","url":"https:\/\/www.cybermedian.com\/es\/","name":"Cibermedio","description":"Aprendiendo una cosa nueva todos los d\u00edas","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cybermedian.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d","name":"curtis","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.cybermedian.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","caption":"curtis"},"url":"https:\/\/www.cybermedian.com\/es\/author\/curtis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/posts\/11512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/comments?post=11512"}],"version-history":[{"count":0,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/posts\/11512\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/media\/11513"}],"wp:attachment":[{"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/media?parent=11512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/categories?post=11512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/tags?post=11512"},{"taxonomy":"asset-category","embeddable":true,"href":"https:\/\/www.cybermedian.com\/es\/wp-json\/wp\/v2\/asset-category?post=11512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}