Métodos Programação II

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Paulo Marques Hernâni Pedroso
Collections Marco Antonio, Arquiteto de Software – TJDF Atualizado Dezembro/2008.
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Métodos, Parâmetros, Argumentos e Contratos
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Herança, Polimorfismo e Classes Abstratas em Java
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Java: Pacotes e Modificadores de Visibilidade
Java: Pacotes e Modificadores de Visibilidade
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Programação Básica em Java
Anatomia de uma classe Nome:
Walfredo Cirne walfredo.dsc.ufpb.br
Polimorfismo e Classes Abstratas Profa
Linguagem de Programação II
Linguagem de Programação II
Interfaces em Java1 Interfaces Prof. Ricardo Linden.
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
UMA ABORDAGEM SOBRE ORIENTAÇÃO A OBJETOS!
Métodos Programação II
Métodos Programação II
Excepções e Streams em Java
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
Curso de extensão em Desenvolvimento Web
Análise Semântica e Representação Intermédia
Programação Orientada a Objetos com Java
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Programação Orientada à Objetos
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Os métodos equals() e hashCode()
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Pilhas Profa. Nádia Félix.
Programação Orientada à Objetos
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
UML Diagrama de classes.
Wagner Santos C. de Jesus
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Prof. Gilberto Irajá Müller
Introdução às Java Threads
Aula Prática 4 Monitoria IP/CC (~if669).
Polimorfismo.
POO II JEAN CARLO MENDES
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Interfaces POO Avançado.
Classes Abstratas e Interface
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Coleções em Java - Parte 2
Herança Modelagem e Programação Orientada a Objetos
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
JAVA – Fila ATAI.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Módulo II Capítulo 1: Orientação a Objetos
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Jean Carlo mendes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Métodos Programação II Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Interfaces Métodos Programação II

Métodos Programação II Classes e Tipos A noção de classe e tipo, subclasse e subtipo, podem ser vistas como coincidentes. No entanto a noção de subtipo tem uma conotação mais abstracta do que a de subclasse: um subtipo vê apenas comportamento e não estrutura (princípio da substituição) As linguagem de PPO strongly typed (como por exemplo o JAVA), tendem a diminuir a distinção entre subclasses e subtipos: Permitem que variáveis possam ser associadas a instâncias de uma classe diferente da classe da sua declaração, desde que a instância a associar à variável seja de uma subclasse da classe de declaração; Assumem que subclasses são subtipos, o que formalmente pode não ser verdade já que as subclasses podem não só redefinir como acrescentar métodos. Métodos Programação II

Interfaces No caso especifico da linguagem JAVA é introduzido um mecanismo adicional visando a especificação sintáctica de tipos abstractos de dados (TAD), ou seja, permitindo a especificação de tipos através das interfaces. Para além de especificações de tipos, as interfaces de JAVA apresentar-se-ão como um mecanismo extremamente útil sempre que pretendermos especificar e garantir que duas classes posicionadas em quaisquer zonas da hierarquia de classes, logo não tendo qualquer relação hierárquica entre si, possuem comportamento comum. Pretendemos ter C e E, e somente estas classes, a responder aos métodos m1() e m2(). B e E tem linguagem comum, mas diferente da de C e D. O único ponto comum é a herança de Object. Métodos Programação II

Métodos Programação II Interfaces (2) Como obter este comportamento (nesta hierarquia) sem alterar a própria hierarquia i.e. sem adicionar por exemplos os métodos em questão à superclasse (Object)? Seguir este caminho implicava que todas as classes respondiam a estes métodos e por conseguinte alterar código nas outras classes da hierarquia. A solução associada à linguagem Java é através do uso de interfaces. Outras linguagens fazem uso de herança múltipla. Métodos Programação II

Métodos Programação II Interface (3) Interfaces são apenas um conjunto de especificações sintácticas (abstractas portanto) de métodos que representam um comportamento particular, que qualquer classe, em qualquer ponto da hierarquia, pode implementar. As interfaces especificam um tipo de dados (conjunto de métodos abstractos a implementar), e qualquer classe que os implemente passa a ser compatível com tal tipo de dados. Ser compatível com o tipo de dados (que é o nome da interface) significa que as instâncias dessa classe podem ser associadas a variáveis declaradas de tal tipo. Em resumo, interfaces é a resposta a três problemas que se colocam numa hierarquia de classes: Definição clara de novos tipos de dados; Implementação de tais tipos de dados; Possibilidade de garantir que classes não relacionáveis na hierarquia possam partilhar certas propriedades comportamentais, ou seja, que implementam certo comportamento especificado. Métodos Programação II

