image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Sabrina Moreira
Sabrina Moreira20/06/2025 16:19
Compartilhe
WEX - End to End EngineeringRecomendados para vocêWEX - End to End Engineering

Fundamentos do Java: Orientação a objetos

  • #Java

Neste artigo, você vai entender não só o "como usar", mas principalmente o "por que usar" os conceitos fundamentais da programação orientada a objetos (OOP) em Java.

Vamos explicar com o mesmo exemplo de código, passo a passo, tudo sobre:

  • Classe e Objeto
  • Método
  • Método Estático
  • this: o que é e por que usar
  • Encapsulamento: o que significa segurança de verdade
  • record: dados imutáveis

Cenário: um sistema de vendas

Imagine um sistema que cadastra produtos com nome e preço. Vamos usar esse exemplo em tudo.

1. Classe e Objeto: o molde e a forma

O código

public class Produto {
  String nome;
  double preco;
}

O que é isso?

A classe é o molde.

O objeto é a forma real criada a partir desse molde.

Produto p1 = new Produto(); // Criando um produto na memória
p1.nome = "Caderno";
p1.preco = 19.90;

Por que isso é útil?

Imagine uma fábrica de produtos. A classe é o projeto no papel. O objeto é o produto pronto na sua mão.

Você pode criar quantos objetos quiser com uma única classe. Cada um guarda seus próprios dados.

2. Método: comportamento do objeto

public class Produto {
  String nome;
  double preco;

  void exibir() {
      System.out.println(nome + " custa R$" + preco);
  }
}

O que é?

Um método é uma ação que o objeto pode fazer.

Produto p1 = new Produto();
p1.nome = "Caderno";
p1.preco = 19.90;
p1.exibir(); // Caderno custa R$19.9

Por que usar?

Porque você centraliza a lógica em um só lugar. Não precisa repetir System.out.println(...) toda vez.

3. this: por que precisamos disso?

Imagine que você tem isso dentro da classe:

public void setNome(String nome) {
  this.nome = nome;
}

Mas por que usar this.nome?

O nome do parâmetro do método é o mesmo do atributo da classe.

Sem o this, o Java acha que você está atribuindo a variável a ela mesma.

Sem this:

public void setNome(String nome) {
  nome = nome; // erro lógico
}

Aqu,i na realidade, temos duas variáveis chamada nome, o nome que vem como parametro da função setNome, e o nome que existe dentro desse objeto, para indicar que queremos alterar a variável que está vindo como parametro, usamos somente nome. E para indicar que queremos alterar a variável dentro deste objeto, usamos this.nome.

Com this:

this.nome = nome; // Agora sim: salva o valor no atributo da classe

O que é this?

É uma referência ao próprio objeto.

Ou seja, ele diz: "estou falando do atributo que pertence a este objeto que estou usando agora".

4. Encapsulamento: por que "esconder" os atributos?

Vamos ver um código sem encapsulamento:

Produto p1 = new Produto();
p1.preco = -10.00; // Isso é um preço válido? Claro que não!

O problema:

Sem nenhuma regra, qualquer parte do sistema pode colocar um valor errado ou perigoso no produto. Isso é falta de segurança.

Agora com encapsulamento:

public class Produto {
  private String nome;
  private double preco;

  public void setPreco(double preco) {
      if (preco > 0) {
          this.preco = preco;
      }
  }

  public double getPreco() {
      return this.preco;
  }
}

O que mudou?

  • private: ninguém de fora pode alterar diretamente os dados.
  • setPreco: agora você controla o que entra no atributo.
  • getPreco: você permite leitura, mas não qualquer alteração.

Por que isso é mais seguro?

Porque você impõe regras de negócio. Você diz: “o preço só pode ser positivo”.

Ninguém mais no sistema consegue furar essa regra. Isso evita bugs e dados inválidos.

Sem encapsulamento:

  • Um programador desatento altera o valor diretamente.
  • Um ataque ou erro preenche valores absurdos.

Com encapsulamento:

  • Você tem controle total do que pode ou não acontecer com os dados.

5. Método Estático: se já temos métodos normais, pra que isso?

Vamos ver:

public class Produto {
  static void mostrarRegras() {
      System.out.println("O produto deve ter nome e preço maior que zero.");
  }
}

Uso:

Produto.mostrarRegras();

Diferença:

  • Método normal: precisa de um objeto (ex: p1.exibir()).
  • Método estático: pertence à classe, e não precisa de objeto.

Quando usar?

  • Regras gerais
  • Utilitários
  • Mensagens ou validações comuns

Pontos positivos:

  • Acesso direto e rápido
  • Não depende de criação de objeto

Pontos negativos:

  • Não pode acessar atributos normais da classe
  • Não pode usar this
  • Serve só para lógicas genéricas, sem estado do objeto

6. record: quando os dados são imutáveis por padrão

O que é?

Um record em Java é uma forma moderna e automática de criar classes imutáveis — ou seja, classes cujos dados não podem ser modificados após a criação.

Ele foi introduzido no Java 14 como preview e se tornou estável no Java 16+.

Exemplo:

java
CopiarEditar
public record Produto(String nome, double preco) {}

Uso:


Produto p1 = new Produto("Caneta", 2.50);

System.out.println(p1.nome());   // saída: Caneta
System.out.println(p1.preco());  // saída: 2.5
Você não precisa criar getters, nem toString(), nem equals() manualmente. O record já cria tudo isso para você automaticamente.

Por que usar?

  • Quando você precisa apenas armazenar dados (como configurações, respostas de API, etc.)
  • Quando não quer permitir alterações nesses dados depois da criação
  • Quando quer deixar o código mais limpo e conciso

Pontos positivos:

  • Imutável por padrão — os dados não podem ser modificados
  • Gera automaticamente:
  • Construtor
  • Getters (nome(), preco())
  • equals(), hashCode(), toString()
  • Código muito mais enxuto
  • Ótimo para modelos de leitura (como objetos de retorno)

Pontos negativos:

  • Não permite alteração de dados (não tem setters)
  • Não pode herdar de outras classes (mas pode implementar interfaces)
  • Não serve para lógica complexa, regras de negócio ou métodos que alteram atributos
  • Só funciona no Java 14+ com --enable-preview, e sem preview a partir do Java 16+

Curiosidade técnica:

Os campos de um record são implicitamente private final. Isso significa que:

  • São acessados apenas por leitura
  • Não podem ser modificados
  • E são parte do contrato de identidade do objeto (equals e hashCode consideram todos os campos)

Quando usar record?

Use quando:

  • Você está lidando com dados que não precisam ser alterados
  • Quer um objeto seguro e imutável
  • Precisa de um modelo rápido para transportar dados

Exemplos:

  • Modelos de retorno de API
  • Representação de configurações
  • Resultado de consultas

Resumo

  • Use this para garantir que você está alterando o dado certo do objeto.
  • Use encapsulamento para proteger regras de negócio e manter dados válidos.
  • Use métodos estáticos para utilidades gerais, que não dependem de objetos.
  • Use record quando só precisa guardar dados de forma segura e imutável.

Gostou do artigo?

Deixe sua dúvida sugestão ou elogio nos comentários e vamos conversar !

Não esqueça de me seguir para não perder as novas publicações sobre tecnologia, desenvolvimento de software e inteligência artificial.

Vamos nos conectar? Veja meu LinkedIn 🚀

Compartilhe
Recomendados para você
NTT DATA - Java e IA para Iniciantes
TONNIE - Java and AI in Europe
Deal - Spring Boot e Angular (17+)
Comentários (0)
Recomendados para vocêWEX - End to End Engineering