Princípios de OOP: Abstração
Abstração
Chegamos ao último, porém muito importante, princípio da POO: Abstração. A palavra "abstração" soa bastante abstrata e, resumidamente, este princípio nos diz que devemos depender da abstração em vez de uma implementação específica. No entanto, isso pode parecer complexo neste momento. Vamos começar analisando a definição:
Por exemplo, temos uma classe chamada Person,, e várias classes diferentes são derivadas dela. Person possui diversos campos e métodos que são comuns a todas as classes. No entanto, quando temos uma classe chamada BasketballPlayer,, a característica height torna-se crucial, enquanto para uma classe como Driver, height é irrelevante e não importante. É aí que a abstração entra em cena. Herdando de uma abstração, podemos tornar o parâmetro height opcional, assim não precisamos utilizá-lo onde não for necessário.
Isso pode parecer complexo, então vamos passar para um exemplo:
Car.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
A classe Car não representa algo específico. Não existe apenas um Car; existem sedans, trucks, tractors. Portanto, dependemos da abstração chamada Car. Para simplificar ainda mais:
Car é um modelo com base no qual criamos classes de carros específicas.
Atenção à sintaxe:
public abstract class className{ }.
Esta é a sintaxe para declarar uma classe abstrata. Além disso, observe a sintaxe para declarar um método abstrato:
public abstract returnValue methodName();
Um método abstrato não possui corpo; esta é sua principal característica. Subclasses de uma classe abstrata irão sobrescrever este método abstrato para definir sua própria implementação, utilizando polimorfismo.
Vamos analisar mais de perto o que é uma classe abstrata:
Observe que não podemos criar um objeto de uma classe abstrata; isso resultará em um erro:
Classes abstratas nos libertam de lidar apenas com "objetos"; elas nos fornecem um estado básico e comportamento. Tomando o exemplo de carros, cada carro deve ter um modelo, ano de fabricação, velocidade máxima e cor. Eles também devem ser capazes de mover e parar. Isso é tudo; a partir daí, você projetará suas classes específicas com base neste esboço abstrato.
Regras para Criar uma Classe Abstrata
- Uma classe abstrata é uma classe que contém pelo menos um método abstrato. Você pode criar uma classe abstrata sem métodos abstratos, mas então ela não teria utilidade. Não é possível instanciar objetos de uma classe abstrata;
- Métodos abstratos só podem existir dentro de uma classe abstrata; não é possível criar métodos abstratos fora de uma classe abstrata;
- Métodos dentro de uma classe abstrata podem ser métodos abstratos ou métodos com implementação;
- Uma classe que herda de uma classe abstrata deve sobrescrever todos os métodos abstratos;
- É possível herdar de no máximo uma classe (abstrata ou não abstrata);
- Uma classe abstrata deve representar as propriedades e comportamentos comuns de suas classes filhas. Discutiremos isso em mais detalhes quando estudarmos os princípios SOLID.
Vamos considerar um exemplo para entender como as subclasses devem sobrescrever métodos abstratos ao herdar de uma classe abstrata, usando o exemplo da classe filha Truck:
Aqui está o código do screenshot, reescrito para melhor legibilidade e clareza:
Car.java
Truck.java
Main.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Vamos analisar com mais detalhes o que foi apresentado acima:
-
Primeiro slide: Estamos criando uma subclasse
Truckque irá herdar da classe abstrataCar. Podemos ver que a IDE solicita a implementação dos métodos obrigatórios; -
Segundo slide: Estamos sobrescrevendo os métodos necessários. Por exemplo, vamos indicar que o
Truckcomeçou a se mover e depois parou; -
Terceiro slide: Criamos um objeto no método
main. Observe a sintaxe utilizada:Car name = new Truck();. Iniciamos a criação do objeto por meio da abstração e finalizamos com uma implementação específica. Isso é chamado de composição. Em seguida, atribuímos valores aos campos conforme necessário e chamamos os métodos sobrescritos.
Voilà! Se você entendeu tudo, aprendeu como utilizar uma classe abstrata!
Resumo
Abstração é provavelmente o princípio mais desafiador da POO para compreender, e é bem provável que você ainda não tenha entendido tudo neste momento. Mas não pense que está sozinho nisso. Abstração é um conceito que, inicialmente, se mostra difícil para a maioria dos desenvolvedores. Com o tempo, você passará a entender melhor como trabalhar de forma eficaz com abstração e classes abstratas. Abstração é um princípio fundamental porque permite tornar nossos programas extensíveis e altamente flexíveis.
1. O que é abstração na Programação Orientada a Objetos?
2. Quais das seguintes afirmações são verdadeiras sobre abstração?
3. Qual é o propósito de uma classe abstrata em Java?
4. Como a abstração contribui para a manutenibilidade do código?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain the difference between abstraction and encapsulation?
Can you give more real-world examples of abstraction in Java?
How do interfaces relate to abstraction in OOP?
Awesome!
Completion rate improved to 4.76
Princípios de OOP: Abstração
Deslize para mostrar o menu
Abstração
Chegamos ao último, porém muito importante, princípio da POO: Abstração. A palavra "abstração" soa bastante abstrata e, resumidamente, este princípio nos diz que devemos depender da abstração em vez de uma implementação específica. No entanto, isso pode parecer complexo neste momento. Vamos começar analisando a definição:
Por exemplo, temos uma classe chamada Person,, e várias classes diferentes são derivadas dela. Person possui diversos campos e métodos que são comuns a todas as classes. No entanto, quando temos uma classe chamada BasketballPlayer,, a característica height torna-se crucial, enquanto para uma classe como Driver, height é irrelevante e não importante. É aí que a abstração entra em cena. Herdando de uma abstração, podemos tornar o parâmetro height opcional, assim não precisamos utilizá-lo onde não for necessário.
Isso pode parecer complexo, então vamos passar para um exemplo:
Car.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
A classe Car não representa algo específico. Não existe apenas um Car; existem sedans, trucks, tractors. Portanto, dependemos da abstração chamada Car. Para simplificar ainda mais:
Car é um modelo com base no qual criamos classes de carros específicas.
Atenção à sintaxe:
public abstract class className{ }.
Esta é a sintaxe para declarar uma classe abstrata. Além disso, observe a sintaxe para declarar um método abstrato:
public abstract returnValue methodName();
Um método abstrato não possui corpo; esta é sua principal característica. Subclasses de uma classe abstrata irão sobrescrever este método abstrato para definir sua própria implementação, utilizando polimorfismo.
Vamos analisar mais de perto o que é uma classe abstrata:
Observe que não podemos criar um objeto de uma classe abstrata; isso resultará em um erro:
Classes abstratas nos libertam de lidar apenas com "objetos"; elas nos fornecem um estado básico e comportamento. Tomando o exemplo de carros, cada carro deve ter um modelo, ano de fabricação, velocidade máxima e cor. Eles também devem ser capazes de mover e parar. Isso é tudo; a partir daí, você projetará suas classes específicas com base neste esboço abstrato.
Regras para Criar uma Classe Abstrata
- Uma classe abstrata é uma classe que contém pelo menos um método abstrato. Você pode criar uma classe abstrata sem métodos abstratos, mas então ela não teria utilidade. Não é possível instanciar objetos de uma classe abstrata;
- Métodos abstratos só podem existir dentro de uma classe abstrata; não é possível criar métodos abstratos fora de uma classe abstrata;
- Métodos dentro de uma classe abstrata podem ser métodos abstratos ou métodos com implementação;
- Uma classe que herda de uma classe abstrata deve sobrescrever todos os métodos abstratos;
- É possível herdar de no máximo uma classe (abstrata ou não abstrata);
- Uma classe abstrata deve representar as propriedades e comportamentos comuns de suas classes filhas. Discutiremos isso em mais detalhes quando estudarmos os princípios SOLID.
Vamos considerar um exemplo para entender como as subclasses devem sobrescrever métodos abstratos ao herdar de uma classe abstrata, usando o exemplo da classe filha Truck:
Aqui está o código do screenshot, reescrito para melhor legibilidade e clareza:
Car.java
Truck.java
Main.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Vamos analisar com mais detalhes o que foi apresentado acima:
-
Primeiro slide: Estamos criando uma subclasse
Truckque irá herdar da classe abstrataCar. Podemos ver que a IDE solicita a implementação dos métodos obrigatórios; -
Segundo slide: Estamos sobrescrevendo os métodos necessários. Por exemplo, vamos indicar que o
Truckcomeçou a se mover e depois parou; -
Terceiro slide: Criamos um objeto no método
main. Observe a sintaxe utilizada:Car name = new Truck();. Iniciamos a criação do objeto por meio da abstração e finalizamos com uma implementação específica. Isso é chamado de composição. Em seguida, atribuímos valores aos campos conforme necessário e chamamos os métodos sobrescritos.
Voilà! Se você entendeu tudo, aprendeu como utilizar uma classe abstrata!
Resumo
Abstração é provavelmente o princípio mais desafiador da POO para compreender, e é bem provável que você ainda não tenha entendido tudo neste momento. Mas não pense que está sozinho nisso. Abstração é um conceito que, inicialmente, se mostra difícil para a maioria dos desenvolvedores. Com o tempo, você passará a entender melhor como trabalhar de forma eficaz com abstração e classes abstratas. Abstração é um princípio fundamental porque permite tornar nossos programas extensíveis e altamente flexíveis.
1. O que é abstração na Programação Orientada a Objetos?
2. Quais das seguintes afirmações são verdadeiras sobre abstração?
3. Qual é o propósito de uma classe abstrata em Java?
4. Como a abstração contribui para a manutenibilidade do código?
Obrigado pelo seu feedback!