DEV Community

Cover image for "Pesquei, Java!": Classe e Objeto em Foco: Da Abstração à Realidade
Bárbara Salla
Bárbara Salla

Posted on

"Pesquei, Java!": Classe e Objeto em Foco: Da Abstração à Realidade

Na Programação Orientada a Objetos (POO), buscamos representar elementos do mundo real dentro dos nossos programas. Para isso, abstraímos do objeto suas características (o que eles têm) e seus comportamentos (o que eles fazem), traduzindo essas ideias em classes e objetos. Dessa maneira, podemos encapsular estados e comportamentos de um tipo específico de objeto, facilitando sua manutenção e reutilização no código.

Por exemplo, imagine que queremos representar uma caneta em nosso programa. Quais seriam as suas características? e quais seriam seus comportamentos? Vamos, então, projetar a caneta da seguinte forma:

Image description

Para traduzir essa abstração em código, criamos uma classe que funciona como o "molde" ou "projeto" que estabelece as características e comportamentos de uma caneta. A classe define o que todo objeto desse tipo terá (como atributos) e poderá fazer (como métodos). Assim, a classe serve como uma representação abstrata, enquanto o objeto é uma instância concreta/real dessa classe.

Quando criamos um objeto a partir de uma classe, ele se torna uma instância única, com valores específicos atribuídos às suas variáveis de instância. Assim, de acordo com Paul Deitel e Harvey Deitel (2017, p.56): “cada nova classe que você desenvolve torna-se um novo tipo que pode ser utilizado para declarar variáveis e delinear objetos”. Ou seja, diferentes objetos de um mesmo tipo (criados a partir da mesma classe), como no caso de uma “caneta”, podem ser criados e poderão compartilhar os mesmos comportamentos, mas cada um terá valores distintos para seus atributos, tornando-os únicos. Por exemplo, ao criar a Caneta A:

Image description

Com essas definições em mente, ao projetar uma classe, deve-se refletir sobre o que o objeto sabe sobre si e o que ele faz (BATES, Bert; SIERRA, Kathy, 2005). O que ele conhece sobre si mesmo chamamos de variáveis de instância (estado) e o que faz são os seus métodos (comportamento). A classe sintetiza a estrutura e o comportamento que o objeto deve possuir. Ao criar um objeto a partir da classe, ele será construído com as mesmas características gerais descritas na classe, representando uma instância concreta do conceito abstrato. No entanto, cada objeto terá seus próprios valores para os atributos, refletindo suas características únicas.

Classe ou objeto: Quem nasce primeiro?

Ao compreender a classe como um “molde” abstrato para a construção do objeto, ela torna-se, de fato, a fundação, enquanto o objeto é a concretização desse modelo. Em outras palavras, a classe nasce primeiro e se estabelece como um tipo de objeto. Não é possível criar um objeto sem que exista uma classe, pois a classe fornece a estrutura necessária para sua criação. Assim, a classe representa o ponto de partida, enquanto o objeto é a materialização desse projeto em uma instância real e utilizável dentro do programa.

Agora, podemos aplicar o conceito de classe e objeto diretamente no código, com um exemplo prático de como modelar um carro em programação orientada a objetos.

Primeiramente, devemos nos perguntar: o que sabemos sobre carros? O que todo carro possui? Ele tem portas, é movido a álcool, gasolina ou outros combustíveis, pode ser automático ou manual, possui um modelo, cor e capacidade de passageiros. Essas características representam o estado do carro, ou seja, os atributos que o definem.

E o que ele pode fazer? Ele pode acelerar, frear, ligar, desligar, buzinar, abrir as portas ou acionar o farol. Essas ações representam o comportamento do carro, ou seja, os métodos que descrevem o que ele é capaz de executar.

Abaixo, temos a implementação de um Carro como classe (Car), combinando seus atributos e os seus métodos. Seguindo as boas práticas, colocamos todo o código em inglês:

public class Car {

    private String model;
    private String color;
    private String fuelType;
    private int passengerCapacity;

    public Car(String model, String color, String fuelType, int passengerCapacity) {
        this.model = model;
        this.color = color;
        this.fuelType = fuelType;
        this.passengerCapacity = passengerCapacity;
    }

    public void accelerate() {
        System.out.println("The car is accelerating.");
    }

    public void brake() {
        System.out.println("The car is braking.");
    }

    public void start() {
        System.out.println("The car is started.");
    }

    public void stop() {
        System.out.println("The car is stopped.");
    }

    public void honk() {
        System.out.println("The car is honking.");
    }

    public void displayDetails() {
        System.out.println("Model: " + model);
        System.out.println("Color: " + color);
        System.out.println("Fuel Type: " + fuelType);
        System.out.println("Passenger Capacity: " + passengerCapacity);
    }
}

Enter fullscreen mode Exit fullscreen mode

Agora, vamos criar um objeto Car a partir da classe Car para utilizá-lo no nosso código, e assim demonstrar a função da classe como um modelo para construção do objeto e o objeto como a versão real criada a partir desse modelo.

public class Main {
    public static void main(String[] args) {

        Car carA = new Car("Fusca", "Blue", "Gasoline", 4);

        carA.displayDetails();

        carA.start();
        carA.accelerate();
        carA.honk();
        carA.brake();
        carA.stop();
    }
}
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, demonstramos que ao projetarmos uma classe, estamos, na verdade, criando um modelo abstrato que pode ser concretizado em múltiplas instâncias, cada uma com dados próprios. Essa é a essência da Programação Orientada a Objetos: transformar ideias abstratas em representações concretas para aplicação no código.

Agora que você sabe como funcionam as classes e o objetos, quais outros objetos você conseguiria representar em código? E para os que já possuem vasta experiência: qual foi a classe mais criativa ou desafiadora que você já criou em um projeto?

Fontes:

DEITEL, Paul; DEITEL, Harvey. Java: como programar. São Paulo: Pearson
Education do Brasil, 2017.

SIERRA, Kathy; BATES, Bert. Use a Cabeça! Java. 2ªEd. Rio de Janeiro: Editora Alta Books, 2005.

Top comments (0)