Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouNeusa Vidal Bento Alterado mais de 7 anos atrás
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 ?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.