Tema11 Abstratas Interfaces
Tema11 Abstratas Interfaces
Tema11 Abstratas Interfaces
Herança
Sobrecarga de métodos Sobrescrita de métodos
Polimorfismo - Resumo
o Polimorfismo é a habilidade que possuem os objetos para reagir de modo diferente
recebendo os mesmos mensagens
o Polimorfismo refere-se a possibilidade de definir múltiplas classes com
funcionalidade diferente pero com métodos e propriedades denominados de forma
idêntica
o O polimorfismo de subclasse permite a manipulação de instâncias de classes que
herdam da mesma classe ancestral de forma unificada (upcasting)
Animal
- nome: String
+ Animal()
+ animalSound()
o Três métodos
Circle Rectangle
o Classes: Circle e Rectangle - center: Ponto2D - leftBot: Ponto2D
- rightTop: Ponto2D
o Implementam a interface - radius: double
+ Circle() + Rectangle()
+ toString() + toString()
o Usam a classe Ponto2D (agregação) + center() + center(int)
+ area() + area(int)
+ perimeter() + perimeter()
+ edgeX(int)
o Note o uso de Polimorfismo na classe + edgeY(int)
DemoShape2D Ponto2D
- x, y: double
+ Ponto2D()
+ toString()
+ getX(int)
+ getY(int)
Interfaces em Python
o Interfaces são classes abstratas, geralmente sem atributos
o Interfaces definem métodos a serem implementados pelas classe
descendentes
o Python não possui uma sintaxe exclusiva ou recursos específicos que
permitam criar interfaces
o Entretanto, podemos criar classes que se comportem como interfaces
o Mecanismos para criar interfaces em Python
o Utilizar o módulo ABC (Abstract Basic Class), ver exemplo anterior
o Criar uma classe que dispare uma exceção se o método não for
sobrescrito nas classes derivadas
o Exemplo: InterfaceByException
Classe Abstratas vs Interfaces https://history-computer.com/abstract-class-vs-interface/
Classe Abstratas vs Interfaces https://history-computer.com/abstract-class-vs-interface/
Herança Múltipla
o Herança, uma característica das linguagens orientadas a objetos
o Herança simples
o Herança múltipla
o Uma subclasse pode herdar de duas ou mais superclasses
o Uma classe pode herdar características e comportamentos de mais de
uma classe ancestral
Herança Múltipla
o A herança múltipla é vista com reservas por múltiplas linguagens
o O uso de herança múltipla impõe a necessidade de resolver alguns problemas:
o Ordem na chamada dos construtores das classes ancestrais
o Resolução da referencia a classe
ancestral ao acessar métodos de
classes ancestrais (super)
o Ambiguidade associada ao
problema do diamante
▪ Associado a atributos
▪ Associado a métodos: duas
superclasses tem um método
idêntico com implementações
diferentes, qual implementação
deve ser utilizada pela subclase
Herança Múltipla
o O problema do diamante é resolvido de formas diferentes em cada implementação
de POO, entre as alternativas temos:
o Forçar a subclasse a escolher uma das implementações
o Forçar a subclasse a reimplementar o método ambíguo
o Estabelecer um critério de importância ou especificidade que permita resolver a
ambiguidade (Python)
o Incluir novos construtores com restrições implícitas como as interfaces (Java)
Herança Múltipla - Java
o Ao fazermos herança, uma classe pode herdar:
o Estender uma única classe (concreta ou abstrata)
o Implementar uma ou múltiplas interfaces
o Estender uma classe e implementar múltiplas interfaces
o De métodos
o Se múltiplas interfaces declaram o mesmo método (nome, tipo de
retorno e parâmetros), elas podem ser utilizadas em uma herança
múltipla
o Apenas uma implementação do método poderá ser realizada nas
classes derivadas
Herança Múltipla em Python
o O mecanismo de herança múltipla permite criar uma classe herdando os
atributos e métodos de múltiplas classes
o Formalmente em Python não temos interfaces, então a herança múltipla
envolve classes comuns
o Não existe um limite para o número de classes que podem ser combinadas
para criar uma nova classe
o Exemplo: CircleScalavel herdando das classes Shape2D e Scalavel
o Resolução de conflitos em Python
o Atributos: os conflitos em atributos devem ser evitados
o Métodos: a resolução de conflitos envolve o mecanismo MRO (Method
Resolution Order)
o Detalhes: https://www.geeksforgeeks.org/multiple-inheritance-in-python/