1 Paradigmas de Linguagem de Programação Java 5.0 Elifrancis Soares Diego Madruga Igor Cavalcanti Rafael Duarte Prof.: Augusto Sampaio.

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Programação Orientada a Objetos*
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.
Prof. Thiago Pereira Rique
Adaptação dos acetatos originais do livro: Java- An Introduction to Problem Solving & Programming, 4ª Edição Autor: Walter Savitch, ISBN © 2005.
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
Generalização, Especialização e Conceitos
Programação Básica em Java
Polimorfismo e Acoplamento Dinâmico
Walfredo Cirne walfredo.dsc.ufpb.br
Wagner Santos C. de Jesus
7 Abstração Genérica Unidades genéricas e instanciação.
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
A linguagem C#.
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.
Classes e objetos Arrays e Sobrecarga
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Classes, Objetos e Encapsulamento
Introdução a linguagem Python
Programação Orientada a Objetos com Java
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Atributos, Encapsulamento e Interface em Java
Programação I Aula 2 (Métodos)
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Operadores e Atribuições Capítulo 3
Professora Lucélia Oliveira
Pilhas Profa. Nádia Félix.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Wagner Santos C. de Jesus
Programação Orientada a Objetos - Java
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
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),
Classes Abstratas e Interface
M ÉTODOS DA C LASSE S TRING. FUNÇÕES COM STRING Uma string é um tipo texto que corresponde à união de um conjunto de caracteres. Em Java, as strings são.
Implementação Orientada a Objetos – Aula 06 Conversão de tipos e métodos estáticos Prof. Danielle Martin Universidade de Mogi das Cruzes
Módulo 9 Strings , Coleções e I/O
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,
Java 5 – Novos recursos Jobson Ronan
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Coleções em Java - Parte 2
Conceitos Básicos e Manipulação de Objetos
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Java 5 - Novidades Gerente de Tecnologia – Vitor Costa.
POO - I PROF.: JEAN CARLO MENDES
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
JAVA – Fila ATAI.
Luiz Carlos d´Oleron SJCP Java Avançado Java 1.5.
Coleções em Java (Parte 1)
Curso Básico de Android
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
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.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
COLEÇÕES Dilvan Moreira (baseado no livro Big Java)
Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
MÉTODOS Dilvan Moreira (baseado no livro Big Java)
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

1 Paradigmas de Linguagem de Programação Java 5.0 Elifrancis Soares Diego Madruga Igor Cavalcanti Rafael Duarte Prof.: Augusto Sampaio

2 AutoBoxing / UnBoxing Static Import

3 Agenda  Definição AutoBoxing / UnBoxing  Exemplos de AutoBoxing / UnBoxing  Definição Static Import  Exemplos Static Import

4 AutoBoxing / UnBoxing  Autoboxing é o termo de um objeto para representar um tipo primitivo Tipo PrimitivoClasse Wrapper  Unboxing é o termo para criar tipos primitivos para representar o valor de um objeto Classe Wrapper Tipo Primitivo Tipos Primitivos Ex.:boolean, char, byte, short, int, long, float e double Classe Wrapper: Ex.: Boolean, Char, Byte, Short, Integer, Long, Float e Double

5  A nova feature autoboxing/unboxing do java 1.5 permite: Passar tipos primitivos para métodos que esperam Objetos Wrappers (Integer, Long, etc) Passar Objetos Wrappers em métodos que esperam tipos primitivos AutoBoxing / UnBoxing

