Skip to content

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
  • 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
// 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

  1. A abstração é o processo de esconder os detalhes complexos de implementação e mostrar apenas as funcionalidades essenciais.
  2. Em Java, é possível criar instâncias diretamente de uma classe abstrata usando a palavra-chave new.
  3. Uma classe abstrata pode ter métodos concretos (com implementação) e métodos abstratos (sem implementação).
  4. Métodos abstratos não podem ter corpo, e devem ser declarados com a palavra-chave abstract.
  5. Se uma classe contém pelo menos um método abstrato, a classe inteira deve ser declarada como abstrata.
  6. Classes abstratas em Java são usadas para fornecer uma implementação padrão que outras classes podem herdar e modificar.
  7. Uma classe abstrata pode implementar interfaces.
  8. Métodos abstratos de uma classe pai abstrata devem ser implementados em todas as subclasses, independentemente do tipo da subclasse.
  9. Classes abstratas não podem ter construtores.
  10. Uma classe abstrata pode estender outra classe abstrata, herdando seus métodos abstratos e concretos.
  11. Um método abstrato em uma classe abstrata pode ser declarado como final.
  12. 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.
  13. Uma classe abstrata não pode ter atributos, apenas métodos.
  14. O objetivo da abstração é facilitar a reutilização do código, fornecendo um esqueleto de comportamento que pode ser especializado nas subclasses.
  15. Uma classe pode ser simultaneamente tanto abstrata quanto final.

Gabarito

  1. Verdadeiro: abstração oculta os detalhes complexos de implementação, expondo apenas o que é necessário para uso.
  2. Falso: não é possível criar instâncias diretamente de uma classe abstrata; elas precisam ser instanciadas por meio de uma subclasse concreta.
  3. Verdadeiro: uma classe abstrata pode conter tanto métodos abstratos quanto métodos concretos.
  4. Verdadeiro: métodos abstratos não possuem corpo e devem ser marcados com abstract na declaração.
  5. Verdadeiro: se uma classe possui ao menos um método abstrato, ela deve ser declarada como abstrata.
  6. Verdadeiro: classes abstratas podem fornecer implementação parcial que pode ser herdada e modificada por subclasses.
  7. Verdadeiro: uma classe abstrata pode implementar interfaces e fornecer a implementação dos métodos da interface.
  8. 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.
  9. Falso: classes abstratas podem ter construtores, que são usados para inicializar atributos quando subclasses concretas são instanciadas.
  10. Verdadeiro: uma classe abstrata pode estender outra classe abstrata, herdando métodos abstratos e concretos.
  11. Falso: métodos abstratos não podem ser final, pois a palavra-chave final impede que o método seja sobrescrito, o que vai contra o propósito de um método abstrato.
  12. Verdadeiro: se uma classe filha de uma classe abstrata não implementar todos os métodos abstratos, ela deve ser declarada como abstrata.
  13. Falso: classes abstratas podem ter atributos, assim como métodos concretos e abstratos.
  14. Verdadeiro: a abstração permite criar um esqueleto de comportamento, facilitando a especialização em subclasses e a reutilização do código.
  15. Falso: uma classe não pode ser ao mesmo tempo abstract e final, pois final impede a herança, enquanto abstract requer que a classe seja herdada para ser utilizada.