Definição de uma Interface A declaração de uma interface Java é simples, pois apenas define um conjunto de assinaturas de métodos (implicitamente abstractos) e opcionalmente um conjunto de constantes (implicitamente public static final). As interfaces JAVA são declarações puramente sintácticas ainda mais restritivas que as classes abstractas. Numa classe abstracta é possível introduzir métodos concretos. Numa interface, todos os métodos são abstractos por definição. Numa classe abstracta, é possível introduzir variáveis de instância que todas as subclasses herdam e podem redefinir. Numa interface, os únicos identificadores de valores são constantes e final. Exemplo: public interface AutoEjectavel { int TEMPO_EJECT = 5; public void ejectar(); } Métodos Programação II

Exemplos de Interfaces Exemplos (definem tipos de dados): public interface Enumeravel { public abstract boolean vazia(); public abstract Object seguinte(); } public interface Colorivel public void defineCor(int cor); public interface Ordem public boolean igual(Ordem elem); public boolean maior(Ordem elem); public boolean menor(Ordem elem); Variáveis de tipos referenciados podem ter tipos associados a Classes ou Interfaces Dizer que uma classe B é subclasse de A e implementa I, escrevemos: classe B extends A implements I { … } Qualquer instância de B é do tipo B (subtipo de A) e também do tipo I. Notar que se tivermos a declaração I uma_var_i; Então a expressão (uma_var_i instanceof I) Retorna true. Métodos Programação II

Hierarquias de Interfaces Em Java temos uma hierarquia de interfaces paralela à hierarquia de classes. Nas interfaces há herança múltipla Podemos ter interface vazias chamadas marker interfaces (por essa mesma razão). As marker interfaces são como etiquetas, sendo úteis para determinar se os objectos têm certas propriedades usando instanceof. Métodos Programação II

