Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Princípios de OOP: Abstração | Poo
Java POO

bookPrincí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

Car.java

copy
123456789
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 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

  1. 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;
  2. Métodos abstratos só podem existir dentro de uma classe abstrata; não é possível criar métodos abstratos fora de uma classe abstrata;
  3. Métodos dentro de uma classe abstrata podem ser métodos abstratos ou métodos com implementação;
  4. Uma classe que herda de uma classe abstrata deve sobrescrever todos os métodos abstratos;
  5. É possível herdar de no máximo uma classe (abstrata ou não abstrata);
  6. 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

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
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 foi apresentado acima:

  • Primeiro slide: Estamos criando uma subclasse Truck que irá herdar da classe abstrata Car. 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 Truck começ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?

question mark

O que é abstração na Programação Orientada a Objetos?

Select the correct answer

question mark

Quais das seguintes afirmações são verdadeiras sobre abstração?

Select the correct answer

question mark

Qual é o propósito de uma classe abstrata em Java?

Select the correct answer

question mark

Como a abstração contribui para a manutenibilidade do código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

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

bookPrincí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

Car.java

copy
123456789
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 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

  1. 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;
  2. Métodos abstratos só podem existir dentro de uma classe abstrata; não é possível criar métodos abstratos fora de uma classe abstrata;
  3. Métodos dentro de uma classe abstrata podem ser métodos abstratos ou métodos com implementação;
  4. Uma classe que herda de uma classe abstrata deve sobrescrever todos os métodos abstratos;
  5. É possível herdar de no máximo uma classe (abstrata ou não abstrata);
  6. 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

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
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 foi apresentado acima:

  • Primeiro slide: Estamos criando uma subclasse Truck que irá herdar da classe abstrata Car. 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 Truck começ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?

question mark

O que é abstração na Programação Orientada a Objetos?

Select the correct answer

question mark

Quais das seguintes afirmações são verdadeiras sobre abstração?

Select the correct answer

question mark

Qual é o propósito de uma classe abstrata em Java?

Select the correct answer

question mark

Como a abstração contribui para a manutenibilidade do código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7
some-alt