A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 Paradigmas de Linguagem de Programação Java 5.0 Elifrancis Soares Diego Madruga Igor Cavalcanti Rafael Duarte Prof.: Augusto Sampaio."— Transcrição da apresentação:

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

2 2 AutoBoxing / UnBoxing Static Import

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

4 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 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 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 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 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 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 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 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 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 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 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 15  Facilita muito o uso de APIs que trabalham com constantes padronizadas. Ex.: JOptionPane.OK_OPTION Static Import OK_OPTION

16 16 DIAS, A. M., Tipos e linguagens tipificadas, site: http://www- 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: http://www.javafree.org/javabb/viewtopic.jbb?t=6588 Acesso: 24/04/06 http://www.javafree.org/javabb/viewtopic.jbb?t=6588 MELO, R. M., Viva Linux, site: As novidades do Java 1.5, site: http://www.vivaolinux.com.br/artigos/verArtigo.php Acesso: 24/04/06 http://www.vivaolinux.com.br/artigos/verArtigo.php ÁVILA, M.D., Prepare-se para o Tigre - A nova versão de Java, site: http://www.mhavila.com.br/topicos/java/tiger.htmlhttp://www.mhavila.com.br/topicos/java/tiger.html 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 17 Enumerations

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

19 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 20 Declaração de novos Tipos  Java 1.5  Tipos Enumerados  Número limitado de valores possíveis

21 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 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 23 Criação de tipos enumerados

24 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 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 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 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 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 29 Inline Enums

30 30 Iterating Over Enums

31 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 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 33 Generics

34 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 35 Por que Generics?  Maior facilidade de desenvolvimento  Maior robustez  Cria classes type-safe  Evita o uso extensivo de type casts e instanceof

36 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 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 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 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 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 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 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 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 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 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 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 47 Referências  O'Reilly Java 1.5 Tiger Developer's Notebook O'Reilly Java 1.5 Tiger Developer's Notebook  http://www.developertutorials.com http://www.developertutorials.com  Java™ How to Program, Sixth Edition

48 48 Definindo Tipos Genéricos e Usando Curingas

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

50 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 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 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 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 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 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 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 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 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 59 Mais sobre curingas e restrições  É possível indicar outras restrições sobre tipos 

60 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 61 Referências  Generics Tutorial  http://java.sun.com/j2se/1.5/pdf/generics- tutorial.pdf http://java.sun.com/j2se/1.5/pdf/generics- tutorial.pdf  Using and Programming Generics in J2SE 5.0  http://java.sun.com/developer/technicalArti cles/J2SE/generics/index.html http://java.sun.com/developer/technicalArti cles/J2SE/generics/index.html

62 62 Duvidas ?


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

Apresentações semelhantes


Anúncios Google