Abstração¶
Introdução¶
- Abstração = consiste em ocultar os detalhes complexos de implementação e exibir apenas as funcionalidades essenciais
- um dos pilares da Programação Orientada a Objetos (POO), que
- em outras palavras, a abstração permite que se foque no "o que" um objeto faz, em vez de "como" ele faz
- facilita a construção de sistemas mais simples de entender, reutilizáveis e extensíveis
- a abstração ajuda a criar uma visão simplificada do mundo real, destacando apenas as características relevantes
- permite criar um modelo simplificado
- Permite a criação de interfaces e classes abstratas que definem um comportamento comum sem se preocupar com a implementação específica
- Ao usar a abstração, é possível generalizar comportamentos comuns e deixar os detalhes para as subclasses
Classes abstratas¶
- classe abstrata = classe que não pode ser instanciada diretamente e serve como um modelo para outras classe
- pode ter
- métodos concretos = com implementação
- métodos abstratos = sem implementação - necessariamente, são definidos pelas subclasses
- características
- são declaradas usando a palavra-chave
abstract - podem conter tanto métodos concretos quanto métodos abstratos
- não podem ser instanciadas, apenas estendidas por subclasses
- permitem definir um comportamento comum, mas deixam os detalhes específicos para as subclasses
- são declaradas usando a palavra-chave
- a abstração é crucial para simplificar o design do software, criar hierarquias de classes organizadas e reduzir a complexidade do código, deixando os detalhes específicos para quem precisa lidar com eles
public abstract class Veiculo {
// atributos comuns a todos os veículos
private String modelo;
private int ano;
// construtor
public Veiculo(String modelo, int ano) {
this.modelo = modelo;
this.ano = ano;
}
// método concreto - com implementação
public void exibirDetalhes() {
System.out.println("Modelo: " + modelo + ", Ano: " + ano);
}
// método abstrato - sem implementação
public abstract void acelerar();
}
-
método abstrato = método declarado sem corpo (sem implementação) dentro de uma classe abstrata
- as subclasses que estendem a classe abstrata são obrigadas a implementar todos os métodos abstratos
- isso garante que cada subclasse forneça sua própria versão específica
-
características dos métodos abstratos
- declarados com a palavra-chave
abstract - não possuem corpo - apenas a assinatura (declaração) do método
- devem ser implementados pelas subclasses que estendem a classe abstrata
- declarados com a palavra-chave
// subclasse que estende a classe abstrata Veiculo
public class Carro extends Veiculo {
// construtor da subclasse
public Carro(String modelo, int ano) {
super(modelo, ano);
}
// implementação do método abstrato
@Override
public void acelerar() {
System.out.println("O carro está acelerando!");
}
}
// subclasse que estende a classe abstrata Veiculo
public class Moto extends Veiculo {
// construtor da subclasse
public Moto(String modelo, int ano) {
super(modelo, ano);
}
// implementação do método abstrato
@Override
public void acelerar() {
System.out.println("A moto está acelerando!");
}
}
Exercícios¶
Questões¶
- A abstração é o processo de esconder os detalhes complexos de implementação e mostrar apenas as funcionalidades essenciais.
- Em Java, é possível criar instâncias diretamente de uma classe abstrata usando a palavra-chave
new. - Uma classe abstrata pode ter métodos concretos (com implementação) e métodos abstratos (sem implementação).
- Métodos abstratos não podem ter corpo, e devem ser declarados com a palavra-chave
abstract. - Se uma classe contém pelo menos um método abstrato, a classe inteira deve ser declarada como abstrata.
- Classes abstratas em Java são usadas para fornecer uma implementação padrão que outras classes podem herdar e modificar.
- Uma classe abstrata pode implementar interfaces.
- Métodos abstratos de uma classe pai abstrata devem ser implementados em todas as subclasses, independentemente do tipo da subclasse.
- Classes abstratas não podem ter construtores.
- Uma classe abstrata pode estender outra classe abstrata, herdando seus métodos abstratos e concretos.
- Um método abstrato em uma classe abstrata pode ser declarado como
final. - A classe que herda de uma classe abstrata deve implementar todos os métodos abstratos, caso contrário, ela também deve ser declarada como abstrata.
- Uma classe abstrata não pode ter atributos, apenas métodos.
- O objetivo da abstração é facilitar a reutilização do código, fornecendo um esqueleto de comportamento que pode ser especializado nas subclasses.
- Uma classe pode ser simultaneamente tanto abstrata quanto
final.
Gabarito¶
- Verdadeiro: abstração oculta os detalhes complexos de implementação, expondo apenas o que é necessário para uso.
- Falso: não é possível criar instâncias diretamente de uma classe abstrata; elas precisam ser instanciadas por meio de uma subclasse concreta.
- Verdadeiro: uma classe abstrata pode conter tanto métodos abstratos quanto métodos concretos.
- Verdadeiro: métodos abstratos não possuem corpo e devem ser marcados com
abstractna declaração. - Verdadeiro: se uma classe possui ao menos um método abstrato, ela deve ser declarada como abstrata.
- Verdadeiro: classes abstratas podem fornecer implementação parcial que pode ser herdada e modificada por subclasses.
- Verdadeiro: uma classe abstrata pode implementar interfaces e fornecer a implementação dos métodos da interface.
- Falso: métodos abstratos de uma classe abstrata devem ser implementados apenas por subclasses concretas; subclasses abstratas podem herdar métodos abstratos sem implementá-los.
- Falso: classes abstratas podem ter construtores, que são usados para inicializar atributos quando subclasses concretas são instanciadas.
- Verdadeiro: uma classe abstrata pode estender outra classe abstrata, herdando métodos abstratos e concretos.
- Falso: métodos abstratos não podem ser
final, pois a palavra-chavefinalimpede que o método seja sobrescrito, o que vai contra o propósito de um método abstrato. - Verdadeiro: se uma classe filha de uma classe abstrata não implementar todos os métodos abstratos, ela deve ser declarada como abstrata.
- Falso: classes abstratas podem ter atributos, assim como métodos concretos e abstratos.
- Verdadeiro: a abstração permite criar um esqueleto de comportamento, facilitando a especialização em subclasses e a reutilização do código.
- Falso: uma classe não pode ser ao mesmo tempo
abstractefinal, poisfinalimpede a herança, enquantoabstractrequer que a classe seja herdada para ser utilizada.