30/05/2022
Prof. André Backes
Programação procedimental
Também chamada de programação procedural
Contêm um conjunto de passos computacionais a serem
executados
Problemas são decompostos em sub-problemas
Modularização
Um programa é construído definindo funções
Uma função pode ser chamada a qualquer momento durante a
execução do programa
A ênfase está nas operações desenvolvidas
1
30/05/2022
Programação orientada a
objetos
Trabalha com o conceito de classe e objeto
Dados e operações são agregadas a entidades chamadas
objetos
Problemas são decompostos em objetos que interagem
entre si
Cada objeto é uma unidade de software
A ênfase está na interação
Forma geral em Python
Terminologia
Classe
Representa um conjunto de
objetos que possuem a mesma
estrutura de dados (atributos)
e comportamento (operações)
Ex: classe dos Seres Humanos
2
30/05/2022
Terminologia
Objeto
O objeto é uma instância de
uma classe
Os métodos define o
comportamento dos objetos
Seu estado é mantido por meio de
atributos
Forma de instanciar
objeto = nome-classe()
Terminologia
Objeto
Cada objeto tem uma
identidade própria
Ele é distinguível de qualquer
outro objeto mesmo que
seus atributos sejam idênticos
Exemplo de objetos da classe
Seres Humanos: Ricardo, João,
Ana, ...
3
30/05/2022
Terminologia
Atributos
Basicamente, é a estrutura de
dados que vai representar a
classe
Conjunto de propriedades do
objeto
Valores internos do objeto
Exemplo de atributos da classe
Seres Humanos: nome, idade,
altura, ...
Terminologia
Método
Conjunto de funcionalidades
da classe
Definem as habilidades dos
objetos
Exemplo de métodos da classe
Seres Humanos: correr, nadar, ...
4
30/05/2022
Acessando os atributos
Para acessar os atributos de um Exemplo
objeto utilizamos a seguinte
notação
objeto.atributo
Desse modo, podemos modificar o
seu valor ou usá-lo em expressões
Em Python não podemos proibir o Saída
acesso aos atributos de objetos.
Podemos até incluir novos
atributos (p.y)
Acessando os atributos
O acesso direto aos atributos de objetos não é
aconselhável
Algumas linguagens permitem restringir o acesso aos
atributos de um objeto
Neste caso, o atributo é chamado de privado
Python não possui uma construção sintática
equivalente
5
30/05/2022
Acessando os atributos
Felizmente, o interpretador
Python possui suporte parecido a Exemplo
variáveis privadas
Métodos e atributos cujo nome é
iniciado por dois sublinhados (__y)
são considerados privados e não
podem ser acessados diretamente
Saída Saída
Encapsulamento
Serve para controlar o acesso Exemplo
aos atributos de um objeto
Trata-se de uma forma
eficiente de proteger os dados
manipulados dentro da classe
Ao invés de modificar os
atributos diretamente, os
mesmo somente poderão ser
acessados pelos métodos Saída
definidos na classe
O parâmetro self é o objeto
sobre o qual o método opera
6
30/05/2022
Encapsulamento
Cuidado: Exemplo
Os métodos falham se o
atributo a ser acessado não
existir dentro da classe
Uma forma de evitar isso é
definir um construtor
Saída
Construtor
Construtor é um método especial que é chamado
assim que uma nova instância do objeto é criada
É responsável pela alocação de recursos necessários ao
funcionamento do objeto e da definição inicial dos
estados dos atributos
Por meio dele podemos garantir que o atributo sempre
existe (inicializador de atributo)
7
30/05/2022
Construtor
Forma geral do construtor em Exemplo
Python
def __init__(self)
Dentro dele podemos definir
e inicializar (com um valor
pré-definido ou passado por
parâmetro) todos os atributos
do objeto
O parâmetro self deve ser
sempre o primeiro e é o objeto Saída
sobre o qual o método opera
Construtor
Exemplo
Apesar do nome do construtor
iniciar com dois sublinhados, ele
não é considerado um método
“privado” pelo interpretador
Python
Outros métodos cujo nome é
iniciado por dois sublinhados
(__getY) são considerados privados
e não podem ser acessados
diretamente
Saída
8
30/05/2022
Imprimindo um objeto
Por definição, a impressão de
um objeto não é muito
informativa Exemplo
Basicamente, apenas
algumas informações
técnicas
Saída
Imprimindo um objeto
Podemos definir o método __str__ para converter o
objeto para texto
Assim, podemos definir o que será impresso sempre que o
objeto for impresso
O método deve retornar uma string
Forma geral
9
30/05/2022
Imprimindo um objeto
Exemplo
Saída
Comparando objetos
Comparar dois objetos não é uma tarefa tão simples
quanto possa parecer
Por definição o operador == testa se os dois argumentos
são o mesmo objeto
Nenhuma comparação entre os atributos dos objetos é
realizada
10
30/05/2022
Comparando objetos
Exemplo
Saída
Comparando objetos
No exemplo anterior
Temos 2 objetos diferentes (instâncias) com o mesmo
conteúdo
E 3 referências diferentes a esses objetos.
A operação de atribuição não cria uma cópia do objeto!
p1 p3 p2
X=1 X=1
Y=2 Y=2
52006696 52223560
11
30/05/2022
Comparando objetos
Para fazer a comparação de objetos, o mais indicado é
definir um método na classe para testar se dois objetos
possuem os mesmos valores de atributos
Exemplo
Saída
Cópia de objetos
Como vimos, a operação de atribuição não é indica
para criar uma cópia de um objeto
Precisamos garantir que temos dois objetos diferentes,
mas com o mesmo conteúdo
Uma forma de fazer isso é utilizando a função de cópia
que existe no módulo copy do Python
12
30/05/2022
Cópia de objetos
Exemplo
Saída
Cópia de objetos
A função copy.copy() permite duplicar qualquer
objeto
p1 e p2 não representam mais o mesmo ponto, são
objetos diferentes. Mas eles contem os mesmo dados
Infelizmente, o método copy() faz somente uma cópia
superficial do objeto
Esse método não é capaz de copiar objetos embutidos
dentro de outros objetos
13
30/05/2022
Cópia de objetos
Tentando copiar um objeto lista de dentro do objeto
Ponto: mesma lista em objetos diferentes!!
Exemplo
Saída
Cópia de objetos
Nesse caso, precisamos de uma cópia profunda dos
dados
Precisamos copiar todos os níveis de um objeto
Uma forma de fazer isso é utilizando a função de
deepcopy(), também do módulo copy do Python
Esse método copia não somente o objeto, mas também
todo e qualquer objeto embutido neste objeto
14
30/05/2022
Cópia de objetos
Tentando copiar um objeto lista de dentro do objeto
Ponto: lista diferentes!!
Exemplo
Saída
Sobrecarga de operadores
Nada mais é do que a possibilidade definir o
comportamento de alguns operadores básicos da
linguagem para novos tipos de dados
Exemplo: ==, >, <, +, -, *, etc.
É apenas uma conveniência. Com a sobrecarga,
podemos escrever
p1 + p2 ao invés de p1.soma(p2)
p1 == p2 ao invés de p1.igual(p2)
15
30/05/2022
Sobrecarga de operadores
Para tanto, a linguagem Python disponibiliza vários
métodos que podem ser implementados e que
correspondem a certos operadores. Exemplo:
Operador Método Exemplo
+ __add__ A+B
- __sub__ A–B
* __mul__ A*B
/ __div__ A/B
== __eq__ A == B
!= __ne__ A != B
> __gt__ A>B
< __lt__ A<B
Sobrecarga de operadores
Exemplo
Saída
16
30/05/2022
Material Complementar
Vídeo Aulas
Aula 38 - Programação Orientada a Objetos (POO)
https://youtu.be/jm3jDYIOAxs
Aula 39 - POO: Acesso aos atributos e métodos
https://youtu.be/i6tgjRB3mtA
Aula 40 - POO: Construtor e Destrutor
https://youtu.be/VBQRmafpQBs
Aula 41 - POO: Imprimindo um objeto
https://youtu.be/PRriYps2Pcw
Material Complementar
Vídeo Aulas
Aula 42 - POO: Comparando objetos
https://youtu.be/_5MYPk_6EtQ
Aula 43 - POO: Sobrecarga de operadores
https://youtu.be/c83D0BUsgiw
Aula 44 - POO: Cópia de objetos
https://youtu.be/69jsXNCrGjI
Aula 45 - POO: Herança
https://youtu.be/iEFQ_2_nTi0
Aula 46 - POO: Iterator
https://youtu.be/5wVWM5ReBrs
17