Antes de entrar nos pilares da POO, vale firmar a peça mais usada no Java: a diferença entre classe e objeto. A classe é o molde; o objeto é uma coisa real criada a partir desse molde.
Uma classe descreve quais dados e comportamentos alguma coisa terá. Um objeto é uma instância concreta dessa classe, com valores próprios.
Pense em Produto: a classe diz que todo produto tem nome, preço e pode calcular desconto. Um objeto específico pode ser o produto "Teclado", com preço 120. Outro objeto pode ser "Monitor", com preço 900. Os dois seguem o mesmo molde, mas carregam estados diferentes.
A classe junta atributos e métodos em uma unidade com nome. Em Java, quase tudo que você escreve fica dentro de alguma classe.
public class Produto {
String nome;
double preco;
double precoComDesconto(double percentual) {
return preco - (preco * percentual / 100);
}
}
Produto é o nome da classe.nome e preco são atributos: guardam estado.precoComDesconto() é um método: executa comportamento usando os dados do objeto.Objeto é aquilo que nasce quando o programa usa uma classe para criar algo em memória. Em Java, isso normalmente aparece com new.
Produto teclado = new Produto();
teclado.nome = "Teclado";
teclado.preco = 120.00;
A variável teclado aponta para um objeto do tipo Produto. Esse objeto tem seu próprio nome e seu próprio preco.
| Parte | Pergunta que responde | Exemplo |
|---|---|---|
| Atributo | Que informação esse objeto guarda? | nome, preco, ativo |
| Método | O que esse objeto sabe fazer? | salvar(), validar(), calcularTotal() |
Essa separação ajuda a ler código: quando você vê campo, pense em estado; quando vê método, pense em ação.
Na linha Produto teclado = new Produto();, aparecem duas ideias juntas:
Produto antes do nome é o tipo da variável.teclado é o nome da variável.new Produto() cria o objeto.A variável não é o objeto em si. Ela é uma referência para encontrar aquele objeto na memória.
Uma mesma classe pode gerar muitos objetos. Cada objeto guarda seu próprio estado, mesmo compartilhando o mesmo desenho.
Produto teclado = new Produto();
teclado.nome = "Teclado";
teclado.preco = 120.00;
Produto monitor = new Produto();
monitor.nome = "Monitor";
monitor.preco = 900.00;
teclado e monitor são dois objetos diferentes. Mudar o preço do teclado não muda o preço do monitor.
O construtor é chamado quando o objeto é criado. Ele serve para começar o objeto em um estado válido.
public class Produto {
String nome;
double preco;
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
}
Com isso, dá para criar o objeto já preenchido:
Produto teclado = new Produto("Teclado", 120.00);
O this significa "este objeto aqui". Ele diferencia o atributo do objeto do parâmetro recebido pelo construtor.
Nos arquivos do projeto, esse fundamento aparece o tempo todo:
DepartamentoManager é uma classe que concentra registros e configuração.DepartamentoHome é uma classe que descreve uma tela/ação.new aparece quando o código precisa criar uma instância concreta de alguma classe.execute(), render() e config() representam comportamentos que aquelas classes sabem executar.Quando estiver lendo Java, faça três perguntas simples: qual é a classe?, quais objetos existem? e que estado e comportamento eles carregam?
Com isso claro, os próximos fundamentos — encapsulamento, herança, polimorfismo e abstração — deixam de parecer nomes soltos e passam a encaixar em uma base concreta.