Prévia do material em texto
Revisão - Programação Orientada a Objetos em Java 1. Classes e Objetos Definição ● Classe: É um modelo ou template que define as características (atributos) e comportamentos (métodos) que os objetos criados a partir dela terão. ● Objeto: É uma instância de uma classe, ou seja, uma representação concreta criada a partir do modelo da classe. Conceitos Importantes ● Quando usamos new em Java, criamos um novo objeto com uma nova referência na memória ● Ao comparar objetos com ==, comparamos se as referências apontam para o mesmo objeto, não o conteúdo ● Para comparar conteúdo, devemos usar o método equals() Exemplo public class Pessoa { private String nome; private int idade; // Construtor, getters, setters... } // Criando objetos Pessoa p1 = new Pessoa(); // Nova instância Pessoa p2 = new Pessoa(); // Outra instância diferente 2. Métodos Construtores Características ● Método especial usado para inicializar objetos no momento da criação ● Tem o mesmo nome da classe ● Não possui tipo de retorno ● É chamado automaticamente quando usamos new Construtor Padrão ● Se você não declarar nenhum construtor, o compilador Java cria automaticamente um construtor padrão sem parâmetros ● Se você criar qualquer construtor personalizado, o construtor padrão não é mais gerado automaticamente Exemplo public class Produto { private String nome; private double preco; // Construtor padrão public Produto() {} // Construtor com parâmetros public Produto(String nome, double preco) { this.nome = nome; this.preco = preco; } } 3. Sobrecarga de Métodos (Overloading) Definição Permite criar múltiplos métodos com o mesmo nome, mas com tipos ou número de parâmetros diferentes. Regras ● Métodos sobrecarregados devem ter tipos ou número de parâmetros diferentes ● Podem ter modificadores de acesso diferentes ● O tipo de retorno pode ser diferente (mas não é suficiente por si só) Exemplo public class Calculadora { public int somar(int a, int b) { return a + b; } public double somar(double a, double b) { return a + b; } public int somar(int a, int b, int c) { return a + b + c; } } 4. Sobrescrita de Métodos (Override) Definição Permite que uma subclasse substitua o comportamento de um método herdado da superclasse. Regras ● O método deve ter a mesma assinatura (nome, parâmetros, tipo de retorno) ● Não é possível sobrescrever métodos final ● Use a anotação @Override para verificação em tempo de compilação Diferença entre Sobrescrita e Sobrecarga ● Sobrescrita: Muda a lógica do método herdado (mesma assinatura) ● Sobrecarga: Usa diferentes parâmetros (mesmo nome, parâmetros diferentes) 5. Encapsulamento Definição Princípio que consiste em esconder os detalhes internos de uma classe e expor apenas o necessário por meio de métodos públicos. Como Implementar 1. Tornar atributos privados (private) 2. Criar métodos públicos de acesso (getters e setters) 3. Controlar o acesso aos dados através destes métodos Importância ● Segurança: Protege os dados de acesso inadequado ● Flexibilidade: Permite mudanças internas sem afetar código externo ● Validação: Possibilita validar dados antes de alterá-los ● Manutenibilidade: Facilita manutenção e evolução do código Exemplo public class ContaBancaria { private double saldo; // Atributo privado // Getter public double getSaldo() { return saldo; } // Setter com validação public void setSaldo(double saldo) { if (saldo >= 0) { this.saldo = saldo; } } // Método para depositar public void depositar(double valor) { if (valor > 0) { this.saldo += valor; } } } Quando NÃO criar um setter Torne um atributo private sem método set quando você deseja que o atributo nunca mude após a criação do objeto (imutabilidade). 6. Herança Definição Mecanismo que permite que uma classe (subclasse) herde características e comportamentos de outra classe (superclasse). Palavra-chave ● Use extends para criar uma subclasse ● Use super para acessar métodos e atributos da superclasse Herança Múltipla Java NÃO suporta herança múltipla de classes. Uma classe só pode estender uma única classe por vez. Exemplo de Hierarquia // Superclasse public class Veiculo { protected String marca; protected int ano; public void acelerar() { System.out.println("Acelerando..."); } } // Subclasse public class Carro extends Veiculo { private int numeroPortas; @Override public void acelerar() { System.out.println("Carro acelerando..."); } public void abrirPorta() { System.out.println("Abrindo porta do carro"); } } // Subclasse da subclasse public class CarroEsportivo extends Carro { private boolean turbo; @Override public void acelerar() { super.acelerar(); // Chama método da superclasse System.out.println("Com turbo ativado!"); } } 7. Classes Abstratas Definição Classes que não podem ser instanciadas diretamente e servem como base para outras classes. Características ● Podem conter atributos e construtores ● Podem ter métodos concretos e abstratos ● Podem estender outras classes abstratas ● NÃO podem ser instanciadas (erro de compilação) Propósito Servir como base para outras classes e conter métodos que podem ou não ser implementados pelas subclasses. Exemplo public abstract class Animal { protected String nome; public Animal(String nome) { this.nome = nome; } // Método concreto public void dormir() { System.out.println(nome + " está dormindo"); } // Método abstrato - deve ser implementado pelas subclasses public abstract void emitirSom(); } public class Cachorro extends Animal { public Cachorro(String nome) { super(nome); } @Override public void emitirSom() { System.out.println("Au au!"); } } 8. Modificadores de Acesso Tipos ● public: Acessível de qualquer lugar ● protected: Acessível na mesma classe, subclasses e mesmo pacote ● private: Acessível apenas dentro da mesma classe ● default (sem modificador): Acessível apenas no mesmo pacote Uso Recomendado ● Atributos: Geralmente private para garantir encapsulamento ● Métodos públicos: Para interface da classe ● Métodos auxiliares: private se usados apenas internamente 9. Modificador Final Aplicações ● Classes final: Não podem ser estendidas (herdadas) ● Métodos final: Não podem ser sobrescritos ● Atributos final: Constantes (valor não pode ser alterado após inicialização) Consequências ● Tentar sobrescrever um método final da superclasse gera erro de compilação ● Classes final impedem herança (exemplo: String) Exemplo public final class Matematica { public static final double PI = 3.14159; public final int somar(int a, int b) { return a + b; } } // Erro! Não pode estender classe final // public class MinhaMatematica extends Matematica { } Resumo dos Conceitos-Chave 1. Encapsulamento: Atributos privados + métodos públicos de acesso 2. Herança: Uma classe pode estender apenas uma outra classe (extends) 3. Polimorfismo: Sobrescrita permite comportamentos diferentes para métodos herdados 4. Abstração: Classes abstratas definem contratos para subclasses 5. Modificadores: Controlam visibilidade e capacidade de modificação 6. Construtores: Inicializam objetos, criados automaticamente se não definidos 7. Sobrecarga vs Sobrescrita: Parâmetros diferentes vs mesmo método herdado Dicas Importantes para a Prova ● Lembre-se das regras de sobrescrita (mesma assinatura) ● Entenda quando usar cadamodificador de acesso ● Saiba identificar problemas de compilação relacionados a herança ● Compreenda a diferença entre comparar objetos com == e equals() ● Memorize que Java não suporta herança múltipla de classes ● Entenda o papel do construtor padrão automático