1
resposta

Conceito de encapsulamento

Mesmo ter terminado o módulo de Encapsulamento, ainda não entendi bem o que seria o conceito da palavra, gostaria de uma breve explicação

1 resposta

Uma parte importante da programação orientada ao objeto é o recurso de encapsulamento. Esse recurso envolve agrupar métodos e atributos em pacotes que contém diferentes formas de acesso. Por exemplo, certos métodos e atributos são empacotados como públicos e podem ser acessados por qualquer classe outros pacotes vão ter alguma restrição de acesso – os métodos e atributos só poderão ser acessadas por uma classe filha ou nenhuma outra classe pode acessar.

Tal abordagem permite o programador criar de forma fácil um interface de aplicação para as classes e também para que elas possam esconder os métodos que são utilizados para o próprio funcionamento. Por exemplo, os métodos utilizados para o funcionamento da classe são definido como privados e os métodos que devem ser utilizados por classes mais complexas são definidos como públicos. Temos que lembrar que o esforço principal do paradigma de programação orientada ao objeto é o de organizar o código e o recurso de encapsulamento está alinhado nesse esforço. Porém no Python não existe modificadores de acesso, dependendo do programador não USÁ-LO.

Em resumo, Encapsulamento é a proteção dos atributos ou métodos de uma classe, em Python existem somente o public e o private e eles são definidos no próprio nome do atributo ou método.

Atributos ou métodos iniciados por no máximo dois sublinhados e terminados por um sublinhado são privados e todas as outras formas são públicas.

Exemplo:

class A:
   a = 1 # atributo publico
   __b = 2 # atributo privado a class A

class B(A):
   __c = 3 # atributo privado a B

   def __init__(self):
     print(self.a)
     print(self.__c)

a = A()
print(a.a) # imprime 1

b = B()

### sdout

>>> print(b.__b) # Erro, pois __b é privado a classe A.
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
AttributeError: 'B' object has no attribute '__b'

>>> print(b.__c) # Erro, __c é um atributo privado, somente chamado pela classe.
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
AttributeError: 'B' object has no attribute '__c'

>>> print(b._B__c) # Imprime __c = 3, muito pouco utilizada, mas existe.
3
>>>