{"id":165,"date":"2011-02-10T17:44:19","date_gmt":"2011-02-10T20:44:19","guid":{"rendered":"http:\/\/mbelo.wordpress.com\/?p=165"},"modified":"2011-02-10T17:44:19","modified_gmt":"2011-02-10T20:44:19","slug":"propriedade-versus-atributo","status":"publish","type":"post","link":"https:\/\/marcio.belo.nom.br\/wordpress\/2011\/02\/10\/propriedade-versus-atributo\/","title":{"rendered":"Propriedade versus Atributo"},"content":{"rendered":"<p>Frequentemente escuto alunos e colegas de profiss\u00e3o usar como sin\u00f4minos esses dois termos relacionados \u00e0 UML. Mas existe diferen\u00e7a entre propriedade e atributo?<\/p>\n<p>Segundo [Fowler, 2005], propriedade \u00e9 uma &#8220;caracter\u00edstica estrutural de uma classe&#8221;. Mas o que exatamente \u00e9 uma caracter\u00edstica estrutural, visto que uma classe \u00e9 uma representa\u00e7\u00e3o est\u00e1tica de parte de um sistema? N\u00e3o seria tudo que \u00e9 representado nela uma caracter\u00edstica estrutural? Bem, o que Fowler tenta diferenciar s\u00e3o dois tipos de caracter\u00edsticas que uma classe possui: propriedades e opera\u00e7\u00f5es. As propriedades de uma classe s\u00e3o elementos que determinam o que uma classe \u00e9 &#8211; por isso s\u00e3o ditas caracter\u00edsticas estruturais &#8211; enquanto as opera\u00e7\u00f5es deteminam o que uma classe pode fazer &#8211; portanto s\u00e3o caracter\u00edsticas comportamentais.<\/p>\n<p>Colocando de maneira mais objetiva, a propriedade refere-se a qualquer atributo ou associa\u00e7\u00e3o que uma classe possui. Embora os conceitos de atributo e associa\u00e7\u00e3o sejam semelhantes, elem implicam n\u00edveis de abstra\u00e7\u00e3o diferentes de uma caracter\u00edstica estrutural. Mas, de uma forma geral, podemos usar tanto atributo quanto uma associa\u00e7\u00e3o para representar o mesmo conceito. A decis\u00e3o sobre qual usar cabe ao engenheiro de software, dependendo no n\u00edvel de destaque que ele deseja dar ao tipo que a propriedade possui.<\/p>\n<p><strong>Atributo<\/strong><\/p>\n<p>De forma grosseira, podemos entender o atributo como um campo de uma classe: um elemento de informa\u00e7\u00e3o b\u00e1sico que identifica uma caracter\u00edstica fortemente relacionada com aquela classe que o cont\u00e9m. Por exemplo, numa classe <em>Cliente<\/em>, seria comum representar a propriedade <em>nome <\/em>como um atributo, n\u00e3o como uma associa\u00e7\u00e3o (embora nada impe\u00e7a essa \u00faltima forma), como na figura 1.<\/p>\n<p style=\"text-align:center;\"><a href=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-167 aligncenter\" title=\"Classe Cliente com propriedade representada como atributo\" src=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig1.png\" alt=\"\" width=\"105\" height=\"61\" \/><\/a>Figura 1 &#8211; Classe <em>Cliente <\/em>com propriedade representada como atributo<\/p>\n<p><strong>Associa\u00e7\u00e3o<\/strong><\/p>\n<p>Da mesma forma que o atributo, uma associa\u00e7\u00e3o representa uma propriedade de uma classe, s\u00f3 que representada por meio gr\u00e1fico &#8211; uma linha ligando as classes &#8211; combinada com nota\u00e7\u00f5es textuais (multiplicidades e nome do atributo de associa\u00e7\u00e3o). A diferen\u00e7a fundamental da representa\u00e7\u00e3o por meio de associa\u00e7\u00e3o reside no destaque que \u00e9 dado ao tipo de dado (classe) ao qual o elemento de informa\u00e7\u00e3o est\u00e1 relacionado. Esse destaque procura dar ao leitor do modelo melhor compreens\u00e3o sobre um elemento de informa\u00e7\u00e3o que, provavelmente, \u00e9 compreendido dentro do contexto de dom\u00ednio da aplica\u00e7\u00e3o, mas n\u00e3o necessariamente fora dele. Por exemplo, se na classe <em>Cliente<\/em> eu desejo representar a propriedade que ele pode ter um <em>Cart\u00e3o<\/em>, provavelmente representarei esse conceito por meio de associa\u00e7\u00e3o, uma vez que o conceito <em>Cart\u00e3o <\/em>depende muito do contexto onde ele se aplica (cart\u00e3o de cr\u00e9dito, num sistema banc\u00e1rio; um cart\u00e3o de visitas, num sistema de contatos, etc.). Ou seja, \u00e9 importante destacar o tipo da classe \u00e0 qual a propriedade pertence, at\u00e9 mesmo porque a classe <em>Cart\u00e3o<\/em>, por sua vez, pode necessitar representar outras propriedades n\u00e3o \u00f3bvias para o leitor: n\u00famero do cart\u00e3o, tipo de bandeira (visa, mastercard, etc.), tipo de pagamento (\u00e0 cr\u00e9dito ou \u00e0 vista), etc. Veja a figura 2.<\/p>\n<p style=\"text-align:center;\"><a href=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig21.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-172\" title=\"Propriedade cart\u00e3o representada como associa\u00e7\u00e3o\" src=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig21.png\" alt=\"\" width=\"364\" height=\"101\" srcset=\"https:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig21.png 364w, https:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig21-300x83.png 300w\" sizes=\"auto, (max-width: 364px) 100vw, 364px\" \/><\/a>Figura 2 &#8211; Propriedade <em>cart\u00e3o<\/em> representada como associa\u00e7\u00e3o<\/p>\n<p>Por outro lado, no caso do atributo <em>nome <\/em>da classe <em>Cliente<\/em>, qual seria a relev\u00e2ncia de explicitar que tal propriedade \u00e9 do tipo String? Ou ainda, n\u00e3o seria simplificar demais nosso modelo, incorrendo em imprecis\u00e3o, representar a propriedade <em>cart\u00e3o<\/em> como um atributo? Veja o mesmo modelo da figura 2, invertendo as representa\u00e7\u00f5es, na figura 3. Qual deles \u00e9 mais elucidativo?<\/p>\n<p style=\"text-align:center;\"><a href=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-169\" title=\"Propriedades representadas de forma invertidada\" src=\"http:\/\/marcio.belo.nom.br\/wordpress\/wp-content\/uploads\/2011\/02\/diferenc3a7a-entre-propriedade-e-atributo-fig3.png\" alt=\"\" width=\"253\" height=\"65\" \/><\/a>Figura 3 &#8211; Propriedades representadas de forma invertidada<\/p>\n<p><strong>Conclus\u00e3o<\/strong><\/p>\n<p>Uma propriedade pode ser representada tanto como atributo quanto como associa\u00e7\u00e3o. A escolha por representar de uma ou outra forma depende do destaque que o engenheiro deseja dar ao tipo da propriedade. Se ele for dependente do dom\u00ednio de aplica\u00e7\u00e3o sendo desenvolvido, \u00e9 sempre conveniente represent\u00e1-lo como associa\u00e7\u00e3o. As demais propriedades, cujo tipo s\u00e3o de uso geral (String, int, Date,etc.), s\u00e3o melhor representadas como atributos.<\/p>\n<p><strong>Refer\u00eancias<\/strong><\/p>\n<p>[Fowler, 2005] Fowler, F. UML Essencial. 3\u00aa edi\u00e7\u00e3o. 2005. Editora Bookman.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Frequentemente escuto alunos e colegas de profiss\u00e3o usar como sin\u00f4minos esses dois termos relacionados \u00e0 UML. Mas existe diferen\u00e7a entre propriedade e atributo? Segundo [Fowler, 2005], propriedade \u00e9 uma &#8220;caracter\u00edstica estrutural de uma classe&#8221;. Mas o que exatamente \u00e9 uma caracter\u00edstica estrutural, visto que uma classe \u00e9 uma representa\u00e7\u00e3o est\u00e1tica de parte de um sistema? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-165","post","type-post","status-publish","format-standard","hentry","category-engenharia-de-software"],"_links":{"self":[{"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":0,"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"wp:attachment":[{"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcio.belo.nom.br\/wordpress\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}