| FAQ Lite | ||||||||||||||||
| Classes e Objetos | ||||||||||||||||
|
||||||||||||||||
| [ 7.3 ] Quando uma interface é boa? |
| Quando fornece uma visão simplificada de uma parte do software, e é expressa utilizando o vocabulário do usuário. Nesse contexto, parte do software é uma classe ou um conjunto de classes, e usuário pode ser tanto um outro programador, quanto o cliente final. |
|
| [ 7.4 ] O que é encapsulamento? |
| Prevenir acesso não autorizado a determinados itens de
informação ou a características de funcionamento da classe. O critério chave aqui é separar as partes voláteis das partes estáveis da classe. Encapsulamento põe uma barreira em torno das partes voláteis, impedindo que outros módulos do software acessem as partes voláteis da classe, outros módulos podem acessar apenas as partes estáveis da classe. Isso evita que outros módulos sejam afetados quando as partes voláteis da classe sofrerem alterações. No contexto de OO um módulo de software é normalmente uma classe ou um grupo compacto de classes. As partes voláteis são a implementação dos detalhes. Se o módulo é uma classe única, as partes voláteis são normalmente encapsuladas usando as palavras chave private: ou protected. Se o módulo é um grupo compacto de classes, o encapsulamento pode ser usado para negar acesso a classes inteiras do grupo. Herança pode também ser usada como uma forma de encapsulamento. As partes estáveis são as interfaces. Uma boa interface fornece uma visão simplificada, usa o vocabulário do usuário e é projetada de fora para dentro. (Aqui usuário significa um outro desenvolvedor, não o cliente final que adquire o sistema de aplicação). Se o módulo é uma classe única, a interface é simplesmente o conjunto das funções-membro public: e as funções friend. Se o módulo é um grupo compacto de classes, a interface pode incluir várias classes do módulo. Projetar uma interface limpa e separar a interface da implementação, meramente permite ao usuário usar a interface. Mas encapsular (colocar em uma cápsula) a implementação força o usuário a usar a interface. |
| [ 7.5 ] Como C++ ajuda no equilíbrio entre segurança vs usabilidade? |
| Em C, encapsulamento era obtido tornando
alguns elementos static em uma unidade de compilação ou em um módulo. Isso evitava que outros
módulos tivessem acesso aos elementos static. (A propósito, essa prática é
inadequada agora, não use esse mecanismo em C++). Infelizmente essa abordagem não suporta múltiplas instâncias dos dados, já que não há suporte direto para tornar static múltiplas instâncias dos dados do módulo. Se múltiplas instâncias fossem necessárias em C, os programadores tipicamente usavam C struct. Mas infelizmente C struct não suporta encapsulamento. Isso exacerbava o equilíbrio entre segurança (ocultar informação) e usabilidade (múltiplas instâncias). Em C++, você pode ter tanto múltiplas instâncias quanto encapsulamento usando uma classe. A parte public: da classe contém a interface da classe, que normalmente consiste das funções-membro public: e suas funções friend. As partes private: e/ou protected: da classe contém a implementação da classe, que é onde tipicamente os dados existem. |
| [ 7.6 ] Como posso me prevenir contra a violação do encapsulamento por outros programadores, que vêm as partes private: de minha classe? |
| Não desperdice seu esforço. Encapsulamento é para código, não
para pessoas. Um programador ver as partes private: e/ou protected: de sua classe não significa necessariamente violação do encapsulamento, desde que ele não escreva códigos que dependam do que ele vê nas partes internas de sua classe. Em outras palavras, encapsulamento não impede que as pessoas tomem conhecimento das definições internas de sua classe, o que encapsulamento faz é evitar que código escrito por outras pessoas dependam de definições internas à sua classe. A sua empresa não quer evitar os custos de manutenção decorrentes dos que as pessoas ouvem ou vêm, o que ela quer é evitar custos de manutenção sobre os códigos que as pessoas produzem. O que você sabe sobre as partes internas de uma classe não aumenta os custos de manutenção. Estes custos são dependentes da qualidade da interface e da qualidade da implementação das classes. Além do mais, isso não chega mesmo a ser um problema. Eu não conheço nenhum programador que tenha, intencionalmente, acessado as partes private: de uma classe. "Minha recomendação, nesse caso, seria trocar o programador, não a maneira de codificar" [James Kanke, kanze@gabi-soft.com, citado sob permissão] |
| [ 7.7 ] Encapsulamento é um dispositivo de segurança? |
| Não. Encapsulamento != segurança. Encapsulamento evita erros, não espionagem. |
|
| | Home | Bookmarks | Universidades | Para Saber mais | Universidades | WEB Directory | Mapa do site | | |