Introdução à Programação Orientada a Objetos em Python
Introdução à Programação Orientada a Objetos em Python
Python orientado
a objetos
Prof. Marcelo Nascimento Costa
Apresentação
Propósito
Preparação
Objetivos
Módulo 1
Orientação a objetos
Definir os conceitos gerais da orientação a objetos.
[Link] 1/79
02/07/25, 13:55 Python orientado a objetos
Módulo 2
Orientação a objetos na
linguagem Python
Descrever os conceitos básicos da programação orientada a objetos
na linguagem Python.
Módulo 3
meeting_room
Introdução
O paradigma de programação orientado a objetos é largamente
utilizado para o desenvolvimento de software devido à sua
implementação se aproximar dos conceitos do mundo real. Essa
proximidade facilita a manutenção dos softwares orientados a
objetos.
[Link] 2/79
02/07/25, 13:55 Python orientado a objetos
Download material
1 - Orientação a objetos
Ao final deste módulo, você será capaz de definir os conceitos gerais
da orientação a objetos.
Conceitos e pilares de
programação orientada a
objetos
A orientação a objetos (OO) é um paradigma essencial na programação
moderna, centrado na organização de software em torno de objetos, que
são instâncias de classes. Esse método oferece uma abordagem mais
intuitiva e eficiente para resolver problemas complexos. Neste conteúdo,
exploraremos os pilares fundamentais da orientação a objetos: objetos,
atributos e operações.
[Link] 3/79
02/07/25, 13:55 Python orientado a objetos
(Jaeger, 1995)
POO Programação
convencional
[Link] 4/79
02/07/25, 13:55 Python orientado a objetos
O software é organizado A estrutura e o
como uma coleção de close comportamento dos
objetos separados que dados têm pouca
incorpora a estrutura e vinculação entre si.
o comportamento dos
dados.
Atributos
[Link] 5/79
02/07/25, 13:55 Python orientado a objetos
Atributos de Atributos de
close
objetos da pessoa objetos da pessoa
1 2
• Nome: Maria • Nome: Joana
• Idade: 25 • Idade: 30
• Peso: 63kg • Peso: 60kg
• Altura: 1,60m • Altura: 1,68m
Operações
Classe Empresa
Classe Janela
Atividade 1
A programação orientada a objetos (OO) é um paradigma que organiza o
código a partir de alguns pilares básicos: objetos, atributos (dados) e
métodos (operações), que definem seu estado e comportamento. Em
programação orientada a objetos (OO), qual das seguintes afirmações é
verdadeira sobre objetos, atributos e operações?
[Link] 7/79
02/07/25, 13:55 Python orientado a objetos
descreve métodos como se fossem atributos; letra C confunde
métodos com atributos; letra E iguala atributos e métodos, que são
distintos.
O conceito de classe
A classe é o alicerce da programação orientada a objetos, funcionando
como um molde para criar objetos. Ela define atributos (dados) e
métodos (comportamentos) que os objetos derivados dela possuirão.
Compreender o conceito de classe é essencial para aproveitar todo o
potencial da orientação a objetos em seus projetos de software.
Comentário
Cada nome de atributo é único dentro de uma classe; no entanto, essa
premissa não é verdadeira quando se consideram todas as classes. Por
exemplo, as classes Pessoa e Empresa podem ter um atributo comum
chamado de Endereço.
[Link] 8/79
02/07/25, 13:55 Python orientado a objetos
Atividade 2
Uma classe é um componente central na programação orientada a
objetos (OO).
[Link] 9/79
02/07/25, 13:55 Python orientado a objetos
O conceito de
encapsulamento
O encapsulamento refere-se à ideia de ocultar a implementação interna
de uma classe ou objeto e fornecer apenas uma interface externa para
interagir com ele. Em Python, o encapsulamento é alcançado por meio
do uso de modificadores de acesso, como public, protected e private.
Compreender esse conceito é crucial para desenvolver sistemas
robustos e escaláveis, além de facilitar a manutenção e a reutilização de
código.
[Link] 10/79
02/07/25, 13:55 Python orientado a objetos
Partindo desse princípio, a interface de comunicação de um objeto deve
ser definida a fim de revelar o menos possível sobre o seu
funcionamento interno.
Resumindo
Os objetos clientes têm conhecimento apenas das operações que
podem ser requisitadas e precisam estar cientes somente do que elas
realizam, e não de como estão implementadas.
[Link] 11/79
02/07/25, 13:55 Python orientado a objetos
Atividade 3
Encapsulamento é um conceito fundamental na programação orientada
a objetos (OO), promovendo a segurança, a modularidade e a
manutenibilidade do código. O que o encapsulamento representa na
programação orientada a objetos?
[Link] 12/79
02/07/25, 13:55 Python orientado a objetos
O conceito de herança e
polimorfismo
Herança permite que classes derivadas adquiram atributos e métodos
de uma classe base, promovendo reutilização e organização de código.
Polimorfismo possibilita que objetos de diferentes classes sejam
tratados de forma uniforme, adaptando comportamentos específicos.
Juntos, esses conceitos fortalecem a flexibilidade e a extensibilidade na
programação orientada a objetos.
Herança
Na orientação a objetos, a herança é um mecanismo por meio do qual
classes compartilham atributos e comportamentos, formando uma
hierarquia. Uma classe herdeira recebe as características de outra
classe para reimplementá-las ou especializá-las de uma maneira
diferente da classe Pai.
Comentário
A herança permite capturar similaridades entre classes, dispondo-as em
hierarquias. As similaridades incluem atributos e operações sobre as
classes (Farinelli, 2020).
Exemplo de herança.
[Link] 13/79
02/07/25, 13:55 Python orientado a objetos
Uma classe pode ser definida genericamente como uma superclasse e,
em seguida, especializada em classes mais específicas (subclasses).
Comentário
A herança permite a reutilização de código em larga escala, pois
possibilita que se herde todo o código já implementado na classe Pai e
se adicione apenas o código específico para as novas funcionalidades
implementadas pela classe Filha.
Herança simples
[Link] 14/79
02/07/25, 13:55 Python orientado a objetos
Herança múltipla
Para adaptar essa situação no mundo real, deve ser criada uma
modelagem de classes. Uma nova subclasse ProfessorAluno precisa
ser adicionada, herdando atributos e operações das classes Professor e
Aluno. Isso configura uma herança múltipla. Essa nova subclasse deverá
ter o atributo DescontoProfessor, que faz sentido apenas para essa
classe. Observe!
[Link] 15/79
02/07/25, 13:55 Python orientado a objetos
Exemplo de herança Pessoa -> Professor e Pessoa -> Aluno e Professor/Aluno -> ProfessorAluno.
Polimorfismo
O polimorfismo é a capacidade de haver o mesmo comportamento
diferente em classes diferentes. Uma mesma mensagem será
executada de maneira diversa, dependendo do objeto receptor. O
polimorfismo acontece quando reimplementamos um método nas
subclasses de uma herança (Farinelli, 2020). Veja!
[Link] 16/79
02/07/25, 13:55 Python orientado a objetos
Atividade 4
Na programação orientada a objetos, há conceitos, como, por exemplo,
herança e polimorfismo. Sobre esses conceitos, analise as assertivas e
assinale a alternativa que aponta a(s) correta(s).
A Apenas I.
B Apenas I e III.
C Apenas I, II e III.
E Apenas I e II.
[Link] 17/79
02/07/25, 13:55 Python orientado a objetos
Classes e objetos
Em Python, classes e objetos são fundamentais para a programação
orientada a objetos. Classes definem a estrutura e o comportamento
dos objetos, enquanto objetos são instâncias dessas classes. Este
conteúdo abordará como criar e utilizar classes e objetos em Python,
proporcionando uma base sólida para desenvolver aplicações robustas
e eficientes. Prepare-se para explorar esses conceitos essenciais!
Definição de classe
Uma classe é uma declaração de tipo que encapsula constantes,
variáveis e métodos que realizam a manipulação dos valores dessas
variáveis.
Atenção!
Cada classe deve ser única em um sistema orientado a objetos.
Como boa prática, cada classe deve fazer parte de um único [Link]
para ajudar na estruturação do sistema orientado a objetos em Python.
Outra boa prática consiste no nome da classe semelhante ao do arquivo,
[Link] 18/79
02/07/25, 13:55 Python orientado a objetos
como, por exemplo, definir no ambiente de desenvolvimento Python a
classe Conta. O nome final do arquivo tem de ser [Link].
Python
content_copy
Construtores e self
A classe Conta foi criada, porém não foram definidos atributos e
instanciados objetos para ela. Ambos são uma característica básica dos
programas orientados a objetos.
Python
content_copy
Classe Conta
[Link] 19/79
02/07/25, 13:55 Python orientado a objetos
O __new__ cria a instância e é utilizado para alterar as classes
dinamicamente nos casos de sistemas que envolvam metaclasses e
frameworks. Após __new__ ser executado, esse método chama
o __init__ para a inicialização da classe como seus valores iniciais
(Menezes, 2019).
Comentário
Para efeitos de comparação com outras linguagens de programação (e
por questões de simplificação), consideraremos o __init__ como o
construtor da classe. Portanto, toda vez que instanciarmos objetos da
classe conta, o método __init__ será chamado.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
[Link] 20/79
02/07/25, 13:55 Python orientado a objetos
null
null
play_arrow
Métodos
Toda classe precisa possuir um conjunto de métodos para manipular os
atributos e, por consequência, o estado do objeto. Por exemplo,
precisamos depositar dinheiro na conta para aumentar o valor da conta
corrente. Veja!
Python
content_copy
Método depositar.
Python
content_copy
[Link] 21/79
02/07/25, 13:55 Python orientado a objetos
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Python
content_copy
[Link] 22/79
02/07/25, 13:55 Python orientado a objetos
TRUE FALSE
Python
content_copy
[Link] 23/79
02/07/25, 13:55 Python orientado a objetos
conta1 = conta2
if (conta1 == conta2):
... print("enderecos iguais de memoria")
Observe na imagem.
>>>[Link]
456
>>> [Link]
456
Python
content_copy
[Link] 24/79
02/07/25, 13:55 Python orientado a objetos
Observe!
Atividade 1
Analise o seguinte código escrito em Python que define a estrutura da
classe ContaBancaria.
Python
content_copy
[Link] 25/79
02/07/25, 13:55 Python orientado a objetos
[Link] 26/79
02/07/25, 13:55 Python orientado a objetos
Crie uma classe chamada televisão que siga os requisitos a seguir.
Roteiro de prática
Execute as seguintes etapas para resolução do pedido.
Python
content_copy
[Link] 27/79
02/07/25, 13:55 Python orientado a objetos
Atividade 2
Modifique a classe Televisão criada a partir do roteiro de prática de
forma que, se pedirmos para mudar o canal para baixo, além do mínimo,
ela vá para o canal máximo. Se mudarmos para cima, além do canal
máximo, que volte ao canal mínimo.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
Python
content_copy
[Link] 28/79
02/07/25, 13:55 Python orientado a objetos
Agregação
Para atender a novas necessidades do sistema de conta corrente do
banco, agora é necessário adicionar uma funcionalidade para o
gerenciamento de conta conjunta, ou seja, uma conta corrente pode ter
um conjunto de clientes associados. Isso pode ser representado como
uma agregação, conforme aponta o esquema a seguir.
[Link] 29/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Classe cliente.
Python
content_copy
Classe [Link].
Python
content_copy
[Link] 30/79
02/07/25, 13:55 Python orientado a objetos
Programa [Link].
Altere o programa do código a fim de criar mais uma conta para dois
clientes diferentes. Como desafio, tente, por meio do objeto conta,
imprimir o nome e o endereço dos clientes associados às contas.
Composição
A classe Conta ainda não está completa de acordo com as
necessidades do sistema de conta corrente do banco. Isso ocorre
porque o banco precisa gerar extratos contendo o histórico de todas as
operações realizadas para conta corrente.
Python
content_copy
[Link] 31/79
02/07/25, 13:55 Python orientado a objetos
Classe extrato.
Python
content_copy
Classe Conta.
Adição da linha nº 10
Criação de um atributo extrato, fazendo referência a um objeto Extrato.
Python
content_copy
[Link] 32/79
02/07/25, 13:55 Python orientado a objetos
Atividade 3
Em Python, os conceitos de agregação e composição são fundamentais
para a modelagem de relacionamentos entre objetos. Compreender as
diferenças entre esses dois tipos de relacionamentos é imprescindível
para o desenvolvimento de sistemas robustos e flexíveis. Qual das
[Link] 33/79
02/07/25, 13:55 Python orientado a objetos
seguintes afirmações melhor descreve a diferença entre agregação e
composição em Python?
[Link] 34/79
02/07/25, 13:55 Python orientado a objetos
Encapsulamento
Conforme aprendemos, o encapsulamento é fundamental para a
manutenção da integridade dos objetos e a proibição de qualquer
alteração indevida nos valores dos atributos (estado) do objeto (Caelum,
2020).
[Link] = -200
[Link] 35/79
02/07/25, 13:55 Python orientado a objetos
Comentário
Por default, em Python, os atributos são definidos como público, ou seja,
podem ser acessados diretamente sem respeitar o encapsulamento –
acesso feito apenas por meio de métodos do objeto.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
O erro gerado indica que não existe o atributo saldo. Mas como não
existe se ele está na definição da classe? Ele realmente existe, mas não
está visível para o programa porque o atributo é privado.
O atributo, portanto, ainda pode ser acessado. Embora ele funcione, isso
é considerado uma prática que viola o princípio de encapsulamento da
orientação a objetos. Veja.
>>> conta._Conta__saldo
1000
Decorator @property
As properties são uma estratégia importante disponibilizada pelo
Python para acessar e modificar atributos de forma controlada. Ao usar
[Link] 36/79
02/07/25, 13:55 Python orientado a objetos
o decorador @property em métodos, você mantém os atributos como
protegidos, permitindo que sejam acessados apenas por meio desses
métodos decorados. Isso garante que os atributos sejam manipulados
de maneira segura e conforme as regras definidas na classe.
Por exemplo, na classe Conta, o atributo privado saldo não pode ser
acessado diretamente para leitura. Em vez disso, ele é acessado por
meio de um método decorado com @property, veja!
Python
content_copy
Isso força que qualquer alteração no valor do atributo privado passe por
esse método, onde é possível incluir validações ou outras regras de
negócios.
Python
content_copy
[Link] 37/79
02/07/25, 13:55 Python orientado a objetos
modificados. No entanto, é uma boa prática definir esses métodos
somente se houver uma regra de negócios específica associada ao
atributo. Se não houver, o acesso aos atributos pode ser feito
diretamente, conforme definido na classe.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Atributos de classe
Existem algumas situações em que os sistemas precisam controlar
valores associados à classe, e não aos objetos (instâncias) das classes.
É o caso, por exemplo, ao se desenvolver um aplicativo de desenho,
como o Paint, que precisa contar o número de círculos criados na tela.
Python
content_copy
Classe Círculo.
Python
content_copy
[Link] 38/79
02/07/25, 13:55 Python orientado a objetos
Veja o programa abaixo que irá criar dois círculos. Execute e analise o
resultado.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Cada vez que uma nova instância de Circulo é criada, o método __init__
é chamado. Dentro deste método, Circulo.total_circulos += 1 é utilizado
para incrementar o valor de total_circulos diretamente na classe Circulo.
Esse incremento é feito de forma que cada nova instância da classe
contribui para aumentar o contador, refletindo o número total de círculos
criados.
[Link] 39/79
02/07/25, 13:55 Python orientado a objetos
Quando acessamos circ1.total_circulos ou circ2.total_circulos, estamos
na verdade acessando o valor de Circulo.total_circulos, porque
total_circulos é um atributo de classe, e todas as instâncias
compartilham o mesmo valor. Isso significa que, independentemente de
qual instância é usada para acessar o atributo, o valor será o mesmo,
representando o total acumulado de instâncias criadas.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Métodos de classe
Os métodos de classe são a maneira indicada para se acessar os
atributos de classe. Eles têm acesso diretamente à área de memória
que contém os atributos de classe.
[Link] 40/79
02/07/25, 13:55 Python orientado a objetos
O esquema é apresentado na imagem.
Memória estática.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
[Link] 41/79
02/07/25, 13:55 Python orientado a objetos
play_arrow
Python
content_copy
Método privado.
[Link] 42/79
02/07/25, 13:55 Python orientado a objetos
Métodos estáticos
São métodos que podem ser chamados sem haver uma referência para
um objeto da classe, ou seja, não existe a obrigatoriedade da
instanciação de um objeto da classe. O método pode ser chamado
diretamente. Observe!
Python
content_copy
Método estático.
>>> [Link](20)
4.47213595499958
Aqui, o método sqrt da classe Math foi chamado sem que um objeto da
classe Math fosse instanciado.
Atenção!
Os métodos estáticos não são uma boa prática na programação
orientada a objetos. Eles devem ser utilizados apenas em casos
especiais, como o de classes de log em sistemas.
Atividade 4
Decoradores em Python são funções que modificam o comportamento
de outras funções ou métodos, adicionando funcionalidades sem alterar
seu código.
[Link] 43/79
02/07/25, 13:55 Python orientado a objetos
Qual é a diferença na utilização dos decorators @staticmethod e
@classmethod?
Cenário 1
Criar um sistema simples de gerenciamento de uma biblioteca que
contém vários livros usando o conceito de agregação. Você deve criar
duas classes: Livro e Biblioteca.
[Link] 44/79
02/07/25, 13:55 Python orientado a objetos
1. A classe Livro deve ter os seguintes atributos:
título (str);
autor (str);
isbn (str).
Cenário 2
Criar uma classe Pessoa que recebe parâmetro para o construtor.
Roteiro de prática
Roteiro para o cenário 1
[Link] 45/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Python
content_copy
[Link] 46/79
02/07/25, 13:55 Python orientado a objetos
Atividade 5
A partir da solução disponibilizada para o cenário 1, adicione um
método na classe Biblioteca para buscar um livro pelo título e retornar
as informações do livro.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
[Link] 47/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Herança
Herança em Python permite que uma classe derive características e
comportamentos de outra, promovendo reutilização e organização de
código. Neste conteúdo, exploraremos como implementar herança,
criando hierarquias de classes que facilitam a manutenção e a extensão
de aplicações. Descubra como herança pode tornar seu código mais
modular e eficiente.
[Link] 48/79
02/07/25, 13:55 Python orientado a objetos
atributos e métodos de uma classe base, permitindo reutilização de
código e extensão de funcionalidades existentes. Confira!
Implementando herança
É um dos princípios mais importantes da programação orientada a
objetos, pois permite a reutilização de código com a possiblidade de
extensão para se ajustar às regras de negócio dos sistemas.
O objeto do mundo real conta especial será mapeado para uma classe
ContaEspecial, a qual, por sua vez, herdará todo código de conta,
conforme mostra a imagem.
[Link] 49/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
[Link] 50/79
02/07/25, 13:55 Python orientado a objetos
Classe ContaEspecial.
Python
content_copy
[Link] 51/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Conta2: Outra conta comum, desta vez para Maria, também com
um saldo inicial de R$ 2000.
Conta3: Uma conta especial para Joana, que tem um saldo inicial
de R$ 1000 e um limite de crédito adicional de R$ 2000.
Operações Bancárias
A primeira operação realizada no programa é um depósito de R$ 500 na
conta de Maria. Este depósito é simples e direto, aumentando o saldo de
Maria para R$ 2500. Logo após, o programa tenta realizar um saque de
R$ 3000 da mesma conta.
[Link] 52/79
02/07/25, 13:55 Python orientado a objetos
No entanto, como o saldo de Maria não é suficiente para cobrir esse
saque, a operação falha. O saldo permanece inalterado em R$ 2500, e o
programa informa ao usuário que o saque não foi possível devido ao
saldo insuficiente.
[Link] 53/79
02/07/25, 13:55 Python orientado a objetos
Comentário
Uma análise comparativa com a programação procedural indica que,
mesmo em casos com código parecido, o reuso era bastante baixo. O
programador tinha de criar um programa Conta Corrente Especial
repetindo todo o código já definido no programa Conta Corrente. Com a
duplicação do código, era necessário realizar a manutenção de dois
códigos parecidos em dois programas diferentes.
Herança múltipla
É um mecanismo que possibilita a uma classe herdar o código de duas
ou mais superclasses.
looks_one
Deverá ter um rendimento diário com base no rendimento da conta-
poupança.
looks_two
Terá de ser cobrada uma taxa de manutenção mensal, mesmo se o
rendimento for de apenas um dia.
[Link] 54/79
02/07/25, 13:55 Python orientado a objetos
Herança múltipla.
Python
content_copy
Conta-poupança.
Python
content_copy
[Link] 55/79
02/07/25, 13:55 Python orientado a objetos
Conta remunerada.
Python
content_copy
Python
content_copy
[Link] 56/79
02/07/25, 13:55 Python orientado a objetos
Atividade 1
Herança é um conceito fundamental na programação orientada a
objetos (OO), permitindo que uma classe adquira atributos e métodos de
outra classe. Em Python, herança é uma técnica poderosa para reutilizar
código e criar hierarquias de classes.
[Link] 57/79
02/07/25, 13:55 Python orientado a objetos
Polimorfismo
Polimorfismo em Python permite que objetos de diferentes classes
sejam tratados através de uma interface comum, adaptando
comportamentos conforme necessário. Este conteúdo explicará como
implementar polimorfismo, utilizando métodos e interfaces para criar
código flexível e dinâmico. Aprenda a aproveitar este poderoso conceito
para escrever programas mais adaptáveis e elegantes.
[Link] 58/79
02/07/25, 13:55 Python orientado a objetos
Implementando polimorfismo
Polimorfismo é o mecanismo que permite a um método com o mesmo
nome ser executado de modo diferente a depender do objeto que está
chamando o método. A linguagem define em tempo de execução (late
binding) qual método deve ser chamado. Essa característica é bastante
comum em herança de classes devido à redefinição da implementação
dos métodos nas subclasses.
Vamos imaginar que agora tenhamos uma entidade Banco que controla
todas as contas criadas no sistema de conta corrente. As contas podem
ser do tipo conta, contacomum ou contarenumerada. O cálculo do
rendimento da conta Cliente desconta IOF e IR; a conta Renumerada,
apenas o IOF. Já a conta Cliente não tem desconto nenhum.
Diagrama Banco.
[Link] 59/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Classe ContaCliente.
Python
content_copy
Classe ContaComum.
Python
content_copy
[Link] 60/79
02/07/25, 13:55 Python orientado a objetos
Classe ContaCliente.
Python
content_copy
Classe Banco.
Python
content_copy
[Link] 61/79
02/07/25, 13:55 Python orientado a objetos
Atividade 2
Em relação ao conceito de polimorfismo em Python, podemos afirmar
que:
[Link] 62/79
02/07/25, 13:55 Python orientado a objetos
Herança e polimorfismo na
prática
Neste conteúdo, você aprenderá a implementar polimorfismo e herança
em Python, criando um sistema de classes que modela diferentes tipos
de animais e suas habilidades de movimento e fala. Você vai definir uma
classe base, criar subclasses específicas para adicionar capacidades de
movimento.
[Link] 63/79
02/07/25, 13:55 Python orientado a objetos
Roteiro de prática
Siga o passo a passo para criação da Classe Base Animal.
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Atividade 3
[Link] 64/79
02/07/25, 13:55 Python orientado a objetos
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
Python
content_copy
[Link] 65/79
02/07/25, 13:55 Python orientado a objetos
Classes abstratas
Definir uma classe abstrata é uma característica bastante utilizada pela
programação orientada a objetos. Falaremos sobre esse tipo de classe a
seguir.
Observe a imagem.
[Link] 66/79
02/07/25, 13:55 Python orientado a objetos
Houve apenas a adição de esteréotipo <> para indicar que Conta Cliente
é uma classe abstrata. O Python utiliza um módulo chamado abc para
definir uma classe como abstrata, a qual será herdeira da superclasse
ABC (Abstract Base Classes).
Python
content_copy
Para uma classe ser considerada abstrata, ela precisa ter pelo menos
um método abstrato. Esse método pode ter implementação, embora
isso não faça sentido, pois ele deverá obrigatoriamente ser
implementado pelas subclasses. Em nosso exemplo, como não teremos
o ContaCliente, tal conta não terá Calculo do rendimento.
Python
content_copy
[Link] 67/79
02/07/25, 13:55 Python orientado a objetos
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Para que o código funcione, você deve criar uma subclasse concreta de
ContaCliente que implemente o método calculo_rendimento. Somente
depois disso, você poderá instanciar essa subclasse.
Python
content_copy
[Link] 68/79
02/07/25, 13:55 Python orientado a objetos
Recomendação
Como exercício, crie as classes concretas ContaComum e ContaVIP
sem implementar o método abstrato do superclasse ContaCliente.
Python
content_copy
[Link] 69/79
02/07/25, 13:55 Python orientado a objetos
Python
content_copy
Lançando Exceções
Uma vez que uma exceção personalizada tenha sido criada, ela pode ser
lançada em situações específicas, usando a instrução raise. Considere o
exemplo abaixo, onde um método lança a exceção
ExcecaoCustomizada caso o valor passado seja negativo:
Python
content_copy
[Link] 70/79
02/07/25, 13:55 Python orientado a objetos
mecanismo é essencial para garantir que condições indesejadas sejam
tratadas adequadamente.
Python
content_copy
Vamos a um exemplo!
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
[Link] 71/79
02/07/25, 13:55 Python orientado a objetos
código. Ela herda de Exception, a classe base para todas
as exceções em Python. Isso permite que
ExcecaoCustomizada seja usada e tratada como
qualquer outra exceção no Python.
3. Tratamento de Exceções:
Atividade 4
Classes abstratas são uma parte importante da programação orientada
a objetos em Python, fornecendo uma estrutura para outras classes e
definindo métodos que devem ser implementados por suas subclasses.
Qual das seguintes afirmações melhor descreve uma classe abstrata em
Python?
[Link] 72/79
02/07/25, 13:55 Python orientado a objetos
por outras classes.
Classes abstratas e
tratamento de exceções na
prática
Vamos praticar conceitos de programação orientada a objetos em
Python, com foco na utilização de classes abstratas e no tratamento de
exceções; para isso, abordaremos dois cenários. Veja!
Cenário 1
Acompanhe o passo a passo.
[Link] 73/79
02/07/25, 13:55 Python orientado a objetos
Cenário 2
Acompanhe o passo a passo.
Roteiro de prática
Roteiro para o cenário 1
4. Teste as implementações:
Crie instâncias de Carro e Bicicleta;
Chame os métodos mover() e ligar() em cada instância e
verifique as saídas para garantir que funcionem conforme o
esperado.
Python
content_copy
[Link] 74/79
02/07/25, 13:55 Python orientado a objetos
2. Teste as implementações:
Crie instâncias da Classe;
Chame os métodos e realizar operações aritméticas;
Passe valores inválidos para os métodos.
Python
content_copy
Atividade 5
[Link] 75/79
02/07/25, 13:55 Python orientado a objetos
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
Python
content_copy
[Link] 76/79
02/07/25, 13:55 Python orientado a objetos
A partir da solução do cenário 2, implemente a correção do erro de
divisão por zero
Exercício
info_outlineTUTORIAL
d content_copyCOPIAR
Python3
null
null
play_arrow
Chave de respostaexpand_more
Python
content_copy
[Link] 77/79
02/07/25, 13:55 Python orientado a objetos
Implementação de encapsulamento.
Explore +
O desenvolvimento de frameworks com metaclasses é um assunto
importante e bastante utilizado no mercado. Para estudar um pouco
mais esse tema, indicamos o livro Fluent Python, de Luciano Ramalho,
publicado em 2015 pela O´Reilly Media.
Referências
ANAYA, M. Clean code in Python: refactor your legacy code base.
Birmingham: Packt Publishing. Publicado em: 29 ago. 2018.
[Link] 78/79
02/07/25, 13:55 Python orientado a objetos
FARINELLI, F. Conceitos básicos de programação orientada a objetos.
Consultado na internet em: 14 jun. 2020.
Download material
Relatar problema
[Link] 79/79