Classes e Objetos
Programação Orientada a Objetos (OOP) é fundamental para Java. Esta lição cobre o básico de classes e objetos.
O que é Programação Orientada a Objetos
OOP é um paradigma de programação que agrupa dados e métodos que operam nesses dados juntos.
OOP vs Programação Procedural
| Característica | Procedural | Orientada a Objetos |
|---|---|---|
| Estilo de pensamento | Execução passo a passo | Organizar por objetos |
| Estrutura de código | Funções | Classes e objetos |
| Melhor para | Tarefas simples | Sistemas complexos |
Definindo uma Classe
Uma classe é um template para objetos, definindo seus atributos e métodos.
Sintaxe
public class NomeDaClasse {
// Atributos (variáveis de membro)
tipoDado nomeAtributo;
// Métodos (métodos de membro)
tipoRetorno nomeMetodo(listaParâmetros) {
// Corpo do método
}
}
Exemplo: Definir uma Classe Student
public class Student {
// Atributos
String name;
int age;
double score;
// Métodos
public void study() {
System.out.println(name + " está estudando");
}
public void showInfo() {
System.out.println("Nome: " + name + ", Idade: " + age + ", Pontuação: " + score);
}
}
Criando Objetos
Use a palavra-chave new para criar objetos.
Sintaxe
NomeDaClasse nomeObjeto = new NomeDaClasse();
Exemplo: Criar e Usar Objetos
public class StudentTest {
public static void main(String[] args) {
// Criar objeto
Student stu1 = new Student();
// Definir atributos
stu1.name = "Alice";
stu1.age = 20;
stu1.score = 95.5;
// Chamar métodos
stu1.study(); // Alice está estudando
stu1.showInfo(); // Nome: Alice, Idade: 20, Pontuação: 95.5
// Criar outro objeto
Student stu2 = new Student();
stu2.name = "Bob";
stu2.age = 22;
stu2.score = 88.0;
stu2.study(); // Bob está estudando
stu2.showInfo(); // Nome: Bob, Idade: 22, Pontuação: 88.0
}
}
Construtores
Construtores são usados para inicializar atributos ao criar objetos.
Características
| Característica | Descrição |
|---|---|
| Mesmo nome que a classe | Obrigatório |
| Sem tipo de retorno | Nem mesmo void |
| Chamado automaticamente com new | Não precisa chamar manualmente |
| Pode ser sobrecarregado | Múltiplos construtores |
Construtor Sem Argumentos
public class Student {
String name;
int age;
// Construtor sem argumentos
public Student() {
System.out.println("Objeto Student criado");
}
}
Construtor Parametrizado
public class Student {
String name;
int age;
// Construtor parametrizado
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
Exemplo: Construtores
public class Student {
String name;
int age;
double score;
// Construtor sem argumentos
public Student() {
this.name = "Desconhecido";
this.age = 0;
this.score = 0;
}
// Construtor parametrizado
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// Construtor completo
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public void showInfo() {
System.out.println("Nome: " + name + ", Idade: " + age + ", Pontuação: " + score);
}
}
public class ConstructorDemo {
public static void main(String[] args) {
Student s1 = new Student();
s1.showInfo(); // Nome: Desconhecido, Idade: 0, Pontuação: 0
Student s2 = new Student("Alice", 20);
s2.showInfo(); // Nome: Alice, Idade: 20, Pontuação: 0.0
Student s3 = new Student("Bob", 22, 95.5);
s3.showInfo(); // Nome: Bob, Idade: 22, Pontuação: 95.5
}
}
A Palavra-chave this
this é uma referência ao objeto atual.
Uso 1: Distinguir Variáveis de Membro de Variáveis Locais
public class Student {
String name;
public void setName(String name) {
this.name = name; // this.name é a variável de membro, name é o parâmetro
}
}
Uso 2: Chamar Outros Construtores
public class Student {
String name;
int age;
public Student() {
this("Desconhecido", 0); // Chamar construtor parametrizado
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
Exemplo: Usando this
public class Point {
int x, y;
public Point() {
this(0, 0);
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public void move(int x, int y) {
this.x += x;
this.y += y;
}
public void show() {
System.out.println("Ponto: (" + x + ", " + y + ")");
}
public static void main(String[] args) {
Point p = new Point(3, 5);
p.show(); // Ponto: (3, 5)
p.move(2, -1);
p.show(); // Ponto: (5, 4)
}
}
Modelo de Memória de Objetos
Alocação de Memória
Student stu = new Student("Alice", 20);
stu(variável de referência) é armazenada na memória de pilhanew Student()(objeto) é armazenada na memória de heapstumantém o endereço do objeto
Exemplo: Múltiplas Referências ao Mesmo Objeto
public class MemoryDemo {
public static void main(String[] args) {
Student s1 = new Student("Alice", 20);
Student s2 = s1; // s2 e s1 apontam para o mesmo objeto
System.out.println(s1.name); // Alice
System.out.println(s2.name); // Alice
s2.name = "Bob";
System.out.println(s1.name); // Bob (s1 também é modificado)
System.out.println(s2.name); // Bob
}
}
Múltiplos Objetos
public class MultiObject {
public static void main(String[] args) {
// Criar múltiplos objetos
Student[] students = new Student[3];
students[0] = new Student("Alice", 20);
students[1] = new Student("Bob", 22);
students[2] = new Student("Charlie", 21);
// Percorrer
for (Student s : students) {
s.showInfo();
}
}
}
Objetos como Parâmetros de Método
public class StudentUtil {
// Objeto como parâmetro
public static void printStudent(Student stu) {
System.out.println(stu.name + " - " + stu.age);
}
// Retornar objeto
public static Student createStudent(String name, int age) {
return new Student(name, age);
}
public static void main(String[] args) {
Student alice = new Student("Alice", 20);
printStudent(alice); // Alice - 20
Student bob = createStudent("Bob", 22);
bob.showInfo();
}
}
❓ Perguntas Frequentes
P: Qual é a diferença entre classe e objeto? R: Uma classe é um template. Um objeto é uma instância. A classe define a estrutura de atributos e métodos. Um objeto é uma instância concreta.
P: Um construtor pode ter um valor de retorno? R: Não. Construtores não têm tipo de retorno—nem mesmo void.
P: this pode ser omitido? R: Sim, quando variáveis de membro e variáveis locais não compartilham o mesmo nome. Mas adicionar this torna o código mais claro.
📖 Resumo
- Classes são templates para objetos, definindo atributos e métodos
- Objetos são criados usando a palavra-chave new
- Construtores inicializam objetos e podem ser sobrecarregados
- this refere-se ao objeto atual, usado para distinguir variáveis e chamar construtores
- Objetos são armazenados na memória heap, referências na memória stack
📝 Exercícios
- Classe Rectangle: Defina uma classe retângulo com atributos de comprimento e largura, e métodos para calcular área e perímetro
- Classe BankAccount: Defina uma classe de conta bancária com métodos para depositar, sacar e verificar saldo
- Array de objetos: Crie 5 objetos student e encontre o que tem a maior pontuação
Próxima Lição
Na próxima lição, aprenderemos sobre Encapsulamento — como proteger dados de objetos.



