1 / 12

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

👤 Objeto

É uma instância de uma classe - algo concreto

📋 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! 👨‍💻