Conteúdo do Curso
Java OOP
Java OOP
Princípios da POO: 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 muitas classes diferentes são derivadas dela. Person
possui vários 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
public 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 sedãs, caminhões, tratores. Portanto, dependemos da abstração chamada Car
. Para simplificar ainda mais:
Car
é um modelo a partir do qual criamos classes de carros específicas.
Atenção à sintaxe:
Esta é a sintaxe para declarar uma classe abstrata. Além disso, observe a sintaxe para declarar um método abstrato:
Um método abstrato não possui corpo; esta é sua principal característica. Subclasses de uma classe abstrata irão sobrescrever esse 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. No exemplo dos 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 nesse modelo 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 será 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 derivadas. Discutiremos isso em mais detalhes ao 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 da captura de tela, reescrito para melhor legibilidade e clareza:
Car.java
Truck.java
Main.java
public 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 está escrito acima:
Primeiro slide: Criação de uma subclasse
Truck
que herda da classe abstrataCar
. O IDE indica a necessidade de implementar os métodos obrigatórios;Segundo slide: Sobrescrita dos métodos necessários. Por exemplo, será indicado que o
Truck
começou a se mover e depois parou;Terceiro slide: Criação de um objeto no método
main
. Atenção à sintaxe utilizada:Car name = new Truck();
. O objeto é criado por meio da abstração e finalizado com uma implementação específica. Este conceito é chamado de composição. Em seguida, os valores são atribuídos aos campos conforme necessário e os métodos sobrescritos são chamados.
Voilà! Se tudo ficou claro, o uso de uma classe abstrata foi aprendido.
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, é difícil para a maioria dos desenvolvedores entenderem. Com o tempo, você passará a compreender melhor como trabalhar de forma eficaz com abstração e classes abstratas. Abstração é um princípio crucial 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 alternativas a seguir 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!