{"id":40386,"date":"2023-03-28T10:00:00","date_gmt":"2023-03-28T13:00:00","guid":{"rendered":"https:\/\/blog.locaweb.com.br\/?p=40386"},"modified":"2024-07-30T17:41:13","modified_gmt":"2024-07-30T20:41:13","slug":"o-que-e-encapsulamento","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/o-que-e-encapsulamento\/","title":{"rendered":"O que \u00e9 encapsulamento na programa\u00e7\u00e3o orientada a objetos"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><em>Encapsulamento \u00e9 utilizado em programa\u00e7\u00e3o orientada a objetos, bibliotecas e frameworks para contribuir com a evolu\u00e7\u00e3o dos c\u00f3digos<\/em><\/p>\n\n\n\n<p>O encapsulamento acontece principalmente em <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/linguagens-de-programacao-web\/\" target=\"_blank\" rel=\"noreferrer noopener\">programa\u00e7\u00e3o orientada a objetos<\/a> (POO), em que <strong>objetos s\u00e3o utilizados para representar entidades do mundo real e encapsulam os dados e os comportamentos relacionados a esses elementos<\/strong>. A t\u00e9cnica tamb\u00e9m pode ser aplicada em outras \u00e1reas da programa\u00e7\u00e3o, como em bibliotecas e frameworks, com t\u00e9cnicas de encapsulamento para esconder detalhes de implementa\u00e7\u00e3o de um recurso e expor somente as opera\u00e7\u00f5es necess\u00e1rias para o uso dele.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"812\" height=\"500\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-01.jpg\" alt=\"mulher programadora em frente a uma tela de computador\" class=\"wp-image-40390\" srcset=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-01.jpg 812w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-01-500x308.jpg 500w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-01-768x473.jpg 768w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-01-150x92.jpg 150w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><figcaption class=\"wp-element-caption\">(Fonte: Getty Images\/Reprodu\u00e7\u00e3o)<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Por que usar encapsulamento?<\/strong><\/h2>\n\n\n\n<p><strong>O encapsulamento permite que os detalhes de implementa\u00e7\u00e3o de um objeto sejam alterados sem afetar o restante do sistema, tornando o c\u00f3digo mais flex\u00edvel e f\u00e1cil de manter.<\/strong> Com isso, os objetos podem ser reutilizados em diferentes partes do sistema sem que haja preocupa\u00e7\u00e3o com os detalhes de implementa\u00e7\u00e3o.<\/p>\n\n\n\n<p>A t\u00e9cnica facilita a realiza\u00e7\u00e3o de testes unit\u00e1rios, pois permite testar o comportamento dos objetos isoladamente, sem depender de outros objetos ou de partes do sistema. Sem contar que pode ser usada para proteger dados e m\u00e9todos de uma classe de acesso indevido, impedindo a viola\u00e7\u00e3o de informa\u00e7\u00f5es confidenciais.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como o encapsulamento funciona?<\/strong><\/h2>\n\n\n\n<p>O encapsulamento funciona com a utiliza\u00e7\u00e3o de modificadores de acesso para restringir o acesso aos atributos e aos m\u00e9todos de um objeto. Garante que somente as classes apropriadas possam acessar as informa\u00e7\u00f5es e ajuda a assegurar que os atributos e os m\u00e9todos sejam usados de forma consistente e previs\u00edvel.<\/p>\n\n\n\n<p>Os modificadores de acesso mais comuns s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>private<\/strong> \u2014 os atributos e os m\u00e9todos marcados como \u201cprivate\u201d s\u00f3 podem ser acessados dentro da pr\u00f3pria classe em que foram declarados;<\/li>\n\n\n\n<li><strong>protected<\/strong> \u2014 os atributos e os m\u00e9todos marcados como \u201cprotected\u201d podem ser acessados dentro da pr\u00f3pria classe e das subclasses;<\/li>\n\n\n\n<li><strong>public<\/strong> \u2014 os atributos e os m\u00e9todos marcados como \u201cpublic\u201d podem ser acessados por qualquer classe.<\/li>\n<\/ul>\n\n\n\n<p>Algumas <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/linguagens-de-programacao-web\/\" target=\"_blank\" rel=\"noreferrer noopener\">linguagens de programa\u00e7\u00e3o<\/a> t\u00eam outros modificadores, como \u201cinternal\u201d e \u201cpackage-private\u201d, que variam de acordo com a linguagem, mas em geral t\u00eam a mesma funcionalidade de prote\u00e7\u00e3o de acesso. <strong>\u00c9 importante notar que o uso correto desses modificadores de acesso \u00e9 fundamental para garantir a seguran\u00e7a e a integridade do c\u00f3digo.<\/strong><\/p>\n\n\n\n<p>A divis\u00e3o clara da responsabilidade permite que cada classe seja projetada para fornecer uma funcionalidade espec\u00edfica e garantir que os atributos e os m\u00e9todos sejam usados de forma consistente e previs\u00edvel. <strong>Quando cada classe tem uma responsabilidade clara, os atributos e os m\u00e9todos de cada uma podem ser projetados para atender \u00e0s necessidades espec\u00edficas dessa classe<\/strong>, sem preocupa\u00e7\u00e3o com as necessidades de outras classes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>O que pode ser encapsulado?<\/strong><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"812\" height=\"500\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-02.jpg\" alt=\"mulher gesticulando em frente a um notebook. \" class=\"wp-image-40391\" srcset=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-02.jpg 812w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-02-500x308.jpg 500w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-02-768x473.jpg 768w, https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2023\/03\/encapsulamento-02-150x92.jpg 150w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><figcaption class=\"wp-element-caption\">(Fonte: Mart Production\/Pexels\/Reprodu\u00e7\u00e3o)<\/figcaption><\/figure>\n<\/div>\n\n\n<p>O encapsulamento pode ser aplicado em v\u00e1rias linguagens de programa\u00e7\u00e3o. Em geral, <strong>a maioria das linguagens orientadas a objetos, como Java, C#, C++, Python, Ruby, JavaScript e PHP, tem mecanismos para encapsulamento<\/strong>, mesmo que as sintaxes e as nomenclaturas possam variar.<\/p>\n\n\n\n<p>Al\u00e9m das linguagens orientadas a objetos, existem outros exemplos de encapsulamento em diferentes \u00e1reas, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>rede<\/strong> \u2014 a ferramenta adiciona cabe\u00e7alhos e trailers a pacotes de dados para permitir o transporte de dados por diferentes tipos de rede;<\/li>\n\n\n\n<li><strong>microcontroladores<\/strong> \u2014 usados para criar uma camada de abstra\u00e7\u00e3o entre o hardware e o software, permitindo que o software acesse o hardware de forma simples e intuitiva;<\/li>\n\n\n\n<li><strong>bibliotecas, componentes e servi\u00e7os<\/strong> \u2014 escondem os detalhes de implementa\u00e7\u00e3o dessas fun\u00e7\u00f5es e procedimentos, expondo somente a interface p\u00fablica.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Como fazer o encapsulamento?<\/strong><\/h2>\n\n\n\n<p>Para <strong>encapsular atributos de uma classe<\/strong> \u00e9 necess\u00e1rio os declarar com um modificador de acesso private. Por exemplo, se voc\u00ea tem uma classe \u201cPessoa\u201d e quer encapsular o atributo \u201cnome\u201d, pode o declarar como \u201cprivate\u201d:<\/p>\n\n\n\n<p>$ class Pessoa {<\/p>\n\n\n\n<p>$ private:<\/p>\n\n\n\n<p>$ string nome;<\/p>\n\n\n\n<p>$ \/\/&#8230;<\/p>\n\n\n\n<p>$ };<\/p>\n\n\n\n<p>Para <strong>encapsular m\u00e9todos de uma classe<\/strong>, \u00e9 necess\u00e1rio os declarar com um modificador de acesso private ou protected. Por exemplo, se voc\u00ea tem uma classe \u201cPessoa\u201d e quer encapsular o m\u00e9todo \u201csetNome\u201d, pode o declarar como \u201cprivate\u201d:<\/p>\n\n\n\n<p>$ class Pessoa {<\/p>\n\n\n\n<p>$ private:<\/p>\n\n\n\n<p>$ string nome;<\/p>\n\n\n\n<p>$ void setNome(string nome);<\/p>\n\n\n\n<p>$ \/\/&#8230;<\/p>\n\n\n\n<p>$ };<\/p>\n\n\n\n<p>Para <strong>acessar os atributos e os m\u00e9todos encapsulados<\/strong>, \u00e9 preciso usar m\u00e9todos p\u00fablicos chamados getters e setters, que permitem acessar e modificar os atributos encapsulados de forma controlada. Por exemplo, se voc\u00ea tem uma classe \u201cPessoa\u201d com um atributo \u201cnome\u201d encapsulado, pode criar m\u00e9todos p\u00fablicos \u201cgetNome\u201d e \u201csetNome\u201d para acessar e modificar esse atributo:<\/p>\n\n\n\n<p>$ class Pessoa {<\/p>\n\n\n\n<p>$ private:<\/p>\n\n\n\n<p>$ string nome;<\/p>\n\n\n\n<p>$ void setNome(string nome);<\/p>\n\n\n\n<p>$<\/p>\n\n\n\n<p>$ public:<\/p>\n\n\n\n<p>$ string getNome();<\/p>\n\n\n\n<p>$ void setNome(string nome);<\/p>\n\n\n\n<p>$ \/\/&#8230;<\/p>\n\n\n\n<p>$ };<\/p>\n\n\n\n<p>Dessa forma, pode-se garantir que somente as opera\u00e7\u00f5es permitidas ser\u00e3o realizadas sobre os atributos e os m\u00e9todos encapsulados, evitando problemas como acesso indevido e viola\u00e7\u00e3o de regras de neg\u00f3cio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Quando usar encapsulamento?<\/strong><\/h2>\n\n\n\n<p>O encapsulamento deve ser usado sempre que poss\u00edvel em programa\u00e7\u00e3o <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagens-de-programacao-web\/\" target=\"_blank\" rel=\"noreferrer noopener\">orientada a objetos<\/a>, pois oferece v\u00e1rios benef\u00edcios, como prote\u00e7\u00e3o de dados, modificabilidade, reutiliza\u00e7\u00e3o de c\u00f3digo, testabilidade e seguran\u00e7a.<\/p>\n\n\n\n<p>A<strong> ferramenta \u00e9 \u00fatil para proteger os dados de um objeto de acesso indevido ou modifica\u00e7\u00e3o acidental<\/strong>, alterar os detalhes de implementa\u00e7\u00e3o de um objeto sem afetar o restante do sistema e reutilizar um objeto em diferentes partes do sistema sem preocupa\u00e7\u00e3o com os detalhes de implementa\u00e7\u00e3o.<\/p>\n\n\n\n<p>Em resumo, o encapsulamento \u00e9 uma t\u00e9cnica importante para melhorar a qualidade do c\u00f3digo, garantir a seguran\u00e7a e a <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/seguranca-da-informacao-boas-praticas\/\" target=\"_blank\" rel=\"noreferrer noopener\">confidencialidade<\/a> dos dados, bem como facilitar a manuten\u00e7\u00e3o e a evolu\u00e7\u00e3o do sistema. \u00c9 uma boa pr\u00e1tica que deve ser usada sempre que poss\u00edvel.<\/p>\n\n\n\n<div class=\"user-cta-block\" style=\"background-color:#2E333C;\"><p>VPS com melhor pre\u00e7o e infraestrutura no Brasil<\/p><a class=\"user-cta\" style=\"background-color: #00acc8\n;\" href=\"https:\/\/bit.ly\/3lOZ99m:;\" target=\"_blank\" rel=\"noopener\">Saiba mais<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Encapsulamento \u00e9 utilizado em programa\u00e7\u00e3o orientada a objetos, bibliotecas e frameworks para contribuir com a evolu\u00e7\u00e3o dos c\u00f3digos O encapsulamento acontece principalmente em programa\u00e7\u00e3o orientada a objetos (POO), em que objetos s\u00e3o utilizados para representar entidades do mundo real e encapsulam os dados e os comportamentos relacionados a esses elementos. A t\u00e9cnica tamb\u00e9m pode ser [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":40389,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-40386","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/40386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=40386"}],"version-history":[{"count":7,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/40386\/revisions"}],"predecessor-version":[{"id":41847,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/40386\/revisions\/41847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/40389"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=40386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=40386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=40386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}