6 public class TesteAutoboxing { public static void main(String[] args) { int primitiveVal = 8; foo(primitiveVal); Integer wrapper = new Integer(8); bar(wrapper); } public class TesteAutoboxing { public static void main(String[] args) { int primitiveVal = 8; foo(primitiveVal); Integer wrapper = new Integer(8); bar(wrapper); } AutoBoxing / UnBoxing Nova Versão

7 public static void foo(Integer val) { System.out.println(“Valor: "+val); } public static void bar(int val){ System.out.println(“Valor: "+val); } public static void foo(Integer val) { System.out.println(“Valor: "+val); } public static void bar(int val){ System.out.println(“Valor: "+val); } AutoBoxing / UnBoxing

8 public class TesteAutoboxing { public static void main(String[] args) { int primitiveVal = 8; foo(Integer.valueOf(null, 8)); Integer wrapper = new Integer(8); bar(wrapper.intValue()); } public class TesteAutoboxing { public static void main(String[] args) { int primitiveVal = 8; foo(Integer.valueOf(null, 8)); Integer wrapper = new Integer(8); bar(wrapper.intValue()); } AutoBoxing / UnBoxing Na versão Antiga Java 1.4

9 publico class Test_Old_Java { public static void main(String args[]) { Integer temp = new Integer(15); int k = temp.intValue(); } } public class Test_New_Java { public static void main(String args[]) { Integer temp = 15; int k = temp; } } publico class Test_Old_Java { public static void main(String args[]) { Integer temp = new Integer(15); int k = temp.intValue(); } } public class Test_New_Java { public static void main(String args[]) { Integer temp = 15; int k = temp; } } AutoBoxing / UnBoxing Versão AntigaNova Versão

10 AutoBoxing / UnBoxing Antes List idades = new ArrayList(); idades.add(new Integer(47)); int idade = ((Integer)idades.get(0)).intValue(); Depois ArrayList idades = new ArrayList (); idades.add(47); int idade = idades.get(0); Antes List idades = new ArrayList(); idades.add(new Integer(47)); int idade = ((Integer)idades.get(0)).intValue(); Depois ArrayList idades = new ArrayList (); idades.add(47); int idade = idades.get(0); Sintaxe mais limpa

11  Muito conciso Código mais simples de ler Facilita a integração dos tipos genéricos  Baixa performance Impacta na performance (Usar objetos quando poderia usar primitivos consome mais recursos) AutoBoxing / UnBoxing

12  Permitir que certos membros das classes, por exemplo, constantes, variáveis ou métodos, possam ser referidos num dado contexto sem que se tenha de usar o nome da classe respectiva como qualificador ou prefixo. Static Import

13 import static java.lang.Math.*; import static java.lang.System.*; public class Test_New_Java { public static void main(String args[]) { out.println(sqrt(PI)); } } import static java.lang.Math.*; import static java.lang.System.*; public class Test_New_Java { public static void main(String args[]) { out.println(sqrt(PI)); } } public class Test_Old_Java { public static void main(String args[]) { System.out.println(Math.sqrt(Math.PI)); } } Static Import Versão Antiga Nova Versão

14 import static java.lang.Math.*; public class Teste { public static void main(String[] args){ r = exp(x) + log(y) – sqrt(pow(PI, y)); } import static java.lang.Math.*; public class Teste { public static void main(String[] args){ r = exp(x) + log(y) – sqrt(pow(PI, y)); } importjava.lang.Math; public class Teste { public static void main(String[] args){ r = Math.exp(x) + Math.log(y) – Math.sqrt(Math.pow(Math.PI, y)); } importjava.lang.Math; public class Teste { public static void main(String[] args){ r = Math.exp(x) + Math.log(y) – Math.sqrt(Math.pow(Math.PI, y)); } Static Import Pode importar tudo ou somente um especifico Sintaxe mais limpa Versão Antiga Nova Versão

15  Facilita muito o uso de APIs que trabalham com constantes padronizadas. Ex.: JOptionPane.OK_OPTION Static Import OK_OPTION

16 DIAS, A. M., Tipos e linguagens tipificadas, site: ctp.di.fct.unl.pt/~amd/lp1/teoricas/15.html Acesso: 24/04/06http://www- ctp.di.fct.unl.pt/~amd/lp1/teoricas/15.html CAMARGO, D., Javafree.org, Autoboxing e Unboxing do Java 1.5 site: Acesso: 24/04/06 MELO, R. M., Viva Linux, site: As novidades do Java 1.5, site: Acesso: 24/04/06 ÁVILA, M.D., Prepare-se para o Tigre - A nova versão de Java, site: Acesso: 24/04/06 HORTON, I.,Beginning Java™ 2, JDK™ 5 Edition, Wiley Publishing, Inc. ROCHA, H., Programação Orientada à Objetos com Java 2 SE, argonavis.com.br SOUZA, V. E. S., Novidades do Java 5, Grupo de usuários java do Estado do Espirito Santo ROCHA, H., Atualização J2SE 5.0, argonavis.com.br DOERDERLEIN, O P., Tiger: A Evolução de Java, javamagazine, Edição 12. DOERDERLEIN, O P., Migrando para o java 5, javamagazine, Edição 27. Referências

17 Enumerations

18 Agenda  Declaração de novos Tipos  Criação de tipos enumerados  Entendendo Enums

19 Declaração de novos Tipos  Java 1.4  classes e interfaces  Suficiente para maior parte da programação orientada a objetos, entretanto... Como definir um set de valores possíveis para um determinado tipo???

20 Declaração de novos Tipos  Java 1.5  Tipos Enumerados  Número limitado de valores possíveis

21 Criação de tipos enumerados  No mínimo 3 componentes básicos  enum keyword  O nome do novo tipo  Lista de valores válidos para o novo tipo

22  Existe uma série de outros componentes que também podem ser definidos  interface ou set of interfaces implementadas pelo enum  Definições de Variáveis  Definições de Métodos  Value-specific class bodies Criação de tipos enumerados

23 Criação de tipos enumerados

24 Erro comun In an enum declaration, it is a syntax error to declare enum constants after the enum type's constructors, fields and methods in the enum declaration.

25  São classes  type-safety  compile-time checking  Pode ser usados em declarações de variáveis  Estendem java.lang.Enum  nova classe do Tiger  TIpos implicitamente estendem Enum. Entendendo Enums

26  Não são inteiros  Cada valor declarado é uma instancia da própria classe  Construtor privado  Impossibilita a criação de instancias adicionais  Apenas as criadas em compile-time  Seus valores são public, static, e final  Nenhum valor declarado no enum pode ser alterado Entendendo Enums

27  Comparação com == ou equals( )  implementa java.lang.Comparable  Comparar usando compareTo( )  override toString( )  Retorna o nome do valor  Método valueOf( ) Entendendo Enums

28  Método ordinal( )  Retorna a posição de cada valor enumerado, começando do 0, baseado na ordem de declaração  Método values( )  iteration Entendendo Enums

29 Inline Enums

30 Iterating Over Enums

31 Referências Core Java™ 2 Volume I - Fundamentals, Seventh Edition By Cay S. Horstmann, Gary Cornell Java™ How to Program, Sixth Edition By H. M. Deitel - Deitel & Associates, Inc., P. J. Deitel - Deitel & Associates, Inc. Java 1.5 Tiger: A Developer's Notebook By David Flanagan, Brett McLaughlin

32 Referências Head First Java, Second Edition By Kathy Sierra, Bert Bates Ivor Horton’s Beginning Java™ 2, JDK™ 5 Edition By Ivor Horton

33 Generics

34 Agenda  Usando Type-safe Lists  Usando Type-safe Maps  Iterando sobre Tipos Parametrizados  Aceitando Tipos Parametrizados como argumentos  Retornando Tipos Parametrizados  Generics e Conversões de tipo

35 Por que Generics?  Maior facilidade de desenvolvimento  Maior robustez  Cria classes type-safe  Evita o uso extensivo de type casts e instanceof

36 List listOfStrings = getListOfStrings(); for(Iterator i = listOfStrings.iterator();i.hasNext;){ String item = (String)i.next(); //código } List listOfStrings = getListOfStrings(); for(Iterator i = listOfStrings.iterator();i.hasNext;){ String item = (String)i.next(); //código } Usando Type-Safe Lists Tire o Cast (String) e terá um erro!!!  Generics Permite a você restringir o Tipo que a lista vai aceitar List listOfStrings

37 Usando Type-Safe Lists List onlyStrings = new LinkedList (); onlyStrings.add(“Adicao Legal”); onlyStrings.add(new StringBuilder(“Adicao Ilegal”)); onlyStrings.add(25); Antigo: public boolean add(Object obj) Novo: public boolean add(E o) List onlyStrings = new LinkedList (); onlyStrings.add(“Adicao Legal”); onlyStrings.add(new StringBuilder(“Adicao Ilegal”)); onlyStrings.add(25); Antigo: public boolean add(Object obj) Novo: public boolean add(E o)

38 Usando Type-Safe Lists E os tipos Primitivos? List list = new LinkedList (); E os tipos Primitivos? List list = new LinkedList (); Não Compila!!! Compila!!!

39 Usando Type-Safe Maps Map squares = new HashMap (); for(int i = 0; i < 100; i++){ squares.put(i, i++); } for(int i = 0; i < 10; i++){ int n = i*3 System.out.println(“O quadrado de “+n+” é “ + squares.get(n)); } Map squares = new HashMap (); for(int i = 0; i < 100; i++){ squares.put(i, i++); } for(int i = 0; i < 10; i++){ int n = i*3 System.out.println(“O quadrado de “+n+” é “ + squares.get(n)); }

40 Usando Type-Safe Maps Outros exemplos: Map strings = new HashMap (); Map map = new HashMap (); Map args = new HashMap (); Outros exemplos: Map strings = new HashMap (); Map map = new HashMap (); Map args = new HashMap ();

41 List list = new LinkedList (); list.add(“Happy”); list.add(“Birthday”); list.add(“To”); list.add(“You”); for(Iterator i = list.iterator(); i.hasNext();){ String s = i.next(); System.out.println(s); } List list = new LinkedList (); list.add(“Happy”); list.add(“Birthday”); list.add(“To”); list.add(“You”); for(Iterator i = list.iterator(); i.hasNext();){ String s = i.next(); System.out.println(s); } Iterando sobre tipos parametrizados Erro!!!!!!

42 Iterando sobre tipos parametrizados List list = new LinkedList (); list.add(“Happy”); list.add(“Birthday”); list.add(“To”); list.add(“You”); for(Iterator i = list.iterator(); i.hasNext();){ String s = i.next(); System.out.println(s); } List list = new LinkedList (); list.add(“Happy”); list.add(“Birthday”); list.add(“To”); list.add(“You”); for(Iterator i = list.iterator(); i.hasNext();){ String s = i.next(); System.out.println(s); } Funciona!!!!

43 Aceitando Tipos Parametrizados como argumentos private void printList(List list, PrintStream out) throws IOException{ for (Iterator i =list.iterator(); i.hasNext();){ out.println(i.next()); } private void printList(List list, PrintStream out) throws IOException{ for (Iterator i =list.iterator(); i.hasNext();){ out.println(i.next()); }

44 Retornando Tipos Parametrizados private List getListOfStrings(){ List list = new LinkedList(); list.add(“Hello”); list.add(“World”); return list; } private List getListOfStrings(){ List list = new LinkedList(); list.add(“Hello”); list.add(“World”); return list; }

45 Retornando Tipos Parametrizados private List getListOfStrings(){ List list = new LinkedList(); list.add(“Hello”); list.add(“World”); return list; } private List getListOfStrings(){ List list = new LinkedList(); list.add(“Hello”); list.add(“World”); return list; }

46 Generics e Conversões de tipo List ints = new ArrayList ( ); ints.add(1); ints.add(2); // Isto é ilegal List numbers = ints; // Um float foi incluido numa lista de ints! Isto resulta //numa exceção do tipo // ClassCastException numbers.add(1.2); // Isso é pior List objects = ints; objects.add("How are you doing?"); List ints = new ArrayList ( ); ints.add(1); ints.add(2); // Isto é ilegal List numbers = ints; // Um float foi incluido numa lista de ints! Isto resulta //numa exceção do tipo // ClassCastException numbers.add(1.2); // Isso é pior List objects = ints; objects.add("How are you doing?");

47 Referências  O'Reilly Java 1.5 Tiger Developer's Notebook O'Reilly Java 1.5 Tiger Developer's Notebook   Java™ How to Program, Sixth Edition

48 Definindo Tipos Genéricos e Usando Curingas

49 Agenda  Definindo tipos genéricos  Usando Curingas  Métodos Genéricos

50 Definição de Tipos Genéricos  Além de usar os tipos genéricos providos por Java (e.g. Collection), podemos criar nossos próprios tipos genéricos  Para tanto, ao definirmos nossos tipos, precisamos indicar que os mesmos suportarão o recurso de generics.

51 Exemplo: Pilha public class Pilha { private Vector elements new Vector(); public Object pop() { Object result = null; result = this.elements.removeElementAt(0); return result; } public void push(Object obj) { this.elements.insertElementAt(obj, 0); } public class Pilha { private Vector elements new Vector(); public Object pop() { Object result = null; result = this.elements.removeElementAt(0); return result; } public void push(Object obj) { this.elements.insertElementAt(obj, 0); }

52 Exemplo: Pilha Genérica public class Pilha { private Vector elements = new Vector (); public T pop() { return this.elements.removeElementAt(0); } public void push(T obj) { this.elements.insertElementAt(obj, 0); } public class Pilha { private Vector elements = new Vector (); public T pop() { return this.elements.removeElementAt(0); } public void push(T obj) { this.elements.insertElementAt(obj, 0); } Pilha pilhaExpressoes = new Pilha ();

53 Definindo tipos genéricos  Para definir uma classe genérica, basta alterar o identificador da classe, para incluir o elemento de tipagem modificadores class NomeDaClasse [extends SuperClasse ] implements [lista de interfaces] { corpoDaClasse } modificadores class NomeDaClasse [extends SuperClasse ] implements [lista de interfaces] { corpoDaClasse } Aqui fica o especificador de tipo

54 Genéricos e subtipos  Veja este trecho de código: List listString = new ArrayList (); List listObject = listString; List listString = new ArrayList (); List listObject = listString; Este código aparentemente está ok, mas com genéricos, isso não é verdade! Atenção: Dizer que A estende B, não significa que List extends List !!!

55 void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); } void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); } Definindo curingas  Imagine que você quer definir uma método que aceite uma coleção de qualquer tipo de objetos void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); } void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); } Atenção: Collection não é o pai de todas as coleções!!! Java < 1.5 Java 1.5

56 Curingas A solução neste caso, seria colocar um “?” Indicando que você não conhece, a priori, o tipo da coleção.  A solução neste caso, seria colocar um “?” Indicando que você não conhece, a priori, o tipo da coleção. void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); } void printCollection(Collection c){ for (Object obj: c){ System.out.println(obj); }

57 Potenciais problemas class classGenerica { void metodoGenerico(T obj){ obj.iterator(); } class classGenerica { void metodoGenerico(T obj){ obj.iterator(); } E se o tipo T não definir um método iterator?

58 Pode-se definir restrições sobre os tipos! class classGenerica { void metodoGenerico(T obj){ obj.iterator(); } class classGenerica { void metodoGenerico(T obj){ obj.iterator(); } Agora, o tipo T tem de ser do tipo Collection

59 Mais sobre curingas e restrições  É possível indicar outras restrições sobre tipos 

60 Métodos Genéricos static void fromArrayToCollection(T[] a, Collection c) { for (T o : a) { c.add(o); } } static void fromArrayToCollection(T[] a, Collection c) { for (T o : a) { c.add(o); } } Object[] oa = new Object[100]; Collection co = new ArrayList (); fromArrayToCollection(oa, co);//T inferido para Object Object[] oa = new Object[100]; Collection co = new ArrayList (); fromArrayToCollection(oa, co);//T inferido para Object

61 Referências  Generics Tutorial  tutorial.pdf tutorial.pdf  Using and Programming Generics in J2SE 5.0  cles/J2SE/generics/index.html cles/J2SE/generics/index.html

62 Duvidas ?