Programação Orientada a Objetos
Aprenda os conceitos fundamentais de forma interativa e prática
Objetivos
- Compreender construtores e sua importância
- Implementar sobrecarga de construtores
- Aplicar princípios de encapsulamento
Metodologia
Construtores
Métodos especiais para inicializar objetos
💡 O que são?
Construtores são métodos especiais chamados automaticamente quando um objeto é criado. Eles inicializam os atributos do objeto com valores apropriados.
Características:
- Mesmo nome da classe
- Não possuem tipo de retorno
-
Chamados com
new
🎮 Demonstração Interativa
public class Pessoa { private String nome; private int idade; // Construtor padrão public Pessoa() { nome = "Não informado"; idade = 0; } // Construtor parametrizado public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } // Construtor com validação public Pessoa(String nome) { this(nome, 18); // Chama outro construtor } }
Dica Importante
Use
this()
para chamar outros construtores da mesma classe, evitando
duplicação de código!
Encapsulamento
Protegendo e controlando o acesso aos dados
Proteção
Impede acesso direto aos dados internos
Validação
Controla como os dados são modificados
Manutenção
Facilita mudanças internas sem afetar o código externo
Modificadores de Acesso
private
Apenas na própria classe
public
Acesso de qualquer lugar
protected
Pacote + herança
🧪 Teste de Validação
public class ContaBancaria { private double saldo; private String titular; // Getter - acesso controlado public double getSaldo() { return saldo; } // Setter com validação public void setSaldo(double saldo) { if (saldo >= 0) { this.saldo = saldo; } else { throw new IllegalArgumentException( "Saldo não pode ser negativo" ); } } public void setTitular(String titular) { if (titular != null && !titular.trim().isEmpty()) { this.titular = titular.trim(); } else { throw new IllegalArgumentException( "Titular não pode ser vazio" ); } } }
Atividade Prática
Implemente a classe Produto com construtores e encapsulamento
📋 Especificações
Atributos (private):
-
String nome
-
double preco
-
int quantidade
-
String categoria
Construtores:
- • Padrão (valores iniciais)
- • Básico (nome e preço)
- • Completo (todos os atributos)
🎮 Demonstração
public class Produto { private String nome; private double preco; private int quantidade; private String categoria; private String codigo; // Construtor padrão public Produto() { this.nome = "Sem nome"; this.preco = 0.0; this.quantidade = 0; this.categoria = "Geral"; this.codigo = gerarCodigo(); } // Construtor básico public Produto(String nome, double preco) { setNome(nome); setPreco(preco); this.quantidade = 0; this.categoria = "Geral"; this.codigo = gerarCodigo(); } // Métodos com validação public void setPreco(double preco) { if (preco >= 0) { this.preco = preco; } else { throw new IllegalArgumentException( "Preço não pode ser negativo" ); } } }
Atividade 2: Classe ContaBancaria Completa
Agora vamos implementar uma classe mais complexa com múltiplos construtores e métodos de negócio!
📋 Especificações Avançadas
Atributos (private):
-
String numero
-
String titular
-
double saldo
-
String tipoConta
-
boolean ativa
4 Construtores:
- • Padrão (valores iniciais)
- • Básico (apenas titular)
- • Com saldo inicial
- • Completo (todos os parâmetros)
Métodos de Negócio:
- • depositar(valor)
- • sacar(valor)
- • ativarConta() / desativarConta()
- • exibirExtrato()
🏦 Simulador Bancário
public class ContaBancaria { private String numero; private String titular; private double saldo; private String tipoConta; private boolean ativa; // Construtor padrão public ContaBancaria() { this.numero = gerarNumeroConta(); this.titular = "Titular não informado"; this.saldo = 0.0; this.tipoConta = "Corrente"; this.ativa = true; } // Construtor básico public ContaBancaria(String titular) { this.numero = gerarNumeroConta(); setTitular(titular); this.saldo = 0.0; this.tipoConta = "Corrente"; this.ativa = true; } // Construtor com saldo inicial public ContaBancaria(String titular, double saldoInicial) { this.numero = gerarNumeroConta(); setTitular(titular); setSaldo(saldoInicial); this.tipoConta = "Corrente"; this.ativa = true; } // Construtor completo public ContaBancaria(String titular, double saldoInicial, String tipoConta) { this.numero = gerarNumeroConta(); setTitular(titular); setSaldo(saldoInicial); setTipoConta(tipoConta); this.ativa = true; } // Métodos com validação public void setTitular(String titular) { if (titular != null && !titular.trim().isEmpty() && titular.length() >= 3) { this.titular = titular.trim().toUpperCase(); } else { throw new IllegalArgumentException( "Titular deve ter pelo menos 3 caracteres!" ); } } public boolean depositar(double valor) { if (!ativa) return false; if (valor > 0) { saldo += valor; return true; } return false; } public boolean sacar(double valor) { if (!ativa || valor <= 0 || valor > saldo) { return false; } saldo -= valor; return true; } }
Atividade 3: Exercícios Práticos
Pratique com exercícios mais avançados para consolidar o aprendizado!
📝 Exercício 1: Classe Aluno
Implementar:
- • Construtores: padrão, com nome e matrícula, completo
- • Validações: nome não vazio, matrícula única, notas 0-10
- • Métodos: calcular média, verificar situação, exibir boletim
👨💼 Exercício 2: Classe Funcionario
Implementar:
- • Atributos: nome, cpf, salario, cargo, dataAdmissao
- • Múltiplos construtores
- • Validações: CPF formato correto, salário positivo
- • Métodos: tempo de empresa, aplicar aumento
🔧 Exercício 3: Sistema de Validação
Implementar:
- • Criar objetos usando diferentes construtores
- • Testar todas as validações
- • Capturar e tratar exceções adequadamente
🚗 Exercício 4: Classe Veiculo
Implementar:
- • Atributos: marca, modelo, ano, cor, preço, km
- • 4 construtores diferentes
- • Validações completas
- • Métodos: depreciação, revisão necessária
📚 Exercício 5: Classe Livro
Implementar:
- • Atributos: isbn, titulo, autor, editora, ano, páginas
- • Construtores variados
- • Validações: ISBN único, ano válido, páginas positivas
- • Métodos: calcular idade, verificar disponibilidade
🔗 Exercício 6: Sistema Integrado
Implementar:
- • Usar ContaBancaria e Funcionario
- • Simular sistema de folha de pagamento
- • Aplicar todas as validações
- • Tratar exceções adequadamente
Material de Apoio
Conceitos importantes e boas práticas para consulta!
🎯 Conceitos Importantes
Construtores:
- • Chamada Automática: Executado automaticamente na criação
- • Sobrecarga: Múltiplos construtores com parâmetros diferentes
- • Inicialização: Garantem objeto em estado válido
- • Validação: Podem validar dados na criação
Encapsulamento:
- • Ocultação: Atributos privados, métodos públicos
- • Validação: Verificar dados antes de armazenar
- • Consistência: Manter objeto sempre válido
- • Controle: Definir como dados são acessados
✅ Boas Práticas
- Sempre validar dados nos setters
- Usar construtores para inicialização obrigatória
- Implementar múltiplos construtores quando necessário
- Lançar exceções para dados inválidos
- Documentar validações e restrições
// Validação de string não vazia if (valor != null && !valor.trim().isEmpty()) { this.atributo = valor.trim(); } else { throw new IllegalArgumentException( "Valor não pode ser vazio" ); } // Validação de número positivo if (valor > 0) { this.atributo = valor; } else { throw new IllegalArgumentException( "Valor deve ser positivo" ); } // Validação de faixa if (valor >= minimo && valor <= maximo) { this.atributo = valor; } else { throw new IllegalArgumentException( "Valor fora da faixa permitida" ); }
Avaliação da Semana
Critérios de Participação (1 ponto):
- • Implementação correta dos construtores
- • Aplicação adequada de validações
- • Tratamento de exceções
- • Qualidade do código produzido
Preparação para Próxima Semana:
- • Métodos
- • Métodos estáticos
-
• Uso da palavra-chave
this
- • Revisar conceitos para avaliação parcial - dia 25/08
3º Bimestre - Trabalhos
Atividades avaliativas para consolidar o aprendizado
📝 TRABALHO 1: Lista de Exercícios Fundamentais
👨💼 Exercício 1: Sistema de Funcionários (0,5 pts)
Especificações:
- • Classe Funcionario: nome, cpf, salario, cargo, dataAdmissao
- • Validações: CPF válido, salário positivo, nome não vazio
- • Métodos: calcularTempoEmpresa(), aplicarAumento(), calcularSalarioAnual()
- • Classe Empresa que gerencia lista de funcionários
- • Operações: contratar, demitir, listar por cargo, calcular folha salarial
🏦 Exercício 2: Sistema Bancário Básico (0,5 pts)
Especificações:
- • Classe ContaBancaria: numero, titular, saldo, tipo
- • Operações: depositar, sacar, transferir, consultarSaldo
- • Validações: saldo não negativo, valores positivos
- • Classe Banco: gerenciar múltiplas contas
- • Relatórios: contas por tipo, saldo total do banco
🛒 Exercício 3: Loja Virtual (0,5 pts)
Especificações:
- • Classe Produto: codigo, nome, preco, categoria, estoque
- • Classe Cliente: nome, cpf, email, endereco
- • Classe Pedido: cliente, lista de produtos, data, total
- • Operações: cadastrar produtos, realizar pedidos, controlar estoque
- • Relatórios: produtos mais vendidos, vendas por categoria
🎓 Exercício 4: Sistema Escolar (0,5 pts)
Especificações:
- • Classe Aluno: nome, matricula, curso, semestre
- • Classe Disciplina: codigo, nome, cargaHoraria, professor
- • Classe Nota: aluno, disciplina, valor, bimestre
- • Operações: matricular alunos, lançar notas, calcular médias
- • Relatórios: boletim do aluno, estatísticas da turma
📊 Critérios de Avaliação
🚀 TRABALHO 2: Projeto Integrador - Fase 1
📚 Sistema de Biblioteca
Funcionalidades Mínimas:
- • Cadastro de livros com validações completas
- • Cadastro de usuários (diferentes tipos)
- • Sistema de empréstimos e devoluções
- • Consultas por diferentes critérios
- • Relatórios básicos
⚙️ Requisitos Técnicos
- Aplicação de todos os conceitos do 3º bimestre
- Interface de console bem estruturada
- Validações robustas
- Código bem documentado
- Casos de teste
📋 Critérios de Avaliação
⚠️ Dicas Importantes
- Comece cedo! Projetos complexos precisam de tempo
- Teste cada funcionalidade antes de avançar
- Documente o código conforme desenvolve
- Prepare-se bem para a apresentação
Quiz Interativo
Teste seus conhecimentos sobre construtores e encapsulamento
Qual é a principal função de um construtor?
Quiz Concluído!
Excelente trabalho!