5COP088 – Laboratório de Programação Aula 2 – Java 5COP088 Laboratório de Programação Aula 2 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – [email protected] 1 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Orientação a Objetos 1) Discussão 2) Encapsulamento 3) Herança 4) Polimorfismo 5) Sobrescrita e Sobrecarga 6) Conversão de Variáveis de Referência 7) Implementação de Interface 8) Tipos de Retorno 9) Construtores e Instanciamento 10) Estáticos 11) Acoplamento e Coesão 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Discussão Garbage Collector “Coletor de Lixo” 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Encapsulamento 1) O encapsulamento ajuda a ocultar a implementação por trás de uma interface ou API 2) O código encapsulado fornece dois recursos: - Proteção das variáveis de instância (private) - Os métodos get e set fornecem acesso ás variáveis de instância; 3) “herda de” e “subtipo de” são equivalentes (extends); 4) “Tem um”, significa que a instância de uma classe “tem uma” referência de outra ou da mesma classe; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Encapsulamento 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Encapsulamento 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Encapsulamento 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Encapsulamento 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Herança 1) A herança é um mecanismo que permite que uma classe seja um subclasse de outra, herdando variáveis e métodos da superclasse; 2) A herança é necessária para o polimorfismo, sobrescrição, sobrecarga e conversão. 3) Todas as Classes (exceto Object) são subclasses do tipo Object. 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Herança 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Herança 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Herança 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Herança 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Polimorfismo 1) Polimorfismo significa muitas formas; 2) Uma variável de referência é sempre de um só tipo, mas ela pode referir-se a um objeto do subtipo; 3) Um objeto pode ser pode ser referido por tipos diferentes, desde que sejam de mesmo tipo ou subtipo do objeto; 4) O tipo de variável de referência (NÃO DO OBJETO) determina quais métodos poderão ser chamados. 5) As chamadas polimórficas a métodos se aplicam apenas a métodos de instâncias sobrescritos. 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Polimorfismo 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Polimorfismo 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Polimorfismo Saída: Tiro de meta!!! >>Fernando Prass Defesa!!! 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 1) Os métodos podem ser sobrescritos ou sobrecarregados, os construtores podem ser sobrecarregados e não sobrescritos; 2) O métodos abstract devem ser soberscritos pela primeira superclasse não concreta (não abstract); 3) Considerando o método sobrescrito: - Deve ter a mesma lista de argumentos; - Deve ter o mesmo tipo de retorno (considerar subclasse); - Não deve ter um modificador de acesso mais restritivo; - Pode ter um modificar de acesso menos restritivo; 4) Métodos final não podem ser sobrescritos; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 5) Só os métodos herdados podem ser sobrescritos; 6) Sobrecarga significa dizer que é o mesmo nome de método porém com argumentos diferentes; 7) Os métodos sobrecarregados: - Devem ter listas de argumentos diferentes; - Podem ter tipos de argumentos diferentes; - Podem ter modificadores de acesso diferentes; 8) Os métodos de uma superclasse podem ser sobrecarregados; 9) O Polimorfismo é aplicado a sobrescrita e não à sobrecarga. 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 10) O tipo de objeto (e não a variável de referência) determina qual método sobrescrito será usado no tempo de execução; 11) O tipo de referência determina qual o método sobrecarregado será usado no tempo de compilação. 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Sobrescrição e Sobrecarga (Overide e Overload) 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Conversão de Variáveis de Referência - Existem dois tipos de conversão: 1) Redutora: Você converte o seu objeto em um subtipo, para tal é necessário uma conversão explícita (CAST). Exemplo: Animal animal = new Animal(); Cachorro c = (Cachorro) animal; 2) Ampliadora: você atribui uma variável de referência a uma de um supertipo explicitamente ou implicitamente. Lembrando que a atribuição restringe o acesso da nova variável. Exemplo: Cachorro c = new Cachorro(); Animal a = (Animal) c; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Implementação de Interface - Quando você implementa uma interface você está “cumprindo o seu contrato” - A implementação adequada de uma interface, significa sobrescrever todos os métodos definidos pela interface; - Uma mesma classe pode implementar diversas interfaces; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Tipos de Retorno - - Os métodos sobrecarregados podem modificar o seu tipo de retorno, os sobrescritos não; Um array é um tipo de retorno válido; Métodos com tipo de retorno primitivos podem retornar qualquer valor que possa ser convertido implicitamente para o retorno; Métodos com um tipo de retorno podem retornar um subtipo da classe retornada; Os métodos que retornam uma interface podem retornar qualquer implementador da mesma. 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Construtores e instanciamento - - Não se pode chamar um objeto sem que seja chamado um construtor; Toda superclasse da árvore de herança de um objeto chamará um construtor; Toda classe, mesmo as classes abstract, tem pelo menos um construtor; - Os construtores devem ter o mesmo nome da classe; - Os construtores não tem tipo de retorno; O construtor sempre chamará o construtor de sua superclasse até alcançar o construtor de Object; Os construtores podem usar qualquer modificador de acesso; O compilador criará um construtor padrão se nenhum for implementado; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Construtores e instanciamento - A primeira instrução de todo construtor deve ser uma chamada a this() ou super(); - As interfaces não tem construtores; - Os construtores nunca são herdados, portanto, não podem ser sobrescritos; - Um construtor só pode ser chamado diretamente por outro construtor (usando this() ou super()); 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Estáticos - Use métodos static para implementar comportamentos que não sejam afetados pelo estado de quaisquer instâncias; - Use variáveis static para armazenar dados que sejam específicos à classe, em vez de à instância; - Todos os membros static pertencem à classe, e não a uma instância; - Um método static não pode acessar uma variável de instância diretamente. - Métodos static não podem ser sobrescritos, mas podem ser redefinidos; 5COP088 – Laboratório de Programação Aula 2 – Java Aula 2 – Acoplamento e Coesão - - - O acoplamento refere-se ao nível em que uma classe conhece ou usa membros de uma outra classe; O acoplamento fraco é o estado desejável para classes bem encapsuladas, que minimizam as referências umas às outras e limitam a extensão do uso. O acoplamento forte é o estado indesejável; A coesão refere-se ao nível em que uma classe tem um único e bem definido papel ou responsabilidade; A alta coesão é o estado desejável de uma classe cujos membros dão suporte a um único e bem definido papel ou responsabilidade; A alta coesão é o estado desejável de uma classe cujos membros dão suporte a um único e bem definido papel; A baixa coesão é indesejável, sem foco para a classe; 5COP088 – Laboratório de Programação Aula 2 – Java Referências Java Como Programar - Deitel,P.; Deitel, H.. Learn Java Now - Davis, Stephen Randy. Big Java / Cay Horstmann ; tradução: Edson Furmankiewicz. -