Implementação de Interfaces A declaração de implementação de uma interface prescreve uma obrigatoriedade de implementação de todos os métodos abstractos por parte das classes que declararem serem suas implementações, ou seja, que usem a declaração implements. Exemplo: public interface Apagavel { public void apaga(); } public interface Regravavel extends Apagavel { // método(s) a decidir } public class Hi8 extends ItemMulti implements Apagavel { // private int minutos; private double ocupacao; private int gravacoes; . . . . // implementação de Apagavel public void apaga() { ocupacao = 0.0; gravacoes = 0; } } Métodos Programação II

Implementações (cont) Se a classe Hi8 implementa a interface Apagavel, então uma qualquer instância de Hi8 é também do tipo Apagavel, pelo que serão válidas as seguintes expressões: Hi8 filme1 = new Hi8("A1", "2005", "obs1", 180, 40.0, 3); Apagavel apg1 = filme1; apg1.apaga(); out.println("Ocupacao = " + filme1.getOcupa()); out.println("Gravações = " + apg1.getGrava()); Em conclusão, as interfaces definem portanto um protocolo de comportamento que pode ser implementado por qualquer classe em qualquer ponto da hierarquia. São úteis para: Reunirem similaridades comportamentais (métodos) entre classes não relacionadas sem forçar artificialmente o seu relacionamento hierárquico; Definirem novos tipos implementáveis por qualquer classe; Conterem a API comum de objectos sem indicação da sua verdadeira classe. Erro de compilação pois não podemos enviar uma msg de classe a uma váriavel do tipo interface que só responde a apaga(). Métodos Programação II

Métodos Programação II Interfaces: Sumário A partir de agora, uma qualquer classe de JAVA poderá, em função da forma como é definida, ser vista de duas diferentes perspectivas: de quem é subclasse, e, portanto, de quem herda estrutura e comportamento (e o que destes redefine ou acrescenta) que interfaces implementa, ou seja, quais as propriedades adicionais que acrescenta às suas instâncias, tais como, por exemplo, serem Conjuntos, serem Coloríveis, serem Regraváveis, Clonáveis, Persistentes, etc. Uma classe passará a ter duas views (ou interpretações) possíveis: É subclasse por se encontrar inserida na hierarquia normal de classes, caracterizada por possuir um mecanismo de herança simples de estrutura e comportamento, ainda que com redefinições e extensões; É subtipo por se encontrar semanticamente “envolvida”, ainda que apenas como o único mecanismo possível de implementação, numa hierarquia lógica com herança múltipla de definições de comportamento abstracto, ou seja, de especificações puramente sintácticas. Os métodos de implementação de interfaces JAVA definidos numa dada classe não devem, do ponto de vista de concepção, ser considerados como herdados pelas subclasses desta. Métodos Programação II

Classes Abstractas versus Interfaces Uma classe abstracta pode não ser 100% abstracta; porém, uma interface é sempre 100% abstracta (ou seja, sintáctica e sem especificação de qualquer semântica); Uma classe abstracta não impõe às suas subclasses a implementação obrigatória dos métodos abstractos, ou seja, uma subclasse de uma classe abstracta pode ainda ser uma classe abstracta; uma interface impõe, à classe que declarar que a implementa, uma implementação completa; Uma classe abstracta pode ser usada para se escrever software genérico, parametrizável e extensível; uma interface não tem, em princípio, tais objectivos, sendo em geral associada à necessidade de se especificar um conjunto adicional de propriedades funcionais, ou seja de tratamento, que sejam garantidas por uma dada implementação, podendo ser tais classes de implementação horizontais na hierarquia, isto é, não existindo entre si qualquer relacionamento na hierarquia simples de classes de JAVA; Classes e interfaces coexistem em JAVA em hierarquias com propriedades distintas, resultando o poder expressivo e de definição da linguagem JAVA da correcta simbiose das duas, o que requer, naturalmente, muita prática em desenvolvimento de grandes aplicações. Métodos Programação II

Interfaces: exemplo solução usando uma Superclasse abstracta versus solução usando uma Interface. public interface Lavavel { public void aLavar(); } Métodos Programação II

Métodos Programação II Interfaces Java1.5 A interface Serializable: Torna os objectos das classes que a implementam persistentes. Isto é, são possuidoras de persistência (sendo “serializáveis”). Isto vai ser importante quando falarmos de ObjectStreams. Esta interface é um examplo de uma marker interface. Interfaces parametrizáveis: Interface Comparable<T> está definida da seguinte forma genérica: public interface Comparable<T> { int compareTo (T obj); } Definição de ordem, por exemplo nas colecções. Classes como Double implementam a interface Comparable<Double>. Métodos Programação II

Interfaces Java1.5 (cont) A interface Iterator<E> public interface Iterator<E> { public boolean hasNext(); public E next(); public void remove(); } Aplicações em ArrayList: ArrayList<String> lista = new ArrayList<String>(); String temp = “”; for(Iterator<String> i = lista.iterator(); i.hasNext();) temp += i.next(); Equivalente a: for(String a:lista) temp += a; Equivalente a: ArrayList<String> lista = new ArrayList<String>(); Iterator<String> i = lista.iterator(); String temp = “”; while(i.hasNext()) temp += i.next(); Métodos Programação II

Métodos Programação II Exercícios Usar a seguinte hierarquia de classes implementando as duas interfaces definidas: Implementar os métodos descritos nas interfaces. Definir a classe VideoTeca que guarda um conjunto de objectos Apagaveis e Regravaveis e ItemMulti. Contar o número de objectos DVD, CD e Hi8 guardados na videoteca. Contar também o número de objectos apagaveis e regravaveis. Encontrar o objecto apagavel com maior duração. Métodos Programação II

Métodos Programação II Exercício Um empresa gere um conjunto de estufas. Cada Estufa é representada pela informação agrícola, designadamente: código, área em m2 e temperaturas máximas e mínimas. No entanto há três tipos de estufa: de fruta, de legumes e de flores. Existe um valor comercial fixo por cada tipo de estufa que é definido em euros/m2. As estufas de flores possuem nome de flor e lista de cores. As estufas de fruta, uma lista dos nomes dos frutos. As de legumes, o nome do legume e a altura média atingida. Desenhe uma classe GereEstufas que armazena a representação das estufas associadas a esta empresa. Para além disso implemente os seguintes requisitos: Métodos Programação II

Métodos Programação II Apresente a classe Estufa e suas subclasses. Apresente a implementação do método valorTotal() que calcula o valor comercial da estufa. Apresente a classe GereEstufas. Implemente aqui um método que calcula a área total das estufas desta empresa. Considerando as temperaturas registadas nas estufas, dada a temperatura registada a uma hora, se este valor não estiver entre o máximo e o mínimo de uma estufa então esta estufa está em risco. Escreva um método emRisco(int temp) que devolve o conjunto de códigos das estufas em risco. Sabendo que uma estufa em risco pode implicar um prejuízo igual ao seu valor, escreve um método perdas(int temp) que determina o valor total de prejuízo em estufas de um dado tipo. A empresa decidiu criar estufas de vinha que é um caso especial de uma estufa de fruta mas contendo o número de pés de fruto. Crie um método videiras() na classe GereEstufas que contabiliza o número total de pés de vinha pertencentes à empresa. Podemos formar um grupo de estufas com cardinal i.e. as de flores, de vinha e de frutas. Todas implementam o método cardinalidade() que calcula o número de características diferentes da estufa e.g. # de cores, # de pés, # de nomes. Implemente um método em GereEstufas que contabiliza o número de estufas com cardinal e calcula o total da soma das cardinalidades. Métodos Programação II