Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Encapsulamento
Python
Prof. Anderson Barroso anderson.santos@souunit.com.br
Encapsulamento - conceito
• Encapsular é fundamental para que seu sistema seja 
suscetível a mudanças: não precisamos mudar uma 
regra de negócio em vários lugares, mas sim em 
apenas um único lugar, já que essa regra está 
encapsulada. 
• O conjunto de métodos públicos de uma classe é 
também chamado de interface da classe, pois esta é 
a única maneira a qual você se comunica com 
objetos dessa classe.
Encapsulamento - saque de uma conta
• A gente pode criar um teste dentro do método 
saca() para validar se há saldo para saque;
• Mas, isso garante que ao invés de usar a variável 
diretamente, o usuário usará sempre o método 
saca()?
• Para essa garantia, protegemos as variáveis do 
acesso externo por meio do conceito de 
Encapsulamento.
Encapsulamento – private e público
• Em linguagens como Java e C# basta declarar que os atributos não 
podem ser acessados de fora da classe utilizando a palavra chave 
private. 
• Em orientação a objetos, é prática quase que obrigatória proteger seus 
atributos com private. 
• Cada classe é responsável por controlar seus atributos, portanto ela deve 
julgar se aquele novo valor é válido ou não. 
• E esta validação não deve ser controlada por quem está usando a classe 
e sim por ela mesma, centralizando essa responsabilidade e facilitando 
futuras mudanças no sistema.
• Os atributos e métodos que podem ser visualizados fora da Classe, são 
chamados de public.
Encapsulamento – modificador (__)
• O Python não utiliza o termo private, que é um 
modificador de acesso e também chamado de 
modificador de visibilidade. 
• No Python inserimos dois underlines ('__') ao 
atributo para adicionar esta característica:
Quando tentamos acessar:
Encapsulamento – modificador (_)
• Uma outra forma de utilizar um atributo privado 
é usando apenas um underline(_)
• Programadores python preferem utilizar essa 
forma para forçar que o atributo seja protegido 
(Protected em outras linguagens)
Encapsulamento – gets e sets
• Para permitir o acesso aos atributos de uma 
maneira controlada, a prática mais comum é criar 
dois métodos, um que retorna o valor e outro que 
muda o valor. 
• A convenção para esses métodos em muitas 
linguagens OO é colocar a palavra get ou set
antes do nome do atributo. 
Encapsulamento – gets e sets
• Por exemplo, uma conta com 
saldo e titular fica assim, no 
caso de desejarmos dar 
acesso a leitura e escrita a 
todos os atributos:
Encapsulamento – gets e sets de outra forma
• Que tal utilizar o get e o set sem os parênteses, 
como se fossem atributos da classe?
• É apenas uma foram diferente de chamar os dois 
métodos
Encapsulamento – gets e sets - properties
• O Python oferece uma solução 
chamada de properties. 
• Mantemos nossos atributos protegidos 
e decoramos nossos métodos com um 
decorator chamado property.
• @property serve para “decorar” os 
gets;
• @XXX.setter serve para “decorar” os 
sets;
• XXX é o nome do método
Encapsulamento – gets e sets - properties
• Para muitos programadores Python, o ideal seria modificar o 
saldo através dos métodos públicos saca() e deposita();
• E questionam a necessidade de usar @saldo.setter;
• Isso é uma decisão de negócio específico. O programador 
deve ficar alerta quanto as propriedades setters de seus 
atributos, nem sempre elas são necessárias.
Encapsulamento – atributos de classe
• Imaginem agora que nosso Banco quer 
controlar a quantidade de contas;
• Para entender melhor, eu devo contar a 
quantidade de contas instanciadas na 
Classe Conta.
• Para isso, devemos declarar uma variável 
que servirá como um contador e inicializá-
la antes do construtor.
Encapsulamento – método estático
• Não é boa prática deixar o programa fora 
da classe chamar diretamente o atributo 
total_contas;
• Então também colocaremos um (_) nele 
para protegê-lo e criar um get para 
retornar o seu valor.
• Mas, para isso, devemos informar que esse 
método é estático que é como uma função 
simples e não precisa do self para 
funcionar.
Encapsulamento – uma classe como atributo de outra
• É possível declarar um atributo de uma classe sendo do tipo 
Classe.
• Ex:
• Dentro da classe Conta, ter um atributo do tipo Dados que também 
é uma classe.
• Podemos ter até uma array de classes dentro de uma classe, 
ou seja, uma lista de Clientes dentro da Classe Banco.
Encapsulamento – uma classe como atributo de outra
Encapsulamento – array de classes
Exercícios - 01
1. Criar uma classe chamada Pneu
a. Contém os seguintes atributos :
i. aro (inteiro)
ii. cheio (booleano)
iii. criar um construtor
b. criar um método chamado encherPneu() e outro furarPneu()
c. criar um método chamado verificaPneu() que retorna um 
texto com a descrição de todos os atributos
Para todas as classes, usar encapsulamento, ou seja,
não deixar outras classes ou programa acessar
diretamente o atributo
Exercícios - 01
1. Criar uma classe chamada Carro
a. Esta Classe contém os seguintes atributos :
i. marca (texto)
ii. ano (inteiro)
iii. pneuDianteiroDireito (do tipo Pneu)
iv. pneuDianteiroEsquerdo (do tipo Pneu)
v. pneuTraseiroDireito (do tipo Pneu)
vi. pneuTraseiroEsquerdo (do tipo Pneu)
2. criar um construtor padrão 
3. criar os métodos SET e GET para todos os atributos.
4. criar um método verificaCarro() que retorna uma String com a descrição de 
todos os atributos, inclusive dos Pneus.
Exercícios - 01
1. o criar um programa principal chamado Montagem
a. A aplicação deve instanciar um Carro chamado oldCar, utilizando o construtor padrão;
b. Em seguida deve ser impresso todos os dados deste oldCar.
c. Logo após, a aplicação deve instanciar um Carro chamado newCar, utilizando o 
construtor específico, com os seguintes valores:
Marca = “BMW”
Ano = 2007 
Pneu Dianteiro Direito: Aro=16, Cheio=false
Pneu Dianteiro Esquerdo: Aro=16, Cheio=false
Pneu Traseiro Direito: Aro=15, Cheio=true
Pneu Traseiro Esquerdo: Aro=15, Cheio=true
d. Deve ser chamado o método encherPneu do pneu dianteiro direito no newCar e 
furarPneu para o traseiro esquerdo
e. Em seguida deve ser impresso todas as informações deste newCar

Mais conteúdos dessa disciplina