Prévia do material em texto
Programação Orientada a Objetos
2023
1
Polimorfismo
O polimorfismo em Java é um dos princípios fundamentais da programação orientada a objetos (POO) e refere-se à capacidade de um objeto se comportar de várias maneiras diferentes, dependendo de seu tipo ou da classe à qual pertence.
O polimorfismo permite tratar objetos de classes diferentes de uma maneira uniforme, desde que essas classes compartilhem uma hierarquia de herança comum ou implementem uma mesma interface.
Polimorfismo - Funcionamento
Referências Polimórficas:
O polimorfismo em Java geralmente começa com a criação de uma hierarquia de classes, onde uma classe base (superclasse) é estendida por uma ou mais classes derivadas (subclasses).
Sobrescrita de Métodos
O polimorfismo é frequentemente aplicado a métodos. Quando uma classe derivada (subclasse) redefine (sobrescreve) um método da superclasse, a versão da subclasse é chamada quando um objeto dessa subclasse é referenciado por uma referência da superclasse
Polimorfismo - Funcionamento
Hierarquia de Classes:
Para usar o polimorfismo, você cria referências de uma superclasse e atribui objetos de subclasses a essas referências. Isso permite que você trate objetos de subclasses como se fossem objetos da superclasse. É importante entender que, durante a execução do programa, o método chamado será o método da subclasse, se houver uma sobrescrita desse método.
Polimorfismo - Funcionamento
Vantagens
Redução de acoplamento: O polimorfismo reduz a dependência de classes específicas, o que torna o código mais flexível e menos acoplado.
Reutilização de código: O código pode ser reutilizado facilmente, já que objetos de diferentes classes podem ser tratados de maneira uniforme.
Extensibilidade: Novas subclasses podem ser adicionadas facilmente à hierarquia existente, sem afetar o código existente que usa polimorfismo.
Interface
Não é interface gráfica do usuário (GUI). É a palavra-reservada Java interface;
As interfaces se livram do losango mortal (herança múltipla) tornando todos os métodos abstratos (sem corpo);
Portanto, a subclasse É OBRIGADA a implementar os métodos da interface (dar corpo para eles);
Uma classe pode implementar várias interfaces;
Quando bem utilizada, aumenta a flexibilidade do projeto.
Interface
Análise inicial
public class Canino {
...
}
public class Cachorro extends Canino, Animal, Pet {
...
}
Teríamos erro neste projeto? Justifique.
R: Se fosse programado em Java, sim, pois uma classe não pode herdar de mais de uma classe.
public class Animal {
...
}
public class Pet {
...
}
Interface
Criando uma interface - Exemplo 1
public interface Pet {
...
}
public interface Pet {
public abstract void serAmigavel( );
public abstract void brincar( );
}
Todos os métodos devem ser abstratos, portanto, DEVEM terminar com ponto e vírgula. Eles não têm corpo! (possuem somente a assinatura).
Interface
Usando a interface criada - Exemplo 1
public class Cachorro extends Canino implements Pet {
// erros acontecem, porque os métodos
// PRECISAM ser implementados!!!
}
Herança
Interface
Interface
Usando a interface criada (continuação...) - Exemplo 1
public class Cachorro extends Canino implements Pet {
// atributos da classe Cachorro
// métodos da classe Cachorro
@Override
public void serAmigavel( ) {
// implementação obrigatória...
}
@Override
public void brincar( ) {
// implementação obrigatória...
}
}
Interface
Implementando várias interfaces - Exemplo 1
public class Cachorro extends Canino
implements Pet, Farejador, Guia {
...
}
Interface
Questão 1:
Crie uma interface chamada Veiculo com três métodos abstratos: acelerar(), frear() e obterVelocidadeMaxima().
Em seguida, crie três classes que implementam a interface Veiculo: Carro, Moto e Bicicleta.
Cada classe deve fornecer uma implementação dos métodos de acordo com o tipo de veículo e sua funcionalidade. Crie um programa principal que permita ao usuário escolher um veículo, acelerar, frear e exibir a velocidade máxima. Use polimorfismo para realizar essas ações.
Interface
Questão 2:
Crie uma interface chamada ContaBancaria com métodos abstratos para depositar(), sacar() e obterSaldo().
Em seguida, crie duas classes que implementam a interface ContaBancaria: ContaCorrente e ContaPoupanca.
Implemente os métodos de acordo com as regras de cada tipo de conta.
Crie um programa principal que permita ao usuário escolher o tipo de conta, realizar depósitos e saques e exibir o saldo atual. Use polimorfismo para realizar essas operações.
image1.png