{"id":12329,"date":"2026-10-13T13:27:33","date_gmt":"2026-10-13T05:27:33","guid":{"rendered":"https:\/\/www.cybermedian.com\/pt\/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\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/","title":{"rendered":"Diagramas de Classes UML para Modelagem de Dados com PlantUML"},"content":{"rendered":"<p data-nodeid=\"15366\">Um <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/uml-class-diagram-tutorial\/\">diagrama de classes UML<\/a> descreve a <strong data-nodeid=\"15522\">estrutura<\/strong> de um sistema: as coisas que ele modela, suas propriedades e como elas se relacionam. Para modelagem de dados, pode capturar conceitos e restri\u00e7\u00f5es do dom\u00ednio antes de definir tabelas ou c\u00f3digo de aplica\u00e7\u00e3o.<\/p>\n<p><img alt=\"Diagrama de classes UML modelando entidades Cliente, Pedido e Produto, juntamente com a sintaxe PlantUML e um fluxo de trabalho de quatro etapas para modelagem de dados com controle de vers\u00e3o.\" 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> torna o diagrama reproduz\u00edvel: voc\u00ea escreve texto, o renderiza, revisa as altera\u00e7\u00f5es no controle de vers\u00e3o e o atualiza conforme o modelo evolui. Ele complementa \u2014 n\u00e3o substitui \u2014 esquemas de banco de dados, migra\u00e7\u00f5es e regras de neg\u00f3cio detalhadas.<\/p>\n<h2 data-nodeid=\"15368\">1. Escolha o n\u00edvel de modelagem<\/h2>\n<p data-nodeid=\"15369\">Um diagrama de modelagem de dados \u00fatil geralmente foca em um n\u00edvel por vez:<\/p>\n<p><img alt=\"Diagrama ilustrando tr\u00eas n\u00edveis de modelagem de dados: conceitual, l\u00f3gico e f\u00edsico, mostrando aumento de detalhe desde conceitos de neg\u00f3cios at\u00e9 implementa\u00e7\u00e3o em 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\">Conceitual:<\/strong> conceitos e relacionamentos de neg\u00f3cio, com m\u00ednimo detalhe t\u00e9cnico. Exemplo: <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 e regras, sem vincular o modelo a um banco de dados espec\u00edfico.<\/p>\n<\/li>\n<li data-nodeid=\"15375\">\n<p data-nodeid=\"15376\"><strong data-nodeid=\"15544\">F\u00edsico:<\/strong> detalhes de implementa\u00e7\u00e3o, como tipos de colunas SQL, \u00edndices e restri\u00e7\u00f5es espec\u00edficas do banco de dados.<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15377\">O exemplo abaixo \u00e9 um <strong data-nodeid=\"15556\">modelo de dom\u00ednio l\u00f3gico<\/strong>. Tipos como <code data-backticks=\"1\" data-nodeid=\"15550\">UUID<\/code>, <code data-backticks=\"1\" data-nodeid=\"15552\">Money<\/code>, e <code data-backticks=\"1\" data-nodeid=\"15554\">DateTime<\/code> s\u00e3o ilustrativos; decida suas representa\u00e7\u00f5es concretas ao escolher uma tecnologia.<\/p>\n<h2 data-nodeid=\"15378\">2. Fundamentos do PlantUML<\/h2>\n<p data-nodeid=\"15379\">Uma classe tem um nome e pode listar atributos e opera\u00e7\u00f5es:<\/p>\n<p id=\"pCSWdAu\"><img alt=\"Interface do VPasCode exibindo a sintaxe PlantUML para uma classe Cliente, ao lado de seu diagrama renderizado mostrando atributos e opera\u00e7\u00f5es.\" 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 no 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 no 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 no 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 no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"15381\">Marcadores de visibilidade s\u00e3o dicas de modelagem opcionais:<\/p>\n<p><img alt=\"Infogr\u00e1fico de marcadores de visibilidade UML mostrando os s\u00edmbolos mais, menos, hash e til para os n\u00edveis de acesso p\u00fablico, privado, protegido e de pacote.\" 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> visibilidade de pacote<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15391\">Para um diagrama de dom\u00ednio ou de dados, os atributos s\u00e3o os mais importantes. Inclua opera\u00e7\u00f5es apenas quando elas esclarecerem comportamentos importantes; evite transformar o diagrama em uma listagem completa de c\u00f3digo.<\/p>\n<h2 data-nodeid=\"15392\">3. Relacionamentos e multiplicidade<\/h2>\n<p data-nodeid=\"15393\">As nota\u00e7\u00f5es de relacionamento mais \u00fateis para modelagem de dados s\u00e3o:<\/p>\n<p><img alt=\"Diagrama UML ilustrando tipos de relacionamento como associa\u00e7\u00e3o e agrega\u00e7\u00e3o, juntamente com nota\u00e7\u00f5es de multiplicidade como 0..1 e 0..* com um exemplo 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\">Relacionamento<\/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\">Associa\u00e7\u00e3o<\/td>\n<td data-nodeid=\"15408\"><code data-backticks=\"1\" data-nodeid=\"15575\">A -- B<\/code><\/td>\n<td data-nodeid=\"15409\">Existe um relacionamento entre A e B<\/td>\n<\/tr>\n<tr data-nodeid=\"15410\">\n<td data-nodeid=\"15411\">Associa\u00e7\u00e3o direcionada<\/td>\n<td data-nodeid=\"15412\"><code data-backticks=\"1\" data-nodeid=\"15578\">A --&gt; B<\/code><\/td>\n<td data-nodeid=\"15413\">Um relacionamento naveg\u00e1vel ou direcional<\/td>\n<\/tr>\n<tr data-nodeid=\"15414\">\n<td data-nodeid=\"15415\">Agrega\u00e7\u00e3o<\/td>\n<td data-nodeid=\"15416\"><code data-backticks=\"1\" data-nodeid=\"15581\">A o-- B<\/code><\/td>\n<td data-nodeid=\"15417\">A tem uma parte, mas a parte pode existir independentemente<\/td>\n<\/tr>\n<tr data-nodeid=\"15418\">\n<td data-nodeid=\"15419\">Composi\u00e7\u00e3o<\/td>\n<td data-nodeid=\"15420\"><code data-backticks=\"1\" data-nodeid=\"15584\">A *-- B<\/code><\/td>\n<td data-nodeid=\"15421\">A possui uma parte cujo ciclo de vida depende dela<\/td>\n<\/tr>\n<tr data-nodeid=\"15422\">\n<td data-nodeid=\"15423\">Generaliza\u00e7\u00e3o<\/td>\n<td data-nodeid=\"15424\">`Filho \u2014<\/td>\n<td data-nodeid=\"15425\">&gt; Pai`<\/td>\n<\/tr>\n<tr data-nodeid=\"15427\">\n<td data-nodeid=\"15428\">Realiza\u00e7\u00e3o de interface<\/td>\n<td data-nodeid=\"15429\">`Classe ..<\/td>\n<td data-nodeid=\"15430\">&gt; Interface`<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-nodeid=\"15432\">R\u00f3tulos de multiplicidade ficam pr\u00f3ximos \u00e0s extremidades da associa\u00e7\u00e3o:<\/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 exatamente um<\/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, no m\u00e1ximo um<\/p>\n<\/li>\n<li data-nodeid=\"15438\">\n<p data-nodeid=\"15439\"><code data-backticks=\"1\" data-nodeid=\"15601\">*<\/code> ou <code data-backticks=\"1\" data-nodeid=\"15603\">0..*<\/code> \u2014 zero ou mais<\/p>\n<\/li>\n<li data-nodeid=\"15440\">\n<p data-nodeid=\"15441\"><code data-backticks=\"1\" data-nodeid=\"15605\">1..*<\/code> \u2014 um ou mais<\/p>\n<\/li>\n<li data-nodeid=\"15442\">\n<p data-nodeid=\"15443\"><code data-backticks=\"1\" data-nodeid=\"15607\">2..5<\/code> \u2014 um intervalo limitado<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"15444\">Por exemplo:<\/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 no 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 no 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 no 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 no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"15446\">Leia os r\u00f3tulos em cada extremidade com aten\u00e7\u00e3o: um cliente pode fazer zero ou mais pedidos; cada pedido est\u00e1 associado a exatamente um cliente. Os r\u00f3tulos descrevem o relacionamento, n\u00e3o necessariamente a implementa\u00e7\u00e3o de chave estrangeira de um banco de dados espec\u00edfico.<\/p>\n<h2 data-nodeid=\"15447\">4. Exemplo pr\u00e1tico: loja online<\/h2>\n<p data-nodeid=\"15448\">Este modelo inclui clientes, pedidos, itens de pedido, produtos e registros de pagamento. Ele demonstra identificadores, tipos semelhantes a valores, um enum, composi\u00e7\u00e3o e multiplicidades.<\/p>\n<p id=\"uuxvPiM\"><img alt=\"C\u00f3digo PlantUML e o diagrama de classes UML resultante mostrando um modelo de loja online com entidades Cliente, Pedido, Linha de Pedido, Produto e Pagamento.\" 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 no 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 no 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:TLHBRvj04BxpAqO-fhALN54K1HcxHNKTP9jBgXxMxCHim-xItI6HK_M_TtU1W5FrnEmylc-Ut5jYXbfPmxxIJQeb4ogopq8rp309PSsiJOYCEBQ4MQdLNhmXN4zSRCMuVXNg14-ijXX5bU084gdIt4PHG81bQqbBDF0x0lXKzg-Cnr0KMUfrw9Zh65R-at1kq5glvi8sDJjlcSGOzYuFTOh-3AWFXW-GsejJF1TL8ayeXfGH7eH4htNLKclZBd8V7bvDcfWZ_wOLdZ_0RuJ2Zg9sqhQLHpGnP8hmXCQhVxLCaQ1p3BcsWiGBJeoj4fGRKU8_uBdHl2sfWswwnpH_-zowWhyMNbRJwaF_Z47rFs1sbixO0tUFAJ2JkbKqX4rwqWUENMcOk6WWVBzUB6v-Z5G10cvlNrZT8kZZJopfxgvZ7cXIB8LazPXswJgrxAMbvkZXKBLoEfC0aUwIzS5zyqsoNFdKyoHKi2uswsop2QfbibskWZoWN5GHSFBLDissdvsK58Sl3xliiG_D3yKkYEiaw-1sgtMnJJkqzvMTtSnWFeUPA_vgrkzS366_RDGzlSkLzxaPVSBYnE1EXjnDzPv1sIFDvtSXSDY460m-eR50UW8xCW-3TTozn8XGDZHauG6dYpq4UFtbSCTSlAqROmn-MQ7nItKHEfYxYKQHqeHWnAaYq4zZhQvzmoc0TBs38yB9eDiT0rGn1Mzej7DwFmaGhjGAEqOeMKEjGUuyNYjKmHAEshjrn-m6pC6pVyoXxw2VTISjfXS2afsXT1cSSE5SCWAkqNeWr_20F1QnUCzkCRBTEydz8Vy2\" \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\nskinparam classAttributeIconSize 0\nskinparam shadowing false\n\nhide methods\n\nclass Customer {\n  +customerId: UUID\n  +email: EmailAddress\n  +displayName: String\n}\n\nclass Order {\n  +orderId: UUID\n  +placedAt: DateTime\n  +status: OrderStatus\n  +total: Money\n}\n\nclass OrderLine {\n  +lineNumber: Integer\n  +quantity: PositiveInteger\n  +unitPrice: Money\n}\n\nclass Product {\n  +productId: UUID\n  +sku: SKU\n  +name: String\n  +currentPrice: Money\n}\n\nclass Payment {\n  +paymentId: UUID\n  +amount: Money\n  +status: PaymentStatus\n  +paidAt: DateTime [0..1]\n}\n\nclass Money &lt;&lt;value object&gt;&gt; {\n  +amount: Decimal\n  +currency: CurrencyCode\n}\n\nenum OrderStatus {\n  DRAFT\n  PLACED\n  PAID\n  FULFILLED\n  CANCELLED\n}\n\nenum PaymentStatus {\n  PENDING\n  AUTHORIZED\n  CAPTURED\n  FAILED\n  REFUNDED\n}\n\nCustomer \"1\" -- \"0..*\" Order : places\nOrder \"1\" *-- \"1..*\" OrderLine : contains\nOrderLine \"0..*\" --&gt; \"1\" Product : refers to\nOrder \"1\" -- \"0..*\" Payment : payment attempts\nOrder --&gt; OrderStatus\nPayment --&gt; PaymentStatus\nOrderLine --&gt; Money : unit price\nPayment --&gt; Money : amount\n\nnote right of OrderLine\n  quantity must be greater than zero\n  unitPrice is the price captured\n  when the order is placed\nend note\n\nnote right of Product\n  Product.currentPrice may change.\n  It does not replace OrderLine.unitPrice.\nend note\n@enduml\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLHBRvj04BxpAqO-fhALN54K1HcxHNKTP9jBgXxMxCHim-xItI6HK_M_TtU1W5FrnEmylc-Ut5jYXbfPmxxIJQeb4ogopq8rp309PSsiJOYCEBQ4MQdLNhmXN4zSRCMuVXNg14-ijXX5bU084gdIt4PHG81bQqbBDF0x0lXKzg-Cnr0KMUfrw9Zh65R-at1kq5glvi8sDJjlcSGOzYuFTOh-3AWFXW-GsejJF1TL8ayeXfGH7eH4htNLKclZBd8V7bvDcfWZ_wOLdZ_0RuJ2Zg9sqhQLHpGnP8hmXCQhVxLCaQ1p3BcsWiGBJeoj4fGRKU8_uBdHl2sfWswwnpH_-zowWhyMNbRJwaF_Z47rFs1sbixO0tUFAJ2JkbKqX4rwqWUENMcOk6WWVBzUB6v-Z5G10cvlNrZT8kZZJopfxgvZ7cXIB8LazPXswJgrxAMbvkZXKBLoEfC0aUwIzS5zyqsoNFdKyoHKi2uswsop2QfbibskWZoWN5GHSFBLDissdvsK58Sl3xliiG_D3yKkYEiaw-1sgtMnJJkqzvMTtSnWFeUPA_vgrkzS366_RDGzlSkLzxaPVSBYnE1EXjnDzPv1sIFDvtSXSDY460m-eR50UW8xCW-3TTozn8XGDZHauG6dYpq4UFtbSCTSlAqROmn-MQ7nItKHEfYxYKQHqeHWnAaYq4zZhQvzmoc0TBs38yB9eDiT0rGn1Mzej7DwFmaGhjGAEqOeMKEjGUuyNYjKmHAEshjrn-m6pC6pVyoXxw2VTISjfXS2afsXT1cSSE5SCWAkqNeWr_20F1QnUCzkCRBTEydz8Vy2\" \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 no 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 no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"15450\"><strong data-nodeid=\"15619\">Por que modelar <code data-backticks=\"1\" data-nodeid=\"15615\">OrderLine<\/code> explicitamente?<\/strong> O relacionamento entre um pedido e um produto possui seus pr\u00f3prios dados \u2014 quantidade e o pre\u00e7o no momento da compra. Isso o torna um conceito de dom\u00ednio, n\u00e3o apenas uma liga\u00e7\u00e3o simples.<\/p>\n<p data-nodeid=\"15451\"><strong data-nodeid=\"15628\">Por que composi\u00e7\u00e3o de <code data-backticks=\"1\" data-nodeid=\"15622\">Order<\/code> para <code data-backticks=\"1\" data-nodeid=\"15624\">OrderLine<\/code>?<\/strong> O exemplo assume que uma linha de pedido pertence a um \u00fanico pedido e n\u00e3o tem significado independente. Use composi\u00e7\u00e3o apenas quando essa regra de propriedade e ciclo de vida for verdadeira no seu dom\u00ednio; a nota\u00e7\u00e3o UML n\u00e3o a imp\u00f5e no banco de dados.<\/p>\n<p data-nodeid=\"15452\"><strong data-nodeid=\"15633\">Por que distinguir pre\u00e7os atuais e hist\u00f3ricos?<\/strong> O pre\u00e7o de um produto pode mudar ap\u00f3s um pedido ser feito. Manter o pre\u00e7o no momento da compra na linha de pedido preserva o valor hist\u00f3rico.<\/p>\n<h2 data-nodeid=\"15453\">5. Decis\u00f5es de modelagem que importam<\/h2>\n<p><img alt=\"Infogr\u00e1fico de modelagem de dados UML ilustrando seis decis\u00f5es-chave: identificadores, valores opcionais, objetos de valor, enumerados, modelo versus implementa\u00e7\u00e3o e legibilidade.\" 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 identificadores de forma consistente, como <code data-backticks=\"1\" data-nodeid=\"15639\">customerId<\/code> ou <code data-backticks=\"1\" data-nodeid=\"15641\">orderId<\/code>. UML n\u00e3o define uma nota\u00e7\u00e3o universal \u00fanica para chaves prim\u00e1rias, portanto escolha uma conven\u00e7\u00e3o e documente-a. Um estere\u00f3tipo ou nota pode tornar isso 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 no 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 no 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 no 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 no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"15456\"><strong data-nodeid=\"15652\">Valores opcionais:<\/strong> Use <code data-backticks=\"1\" data-nodeid=\"15648\">[0..1]<\/code> para um atributo opcional quando isso for claro para seus leitores, ou anote a regra. Por exemplo, um pagamento pode n\u00e3o ter nenhum <code data-backticks=\"1\" data-nodeid=\"15650\">paidAt<\/code> timestamp at\u00e9 que seja bem-sucedido.<\/p>\n<p data-nodeid=\"15457\"><strong data-nodeid=\"15661\">Objetos de valor:<\/strong> Um tipo como <code data-backticks=\"1\" data-nodeid=\"15657\">Money<\/code> ou <code data-backticks=\"1\" data-nodeid=\"15659\">EmailAddress<\/code> pode representar um conceito com valida\u00e7\u00e3o ou sem\u00e2ntica pr\u00f3prias. Decida se deve aparecer como uma classe separada, um tipo de atributo ou uma estrutura de banco de dados, com base no p\u00fablico-alvo e no n\u00edvel de detalhe.<\/p>\n<p data-nodeid=\"15458\"><strong data-nodeid=\"15666\">Enumera\u00e7\u00f5es e valores controlados:<\/strong> Use uma enumera\u00e7\u00e3o quando o conjunto permitido for pequeno e relativamente est\u00e1vel. Se os valores precisarem de descri\u00e7\u00f5es independentes, ciclo de vida ou administra\u00e7\u00e3o, modele-os como uma classe em vez disso.<\/p>\n<p data-nodeid=\"15459\"><strong data-nodeid=\"15673\">Normaliza\u00e7\u00e3o e implementa\u00e7\u00e3o:<\/strong> Um diagrama de classes comunica conceitos e regras; n\u00e3o define todos os detalhes relacionais. Por exemplo, se <code data-backticks=\"1\" data-nodeid=\"15671\">Money<\/code> se torna duas colunas, uma tabela separada ou um tipo espec\u00edfico do banco de dados \u00e9 uma decis\u00e3o de implementa\u00e7\u00e3o.<\/p>\n<p data-nodeid=\"15460\"><strong data-nodeid=\"15678\">Mantenha os diagramas leg\u00edveis:<\/strong> Divida um dom\u00ednio grande em diagramas focados \u2014 como pedidos, estoque e identidade \u2014 e use pacotes para agrupar classes relacionadas. Mostre apenas atributos relevantes para a quest\u00e3o que o diagrama deve responder.<\/p>\n<h2 data-nodeid=\"15461\">6. Construa um modelo a partir dos requisitos<\/h2>\n<p><img alt=\"Infogr\u00e1fico de seis etapas ilustrando como construir um modelo UML a partir de requisitos, cobrindo extra\u00e7\u00e3o de conceitos, esclarecimento de regras e revis\u00e3o de casos de borda.\" 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\">Extraia conceitos candidatos<\/strong> da linguagem do dom\u00ednio: substantivos frequentemente sugerem classes; verbos frequentemente sugerem relacionamentos ou comportamento.<\/p>\n<\/li>\n<li data-nodeid=\"15465\">\n<p data-nodeid=\"15466\"><strong data-nodeid=\"15689\">Esclarecer regras<\/strong> com perguntas concretas: Um pedido pode existir sem um cliente? Ele pode ter zero linhas? Um pagamento pode ser tentado novamente?<\/p>\n<\/li>\n<li data-nodeid=\"15467\">\n<p data-nodeid=\"15468\"><strong data-nodeid=\"15694\">Escolha um n\u00edvel de modelagem<\/strong> e mantenha decis\u00f5es t\u00e9cnicas de banco de fora de um diagrama conceitual.<\/p>\n<\/li>\n<li data-nodeid=\"15469\">\n<p data-nodeid=\"15470\"><strong data-nodeid=\"15699\">Adicione atributos e identificadores<\/strong> apenas quando ajudarem a explicar o modelo.<\/p>\n<\/li>\n<li data-nodeid=\"15471\">\n<p data-nodeid=\"15472\"><strong data-nodeid=\"15704\">Defina multiplicidades<\/strong> a partir das regras de neg\u00f3cio, verificando ambas as extremidades de cada relacionamento.<\/p>\n<\/li>\n<li data-nodeid=\"15473\">\n<p data-nodeid=\"15474\"><strong data-nodeid=\"15709\">Revise casos de borda<\/strong>: exclus\u00e3o, registros hist\u00f3ricos, campos opcionais, tentativas repetidas e valores mut\u00e1veis.<\/p>\n<\/li>\n<li data-nodeid=\"15475\">\n<p data-nodeid=\"15476\"><strong data-nodeid=\"15714\">Renderize e revise<\/strong> o diagrama com especialistas do dom\u00ednio e implementadores. Trate-o como um modelo a ser validado, n\u00e3o meramente como uma imagem a ser aprovada.<\/p>\n<\/li>\n<\/ol>\n<h2 data-nodeid=\"15477\">7. Use VPasCode e Visual Paradigm<\/h2>\n<p data-nodeid=\"15478\"><a href=\"https:\/\/www.visual-paradigm.com\/features\/vpascode\/\"><strong data-nodeid=\"15720\">VPasCode<\/strong><\/a> \u00e9 um editor de<a href=\"https:\/\/www.visual-paradigm.com\/features\/diagram-as-code-tool\/\"> texto-para-diagrama baseado em navegador com suporte a PlantUML<\/a> e uma visualiza\u00e7\u00e3o ao vivo. Sua descri\u00e7\u00e3o de recursos tamb\u00e9m lista gera\u00e7\u00e3o e modifica\u00e7\u00e3o de c\u00f3digo de diagrama por IA, al\u00e9m de assist\u00eancia de sintaxe. Um fluxo de trabalho pr\u00e1tico \u00e9:<\/p>\n<p><img alt=\"Diagrama de fluxo de trabalho de cinco etapas mostrando como escrever, visualizar, refinar, gerar e validar diagramas de classes UML usando VPasCode e 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 o VPasCode e selecione ou insira PlantUML.<\/p>\n<\/li>\n<li data-nodeid=\"15482\">\n<p data-nodeid=\"15483\">Cole o exemplo acima e inspecione o diagrama renderizado.<\/p>\n<\/li>\n<li data-nodeid=\"15484\">\n<p data-nodeid=\"15485\">Itere sobre a fonte PlantUML; mantenha o texto como o artefato version\u00e1vel.<\/p>\n<\/li>\n<li data-nodeid=\"15486\">\n<p data-nodeid=\"15487\">Use o assistente de IA, se dispon\u00edvel em seu espa\u00e7o de trabalho, para rascunhar ou revisar uma primeira vers\u00e3o.<\/p>\n<\/li>\n<li data-nodeid=\"15488\">\n<p data-nodeid=\"15489\">Verifique por si mesmo cada classe, relacionamento, multiplicidade e regra de neg\u00f3cio gerados.<\/p>\n<\/li>\n<\/ol>\n<p data-nodeid=\"15490\">As ferramentas de diagrama\u00e7\u00e3o assistidas por IA do Visual Paradigm podem gerar diagramas edit\u00e1veis a partir de descri\u00e7\u00f5es em linguagem natural. Seu fluxo de trabalho publicado descreve a gera\u00e7\u00e3o de um diagrama de classes a partir de um prompt, seguido pelo refinamento de seus elementos e relacionamentos. Trate a sa\u00edda da IA como um<strong data-nodeid=\"15735\">rascunho<\/strong>: ela pode inferir propriedade incorreta, restri\u00e7\u00f5es ausentes ou classes injustificadas. A corre\u00e7\u00e3o do modelo ainda depende de valid\u00e1-lo contra os requisitos.<\/p>\n<p data-nodeid=\"15491\">Por exemplo, fa\u00e7a um prompt a um assistente de IA com:<\/p>\n<blockquote data-nodeid=\"15492\">\n<p data-nodeid=\"15493\">Crie um diagrama de classes UML l\u00f3gico para uma loja online. Clientes fazem pedidos. Cada pedido cont\u00e9m uma ou mais linhas de pedido. Cada linha de pedido refere-se a um produto e armazena a quantidade e o pre\u00e7o unit\u00e1rio no momento da compra. Pedidos podem ter m\u00faltiplas tentativas de pagamento. Inclua identificadores, multiplicidades e enumeradores de status de pedido e pagamento. Sa\u00edda apenas em PlantUML.<\/p>\n<\/blockquote>\n<p data-nodeid=\"15494\">Em seguida, revise a sa\u00edda contra os requisitos antes de aceit\u00e1-la. Para melhores resultados, especifique pressupostos explicitamente \u2014 por exemplo, se os pedidos podem ser rascunhos sem linhas e se os pagamentos podem ser reembolsados.<\/p>\n<p data-nodeid=\"15495\">O Visual Paradigm descreve<a href=\"https:\/\/blog.visual-paradigm.com\/comprehensive-guide-to-the-benefits-of-vpascode-editor-in-visual-paradigms-ecosystem\/\">VPasCode<\/a> como um <a href=\"https:\/\/guides.visual-paradigm.com\/vpascode-ai-assisted-diagram-as-code-with-plantuml\/\">editor com capacidade para PlantUML<\/a> com renderiza\u00e7\u00e3o em tempo real e <a href=\"https:\/\/www.visual-paradigm.com\/guide\/mastering-vpascode-the-ultimate-guide-to-ai-powered-diagram-as-code-with-multi-engine-support\/\">gera\u00e7\u00e3o ou modifica\u00e7\u00e3o assistida por IA<\/a>. As ferramentas e a disponibilidade podem variar conforme a vers\u00e3o do produto ou o espa\u00e7o de trabalho.<\/p>\n<h2 data-nodeid=\"15496\">8. Uma lista de verifica\u00e7\u00e3o de revis\u00e3o compacta<\/h2>\n<p data-nodeid=\"15497\">Antes de compartilhar ou implementar um diagrama de classes, verifique:<\/p>\n<p><img alt=\"Infogr\u00e1fico com a lista de verifica\u00e7\u00e3o de revis\u00e3o de diagrama de classes UML, listando oito crit\u00e9rios de valida\u00e7\u00e3o para modelos PlantUML, incluindo conceitos de dom\u00ednio, atributos e depend\u00eancias do 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\">Cada classe representa um conceito de dom\u00ednio significativo?<\/p>\n<\/li>\n<li data-nodeid=\"15501\">\n<p data-nodeid=\"15502\">Os identificadores e atributos importantes est\u00e3o claros?<\/p>\n<\/li>\n<li data-nodeid=\"15503\">\n<p data-nodeid=\"15504\">Os r\u00f3tulos de relacionamento e as multiplicidades est\u00e3o corretos em <strong data-nodeid=\"15751\">ambos<\/strong> os extremos?<\/p>\n<\/li>\n<li data-nodeid=\"15505\">\n<p data-nodeid=\"15506\">A composi\u00e7\u00e3o reflete uma depend\u00eancia real do ciclo de vida?<\/p>\n<\/li>\n<li data-nodeid=\"15507\">\n<p data-nodeid=\"15508\">Os fatos hist\u00f3ricos s\u00e3o preservados onde os valores atuais podem mudar?<\/p>\n<\/li>\n<li data-nodeid=\"15509\">\n<p data-nodeid=\"15510\">Os valores opcionais e as restri\u00e7\u00f5es de neg\u00f3cios est\u00e3o vis\u00edveis?<\/p>\n<\/li>\n<li data-nodeid=\"15511\">\n<p data-nodeid=\"15512\">O diagrama \u00e9 suficientemente focado para seu p\u00fablico?<\/p>\n<\/li>\n<li data-nodeid=\"15513\">\n<p data-nodeid=\"15514\">O conte\u00fado gerado foi verificado em rela\u00e7\u00e3o aos requisitos reais?<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-nodeid=\"15515\">O melhor fluxo de trabalho de diagrama como c\u00f3digo \u00e9 <strong data-nodeid=\"15762\">IA para um rascunho inicial, PlantUML para edi\u00e7\u00f5es precisas e hist\u00f3rico de vers\u00f5es, e revis\u00e3o humana para corre\u00e7\u00e3o de dom\u00ednio<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um diagrama de classes UML descreve a estrutura de um sistema: as coisas que ele modela, suas propriedades e como<\/p>\n","protected":false},"author":11,"featured_media":12330,"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,120],"tags":[],"asset-category":[],"class_list":["post-12329","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 Classes UML para Modelagem de Dados com PlantUML - Cibermediano<\/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\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diagramas de Classes UML para Modelagem de Dados com PlantUML - Cibermediano\" \/>\n<meta property=\"og:description\" content=\"Um diagrama de classes UML descreve a estrutura de um sistema: as coisas que ele modela, suas propriedades e como\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\" \/>\n<meta property=\"og:site_name\" content=\"Cibermediano\" \/>\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\/pt\/wp-content\/uploads\/sites\/11\/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=\"Tempo estimado de leitura\" \/>\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\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"},\"author\":{\"name\":\"curtis\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\"},\"headline\":\"Diagramas de Classes UML para Modelagem de Dados com PlantUML\",\"datePublished\":\"2026-10-13T05:27:33+00:00\",\"dateModified\":\"2026-10-14T05:09:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"},\"wordCount\":1564,\"image\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg\",\"articleSection\":[\"Unified Modeling Language\",\"Visual Paradigm\",\"VPasCode Editor\"],\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\",\"url\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\",\"name\":\"Diagramas de Classes UML para Modelagem de Dados com PlantUML - Cibermediano\",\"isPartOf\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/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\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage\",\"url\":\"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg\",\"contentUrl\":\"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg\",\"width\":1402,\"height\":1122},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.cybermedian.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Diagramas de Classes UML para Modelagem de Dados com PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/#website\",\"url\":\"https:\/\/www.cybermedian.com\/pt\/\",\"name\":\"Cibermediano\",\"description\":\"Aprendendo uma coisa nova todos os dias\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cybermedian.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d\",\"name\":\"curtis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/www.cybermedian.com\/pt\/#\/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\/pt\/author\/curtis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Diagramas de Classes UML para Modelagem de Dados com PlantUML - Cibermediano","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\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/","og_locale":"pt_PT","og_type":"article","og_title":"Diagramas de Classes UML para Modelagem de Dados com PlantUML - Cibermediano","og_description":"Um diagrama de classes UML descreve a estrutura de um sistema: as coisas que ele modela, suas propriedades e como","og_url":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/","og_site_name":"Cibermediano","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\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg","type":"image\/jpeg"}],"author":"curtis","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"curtis","Tempo estimado de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#article","isPartOf":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/"},"author":{"name":"curtis","@id":"https:\/\/www.cybermedian.com\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d"},"headline":"Diagramas de Classes UML para Modelagem de Dados com PlantUML","datePublished":"2026-10-13T05:27:33+00:00","dateModified":"2026-10-14T05:09:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/"},"wordCount":1564,"image":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg","articleSection":["Unified Modeling Language","Visual Paradigm","VPasCode Editor"],"inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/","url":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/","name":"Diagramas de Classes UML para Modelagem de Dados com PlantUML - Cibermediano","isPartOf":{"@id":"https:\/\/www.cybermedian.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/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\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d"},"breadcrumb":{"@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#primaryimage","url":"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg","contentUrl":"https:\/\/www.cybermedian.com\/pt\/wp-content\/uploads\/sites\/11\/2026\/10\/img_6acdbee446b47.jpeg","width":1402,"height":1122},{"@type":"BreadcrumbList","@id":"https:\/\/www.cybermedian.com\/pt\/uml-class-diagrams-for-data-modeling-with-plantuml\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cybermedian.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Diagramas de Classes UML para Modelagem de Dados com PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/www.cybermedian.com\/pt\/#website","url":"https:\/\/www.cybermedian.com\/pt\/","name":"Cibermediano","description":"Aprendendo uma coisa nova todos os dias","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cybermedian.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Person","@id":"https:\/\/www.cybermedian.com\/pt\/#\/schema\/person\/016578d8c88d35825fd3fbafc4f76b4d","name":"curtis","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.cybermedian.com\/pt\/#\/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\/pt\/author\/curtis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/posts\/12329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/comments?post=12329"}],"version-history":[{"count":0,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/posts\/12329\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/media\/12330"}],"wp:attachment":[{"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/media?parent=12329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/categories?post=12329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/tags?post=12329"},{"taxonomy":"asset-category","embeddable":true,"href":"https:\/\/www.cybermedian.com\/pt\/wp-json\/wp\/v2\/asset-category?post=12329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}