Buscar

poo-aula02-parte-a

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Composição de Programas em Python
Programação Orientada à Objetos – Aula 02 (A)
Prof. Douglas G. Macharet
doug@dcc.ufmg.br
Introdução
Composição de Programas em Python – POO – Aula 02 (A) 2
• Como criar uma relação entre diferentes tipos (classes)?
• Composição vs. Herança
• Composição
• Novo tipo pela junção de outras classes de menor complexidade
• Utilizar apenas parte do comportamento exposto
• Princípio da Herança
• Reutilizar características de uma classe na definição de outra classe
• Determinação de uma hierarquia de classes
Composição
• Conceito lógico de agrupamento
• Modo particular de implementação
• Não existe palavra-chave ou recurso
• Princípio do encapsulamento
• Acesso apenas à parte pública das classes
• Menor interdependência entre classes
Composição de Programas em Python – POO – Aula 02 (A) 3
Composição
Composição de Programas em Python – POO – Aula 02 (A) 4
class Autor:
def __init__(self, nome, cpf):
self.nome = nome
self.cpf = cpf
class Livro:
def __init__(self, titulo, ano, autor):
self.titulo = titulo
self.ano = ano
self.autor = autor
def __str__(self):
return "Título: " + self.titulo + " Autor: " + self.autor.nome
Composição
Composição de Programas em Python – POO – Aula 02 (A) 5
https://docs.python.org/3/reference/datamodel.html#object.__repr__
class Autor:
def __init__(self, nome, cpf):
self.nome = nome
self.cpf = cpf
self.colaboradores = []
def adicionar_colaborador(self, colaborador):
self.colaboradores.append(colaborador)
def __repr__(self):
return "Nome: %s CPF: %s" % (self.nome, self.cpf)
https://docs.python.org/3/reference/datamodel.html#object.__repr__
Herança
• Superclasses
• Devem guardar membros em comum
• Subclasses
• Acrescentam novos membros (especializam)
• Reutilização de código
• Compartilhar similaridades
• Preservar as diferenças
Composição de Programas em Python – POO – Aula 02 (A) 6
Herança
• Membros são herdados pelas classes dos níveis mais baixos
• Considerando o nível de acesso
• Subclasses podem herdar membros de:
• Uma única superclasse (Java)
• Herança simples
• Várias superclasses (C++, Python)
• Herança múltipla
• O relacionamento é informado na declaração da classe
Composição de Programas em Python – POO – Aula 02 (A) 7
class ClasseDerivada(ClasseBase1, ClasseBase2, …)
Herança Simples
Composição de Programas em Python – POO – Aula 02 (A) 8
class Personagem:
def mover(self):
print("Movendo...")
def interagir(self):
print("Interagindo...")
class Medico(Personagem):
def curar(self):
print("Curando...")
class Guerreiro(Personagem):
def atacar(self):
print("Atacando...")
Object
• Se uma classe não herda diretamente de 
outra classe, ela então herda de object1,2
• Essa herança é feita de forma implícita
• Superclasse de nível mais alto da linguagem
• Object
• Possui métodos e atributos padrão
Composição de Programas em Python – POO – Aula 02 (A) 9
class Robot(object):
def say_hi(self):
print("Hi!") 
Podem ser especializados nas
subclasses, como vimos na aula
passada com o __str__.
1Semelhante à Java, diferente de C++.
2Exceções devem herdar de BaseException ou uma classe derivada.
>>> o = object()
>>> dir(o)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__']
Object
Composição de Programas em Python – POO – Aula 02 (A) 10
object
bool
int
list
Robot
Pessoa
Circ
Aluno
Professor
AGrad
APos
Herança Simples
Composição de Programas em Python – POO – Aula 02 (A) 11
Atenção: Herança Multinível é diferente de Herança Múltipla!
class Pessoa():
pass
class Aluno(Pessoa):
pass
class AGrad(Aluno):
pass
Princípio da Substituição de Liskov (LSP)
Composição de Programas em Python – POO – Aula 02 (A) 12
• Contrato de uma classe
• Encapsulamento → Interface
• Coleção de atributos e métodos visíveis
• Membros privados não fazem parte do contrato
• Subcontratação
• Subclasse estende o contrato da superclasse 
• Contrato redefinido não pode violar o contrato da superclasse
Se S é um subtipo de T, objetos do tipo T podem ser substituídos por objetos 
do tipo S sem alterar nenhuma das propriedades desejadas do programa.
Duck Typing
Composição de Programas em Python – POO – Aula 02 (A) 13
• Linguagens OO
• Geralmente verificam o contrato a partir da herança (estaticamente tipadas)
• Interface única → Múltiplos comportamentos (polimorfismo)
• Python
• Não é necessário herdar uma classe para definir um comportamento padrão
• Qualquer objeto que atenda à um determinado contrato poderá ser usado
"If it walks like a duck and it quacks 
like a duck, then it must be a duck!"
Duck Typing
Composição de Programas em Python – POO – Aula 02 (A) 14
class Poligono:
def __init__(self, lados):
self.lados = lados
class Triangulo(Poligono):
def __init__(self, base, altura):
self.lados = 3
self.base = base
self.altura = altura
def area(self):
return (self.base*self.altura)/2
class Quadrado(Poligono):
def __init__(self, lado):
self.lados = 4
self.lado = lado
def area(self):
return self.lado*self.lado
def maior_area(poligonos):
area = 0
for poligono in poligonos:
print(poligono.area())
if poligono.area() > area:
area = poligono.area()
return area
Duck Typing
Composição de Programas em Python – POO – Aula 02 (A) 15
• Reúso de código
• Comportamentos gerais implementados uma única vez
• Manutenção → Alterações em poucas partes do código
• Contrato explícito
• Maior legibilidade do código existente
• Todo o contrato deve ser cumprido, não apenas partes
Por que eu deveria utilizar herança então?
Considerações Finais
Composição de Programas em Python – POO – Aula 02 (A) 16
• Composição
• Relação do tipo “tem um” (has-a)
• Objeto possui objetos (≥ 1) de outras classes
• Livro tem um Autor
• Herança
• Relação do tipo “é um” (is-a)
• Subclasse tratado como a Superclasse (LSP)
• Triângulo é um Polígono

Continue navegando