Você está na página 1de 10

POO I - Encapsulamento

Prof. Marcos Rabaioli


Encapsulamento
Encapsulamento é a técnica que faz com que detalhes internos do funcionamento
dos métodos de uma classe permaneçam ocultos para os objetos. Por conta dessa
técnica, o conhecimento a respeito da implementação interna da classe é
desnecessário do ponto de vista do objeto, uma vez que isso passa a ser
responsabilidade dos métodos internos da classe.
Encapsulamento
É a técnica utilizada para esconder uma ideia, ou seja, não expor detalhes
internos para o usuário, tornando partes do sistema mais independentes
possível.

É um recurso presente em linguagens que seguem o paradigma orientado a


objetos. Esse recurso tem como objetivo restringir o acesso direto a informação,
ou seja, ele protege informações que não devem ser alteradas em qualquer parte
do programa. Com isso podemos entender que quem está de fora apenas sabe
que o serviço é realizado mas não sabe como o serviço é implementado.
Encapsulamento
Como um exemplo, podemos descrever o que acontece em um sistema de
vendas, aonde temos cadastros de funcionários, usuários, gerentes, clientes,
produtos entre outros. Se por acaso acontecer um problema na parte do usuário
é somente nesse setor que será realizada a manutenção não afetando os demais.
Encapsulamento
Em python métodos e atributos public são acessíveis de qualquer lugar, já
métodos e atributos private só acessíveis somente dentro da classe.

A ideia principal de Python é que tudo seja public e somente o necessário, seja
private. Muitas vezes quando estamos aprendendo POO costuma-se dizer:
"Grande parte das vezes sua classe terá atributos de instância privado e métodos
públicos". Mas nem sempre é assim, podemos realmente ter variáveis em nossas
classes que não precisam serem private.
Encapsulamento
Se você está certo que precisa ter variáveis private em sua classe e não quer que
ela seja acessível fora da classe onde ela foi especificada, então você terá que
informar primeiramente que ela será private, para que o interpretador Python
saiba disso.
Encapsulamento
O python usa _ (underscore) para explicitar se um atributo (método) é público ou
privado:

name - public: pode ser acessada de qualquer lugar

__name - private: Não pode ser acessada de fora da classe


Encapsulamento
Para acessar atributos privados é necessário criar métodos setters e getters. No
python 3.x foi introduzida uma sintaxe muito elegante para realizar esse serviço,
veja
Encapsulamento
class Gato(object):
def __init__(self):
self.__raca = None

@property
def raca(self):
return self.__raca

@raca.setter
def raca(self, value):
self.__raca = value
Encapsulamento
Bom o que fizemos foi definir dois métodos, onde no primeiro definimos o getter
e o segundo definimos o setter. Observe que os dois métodos tem o mesmo
nome, mas possuem anotações diferentes. A primeira anotação @property indica
o método é um getter e a segunda anotação @raca.setter indica que o método é
um setter, perceba que a segunda anotação é bem diferente da primeira, nela
devemos informar o nome do atributo seguido de ponto e a palavra setter.

Você também pode gostar