{"id":542,"date":"2026-08-14T08:16:11","date_gmt":"2026-08-14T08:16:11","guid":{"rendered":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/"},"modified":"2026-09-03T15:28:09","modified_gmt":"2026-09-03T15:28:09","slug":"1106-2","status":"publish","type":"post","link":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/","title":{"rendered":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o"},"content":{"rendered":"<h2>Introdu\u00e7\u00e3o<\/h2>\n<p>Na engenharia de software orientada a objetos, o <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/uml-class-diagram-tutorial\/\">Diagrama de Classes<\/a> \u00e9 o artefato mais onipresente, mas frequentemente mal aplicado. Frequentemente reduzido a um mero esquema de banco de dados na nota\u00e7\u00e3o UML ou tratado como um mapeamento direto 1:1 da estrutura do c\u00f3digo, um verdadeiro Diagrama de Classes \u00e9 uma especifica\u00e7\u00e3o rigorosa de <strong>estrutura est\u00e1tica, contratos de tipo e relacionamentos sem\u00e2nticos<\/strong>. \u00c9 o projeto arquitet\u00f4nico que faz a ponte entre os conceitos do dom\u00ednio de neg\u00f3cios e o design de software execut\u00e1vel.<\/p>\n<p>Apesar da domin\u00e2ncia das metodologias \u00e1geis e do desenvolvimento orientado a testes, o <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/what-is-class-diagram\/\">Diagrama de Classes<\/a> continua sendo o padr\u00e3o-ouro para definir contratos de API, validar modelos de dom\u00ednio com as partes interessadas e garantir a integridade estrutural antes do in\u00edcio da implementa\u00e7\u00e3o. No entanto, produzir um Diagrama de Classes de n\u00edvel profissional exige mais do que desenhar caixas e setas. Exige ades\u00e3o estrita aos n\u00edveis de abstra\u00e7\u00e3o (Conceitual, L\u00f3gico, F\u00edsico), compreens\u00e3o precisa da sem\u00e2ntica dos relacionamentos (associa\u00e7\u00e3o vs. agrega\u00e7\u00e3o vs. composi\u00e7\u00e3o) e aplica\u00e7\u00e3o disciplinada dos princ\u00edpios SOLID para evitar o decadimento estrutural.<\/p>\n<p id=\"LTosBzR\"><img loading=\"lazy\" alt=\"Diagrama mostrando como os diagramas de classes conectam conceitos de neg\u00f3cios e c\u00f3digo por meio de n\u00edveis de abstra\u00e7\u00e3o e sem\u00e2ntica de relacionamentos.\" class=\"alignnone size-full wp-image-1107\" decoding=\"async\" height=\"572\" loading=\"lazy\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-300x168.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-768x429.png 768w\" width=\"1024\"\/><\/p>\n<p>Este guia fornece uma refer\u00eancia abrangente para o vocabul\u00e1rio de Diagramas de Classes, hierarquia de abstra\u00e7\u00e3o, regras de relacionamento e invariantes de qualidade. Seja voc\u00ea modelando um dom\u00ednio complexo de Gest\u00e3o de Pedidos ou projetando um contrato de API de microsservi\u00e7o, as se\u00e7\u00f5es a seguir estabelecem o framework preciso necess\u00e1rio para criar Diagramas de Classes que sejam analiticamente s\u00f3lidos, arquitetonicamente robustos e praticamente \u00fateis. Todos os exemplos s\u00e3o renderizados usando PlantUML, fornecendo especifica\u00e7\u00f5es execut\u00e1veis que podem ser versionadas e integradas em pipelines de CI\/CD.<\/p>\n<hr\/>\n<h2>1. Os Blocos de Constru\u00e7\u00e3o Fundamentais: O \u201cVocabul\u00e1rio\u201d do Diagrama de Classes<\/h2>\n<p>Antes de abordar os n\u00edveis de abstra\u00e7\u00e3o, voc\u00ea deve dominar os elementos fundamentais. Estes s\u00e3o consistentes em todas as normas UML 2.x, mas diferem significativamente em <em>inten\u00e7\u00e3o sem\u00e2ntica<\/em> dependendo do n\u00edvel de abstra\u00e7\u00e3o.<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Elemento<\/th>\n<th align=\"left\">Prop\u00f3sito<\/th>\n<th align=\"left\">Nota\u00e7\u00e3o<\/th>\n<th align=\"left\">Restri\u00e7\u00e3o Principal<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Classe<\/strong><\/td>\n<td align=\"left\">Um projeto para objetos; encapsula estado (atributos) e comportamento (m\u00e9todos)<\/td>\n<td align=\"left\">Ret\u00e2ngulo com 3 compartimentos (Nome, Atributos, Opera\u00e7\u00f5es)<\/td>\n<td align=\"left\">O nome deve ser um substantivo singular; atributos tipados; visibilidade marcada (+, -, #)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Interface<\/strong><\/td>\n<td align=\"left\">Um contrato que especifica comportamento sem implementa\u00e7\u00e3o<\/td>\n<td align=\"left\">Ret\u00e2ngulo com estere\u00f3tipo \u00abinterface\u00bb ou nota\u00e7\u00e3o de pirulito<\/td>\n<td align=\"left\">Sem atributos (exceto constantes); todas as opera\u00e7\u00f5es p\u00fablicas e abstratas<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Enumera\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">Um conjunto fixo de valores nomeados<\/td>\n<td align=\"left\">Ret\u00e2ngulo com estere\u00f3tipo \u00abenumeration\u00bb<\/td>\n<td align=\"left\">Valores listados no compartimento de nome; sem opera\u00e7\u00f5es tipicamente<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Associa\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o estrutural indicando que objetos est\u00e3o conectados<\/td>\n<td align=\"left\">Linha s\u00f3lida com multiplicidade opcional<\/td>\n<td align=\"left\">Deve ter nomes de papel em ambas as extremidades para clareza; multiplicidade obrigat\u00f3ria<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Agrega\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o fraca \u201ctem-um\u201d; a parte pode existir independentemente<\/td>\n<td align=\"left\">Linha s\u00f3lida com losango vazio na extremidade do todo<\/td>\n<td align=\"left\">Ciclo de vida da parte independente do todo; propriedade compartilhada poss\u00edvel<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Composi\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o forte \u201cpossui-um\u201d; a parte n\u00e3o pode existir sem o todo<\/td>\n<td align=\"left\">Linha s\u00f3lida com losango preenchido na extremidade do todo<\/td>\n<td align=\"left\">Ciclo de vida da parte vinculado ao todo; propriedade exclusiva<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Heran\u00e7a<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o \u201c\u00e9-um\u201d; a subclasse herda estrutura\/comportamento<\/td>\n<td align=\"left\">Linha s\u00f3lida com tri\u00e2ngulo vazio apontando para o pai<\/td>\n<td align=\"left\">O Princ\u00edpio da Substitui\u00e7\u00e3o de Liskov deve ser respeitado; evite hierarquias profundas<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Realiza\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o \u201cimplementa\u201d; a classe cumpre o contrato da interface<\/td>\n<td align=\"left\">Linha tracejada com tri\u00e2ngulo vazio apontando para a interface<\/td>\n<td align=\"left\">A classe deve implementar todas as opera\u00e7\u00f5es da interface<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Depend\u00eancia<\/strong><\/td>\n<td align=\"left\">Rela\u00e7\u00e3o \u201cusa\u201d; acoplamento tempor\u00e1rio ou fraco<\/td>\n<td align=\"left\">Seta aberta tracejada<\/td>\n<td align=\"left\">Minimizar; indica alvo potencial de refatora\u00e7\u00e3o<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Conven\u00e7\u00f5es de Nomenclatura (Cruciais para Clareza)<\/h3>\n<ul>\n<li>\n<p><strong>Classes:<\/strong>Substantivos no singular em PascalCase \u2192<code data-backticks=\"1\">Ordem<\/code>,\u00a0<code data-backticks=\"1\">PerfilDoCliente<\/code>,\u00a0<code data-backticks=\"1\">GatewayDePagamento<\/code>. Nunca plural (<code data-backticks=\"1\">Pedidos<\/code>) ou baseado em verbo (<code data-backticks=\"1\">ProcessarPedido<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>Atributos:<\/strong>\u00a0camelCase + tipo \u2192 <code data-backticks=\"1\">orderId: UUID<\/code>,\u00a0<code data-backticks=\"1\">createdAt: DateTime<\/code>. Prefixo de visibilidade obrigat\u00f3rio: <code data-backticks=\"1\">+<\/code>\u00a0publico, <code data-backticks=\"1\">-<\/code>\u00a0privado, <code data-backticks=\"1\">#<\/code>\u00a0protegido.<\/p>\n<\/li>\n<li>\n<p><strong>Opera\u00e7\u00f5es:<\/strong>\u00a0camelCase frase verbal + tipo de retorno \u2192 <code data-backticks=\"1\">+calculateTotal(): Decimal<\/code>,\u00a0<code data-backticks=\"1\">-validateAddress(): Boolean<\/code>. Par\u00e2metros tipados: <code data-backticks=\"1\">(quantity: Integer, price: Decimal)<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Relacionamentos:<\/strong>\u00a0Nomes de pap\u00e9is em ambas as extremidades \u2192 <code data-backticks=\"1\">Cliente [1] realiza [0..*] Pedido<\/code>. Multiplicidade sempre especificada: <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>2. A Hierarquia de Abstra\u00e7\u00e3o: Conceitual, L\u00f3gica, F\u00edsica<\/h2>\n<p>A dimens\u00e3o mais cr\u00edtica na modelagem de Diagramas de Classes \u00e9 <strong>n\u00edvel de abstra\u00e7\u00e3o<\/strong>. Confundir esses n\u00edveis \u00e9 a principal fonte de falha no modelo. Cada n\u00edvel atende a partes interessadas e prop\u00f3sitos distintos. Eles n\u00e3o s\u00e3o etapas sequenciais a serem descartadas, mas vis\u00f5es paralelas mantidas ao longo do ciclo de vida.<\/p>\n<h3>2.1 Diagrama de Classes Conceitual: A Verdade do Dom\u00ednio<\/h3>\n<ul>\n<li>\n<p><strong>Foco:<\/strong>Entidades, relacionamentos e regras de neg\u00f3cio <em>independentes de qualquer tecnologia ou implementa\u00e7\u00e3o<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Ignora deliberadamente:<\/strong>Linguagens de programa\u00e7\u00e3o, bancos de dados, frameworks, APIs, preocupa\u00e7\u00f5es de desempenho, formatos de serializa\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p><strong>Atributos:<\/strong>Apenas propriedades com significado de neg\u00f3cio. Sem IDs, a menos que sejam relevantes para o neg\u00f3cio (por exemplo, <code data-backticks=\"1\">ssn<\/code>,\u00a0<code data-backticks=\"1\">isbn<\/code>). Sem chaves estrangeiras.<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9todos:<\/strong>\u00a0Raramente mostrado. Se presente, representa\u00a0<em>comportamentos de neg\u00f3cios<\/em>\u00a0(<code data-backticks=\"1\">calculateDiscount()<\/code>,\u00a0<code data-backticks=\"1\">isEligibleForRenewal()<\/code>), n\u00e3o getters\/setters.<\/p>\n<\/li>\n<li>\n<p><strong>Relacionamentos:<\/strong>\u00a0Refletem sem\u00e2nticas do mundo real. Multiplicidades refletem regras de neg\u00f3cios, n\u00e3o restri\u00e7\u00f5es de armazenamento.<\/p>\n<\/li>\n<li>\n<p><strong>Partes interessadas:<\/strong>\u00a0Especialistas do dom\u00ednio, analistas de neg\u00f3cios, propriet\u00e1rios de produto, auditores.<\/p>\n<\/li>\n<li>\n<p><strong>Estabilidade:<\/strong>\u00a0Alta. Altera-se apenas quando a compreens\u00e3o de neg\u00f3cios evolui.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemplo: Dom\u00ednio Conceitual de Pedidos<\/h4>\n<p id=\"wgJeAyU\"><img loading=\"lazy\" alt=\"Diagrama de classes conceitual para o Dom\u00ednio de Pedidos mostrando os relacionamentos entre Cliente, Pedido, Produto e Endere\u00e7o de Entrega.\" class=\"alignnone size-full wp-image-1109\" decoding=\"async\" height=\"874\" loading=\"lazy\" sizes=\"auto, (max-width: 1916px) 100vw, 1916px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png 1916w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-300x137.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1024x467.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-768x350.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1536x701.png 1536w\" width=\"1916\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">Plantuml<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:RLJDRjD04BvRyZiCkT0MfMglaK0DJYeiaZHAqjuttacywdhNx0zGK2KU0eaxFVJ42V44llCGF0cpQ_SdXPFdcvdzvjydrZ7ZV2MXqAh0sdac-zfmD7skAoPKcZnp9LO8jOp8NWfLCyCga4AXkweHj76bVcmf9BDsw9mHQ-ym9-Qb-8Hmb2Qbu0Y5C8N43bH8ZxbDapHnmac4aM1R8c50nYmGeOKiv2P2Rl3dorSOwQhveOGEBdFaWciBUnV2DZTHDSDjyxCGsku7rfWCPDuwNQ61psa2iF5IpXWLDO0bPQcsGObKhYJDE7o7d1kqDkWhhDPeR2dgbI220OHFcbm_a9-5VhNCiNKZvW9r-0GTjTXvIuhejumew5yKJ1PUajTAEoRtzibbgXLUHQEmImfPixN4Q7cjjKIcTWBFZUQ-S6rezRGWU-a3VdiUW5V2pOqey2788w8OYfvrPRU4rXb4jqDP27Urgz1UEHDqMIjbccD7ZSfNZsjkMKUBuUag2DdPx3HVJCUZ09Plylcy5KVZINunNhGW6ywoyMGIm0Ddd4CaMww6iz5m4LtdY_4qFvy6yIAVT_xFOIBKfGKk3D9AA2OivMoCs6856XWjSKbzKuusHqFpNMszZ29LsA4qkL-Utd4F-lIsTFrNq3iwF3peTSCVXFieaERQuk1vqASR-g22wt5qlHlN81oRetFQSUzBt4HUaf_EOm1X_-pgdsJk0b0k_tt6SSEyTFVhd2PAqtB66a1lskpJ95VlcH5CaOaEI7K7D4YJk9dm4dxVxDK6czlO6-6eUSqtUESunXjR6QQiQ6wRNtIiHD1jlC6juCn2cjH8NTr8_p4Ug3DipMGPPTf-nKMSG9WkXv1VcfoGI7-blm00\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml conceptual-order-domain\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\nhide circle\r\nhide methods\r\n\r\ntitle Diagrama de Classes Conceitual \u2014 Dom\u00ednio de Pedidos (Vis\u00e3o de Neg\u00f3cios)\r\n\r\nclass Customer {\r\n  fullName : String\r\n  email : EmailAddress\r\n  membershipTier : Tier\r\n}\r\n\r\nclass Order {\r\n  orderDate : Date\r\n  status : OrderStatus\r\n  +calculateTotal() : Money\r\n  +isShippable() : Boolean\r\n}\r\n\r\nclass Product {\r\n  name : String\r\n  sku : SKU\r\n  unitPrice : Money\r\n}\r\n\r\nclass ShippingAddress {\r\n  street : String\r\n  city : String\r\n  country : CountryCode\r\n}\r\n\r\nenum OrderStatus {\r\n  DRAFT\r\n  CONFIRMED\r\n  SHIPPED\r\n  DELIVERED\r\n  CANCELLED\r\n}\r\n\r\nenum Tier {\r\n  STANDARD\r\n  PREMIUM\r\n  VIP\r\n}\r\n\r\n' Links direcionais corrigem o alinhamento do \u00e2ngulo do tri\u00e2ngulo\r\nCustomer \"1\" -right-&gt; \"0..*\" Order : places\r\nOrder \"1\" *--down-&gt; \"1..*\" Product : contains\r\nOrder \"1\" -left-&gt; \"1\" ShippingAddress : shipsTo\r\nCustomer \"1\" -down-&gt; \"0..1\" ShippingAddress : defaultAddress\r\n\r\nnote right of Order\r\nInvariante de neg\u00f3cio:\r\nTotal = \u03a3(pre\u00e7o do item \u00d7 qtde)\r\n\r\nTransi\u00e7\u00f5es de status regidas \r\npelo fluxo de trabalho de atendimento\r\nend note\r\n@enduml\r\n\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJDRjD04BvRyZiCkT0MfMglaK0DJYeiaZHAqjuttacywdhNx0zGK2KU0eaxFVJ42V44llCGF0cpQ_SdXPFdcvdzvjydrZ7ZV2MXqAh0sdac-zfmD7skAoPKcZnp9LO8jOp8NWfLCyCga4AXkweHj76bVcmf9BDsw9mHQ-ym9-Qb-8Hmb2Qbu0Y5C8N43bH8ZxbDapHnmac4aM1R8c50nYmGeOKiv2P2Rl3dorSOwQhveOGEBdFaWciBUnV2DZTHDSDjyxCGsku7rfWCPDuwNQ61psa2iF5IpXWLDO0bPQcsGObKhYJDE7o7d1kqDkWhhDPeR2dgbI220OHFcbm_a9-5VhNCiNKZvW9r-0GTjTXvIuhejumew5yKJ1PUajTAEoRtzibbgXLUHQEmImfPixN4Q7cjjKIcTWBFZUQ-S6rezRGWU-a3VdiUW5V2pOqey2788w8OYfvrPRU4rXb4jqDP27Urgz1UEHDqMIjbccD7ZSfNZsjkMKUBuUag2DdPx3HVJCUZ09Plylcy5KVZINunNhGW6ywoyMGIm0Ddd4CaMww6iz5m4LtdY_4qFvy6yIAVT_xFOIBKfGKk3D9AA2OivMoCs6856XWjSKbzKuusHqFpNMszZ29LsA4qkL-Utd4F-lIsTFrNq3iwF3peTSCVXFieaERQuk1vqASR-g22wt5qlHlN81oRetFQSUzBt4HUaf_EOm1X_-pgdsJk0b0k_tt6SSEyTFVhd2PAqtB66a1lskpJ95VlcH5CaOaEI7K7D4YJk9dm4dxVxDK6czlO6-6eUSqtUESunXjR6QQiQ6wRNtIiHD1jlC6juCn2cjH8NTr8_p4Ug3DipMGPPTf-nKMSG9WkXv1VcfoGI7-blm00\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Editar Plantuml no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p id=\"QCXQrCz\"><img loading=\"lazy\" alt=\"Diagrama de classes conceitual para o Dom\u00ednio de Pedidos mostrando os relacionamentos entre Cliente, Pedido e Produto.\" class=\"alignnone size-full wp-image-1111\" decoding=\"async\" height=\"539\" loading=\"lazy\" sizes=\"auto, (max-width: 771px) 100vw, 771px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png 771w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-300x210.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-768x537.png 768w\" width=\"771\"\/><\/p>\n<p><strong>Observa\u00e7\u00f5es principais:<\/strong><\/p>\n<ul>\n<li>\n<p>Sem IDs, sem chaves estrangeiras (FKs), sem anota\u00e7\u00f5es de persist\u00eancia.<\/p>\n<\/li>\n<li>\n<p>M\u00e9todos expressam l\u00f3gica de neg\u00f3cios, n\u00e3o acesso a dados.<\/p>\n<\/li>\n<li>\n<p>Multiplicidades refletem regras de neg\u00f3cios (<code data-backticks=\"1\">Pedido<\/code>\u00a0<em>deve<\/em>\u00a0conter pelo menos um\u00a0<code data-backticks=\"1\">Produto<\/code>).<\/p>\n<\/li>\n<li>\n<p>Composi\u00e7\u00e3o (<code data-backticks=\"1\">*--<\/code>) utilizada onde as sem\u00e2nticas de neg\u00f3cio o exigem (itens de linha n\u00e3o podem existir sem pedido).<\/p>\n<\/li>\n<li>\n<p>Enumera\u00e7\u00f5es capturam vocabul\u00e1rios de neg\u00f3cio, n\u00e3o c\u00f3digos t\u00e9cnicos.<\/p>\n<\/li>\n<\/ul>\n<h3>2.2 Diagrama de Classes L\u00f3gico: A Especifica\u00e7\u00e3o de Software<\/h3>\n<ul>\n<li>\n<p><strong>Foco:<\/strong>  Design de software independente de plataforma. Define tipos, interfaces e contratos <em>sem comprometer-se com tecnologias espec\u00edficas<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Inclui:<\/strong>  Classes abstratas, interfaces, tipos gen\u00e9ricos, padr\u00f5es de projeto, tipos de tratamento de erros.<\/p>\n<\/li>\n<li>\n<p><strong>Atributos:<\/strong>  Tipados com tipos neutros de plataforma (<code data-backticks=\"1\">String<\/code>,\u00a0<code data-backticks=\"1\">Decimal<\/code>,\u00a0<code data-backticks=\"1\">DateTime<\/code>,\u00a0<code data-backticks=\"1\">UUID<\/code>). Inclui atributos de identidade (<code data-backticks=\"1\">id<\/code>) e atributos derivados (<code data-backticks=\"1\">\/total<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9todos:<\/strong>  Assinaturas completas incluindo par\u00e2metros, tipos de retorno e exce\u00e7\u00f5es. Getters\/setters omitidos, a menos que sejam comportamentalmente significativos.<\/p>\n<\/li>\n<li>\n<p><strong>Relacionamentos:<\/strong>  Multiplicidades precisas, setas de navegabilidade, nomes de pap\u00e9is. Interfaces realizadas explicitamente.<\/p>\n<\/li>\n<li>\n<p><strong>Partes interessadas:<\/strong>Arquitetos, desenvolvedores seniores, designers de API.<\/p>\n<\/li>\n<li>\n<p><strong>Estabilidade:<\/strong>M\u00e9dia. Evolui com o refinamento do design, mas \u00e9 est\u00e1vel entre as escolhas de implementa\u00e7\u00e3o.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemplo: Design L\u00f3gico do Servi\u00e7o de Pedidos<\/h4>\n<p id=\"ClcVxRL\"><img loading=\"lazy\" alt=\"Diagrama de classes l\u00f3gico para o Servi\u00e7o de Pedidos mostrando interfaces, DTOs e entidades de dom\u00ednio.\" class=\"alignnone size-full wp-image-1113\" decoding=\"async\" height=\"869\" loading=\"lazy\" sizes=\"auto, (max-width: 1917px) 100vw, 1917px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png 1917w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-300x136.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1024x464.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-768x348.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1536x696.png 1536w\" width=\"1917\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:TLLBRjim4DqRy1scwIO_kUrM28oaTXS632IeamFGuaIULY8LScGqQGlq4Br3qKLNFO9lqfDqg8yjEOuN5lNUa6z-75rwLexBF8FCffIeBB9EeuiykZKbE1oyuXNc24Mco0m7_ZEPGZcLGqO6-R50i8vNjiiacVB-YjdHicIS9TOiw0dXxN0m731nXZ0bbOgb0eqm2TReORxvA_eM_ltu2OiWllbb0t-3chJrS3n5Jwc1cT5OeFmPnehF5Ajxwt9r4WH8O7Ul4eJPTGXaKSS1NuS3aDzPub0nLjHnakiO9ZjWOlDS6NqIG_KwqysU5BdUG7fBjKRJs-l6gYoq7BHWnQNlMfw3hx06g0ra-zgI27mFJgkbPwSIhbC7xvN73qPIzTYw_Peqn71tDvisxsjqdgmHS6vDse1rRFgA1PxAwfPoRAZQkNsg4gyrAzy0lx2azf07KL9wjda8gET9L0S7lUWQAhJ8Z34Fx9myNymRODpkNL5Ha4clj7ReWrcpglatR5bbmMDCA5TPMqAL9MKMWWZqySa-hueYUvoIJsnf-5Wt2x5gLltSr-6tdct3BPpLPSBxqJwKgavBB8t8cA9hYD8GtxZGQVlk-7B9pnpjIBV1Vzqcr266EYta1hMrZP9Qj8-5Q5o09_LgOZMs_bifJ1Q0pgwEwlEstrsHmvK-esufw-OMv2C-bEXvt4RxSadtkqskpbRJrdUbB_XoQvqTxWmwr6mYCsx4-oFXujje13qa1ibAHazgEEZXez6ukI0nICdH9DIQmD6x8pYD8dcEHgT7kqQAGGOVRtxdCEwQHj6uUkxoWsPDwaOcvyumw1qea1pfI6axnQxXDfSnIDD-GXQBS5m8s5WPaexI5OEzxq_4aB8vvHIcgAryTOfj763H4pcPkHZ0_1paT0zUOJuIzdef6aBgi37V_35amPGcKR1MJqfCP89041uEBcKfdvR_\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml logical-order-service\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitle Diagrama de Classes L\u00f3gico \u2014 Servi\u00e7o de Pedidos (Design Independente de Plataforma)\r\n\r\ninterface IOrderService {\r\n    +createOrder(cmd: CreateOrderCommand): OrderId\r\n    +getOrder(id: OrderId): OrderDTO\r\n    +updateStatus(id: OrderId, status: OrderStatus): void\r\n}\r\n\r\nabstract class BaseEntity {\r\n    #id : UUID\r\n    #version : Long\r\n    #createdAt : DateTime\r\n    #updatedAt : DateTime\r\n}\r\n\r\nclass Order extends BaseEntity {\r\n    -customerId : UUID\r\n    -status : OrderStatus\r\n    -lineItems : List&lt;LineItem&gt;\r\n    -shippingAddress : Address\r\n    \/total : Decimal\r\n    +calculateTotal(): Decimal\r\n    +applyDiscount(discount: Discount): void\r\n}\r\n\r\nclass LineItem {\r\n    -productId : UUID\r\n    -quantity : Integer\r\n    -unitPrice : Decimal\r\n    +subtotal(): Decimal\r\n}\r\n\r\nclass Address {\r\n    -street : String\r\n    -city : String\r\n    -country : CountryCode\r\n    -postalCode : String\r\n}\r\n\r\nclass CreateOrderCommand {\r\n    +customerId : UUID\r\n    +items : List&lt;OrderItemRequest&gt;\r\n    +shippingAddress : Address\r\n}\r\n\r\nclass OrderDTO {\r\n    +orderId : UUID\r\n    +status : OrderStatus\r\n    +total : Decimal\r\n    +items : List&lt;LineItemDTO&gt;\r\n}\r\n\r\nIOrderService &lt;|.. OrderService : realiza\r\nOrderService ..&gt; Order : gerencia\r\nOrder \"1\" *-- \"1..*\" LineItem : cont\u00e9m &gt;\r\nOrder \"1\" --&gt; \"1\" Address : enviaPara &gt;\r\nOrder ..&gt; CreateOrderCommand : criadoDe\r\nOrder ..&gt; OrderDTO : projetadoPara\r\n\r\nnote right of IOrderService\r\n  Limite do contrato:\r\n  Comandos entram, DTOs saem.\n  Objetos de dom\u00ednio nunca vazam.\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:TLLBRjim4DqRy1scwIO_kUrM28oaTXS632IeamFGuaIULY8LScGqQGlq4Br3qKLNFO9lqfDqg8yjEOuN5lNUa6z-75rwLexBF8FCffIeBB9EeuiykZKbE1oyuXNc24Mco0m7_ZEPGZcLGqO6-R50i8vNjiiacVB-YjdHicIS9TOiw0dXxN0m731nXZ0bbOgb0eqm2TReORxvA_eM_ltu2OiWllbb0t-3chJrS3n5Jwc1cT5OeFmPnehF5Ajxwt9r4WH8O7Ul4eJPTGXaKSS1NuS3aDzPub0nLjHnakiO9ZjWOlDS6NqIG_KwqysU5BdUG7fBjKRJs-l6gYoq7BHWnQNlMfw3hx06g0ra-zgI27mFJgkbPwSIhbC7xvN73qPIzTYw_Peqn71tDvisxsjqdgmHS6vDse1rRFgA1PxAwfPoRAZQkNsg4gyrAzy0lx2azf07KL9wjda8gET9L0S7lUWQAhJ8Z34Fx9myNymRODpkNL5Ha4clj7ReWrcpglatR5bbmMDCA5TPMqAL9MKMWWZqySa-hueYUvoIJsnf-5Wt2x5gLltSr-6tdct3BPpLPSBxqJwKgavBB8t8cA9hYD8GtxZGQVlk-7B9pnpjIBV1Vzqcr266EYta1hMrZP9Qj8-5Q5o09_LgOZMs_bifJ1Q0pgwEwlEstrsHmvK-esufw-OMv2C-bEXvt4RxSadtkqskpbRJrdUbB_XoQvqTxWmwr6mYCsx4-oFXujje13qa1ibAHazgEEZXez6ukI0nICdH9DIQmD6x8pYD8dcEHgT7kqQAGGOVRtxdCEwQHj6uUkxoWsPDwaOcvyumw1qea1pfI6axnQxXDfSnIDD-GXQBS5m8s5WPaexI5OEzxq_4aB8vvHIcgAryTOfj763H4pcPkHZ0_1paT0zUOJuIzdef6aBgi37V_35amPGcKR1MJqfCP89041uEBcKfdvR_\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Editar PlantUML no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Observa\u00e7\u00f5es Principais:<\/strong><\/p>\n<ul>\n<li>\n<p>A interface define o contrato do servi\u00e7o; a implementa\u00e7\u00e3o \u00e9 oculta.<\/p>\n<\/li>\n<li>\n<p>O padr\u00e3o Command\/DTO separa entrada\/sa\u00edda do modelo de dom\u00ednio.<\/p>\n<\/li>\n<li>\n<p>A entidade base fornece identidade\/versionamento transversal.<\/p>\n<\/li>\n<li>\n<p>Atributo derivado <code data-backticks=\"1\">\/total<\/code>sinaliza um valor calculado.<\/p>\n<\/li>\n<li>\n<p>As setas de navegabilidade mostram a dire\u00e7\u00e3o da depend\u00eancia.<\/p>\n<\/li>\n<li>\n<p>Sem anota\u00e7\u00f5es ORM, sem tipos de banco de dados, sem depend\u00eancias de framework.<\/p>\n<\/li>\n<\/ul>\n<h3>2.3 Diagrama de Classes F\u00edsico: A Realidade da Implementa\u00e7\u00e3o<\/h3>\n<ul>\n<li>\n<p><strong>Foco:<\/strong>Realiza\u00e7\u00e3o espec\u00edfica da tecnologia. Inclui frameworks, ORMs, serializa\u00e7\u00e3o, preocupa\u00e7\u00f5es de infraestrutura.<\/p>\n<\/li>\n<li>\n<p><strong>Inclui:<\/strong>Anota\u00e7\u00f5es (<code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">@JsonProperty<\/code>,\u00a0<code data-backticks=\"1\">@Autowired<\/code>), tipos de cole\u00e7\u00e3o concretos (<code data-backticks=\"1\">ArrayList<\/code>,\u00a0<code data-backticks=\"1\">HashSet<\/code>), tipos mapeados de banco de dados (<code data-backticks=\"1\">VARCHAR(255)<\/code>,\u00a0<code data-backticks=\"1\">BIGINT<\/code>), classes base do framework.<\/p>\n<\/li>\n<li>\n<p><strong>Atributos:<\/strong> Tipos espec\u00edficos do framework, marcadores de carregamento pregui\u00e7oso, configura\u00e7\u00f5es de cache.<\/p>\n<\/li>\n<li>\n<p><strong>M\u00e9todos:<\/strong> Callbacks de ciclo de vida (<code data-backticks=\"1\">@PostConstruct<\/code>), ganchos de serializa\u00e7\u00e3o, pontos de integra\u00e7\u00e3o do framework.<\/p>\n<\/li>\n<li>\n<p><strong>Relacionamentos:<\/strong> Estrat\u00e9gias de busca (<code data-backticks=\"1\">LAZY<\/code>,\u00a0<code data-backticks=\"1\">EAGER<\/code>), regras de cascata, mapeamentos de tabela de jun\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p><strong>Partes interessadas:<\/strong> Desenvolvedores, DBAs, DevOps, QA.<\/p>\n<\/li>\n<li>\n<p><strong>Estabilidade:<\/strong> Baixa. Altera-se com cada atualiza\u00e7\u00e3o ou otimiza\u00e7\u00e3o de tecnologia.<\/p>\n<\/li>\n<\/ul>\n<h4>Exemplo: Implementa\u00e7\u00e3o f\u00edsica JPA\/Spring<\/h4>\n<p id=\"rvEprlH\"><img loading=\"lazy\" alt=\"Diagrama de classes f\u00edsico JPA\/Spring Boot mostrando a entidade Pedido com anota\u00e7\u00f5es e relacionamentos.\" class=\"alignnone size-full wp-image-1114\" decoding=\"async\" height=\"814\" loading=\"lazy\" sizes=\"auto, (max-width: 1726px) 100vw, 1726px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png 1726w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-300x141.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1024x483.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-768x362.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1536x724.png 1536w\" width=\"1726\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:bLRDRXit4BuBq3imEgrYIx5pD291ikm6CfJQi9G0oIMWbYCjM_vio5ctQbeW3z4dwAMddee-WTyaJvBX_cXNibIqEaZayflXns-6tshaaJlCj69fil4ovgfddG3N-o7bxTOpJ403InMNfjtoFqgJSiSrKz80Rb9Wrc5YcoknujwF4PrSPWZJs9gv_0NOMRlLRg541UnAyZKXEHF09W4Dddtt-1VjRTdNBx-pQuDIS5gy3JnOT7CtVZ5FdJHhTcajTaEcKG3XXWOBlbGG6QvXqCc9-muXSXPbWi_j5gFFQ2hOw3KOS1n1lECgWsAX9mMxO6_VJgzAu3jA8gqfLn-A6K5crgnBoCIgJ9l8P4g5_GShhZnqouWuysWrkEbUtckJwMBtQBwudtx_kWgW4c3c2PmJdkUpCkRMmCA-uMOJQPwc82utvJ4xfopcFYQT1kFPx9GAaIRSt8Es3rmDq6LREg5MKmGTDfW3lfgLys55Ioz1210LcKIcAOaz5iA13q7bg8Gl73TUWi5Y_W8jSaMeIxc-WbXgheg54sgbE5Dqt4L0HDrTo6_7onW8VvI1SLtAYlJ_hsOGRs59nsW562U3sVZ3-rAQqOsLfYfbtK4VfI1r3zSs1rIL-Y_Da3ehiXZtU-5VOpvbFDU5GgO6ORs_K-f8nT2KW_EpKqPDG0bULi6PaNZdP0pieE1viSEMbR9LdJ_lxg70h34Pl3mxgxlK0M1e8WoNyI3yl8R7nG5sm4TlG6mpWoxW9yLeOWKS8RHLrjAzKG7OsAOuvHpS0oaG-YfqAu-Hn0eYD7oXn4nrgfYaB_8vWvvDcujRKSOPsf-asrwIl0tk8RLLAuInbsZTvaW4F53wksoff4_o3XgdgIAx3SokTzQgw-E0XCgJHx4Mf4pzO6ArvaPqcorriWOiq58Kpxibjwl5RILCawQard8h7iF-2HZyZ624PpSfhv--ob6dUUPX9Sp9IXhofCdMyQBQ_BOaPj9Z4JtSYIgCBYhSRyVyAEYEhs4Rb9CltBnptc7FUptwxVUVTsfVk63x1caQ_cYUscCpOQytp7zhpskuufDkwVU7JoIxsAdumP2Z1JyKt4ZTx_ywt2q51PGb2heOYy2M5absPbUrCzqkFJ7WZty-_aDlMBeb0Zpe54nYByBwroz_iFhT47FdOCs59QybXwm0XRkNLYuiCvnfq8z_Eyaho8HhkWVbIvCbV2cLHCwModxAG5fcKMhg0C8JOnROKYFIaFvpV0C0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml physical-order-jpa\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitle Diagrama de Classes F\u00edsico \u2014 Entidade Order (JPA\/Spring Boot)\r\n\r\n@Entity\r\n@Table(name=\"orders\")\r\nclass Order {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @Version\r\n    -version : Long\r\n    @Column(nullable=false)\r\n    -customerId : UUID\r\n    @Enumerated(STRING)\r\n    -status : OrderStatus\r\n    @OneToMany(mappedBy=\"order\", cascade=ALL, orphanRemoval=true)\r\n    -lineItems : Set&lt;LineItem&gt;\r\n    @Embedded\r\n    -shippingAddress : Address\r\n    @Transient\r\n    \/total : BigDecimal\r\n    +calculateTotal(): BigDecimal\r\n}\r\n\r\n@Entity\r\n@Table(name=\"line_items\")\r\nclass LineItem {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @ManyToOne(fetch=LAZY)\r\n    @JoinColumn(name=\"order_id\", nullable=false)\r\n    -order : Order\r\n    @Column(nullable=false)\r\n    -productId : UUID\r\n    @Column(nullable=false)\r\n    -quantity : Integer\r\n    @Column(precision=10, scale=2)\r\n    -unitPrice : BigDecimal\r\n}\r\n\r\n@Embeddable\r\nclass Address {\r\n    @Column(length=200)\r\n    -street : String\r\n    @Column(length=100)\r\n    -city : String\r\n    @Enumerated(STRING)\r\n    -country : CountryCode\r\n    @Column(length=20)\r\n    -postalCode : String\r\n}\r\n\r\n@Service\r\n@Transactional\r\nclass OrderServiceImpl implements IOrderService {\r\n    @Autowired\r\n    -orderRepo : OrderRepository\r\n    @Autowired\r\n    -eventPublisher : ApplicationEventPublisher\r\n    +createOrder(cmd: CreateOrderCommand): UUID\r\n    +getOrder(id: UUID): OrderDTO\r\n}\r\n\r\n@Repository\r\ninterface OrderRepository extends JpaRepository&lt;Order, UUID&gt; {\r\n    +findByCustomerId(customerId: UUID): List&lt;Order&gt;\r\n    +findByStatus(status: OrderStatus): Page&lt;Order&gt;\r\n}\r\n\r\nOrder \"1\" *-- \"1..*\" LineItem : mappedBy=\"order\"ncascade=ALLnorphanRemoval=true\r\nOrder \"1\" --&gt; \"1\" Address : @Embedded\r\nOrderServiceImpl ..&gt; OrderRepository : @Autowired\r\nOrderServiceImpl ..&gt; ApplicationEventPublisher : @Autowired\r\nOrderRepository ..|&gt; JpaRepository : extends\r\n\r\nnote bottom of Order\r\n  Observa\u00e7\u00f5es de desempenho:\r\n  \u2022 lineItems carregados LAZY\r\n  \u2022 total calculado na mem\u00f3ria\r\n  \u2022 Campo Version habilita bloqueio otimista\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:bLRDRXit4BuBq3imEgrYIx5pD291ikm6CfJQi9G0oIMWbYCjM_vio5ctQbeW3z4dwAMddee-WTyaJvBX_cXNibIqEaZayflXns-6tshaaJlCj69fil4ovgfddG3N-o7bxTOpJ403InMNfjtoFqgJSiSrKz80Rb9Wrc5YcoknujwF4PrSPWZJs9gv_0NOMRlLRg541UnAyZKXEHF09W4Dddtt-1VjRTdNBx-pQuDIS5gy3JnOT7CtVZ5FdJHhTcajTaEcKG3XXWOBlbGG6QvXqCc9-muXSXPbWi_j5gFFQ2hOw3KOS1n1lECgWsAX9mMxO6_VJgzAu3jA8gqfLn-A6K5crgnBoCIgJ9l8P4g5_GShhZnqouWuysWrkEbUtckJwMBtQBwudtx_kWgW4c3c2PmJdkUpCkRMmCA-uMOJQPwc82utvJ4xfopcFYQT1kFPx9GAaIRSt8Es3rmDq6LREg5MKmGTDfW3lfgLys55Ioz1210LcKIcAOaz5iA13q7bg8Gl73TUWi5Y_W8jSaMeIxc-WbXgheg54sgbE5Dqt4L0HDrTo6_7onW8VvI1SLtAYlJ_hsOGRs59nsW562U3sVZ3-rAQqOsLfYfbtK4VfI1r3zSs1rIL-Y_Da3ehiXZtU-5VOpvbFDU5GgO6ORs_K-f8nT2KW_EpKqPDG0bULi6PaNZdP0pieE1viSEMbR9LdJ_lxg70h34Pl3mxgxlK0M1e8WoNyI3yl8R7nG5sm4TlG6mpWoxW9yLeOWKS8RHLrjAzKG7OsAOuvHpS0oaG-YfqAu-Hn0eYD7oXn4nrgfYaB_8vWvvDcujRKSOPsf-asrwIl0tk8RLLAuInbsZTvaW4F53wksoff4_o3XgdgIAx3SokTzQgw-E0XCgJHx4Mf4pzO6ArvaPqcorriWOiq58Kpxibjwl5RILCawQard8h7iF-2HZyZ624PpSfhv--ob6dUUPX9Sp9IXhofCdMyQBQ_BOaPj9Z4JtSYIgCBYhSRyVyAEYEhs4Rb9CltBnptc7FUptwxVUVTsfVk63x1caQ_cYUscCpOQytp7zhpskuufDkwVU7JoIxsAdumP2Z1JyKt4ZTx_ywt2q51PGb2heOYy2M5absPbUrCzqkFJ7WZty-_aDlMBeb0Zpe54nYByBwroz_iFhT47FdOCs59QybXwm0XRkNLYuiCvnfq8z_Eyaho8HhkWVbIvCbV2cLHCwModxAG5fcKMhg0C8JOnROKYFIaFvpV0C0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>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:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Editar PlantUML no VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Observa\u00e7\u00f5es Principais:<\/strong><\/p>\n<ul>\n<li>\n<p>As anota\u00e7\u00f5es JPA definem explicitamente o mapeamento de persist\u00eancia.<\/p>\n<\/li>\n<li>\n<p>Estrat\u00e9gias de busca e regras de cascata documentadas nos relacionamentos.<\/p>\n<\/li>\n<li>\n<p>Estere\u00f3tipos do Spring (<code data-backticks=\"1\">@Service<\/code>,\u00a0<code data-backticks=\"1\">@Repository<\/code>) marcam pap\u00e9is de infraestrutura.<\/p>\n<\/li>\n<li>\n<p>Tipos concretos (<code data-backticks=\"1\">BigDecimal<\/code>,\u00a0<code data-backticks=\"1\">Set<\/code>,\u00a0<code data-backticks=\"1\">Page<\/code>) substituem abstra\u00e7\u00f5es.<\/p>\n<\/li>\n<li>\n<p>O reposit\u00f3rio estende uma interface do framework\u2014acoplamento tecnol\u00f3gico expl\u00edcito.<\/p>\n<\/li>\n<li>\n<p>Decis\u00f5es cr\u00edticas de desempenho (carregamento lazy, campos transit\u00f3rios) anotadas.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>3. Sem\u00e2ntica de Relacionamentos: A Precis\u00e3o Importa<\/h2>\n<p>O uso incorreto de tipos de relacionamento \u00e9 o erro estrutural mais comum. Cada um carrega sem\u00e2nticas espec\u00edficas de ciclo de vida, propriedade e cardinalidade.<\/p>\n<h3>3.1 Matriz de Decis\u00e3o<\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Pergunta<\/th>\n<th align=\"left\">Associa\u00e7\u00e3o<\/th>\n<th align=\"left\">Agrega\u00e7\u00e3o<\/th>\n<th align=\"left\">Composi\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">A parte pode existir sem o todo?<\/td>\n<td align=\"left\">N\/A<\/td>\n<td align=\"left\">Sim<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">A propriedade \u00e9 exclusiva?<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<td align=\"left\">Sim<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">O ciclo de vida \u00e9 gerenciado pelo todo?<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<td align=\"left\">Sim<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Multiplicidade t\u00edpica na extremidade da parte<\/td>\n<td align=\"left\">Qualquer<\/td>\n<td align=\"left\">0..*<\/td>\n<td align=\"left\">1..* (geralmente)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Exemplo<\/td>\n<td align=\"left\">Usu\u00e1rio empresta Livro<\/td>\n<td align=\"left\">Departamento tem Professor<\/td>\n<td align=\"left\">Pedido cont\u00e9m Item da Linha<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Cascata de exclus\u00e3o?<\/td>\n<td align=\"left\">Nunca<\/td>\n<td align=\"left\">Opcional<\/td>\n<td align=\"left\">Obrigat\u00f3rio<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Refer\u00eancias compartilhadas s\u00e3o permitidas?<\/td>\n<td align=\"left\">Sim<\/td>\n<td align=\"left\">Sim<\/td>\n<td align=\"left\">N\u00e3o<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3.2 Usos Comuns Incorretos e Corre\u00e7\u00f5es<\/h3>\n<p>\u274c\u00a0<strong>Usar composi\u00e7\u00e3o para refer\u00eancias compartilhadas:<\/strong>\u00a0<code data-backticks=\"1\">Biblioteca *-- Livro<\/code>est\u00e1 errado se os livros podem ser emprestados\/movidos. Use agrega\u00e7\u00e3o ou associa\u00e7\u00e3o.<br \/>\n\u2705\u00a0<strong>Corre\u00e7\u00e3o:<\/strong>\u00a0<code data-backticks=\"1\">Biblioteca o-- Livro<\/code> (agrega\u00e7\u00e3o) ou <code data-backticks=\"1\">Biblioteca -- Livro<\/code> (associa\u00e7\u00e3o com papel <code data-backticks=\"1\">det\u00e9m<\/code>).<\/p>\n<p>\u274c\u00a0<strong>Usar agrega\u00e7\u00e3o quando o ciclo de vida est\u00e1 vinculado:<\/strong>\u00a0<code data-backticks=\"1\">Pedido o-- Item do Pedido<\/code>est\u00e1 errado se os itens do pedido n\u00e3o t\u00eam significado sem os pedidos.<br \/>\n\u2705\u00a0<strong>Corre\u00e7\u00e3o:<\/strong>\u00a0<code data-backticks=\"1\">Pedido *-- Item do Pedido<\/code> (composi\u00e7\u00e3o).<\/p>\n<p>\u274c\u00a0<strong>Omitir multiplicidade:<\/strong> Cada extremidade de relacionamento deve especificar a cardinalidade. As suposi\u00e7\u00f5es padr\u00e3o variam conforme a ferramenta e causam ambiguidade.<br \/>\n\u2705\u00a0<strong>Corre\u00e7\u00e3o:<\/strong> Sempre anotar: <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<p>\u274c\u00a0<strong>Navega\u00e7\u00e3o bidirecional sem justificativa:<\/strong> Associa\u00e7\u00f5es bidirecionais criam acoplamento forte e ciclos de serializa\u00e7\u00e3o.<br \/>\n\u2705\u00a0<strong>Corre\u00e7\u00e3o:<\/strong> Padr\u00e3o para unidirecional. Adicione navega\u00e7\u00e3o reversa apenas quando consultas de neg\u00f3cio exigirem. Documente a justificativa.<\/p>\n<p>\u274c\u00a0<strong>Heran\u00e7a para reutiliza\u00e7\u00e3o de c\u00f3digo:<\/strong> Usar heran\u00e7a apenas para compartilhar atributos\/m\u00e9todos viola o LSP e cria classes base fr\u00e1geis.<br \/>\n\u2705\u00a0<strong>Corre\u00e7\u00e3o:<\/strong> Prefira composi\u00e7\u00e3o sobre heran\u00e7a. Extraia comportamento compartilhado para estrat\u00e9gia\/visitante\/servi\u00e7o injetado via interface.<\/p>\n<hr\/>\n<h2>4. Mapeamento de N\u00edveis de Abstra\u00e7\u00e3o para o Ciclo de Vida de Desenvolvimento<\/h2>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Fase<\/th>\n<th align=\"left\">Diagrama Prim\u00e1rio<\/th>\n<th align=\"left\">Diagrama Secund\u00e1rio<\/th>\n<th align=\"left\">Atividades Principais<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Descoberta<\/strong><\/td>\n<td align=\"left\">Conceitual<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Entrevistas de dom\u00ednio, extra\u00e7\u00e3o de linguagem ub\u00edqua, valida\u00e7\u00e3o de regras de neg\u00f3cio<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>An\u00e1lise<\/strong><\/td>\n<td align=\"left\">Conceitual \u2192 L\u00f3gico<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Identificar contextos delimitados, definir limites de servi\u00e7o, extrair interfaces<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Projeto<\/strong><\/td>\n<td align=\"left\">L\u00f3gico<\/td>\n<td align=\"left\">Conceitual (refer\u00eancia)<\/td>\n<td align=\"left\">Aplique padr\u00f5es de projeto, defina contratos, valide contra SOLID<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Implementa\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">F\u00edsico<\/td>\n<td align=\"left\">L\u00f3gico (rastreabilidade)<\/td>\n<td align=\"left\">Gere c\u00f3digo\/estruturas de dados, configure frameworks, escreva testes<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Manuten\u00e7\u00e3o<\/strong><\/td>\n<td align=\"left\">F\u00edsico \u2194 L\u00f3gico \u2194 Conceitual<\/td>\n<td align=\"left\">Todos<\/td>\n<td align=\"left\">Refatore com rastreabilidade, atualize o modelo de neg\u00f3cios quando o dom\u00ednio mudar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Regra Cr\u00edtica:<\/strong>Nunca pule o n\u00edvel Conceitual. Equipes que pulam diretamente para o L\u00f3gico\/F\u00edsico produzem sistemas que s\u00e3o tecnicamente corretos, mas errados do ponto de vista de neg\u00f3cios. O diagrama Conceitual \u00e9 sua ap\u00f3lice de seguro contra construir a coisa errada com efici\u00eancia.<\/p>\n<hr\/>\n<h2>5. Invariantes de Qualidade: As Regras N\u00e3o Negoci\u00e1veis<\/h2>\n<h3>5.1 Integridade Estrutural<\/h3>\n<ol>\n<li>\n<p><strong>Responsabilidade \u00danica:<\/strong>Cada classe mapeia exatamente uma raz\u00e3o para mudan\u00e7a. Se voc\u00ea precisar de \u201ce\u201d para descrever seu prop\u00f3sito, divida-a.<\/p>\n<\/li>\n<li>\n<p><strong>Conformidade de Liskov:<\/strong>Subclasses devem ser substitu\u00edveis pelos pais sem quebrar o c\u00f3digo do cliente. Teste com cole\u00e7\u00f5es polim\u00f3rficas.<\/p>\n<\/li>\n<li>\n<p><strong>Segrega\u00e7\u00e3o de Interfaces:<\/strong>Nenhum cliente \u00e9 for\u00e7ado a depender de m\u00e9todos n\u00e3o utilizados. Divida interfaces pesadas em outras coesas e espec\u00edficas por fun\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p><strong>Invers\u00e3o de Depend\u00eancia:<\/strong>M\u00f3dulos de alto n\u00edvel dependem de abstra\u00e7\u00f5es, n\u00e3o de concretiza\u00e7\u00f5es. Diagramas f\u00edsicos devem mostrar isso por meio de interfaces, n\u00e3o de classes concretas.<\/p>\n<\/li>\n<li>\n<p><strong>Multiplicidade Expl\u00edcita:<\/strong>Cada extremidade de associa\u00e7\u00e3o anotada. Sem padr\u00f5es impl\u00edcitos.<\/p>\n<\/li>\n<li>\n<p><strong>Navegabilidade Justificada:<\/strong>Unidirecional por padr\u00e3o. Bidirecional apenas com requisito de consulta de neg\u00f3cios documentado.<\/p>\n<\/li>\n<\/ol>\n<h3>5.2 Disciplina de Abstra\u00e7\u00e3o<\/h3>\n<ol start=\"7\">\n<li>\n<p><strong>Pureza de N\u00edvel:<\/strong>Sem tecnologia no Conceitual. Sem jarg\u00e3o de neg\u00f3cios no F\u00edsico sem link para gloss\u00e1rio. O L\u00f3gico permanece neutro em rela\u00e7\u00e3o \u00e0 plataforma.<\/p>\n<\/li>\n<li>\n<p><strong>Rastreabilidade Mantida:<\/strong>Cada elemento F\u00edsico rastreia at\u00e9 um ancestral L\u00f3gico. Cada elemento L\u00f3gico rastreia at\u00e9 um ancestral Conceitual. Lacunas indicam requisitos ausentes ou funcionalidades sup\u00e9rfluas.<\/p>\n<\/li>\n<li>\n<p><strong>Manuten\u00e7\u00e3o Paralela:<\/strong> As atualiza\u00e7\u00f5es se propagam entre os n\u00edveis. Identificadores de vers\u00e3o sincronizados. Registros de altera\u00e7\u00f5es referenciam todos os diagramas afetados.<\/p>\n<\/li>\n<li>\n<p><strong>Alinhamento das Partes Interessadas:<\/strong> Conceitual validado pelo neg\u00f3cio. L\u00f3gico revisado por arquitetos. F\u00edsico aprovado pela equipe de desenvolvimento. Revis\u00f5es cruzadas entre n\u00edveis nos pontos de integra\u00e7\u00e3o.<\/p>\n<\/li>\n<\/ol>\n<h3>5.3 Restri\u00e7\u00f5es Pragm\u00e1ticas<\/h3>\n<ol start=\"11\">\n<li>\n<p><strong>Limite de Tamanho do Diagrama:<\/strong> M\u00e1ximo de 15-20 classes por diagrama. Decompor em subdom\u00ednios\/pacotes. Usar diagramas de pacotes para navega\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p><strong>Seletividade de Atributos\/Opera\u00e7\u00f5es:<\/strong> Mostrar apenas o que \u00e9 relevante para o prop\u00f3sito do diagrama. Ocultar getters\/setters, a menos que sejam comportamentais. Omitir membros herdados, a menos que sejam sobrescritos.<\/p>\n<\/li>\n<li>\n<p><strong>Notas em vez de Desordem:<\/strong> Usar notas para invariantes, restri\u00e7\u00f5es e justificativas. N\u00e3o codificar regras de neg\u00f3cio em nomes de atributos ou assinaturas de m\u00e9todos.<\/p>\n<\/li>\n<li>\n<p><strong>Especifica\u00e7\u00f5es Execut\u00e1veis:<\/strong> PlantUML\/YAML\/Mermaid preferidos em vez de ferramentas de interface gr\u00e1fica. Controlados por vers\u00e3o. Pass\u00edveis de diff. Integrados ao CI.<\/p>\n<\/li>\n<li>\n<p><strong>Documenta\u00e7\u00e3o Viva:<\/strong> Diagramas atualizados com o c\u00f3digo. Diagramas desatualizados s\u00e3o piores do que inexistentes. Automatizar a gera\u00e7\u00e3o a partir do c\u00f3digo sempre que poss\u00edvel (engenharia reversa), mas curar manualmente para clareza conceitual\/l\u00f3gica.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2>6. Anti-Padr\u00f5es: Reconhecendo e Corrigindo Falhas Comuns<\/h2>\n<h3>6.1 Modelo de Dom\u00ednio An\u00eamico<\/h3>\n<p><strong>Sintoma:<\/strong> Classes s\u00e3o meros contenedores de dados, com apenas getters\/setters. L\u00f3gica de neg\u00f3cio espalhada entre servi\u00e7os\/utilit\u00e1rios.<br \/>\n<strong>Causa:<\/strong> Pensamento procedural disfar\u00e7ado de POO; medo de modelos de dom\u00ednio ricos; m\u00e1 compreens\u00e3o da separa\u00e7\u00e3o de responsabilidades.<br \/>\n<strong>Impacto:<\/strong> Perda de encapsulamento; l\u00f3gica duplicada; testes dif\u00edceis; regras de neg\u00f3cio invis\u00edveis no modelo.<br \/>\n<strong>Corre\u00e7\u00e3o:<\/strong> Mover o comportamento para as classes de dom\u00ednio. Servi\u00e7os orquestram, n\u00e3o implementam. Validar com especialistas de dom\u00ednio: \u201cUma pessoa de neg\u00f3cio reconheceria este comportamento como pertencente a esta entidade?\u201d<\/p>\n<h3>6.2 Fisicaliza\u00e7\u00e3o Prematura<\/h3>\n<p><strong>Sintoma:<\/strong> Diagramas conceituais incluem <code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">VARCHAR<\/code>,\u00a0<code data-backticks=\"1\">Chave Estrangeira<\/code>. Partes interessadas confusas com ru\u00eddo t\u00e9cnico.<br \/>\n<strong>Causa:<\/strong>  Analistas recorrem por padr\u00e3o a tecnologias conhecidas; press\u00e3o para \u201cser pr\u00e1tico\u201d; falta de disciplina em abstra\u00e7\u00e3o.<br \/>\n<strong>Impacto:<\/strong>  Requisitos acoplados \u00e0 pilha tecnol\u00f3gica; reavalia\u00e7\u00e3o imposs\u00edvel; desengajamento do neg\u00f3cio.<br \/>\n<strong>Corre\u00e7\u00e3o:<\/strong>  Impor proibi\u00e7\u00f5es de vocabul\u00e1rio durante sess\u00f5es conceituais. Revisar com partes interessadas n\u00e3o t\u00e9cnicas antes de prosseguir. Manter arquivos separados por n\u00edvel de abstra\u00e7\u00e3o.<\/p>\n<h3>6.3 Abuso de Heran\u00e7a<\/h3>\n<p><strong>Sintoma:<\/strong>  Hierarquias profundas (&gt;3 n\u00edveis); subclasses sobrescrevendo o comportamento da classe pai de forma inconsistente; classes base com l\u00f3gica condicional baseada no subtipo.<br \/>\n<strong>Causa:<\/strong>  Motiva\u00e7\u00e3o para reutiliza\u00e7\u00e3o de c\u00f3digo; pensamento taxon\u00f4mico; m\u00e1 compreens\u00e3o de polimorfismo.<br \/>\n<strong>Impacto:<\/strong>  Problema da classe base fr\u00e1gil; viola\u00e7\u00e3o do LSP; complexidade exponencial de testes.<br \/>\n<strong>Corre\u00e7\u00e3o:<\/strong>  Achatar hierarquias. Extrair comportamentos vari\u00e1veis para estrat\u00e9gias\/pol\u00edticas. Preferir composi\u00e7\u00e3o. Aplicar o princ\u00edpio \u201cDiga, n\u00e3o pergunte\u201d.<\/p>\n<h3>6.4 Classe Deus \/ Blobo<\/h3>\n<p><strong>Sintoma:<\/strong>  \u00danica classe com &gt;20 atributos, &gt;30 m\u00e9todos, depend\u00eancias de &gt;10 outras classes.<br \/>\n<strong>Causa:<\/strong>  Adi\u00e7\u00e3o incremental de funcionalidades sem refatora\u00e7\u00e3o; falta de m\u00e9tricas de coes\u00e3o; anti-padr\u00e3o de \u201cgerenciador\u201d centralizado.<br \/>\n<strong>Impacto:<\/strong>  Imant\u00e1vel; n\u00e3o test\u00e1vel; bloqueia desenvolvimento paralelo; sobrecarga cognitiva.<br \/>\n<strong>Corre\u00e7\u00e3o:<\/strong>  Aplicar refatora\u00e7\u00f5es Extrair Classe\/M\u00e9todo. Identificar clusters coesos de atributos\/m\u00e9todos. Delegar a colaboradores especializados. Medir complexidade ciclom\u00e1tica e LCOM4.<\/p>\n<h3>6.5 Deteriora\u00e7\u00e3o Sincronizada<\/h3>\n<p><strong>Sintoma:<\/strong>O c\u00f3digo evolui, mas os diagramas estagnam. Novos contratados aprendem a partir de modelos desatualizados. As auditorias falham.<br \/>\n<strong>Causa:<\/strong>Diagramas tratados como entreg\u00e1veis, n\u00e3o como artefatos vivos. Sem integra\u00e7\u00e3o com CI. Sobrecarga de atualiza\u00e7\u00f5es manuais.<br \/>\n<strong>Impacto:<\/strong>Perda de conhecimento; desvio arquitetural; risco de conformidade.<br \/>\n<strong>Corre\u00e7\u00e3o:<\/strong>Integre a valida\u00e7\u00e3o de diagramas no CI. Gere automaticamente visualiza\u00e7\u00f5es f\u00edsicas a partir do c\u00f3digo. Exija atualiza\u00e7\u00f5es de diagramas nas listas de verifica\u00e7\u00e3o de PR. Trate diagramas como artefatos de fonte de primeira classe.<\/p>\n<hr\/>\n<h2>7. Lista de verifica\u00e7\u00e3o antes de publicar um Diagrama de Classes<\/h2>\n<p>Use este gate antes de considerar qualquer Diagrama de Classes como conclu\u00eddo:<\/p>\n<h3>Verifica\u00e7\u00f5es Universais<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>N\u00edvel de abstra\u00e7\u00e3o explicitamente declarado no t\u00edtulo\/cabe\u00e7alho<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Todas as classes nomeadas com substantivos no singular<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Todas as rela\u00e7\u00f5es possuem multiplicidade em ambas as extremidades<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Nomes de pap\u00e9is presentes em todas as associa\u00e7\u00f5es<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Modificadores de visibilidade especificados para todos os atributos\/opera\u00e7\u00f5es<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>O diagrama se encaixa no limite cognitivo (&lt;20 classes) ou est\u00e1 decomposto<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Notas usadas para invariantes\/constraints, n\u00e3o para polui\u00e7\u00e3o visual<\/p>\n<\/li>\n<\/ul>\n<h3>Verifica\u00e7\u00f5es Espec\u00edficas por N\u00edvel<\/h3>\n<p><strong>Conceitual:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Zero refer\u00eancias tecnol\u00f3gicas<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Comportamentos de neg\u00f3cio modelados, n\u00e3o apenas CRUD<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Validado pela assinatura de um especialista do dom\u00ednio<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Linguagem ub\u00edqua consistente com o gloss\u00e1rio<\/p>\n<\/li>\n<\/ul>\n<p><strong>L\u00f3gico:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Apenas tipos neutros de plataforma<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Interfaces definidas para todas as fronteiras de servi\u00e7o<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Padr\u00f5es de projeto aplicados intencionalmente (documentados)<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Rastre\u00e1vel ao modelo conceitual<\/p>\n<\/li>\n<\/ul>\n<p><strong>F\u00edsico:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Anota\u00e7\u00f5es tecnol\u00f3gicas completas e precisas<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Estrat\u00e9gias de busca\/cascata especificadas<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Rastre\u00e1vel ao modelo l\u00f3gico<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Implica\u00e7\u00f5es de desempenho documentadas<\/p>\n<\/li>\n<\/ul>\n<h3>Verifica\u00e7\u00f5es entre n\u00edveis<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Altera\u00e7\u00f5es propagadas em todos os n\u00edveis afetados<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Identificadores de vers\u00e3o sincronizados<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Links do gloss\u00e1rio mantidos entre termos de neg\u00f3cios e t\u00e9cnicos<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>P\u00fablico adequado \u00e0s partes interessadas confirmado para cada n\u00edvel<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>8. Conclus\u00e3o: O Valor Estrat\u00e9gico da Modelagem Disciplinada<\/h2>\n<p>Um <a href=\"https:\/\/online.visual-paradigm.com\/diagrams\/solutions\/free-class-diagram-tool\/\">Diagrama de Classes<\/a> \u00e9 mais do que documenta\u00e7\u00e3o; \u00e9 uma especifica\u00e7\u00e3o execut\u00e1vel da inten\u00e7\u00e3o arquitetural. Ao manter rigorosamente os tr\u00eas n\u00edveis de abstra\u00e7\u00e3o, aplicar a sem\u00e2ntica das rela\u00e7\u00f5es e aplicar os invariantes SOLID, voc\u00ea transforma o Diagrama de Classes de uma imagem est\u00e1tica em um artefato de engenharia din\u00e2mico que previne retrabalho custoso, garante o alinhamento com o neg\u00f3cio e permite uma evolu\u00e7\u00e3o sustent\u00e1vel.<\/p>\n<p>A distin\u00e7\u00e3o entre Conceitual, L\u00f3gico e F\u00edsico n\u00e3o \u00e9 acad\u00eamica; \u00e9 a principal defesa contra os dois fracassos mais caros em projetos de software: construir a coisa errada corretamente e construir a coisa certa incorretamente. O modelo conceitual garante que voc\u00ea entenda o problema. O modelo l\u00f3gico garante que voc\u00ea projetou uma solu\u00e7\u00e3o s\u00f3lida. O modelo f\u00edsico garante que voc\u00ea pode constru\u00ed-lo e oper\u00e1-lo de forma confi\u00e1vel.<\/p>\n<p><a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">PlantUML<\/a> eleva essa pr\u00e1tica da arte para a engenharia. Baseado em texto, com controle de vers\u00e3o, pass\u00edvel de compara\u00e7\u00e3o (diff) e integr\u00e1vel ao CI, <a href=\"https:\/\/www.visual-paradigm.com\/features\/vpascode\/\">diagramas PlantUML<\/a> s\u00e3o c\u00f3digo-fonte, n\u00e3o decora\u00e7\u00e3o. Eles participam do mesmo ciclo de vida do c\u00f3digo da sua aplica\u00e7\u00e3o, sujeitos \u00e0s mesmas disciplinas de revis\u00e3o, teste e manuten\u00e7\u00e3o.<\/p>\n<p>Ao aplicar esses conceitos, lembre-se: a medida definitiva do sucesso de um <a href=\"https:\/\/w3.cs.jmu.edu\/bernstdh\/web\/common\/labs\/skills_visualparadigm_class-diagrams\/index.php\">Diagrama de Classes<\/a> n\u00e3o \u00e9 sua eleg\u00e2ncia est\u00e9tica ou conformidade com UML, mas sua utilidade anal\u00edtica. Ele revela complexidades ocultas? Ele exp\u00f5e invariantes violados? Ele alinha diversas partes interessadas em torno de um entendimento compartilhado? Ele sobrevive ao contato com a realidade?<\/p>\n<p class=\"\">Use as listas de verifica\u00e7\u00e3o como portas de controle. Trate os <a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">modelos PlantUML<\/a> como padr\u00f5es vivos. Mantenha a rastreabilidade de forma implac\u00e1vel. E nunca esque\u00e7a: o objetivo n\u00e3o s\u00e3o diagramas perfeitos, mas software melhor. Quando executado com disciplina, a modelagem de Diagramas de Classes permanece uma das ferramentas mais poderosas para domar a complexidade e entregar sistemas que n\u00e3o apenas s\u00e3o bem constru\u00eddos, mas verdadeiramente adequados ao prop\u00f3sito.<\/p>\n<h3>Refer\u00eancias<\/h3>\n<ol>\n<li>\n<p><a href=\"https:\/\/blog.visual-paradigm.com\/from-concept-to-code-a-comprehensive-uml-class-diagram-guide-case-study\/\"><strong>Do Conceito ao C\u00f3digo: Um Guia Abrangente de Diagramas de Classes UML &amp; Estudo de Caso<\/strong><\/a>: Um guia extensivo que cobre a sintaxe de diagramas de classes UML, rela\u00e7\u00f5es e um estudo de caso real de uma plataforma de entrega de alimentos.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/tw\/docs\/mastering-uml-2-5-a-use-case-driven-approach-to-agile-modeling\/module-3-the-skeleton-the-7-structural-uml-diagrams\/practical-3-structural-implementation\/\"><strong>Pr\u00e1tica 3: Implementa\u00e7\u00e3o Estrutural<\/strong><\/a>: Uma sess\u00e3o pr\u00e1tica sobre a constru\u00e7\u00e3o de um diagrama de classes de modelo de dom\u00ednio, incluindo o uso de gera\u00e7\u00e3o por IA e refinamento manual no Visual Paradigm.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/skills.visual-paradigm.com\/docs\/uml-basics-diagrams-for-beginners\/mastering-class-diagrams-beginner\/class-diagram-example-simple-uml-project\/\"><strong>Exemplos Pr\u00e1ticos: Construindo um Diagrama de Classes Simples<\/strong><\/a>: Um tutorial amig\u00e1vel para iniciantes que guia passo a passo a constru\u00e7\u00e3o de um diagrama de classes simples para um sistema de gerenciamento de biblioteca, definindo classes, atributos e rela\u00e7\u00f5es.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/tutorials.visual-paradigm.com\/how-to-generate-complex-class-diagrams-visual-paradigm-ai\/\"><strong>Como Gerar Diagramas de Classes Complexos Usando o Gerador UML com IA do Visual Paradigm<\/strong><\/a>: Um tutorial focado no uso da ferramenta de IA para gerar diagramas de classes complexos para aplica\u00e7\u00f5es empresariais, com instru\u00e7\u00f5es passo a passo e melhores pr\u00e1ticas.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/pt\/docs\/streamlining-the-software-lifecycle-integrating-ai-use-case-modeling-with-visual-paradigms-all-in-one-platform\/5-behavioral-and-structural-design\/5-3-static-structure-class-diagrams\/\"><strong>5.3 Estrutura Est\u00e1tica (Diagramas de Classes)<\/strong><\/a>: Um guia sobre como derivar automaticamente diagramas de classes a partir de especifica\u00e7\u00f5es de casos de uso e diagramas de sequ\u00eancia usando IA, com exemplos pr\u00e1ticos como um aplicativo de reserva de restaurante.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/ja\/docs\/mastering-uml-visual-modeling-in-the-visual-paradigm-ai-ecosystem\/module-4-mastery-of-structural-modeling-the-static-view\/ai-class-diagram-generation\/\"><strong>Gera\u00e7\u00e3o de Diagramas de Classes com IA<\/strong><\/a>: Um artigo aprofundado sobre o uso do Chatbot com IA para gerar diagramas de classes compat\u00edveis com UML 2.5 a partir de descri\u00e7\u00f5es em linguagem natural e refin\u00e1-los de forma iterativa.<\/p>\n<\/li>\n<li>\n<p class=\"\"><a href=\"https:\/\/blog.visual-paradigm.com\/fr\/beginners-guide-to-class-diagrams\/\"><strong>Guia para Iniciantes em Diagramas de Classes<\/strong><\/a>: Um guia fundamental (dispon\u00edvel em v\u00e1rios idiomas) que introduz os componentes dos diagramas de classes e mostra como cri\u00e1-los usando o Visual Paradigm Online.<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o Na engenharia de software orientada a objetos, o Diagrama de Classes \u00e9 o artefato mais onipresente, mas frequentemente mal aplicado. Frequentemente reduzido a um mero esquema de banco de&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","inline_featured_image":false,"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","_fifu_image_alt":"","fifu_alt":"","_fifu_alt":"","fifu_image_title":"","_fifu_image_title":"","fifu_input_alt":"","vp_image_hash":"","footnotes":""},"categories":[1],"tags":[],"asset-category":[],"class_list":["post-542","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","vp_image_hash":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"og:description\" content=\"Introdu\u00e7\u00e3o Na engenharia de software orientada a objetos, o Diagrama de Classes \u00e9 o artefato mais onipresente, mas frequentemente mal aplicado. Frequentemente reduzido a um mero esquema de banco de&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\" \/>\n<meta property=\"og:site_name\" content=\"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-14T08:16:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-03T15:28:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" \/>\n<meta name=\"author\" content=\"curtis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\"},\"author\":{\"name\":\"curtis\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\"},\"headline\":\"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\"},\"wordCount\":3629,\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\",\"name\":\"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage\",\"url\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.ai-diagrams.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#website\",\"url\":\"https:\/\/www.ai-diagrams.com\/pt\/\",\"name\":\"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.ai-diagrams.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#organization\",\"name\":\"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\",\"url\":\"https:\/\/www.ai-diagrams.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/pt\/wp-content\/uploads\/sites\/23\/2026\/03\/ai-diagram-logo.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/pt\/wp-content\/uploads\/sites\/23\/2026\/03\/ai-diagram-logo.png\",\"width\":648,\"height\":648,\"caption\":\"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\",\"name\":\"curtis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/www.ai-diagrams.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.ai-diagrams.com\/pt\/author\/curtis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/","og_locale":"pt_PT","og_type":"article","og_title":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","og_description":"Introdu\u00e7\u00e3o Na engenharia de software orientada a objetos, o Diagrama de Classes \u00e9 o artefato mais onipresente, mas frequentemente mal aplicado. Frequentemente reduzido a um mero esquema de banco de&hellip;","og_url":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/","og_site_name":"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","article_published_time":"2026-08-14T08:16:11+00:00","article_modified_time":"2026-09-03T15:28:09+00:00","og_image":[{"url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","type":"","width":"","height":""}],"author":"curtis","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":false,"Tempo estimado de leitura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#article","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/"},"author":{"name":"curtis","@id":"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1"},"headline":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/"},"wordCount":3629,"publisher":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/#organization"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","articleSection":["Uncategorized"],"inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/","url":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/","name":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o - AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","breadcrumb":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ai-diagrams.com\/pt\/1106-2\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#primaryimage","url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","contentUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ai-diagrams.com\/pt\/1106-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ai-diagrams.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Dominando a Modelagem de Diagramas de Classes: Abstra\u00e7\u00e3o, Relacionamentos e as Regras de Coes\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/www.ai-diagrams.com\/pt\/#website","url":"https:\/\/www.ai-diagrams.com\/pt\/","name":"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","description":"","publisher":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ai-diagrams.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/www.ai-diagrams.com\/pt\/#organization","name":"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News","url":"https:\/\/www.ai-diagrams.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.ai-diagrams.com\/pt\/wp-content\/uploads\/sites\/23\/2026\/03\/ai-diagram-logo.png","contentUrl":"https:\/\/www.ai-diagrams.com\/pt\/wp-content\/uploads\/sites\/23\/2026\/03\/ai-diagram-logo.png","width":648,"height":648,"caption":"AI Diagrams Portugu\u00eas\u2013 Explore Artificial Intelligence Trends &amp; News"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.ai-diagrams.com\/pt\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1","name":"curtis","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.ai-diagrams.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.ai-diagrams.com\/pt\/author\/curtis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/comments?post=542"}],"version-history":[{"count":0,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/posts\/542\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/media?parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/categories?post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/tags?post=542"},{"taxonomy":"asset-category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/pt\/wp-json\/wp\/v2\/asset-category?post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}