Programação Orientada a Objetos
Revisão e Introdução a Classes e Objetos
Objetivos da Semana
- Revisar conceitos básicos de Java
- Introduzir classes e objetos
- Compreender POO vs Programação Procedural
- Criar nossas primeiras classes
🔄 Revisão Rápida - Java Básico
Tipos Primitivos
int idade = 25;
double salario = 2500.50;
boolean ativo = true;
char inicial = 'J';
String nome = "João";
Estruturas de Controle
// Condicional
if (idade >= 18) {
System.out.println("Maior de idade");
}
// Loop
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
Lembra? Até agora programávamos de forma
procedural - função por função, passo a passo. Agora vamos
organizar nosso código de forma diferente!
🚀 O que é Programação Orientada a Objetos?
Imagine que você está construindo um sistema para uma escola...
❌ Forma Procedural
String[] nomes = new String[100];
int[] idades = new int[100];
double[] notas = new double[100];
void cadastrarAluno(...) { }
void calcularMedia(...) { }
void exibirBoletim(...) { }
Dados e funções separados!
✅ Forma Orientada a Objetos
class Aluno {
String nome;
int idade;
double[] notas;
void calcularMedia() { }
void exibirBoletim() { }
}
Dados e comportamentos juntos!
🎯 Conceitos Fundamentais
🏗️ Classe
É o modelo ou blueprint para criar
objetos
class Pessoa { // Modelo para criar pessoas String nome; int
idade; void falar() { System.out.println("Olá!"); } }
👤 Objeto
É uma instância de uma classe - algo concreto
Pessoa joao = new Pessoa(); Pessoa maria = new Pessoa(); // João e
Maria são objetos diferentes!
📋 Atributos
Características do objeto (o que ele tem)
⚡ Métodos
Comportamentos do objeto (o que ele faz)
🔬 Anatomia de uma Classe Java
public class Pessoa {
// ATRIBUTOS - O que o objeto TEM
private String nome;
private int idade;
private String email;
// MÉTODOS - O que o objeto FAZ
public void setNome(String nome) { this.nome = nome; }
public StringgetNome() { return nome; }
public void apresentar() {
System.out.println("Oi, eu sou " + nome);
}
}
🔐 Por que usar private
e public
?
Encapsulamento: Protegemos os dados internos e
controlamos como são acessados!
🎨 Criando e Usando Objetos
Passo a Passo:
// 1. DECLARAR uma variável do tipo da classe
Pessoa pessoa1;
// 2. INSTANCIAR (criar) o objeto
pessoa1 = new Pessoa();
// 3. OU fazer tudo numa linha:
Pessoa pessoa2 = new Pessoa();
// 4. USAR o objeto
pessoa1.setNome("Ana");
pessoa1.setIdade(22);
pessoa1.apresentar();
// "Oi, eu sou Ana"
🎭 Múltiplos Objetos
Pessoa professor = new Pessoa();
Pessoa aluno1 = new Pessoa();
Pessoa aluno2 = new Pessoa();
// Cada um é único e independente!
professor.setNome("Prof. Silva");
aluno1.setNome("Carlos");
aluno2.setNome("Beatriz");
👩💻 Vamos Programar: Classe Pessoa
public class Pessoa {
private String nome;
private int idade;
private String email;
// Setters - para DEFINIR valores
public void setNome(String nome) { this.nome = nome; }
// Getters - para OBTER valores
public String getNome() { return nome; }
// Método de negócio
public void exibirInfo() {
System.out.println("Nome: " + nome);
System.out.println("Idade: " + idade);
System.out.println("Email: " + email);
}
}
💡 Dica:
A palavra this
se refere ao objeto atual. Use quando o
parâmetro tem o mesmo nome do atributo!
🛍️ Exemplo Avançado: Classe Produto
public class Produto {
private String nome;
private double preco;
private int quantidade;
public void setPreco(doublepreco) {
if (preco >=0) {
this.preco = preco;
} else {
System.out.println("Preço não pode ser negativo!");
}
}
// Métodos de negócio mais sofisticados
public double calcularValorTotal() {
return preco * quantidade;
}
public void adicionarEstoque(int qtd) {
quantidade += qtd;
System.out.println(qtd + " unidades adicionadas!");
}
}
✨ Validação de Dados
Nos métodos set
, podemos validar os dados antes de
armazenar!
🏋️♀️ Hora de Praticar!
📚 Exercício 1: Classe Aluno
Crie uma classe com: nome, matrícula, 3 notas
- Método
calcularMedia()
-
Método
verificarSituacao()
(Aprovado/Recuperação/Reprovado)
- Método
exibirBoletim()
💰 Exercício 2: Classe ContaBancaria
Atributos: número, titular, saldo
- Método
depositar()
- Método
sacar()
(com validação)
- Método
consultarSaldo()
📖 Exercício 3: Classe Livro
Título, autor, ano, páginas, disponível
- Métodos
emprestar()
e devolver()
- Método
calcularIdade()
⚔️ Procedural vs Orientado a Objetos
Aspecto |
Programação Procedural |
Programação Orientada a Objetos |
Foco |
Funções e procedimentos |
Objetos e suas interações |
Organização |
Código linear, sequencial |
Classes e objetos |
Dados |
Separados das funções |
Encapsulados nos objetos |
Reutilização |
Limitada |
Alta (herança, polimorfismo) |
Manutenibilidade |
Difícil em projetos grandes |
Mais fácil e organizada |
⭐ Boas Práticas em POO
📝 Nomenclatura
- Classes: PascalCase (MinhaClasse)
- Métodos: camelCase (meuMetodo)
- Atributos: camelCase (meuAtributo)
🔒 Encapsulamento
- Atributos:
private
- Métodos públicos:
public
- Use getters e setters
⚠️ Erros Comuns
- Esquecer o
new
- Acessar atributos direto
- Não validar dados
- Não inicializar objetos
💡 Dicas de Ouro
- Uma classe = uma responsabilidade
- Nomes claros e descritivos
- Validar sempre os dados
- Comentar código complexo
🚀 Próximos Passos
📋 Trabalho:
- Implementar as classes Funcionario e Veiculo
- Criar um sistema simples integrando Pessoa e ContaBancaria
- Utilize exemplos dos exercícios propostos
📚 Semana que vem:
- Construtores
- Sobrecarga de métodos
- Modificadores de acesso
- Projeto: Sistema de Biblioteca
🎯 Meta da Semana:
Até o final desta semana, você deve conseguir:
- Criar classes com atributos e métodos
- Instanciar e usar objetos
- Aplicar encapsulamento básico
Dúvidas? Vamos programar juntos! 👨💻