OO com Java Luiz Carlos d´Oleron Roteiro de aula Roteiro • Pacotes • Modificadores • Utilizando – Encapsulamento – Herança – Polimorfismo Pacotes • O que se faz quando existem milhares de classes em um projeto? • O que se faz quando existem duas classes com o mesmo nome em um projeto? • Usamos pacotes para agrupar classes de responsabilidades semelhantes Pacotes • Definem o nome completamente qualificado de uma classe • Ex: umPacote.Exemplo1 Exemplo1 São classes distintas Definindo e usando pacotes • Para declarar que uma classe está em um pacote: package <nomeDoPacote>; • Para usar numa classe uma outra classe de outro pacote import <nomeDoPacote >.<nomeDaClasse>; Modificadores de visibilidade • Encapsulamento é o modo como se esconde os detalhes de implementação de um componente (um objeto) • Usamos 3 modificadores: public, protected e private • Eles podem ser utilizados com classes, atributos e métodos Risco de acessar diretamente atributo não privado Usando private: Compilador proíbe acesso ao atributo não público: The field ControleDoMotor.potencia is not visible O que ocorre se não colocar nem public nem private? • O atributo, classe ou método só será visível pelas classes que estiverem no mesmo pacote • Por isso, normalmente colocamos os atributos private e os métodos public Herança • Mecanismo pelo qual é possível escrever uma classe a partir de outra • Herdando seus atributos • Favorece sistemas mais robustos e simples de fazer Exemplo de Herança • Vamos extender o controle de avião que fizemos antes com novas coisas • Controle de motor de avião – Potência máxima : 100 (igual) – Potência mínima : 0 (igual) – Recebe sinal de 32 bits via USB permitindo controle externo da potência do motor (igual) – Possui uma chave liga-desliga (nova coisa) – Só pode aumentar ou baixar a potência se estiver ligado Potência Mais Potência Menos Potência 0 Ligar Desligar USB control Usando o extends para herança Polimorfismo Qual deve ser a saída esperada para a execução do software a seguir? Exercício – montar a hierarquia de classes a seguir Criar uma classe com um método main e o seguinte código Expressao Expressao Expressao Expressao x = new ExpressaoAtomica(‘x’); y = new ExpressaoAtomica(‘y’); negY = new Negacao(y); ou = new ExpressaoOU(x, negY); String e = ou.representacao(); System.out.println(“Altura de ” + e + “ : ” + ou.altura()); System.out.println (“Número de operadores de ” + e + “ : ” + ou.numeroOperadores());