Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Presbiteriana Mackenzie Interfaces Profa. Ana Cristina dos Santos Faculdade de Computação e Informática Linguagem de Programação I Conteúdo • Revisão – Herança – Polimorfismo – Classes Abstratas • Interfaces Interfaces 2 Interfaces • Interface é o mecanismo da Programação Orientada à Objetos (POO) que define quais ações devem ser obrigatoriamente executadas por uma classe – Entre suas características, podemos destacar: • Cada classe pode executar as ações de formas distintas através de métodos com nomes padronizados • Todos os métodos de uma interface são abstratos • Todos os atributos de uma interface são constantes Interfaces 3 Interfaces • A interface serve como uma espécie de con- trato, que define todas as obrigações de um conjunto de classes – Entre as principais definições, temos: • Todas as classes que "assinam" esse contrato são obri- gadas a implementar todos os métodos da interface • A interface contém apenas a assinatura do método – As classes que assinam o contrato com a interface são as responsáveis pela implementação do método Interfaces 4 Interfaces • Caso de uso: Quando usar interfaces? – Imagine a seguinte situação: • Uma empresa qualquer onde somente alguns cargos de funcionários podem acessar o sistema: Interfaces 5 Interfaces • Caso de uso: Quando usar interfaces? – O método login() utiliza como parâmetro um objeto do tipo Funcionario para receber através do Polimorfismo qualquer instância de suas subclasses Interfaces 6 Interfaces • Caso de uso: Quando usar interfaces? – Na UML anterior, o método autenticar() estava implementado apenas nas classes Diretor e Gerente • Não podemos acessar o método a partir de Funcionario Interfaces 7 Interfaces • Caso de uso: Quando usar interfaces? – Solução: Interfaces 8 Interfaces • Caso de uso: Quando usar interfaces? – O problema da solução adotada é que: • Para cada nova classe criada que seja necessário efetuar o login no sistema, temos que adicionar um novo método login para essa nova classe – Veja nos próximos slides, uma solução para esse problema Interfaces 9 Interfaces • Caso de uso: Quando usar interfaces? Interfaces 10 Interfaces • Caso de uso: Quando usar interfaces? – Com essa alteração, temos o polimorfismo no método login() e podemos criar novas classes a partir dessa classe abstrata Interfaces 11 Interfaces • Caso de uso: Quando usar interfaces? – Porém, temos outro problema: • Caso a empresa queira dar acesso ao seu sistema para todos os seus clientes Interfaces 12 Interfaces • Caso de uso: Quando usar interfaces? – Nessa caso, o melhor é utilizar uma Interface • A interface pode ser utilizada como parâmetro de métodos na Linguagem Java • Criamos um contrato para que qualquer classe do nosso sistema possa utilizar a interface • Pelo contrato, qualquer classe que implementar a interface deve implementar os seus métodos • Com isso, vamos padronizar o nome do método (autenticar) para um conjunto de classes de hierarquias diferentes Interfaces 13 Interfaces Interfaces 14 Interfaces Interfaces 15 Interfaces • Como definir uma interface? – A sintaxe da interface é ilustrada abaixo: public interface [InterfaceName] { // Declaração de métodos sem implementação. } – Por exemplo: Interfaces 16 Interfaces • As principais vantagens das Interfaces: – Exibir a interface de programação sem exibir a lógica de sua implementação – Alterar a implementação de métodos sem afetar as classes que utilizam a interface – Pode ser utilizada como parâmetro de métodos – Classes de diferentes níveis de hierarquia podem conter métodos com a mesma assinatura – Permite modelar classes com heranças múltiplas Interfaces 17 Interfaces • Diferenças entre Interfaces e Classes Abstratas – Todos os métodos de uma interface são abstra- tos; já a classe abstrata pode ter métodos não abstratos – As interfaces só podem definir constantes, e as classes abstratas podem definir tanto constantes quanto atributos – As interfaces não possuem relação de herança de outras classe • Mas, as interfaces podem herdar de outras interfaces Interfaces 18 Interfaces • Diferenças entre Interfaces e Classes Abstratas – Não é possível criar instâncias a partir de uma interface InterfaceQualquer objeto = new InterfaceQualquer(); – Uma interface só pode ser implementada por classes e só pode ser herdada por outra interface Interfaces 19 Interfaces • Herança Múltipla na Linguagem Java – De modo direto, NÃO É POSSÍVEL herdar várias classes ao mesmo tempo • Uma classe na Linguagem Java só pode estender uma superclasse – Uma alternativa para "simular" o processo de herança múltipla na Linguagem Java é utilizando interfaces • Uma classe pode implementar várias interfaces simultaneamente Interfaces 20 Interfaces • Exemplo de Herança Múltipla em Java Interfaces 21 Interfaces Interfaces 22 Interfaces • Exercício 1: – Crie uma interface na Linguagem Java para representar forma geométricas. – Por padrão, para qualquer forma geométrica, temos uma fórmula matemática para calcular a sua área. Leve isso em consideração na hora de criar a sua interface. – Após isso, crie as classes: Circulo e Retangulo. Todas essas classes devem implementar a interface da forma geométrica. – Retângulo: area = largura * altura – Círculo: area = ∏ * raio * raio Interfaces 23 Interfaces • A classe Collections (java.util.Collections) – Interface List • São utilizadas para armazenar objetos de mesma classe • Esses objetos são armazenados de acordo com a ordem de inclusão • Podemos armazenar valores nulos e objetos duplicados • Apesar da estrutura manter os dados de acordo com a ordem de inclusão, é possível ordenar os objetos armazenados em um List usando uma "ordem natural" Interfaces 24 Interfaces • A classe Collections (java.util.Collections) – Contudo, é necessário definir a "ordem natural“ • Para isso, a classe a ser armazenada na List precisa implementar a interface Comparable juntamente com seu método compareTo() – Vamos utilizar o método estático sort() da classe utilitária Collections para fazer a ordenação dos objetos armazenados na List • Para ordenar uma lista de objetos, devemos executar o método estático Collections.sort(List) Interfaces 25 Interfaces • A interface Comparable (java.lang.Comparable) – Essa interface é implementada por classes que são ordenáveis • Ou seja, que podem ser automaticamente ordenadas por coleções ou outras classes – A interface Comparable obriga com que a classe implemente o método compareTo() • Esse método contém a regra (ordem natural) de ordenação, que define a precedência dos objetos das instâncias da classe que a implementa Interfaces 26 Interfaces • A interface Comparable (java.lang.Comparable) – Assinatura do método: int compareTo(Object object) – Exemplo: • A classe String é um exemplo de classe que implementa a interface Comparable – Sua implementação do método compareTo() faz a análise caracter a caracter para definição da ordenação de Strings – Pelo conceito de "ordem natural" da String, a instância "Bruce Lee" estaria localizada antes da instância "Chuck Norris", pois a letra 'B' antecede a letra 'C' Interfaces 27 Interfaces • A interface Comparable (java.lang.Comparable) – Utilizando classes criadasdurante a abstração de um objeto do mundo real, nem sempre temos um parâmetro adequado para comparar duas instâncias de uma mesma classe – Por exemplo: • Dada uma classe Funcionário, com os atributos nome, RG e Registro Funcional, qual dos parâmetros deve ser utilizado para definir a "ordem natural" do objeto? Interfaces 28 Interfaces • A interface Comparable (java.lang.Comparable) – O método compareTo() utilizado para comparar a instância atual com qualquer outra instância da mesma classe retornar os seguintes valores: • -1 (ou um número negativo qualquer): deve retornar esse valor se o objeto estiver "antes" daquele passado como parâmetro • 0: deve retornar esse valor se os objetos forem iguais • 1 (ou um número positivo qualquer): deve retornar esse valor se o objeto estiver "depois" daquele passado como parâmetro Interfaces 29 Interfaces • Exemplo de uso da interface Comparable Interfaces 30 Interfaces • Exemplo de uso da interface Comparable – Para este exemplo utilizaremos duas classes: Aluno.java e Principal.java – A classe Aluno possui dois atributos: nome e tia – A ordem natural dos objetos desta classe foi definida da seguinte forma: • Primeiramente os objetos serão ordenados pelo atributo "nome" seguindo a ordem alfabética • Em caso de empate (nomes iguais) será utilizado o "tia" como segundo critério para desempate Interfaces 31 Interfaces • Exercício 2: implementar a classe Aluno • Lembre-se que a classe Aluno implementa a interface Comparable e o método compareTo() • O método compareTo() compara primeiro o atributo nome dos objetos e em caso de empate faz a comparação do atributo tia • A classe Aluno também faz a sobrescrita dos métodos equals(), toString() e hashCode(), todos da classe Object • Você conheceu o método toString() em sala, pesquise sobre hasCode() e equals(). Interfaces 32 Interfaces • Exercício 3: Modifique a classe Aluno e adicione o atributo "nota" do tipo double. – O método compareTo() deve ordenar os objetos do tipo Aluno através da comparação de suas notas. – Ao final, o programa principal deve apresentar a lista ordenada das maiores notas para as menores notas. – OBS: Em caso de empate, utilize as duas regras vistas anteriormente. Interfaces 33 Obrigada Profa. Ana Cristina dos Santos anacristina.santos@mackenzie.br 34
Compartilhar