Paradigmas de Linguagem de Programao Java 5 0

  • Slides: 62
Download presentation
Paradigmas de Linguagem de Programação Java 5. 0 Elifrancis Soares <ers@cin. ufpe. br> Diego

Paradigmas de Linguagem de Programação Java 5. 0 Elifrancis Soares <ers@cin. ufpe. br> Diego Madruga <dms 2@cin. ufpe. br> Igor Cavalcanti <iwc@cin. ufpe. br> Rafael Duarte <rmd@cin. ufpe. br> Prof. : Augusto Sampaio 1

Auto. Boxing / Un. Boxing Static Import 2

Auto. Boxing / Un. Boxing Static Import 2

Agenda Ø Definição Auto. Boxing / Un. Boxing Ø Exemplos de Auto. Boxing /

Agenda Ø Definição Auto. Boxing / Un. Boxing Ø Exemplos de Auto. Boxing / Un. Boxing Ø Definição Static Import Ø Exemplos Static Import 3

Auto. Boxing / Un. Boxing Ø Autoboxing é o termo de um objeto para

Auto. Boxing / Un. Boxing Ø Autoboxing é o termo de um objeto para representar um tipo primitivo Tipo Primitivo Classe 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 4

Auto. Boxing / Un. Boxing Ø A nova feature autoboxing/unboxing do java 1. 5

Auto. Boxing / Un. Boxing Ø 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 5

Auto. Boxing / Un. Boxing public class Teste. Autoboxing { public static void main(String[]

Auto. Boxing / Un. Boxing public class Teste. Autoboxing { public static void main(String[] args) { int primitive. Val = 8; Nova Versão foo(primitive. Val); Integer wrapper = new Integer(8); bar(wrapper); } 6

Auto. Boxing / Un. Boxing public static void foo(Integer val) { System. out. println(“Valor:

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

Auto. Boxing / Un. Boxing public class Teste. Autoboxing { public static void main(String[]

Auto. Boxing / Un. Boxing public class Teste. Autoboxing { public static void main(String[] args) { Na versão Antiga int primitive. Val = 8; Java 1. 4 foo(Integer. value. Of(null, 8)); Integer wrapper = new Integer(8); bar(wrapper. int. Value()); } 8

Auto. Boxing / Un. Boxing publico class Test_Old_Java { public static void main(String args[])

Auto. Boxing / Un. Boxing publico class Test_Old_Java { public static void main(String args[]) { Integer temp = new Integer(15); int k = temp. int. Value(); } } public class Test_New_Java { public static void main(String args[]) { Integer temp = 15; int k = temp; } } Versão Antiga Nova Versão 9

Auto. Boxing / Un. Boxing Antes List idades = new Array. List(); idades. add(new

Auto. Boxing / Un. Boxing Antes List idades = new Array. List(); idades. add(new Integer(47)); int idade = ((Integer)idades. get(0)). int. Value(); Depois Array. List<Integer> idades = new Array. List<Integer>(); idades. add(47); int idade = idades. get(0); Sintaxe mais limpa 10

Auto. Boxing / Un. Boxing Ø Muito conciso Código mais simples de ler Facilita

Auto. Boxing / Un. Boxing Ø 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) 11

Static Import Ø Permitir que certos membros das classes, por exemplo, constantes, variáveis ou

Static Import Ø 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. 12

Static Import public class Test_Old_Java { public static void main(String args[]) { System. out.

Static Import public class Test_Old_Java { public static void main(String args[]) { System. out. println(Math. sqrt(Math. 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)); } } Versão Antiga Nova Versão 13

Static Import importjava. lang. Math; Versão Antiga public class Teste { public static void

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

Static Import Ø Facilita muito o uso de APIs que trabalham constantes padronizadas. Ex.

Static Import Ø Facilita muito o uso de APIs que trabalham constantes padronizadas. Ex. : JOption. Pane. OK_OPTION 15

Referências DIAS, A. M. , Tipos e linguagens tipificadas, site: http: //wwwctp. di. fct.

Referências DIAS, A. M. , Tipos e linguagens tipificadas, site: http: //wwwctp. di. fct. unl. pt/~amd/lp 1/teoricas/15. html Acesso: 24/04/06 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 MELO, R. M. , Viva Linux, site: As novidades do Java 1. 5, site: http: //www. vivaolinux. com. br/artigos/ver. Artigo. php Acesso: 24/04/06 ÁVILA, M. D. , Prepare-se para o Tigre - A nova versão de Java, site: http: //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 J 2 SE 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. 16

Enumerations 17

Enumerations 17

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

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

Declaração de novos Tipos Ø Java 1. 4 Øclasses e interfaces ØSuficiente para maior

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? ? ? 19

Declaração de novos Tipos Ø Java 1. 5 ØTipos Enumerados ØNúmero limitado de valores

Declaração de novos Tipos Ø Java 1. 5 ØTipos Enumerados ØNúmero limitado de valores possíveis 20

Criação de tipos enumerados Ø No mínimo 3 componentes básicos Ø enum keyword Ø

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 21

Criação de tipos enumerados Ø Existe uma série de outros componentes que também podem

Criação de tipos enumerados Ø 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 22

Criação de tipos enumerados 23

Criação de tipos enumerados 23

Erro comun In an enum declaration, it is a syntax error to declare enum

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. 24

Entendendo Enums ØSão classes Øtype-safety Øcompile-time checking ØPode ser usados em declarações de variáveis

Entendendo Enums Ø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. 25

Entendendo Enums ØNão são inteiros ØCada valor declarado é uma instancia da própria classe

Entendendo Enums Ø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 26

Entendendo Enums ØComparação com == ou equals( ) Øimplementa java. lang. Comparable ØComparar usando

Entendendo Enums ØComparação com == ou equals( ) Øimplementa java. lang. Comparable ØComparar usando compare. To( ) Øoverride to. String( ) ØRetorna o nome do valor ØMétodo value. Of( ) 27

Entendendo Enums ØMétodo ordinal( ) ØRetorna a posição de cada valor enumerado, começando do

Entendendo Enums Ø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 28

Inline Enums 29

Inline Enums 29

Iterating Over Enums 30

Iterating Over Enums 30

Referências Core Java™ 2 Volume I - Fundamentals, Seventh Edition By Cay S. Horstmann,

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 Mc. Laughlin 31

Referências Ivor Horton’s Beginning Java™ 2, JDK™ 5 Edition By Ivor Horton Head First

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

Generics 33

Generics 33

Agenda Ø Usando Type-safe Lists Ø Usando Type-safe Maps Ø Iterando sobre Tipos Parametrizados

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 34

Por que Generics? Ø Maior facilidade de desenvolvimento Ø Maior robustez ØCria classes type-safe

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

Generics. Type-Safe Permite a você restringir o Lists Usando Tipo que a lista vai

Generics. Type-Safe Permite a você restringir o Lists Usando Tipo que a lista vai aceitar List<String> list. Of. Strings List list. Of. Strings = get. List. Of. Strings(); for(Iterator i = list. Of. Strings. iterator(); i. has. Next; ){ String item = (String)i. next(); //código } Tire o Cast (String) e terá um erro!!! 36

Usando Type-Safe Lists List<String> only. Strings = new Linked. List<String>(); only. Strings. add(“Adicao Legal”);

Usando Type-Safe Lists List<String> only. Strings = new Linked. List<String>(); only. Strings. add(“Adicao Legal”); only. Strings. add(new String. Builder(“Adicao Ilegal”)); only. Strings. add(25); Antigo: public boolean add(Object obj) Novo: public boolean add(E o) 37

Usando Type-Safe Lists Não Compila!!! E os tipos Primitivos? List<int> list = new Linked.

Usando Type-Safe Lists Não Compila!!! E os tipos Primitivos? List<int> list = new Linked. List<int>(); List<Integer> list = new Linked. List<Integer>(); Compila!!! 38

Usando Type-Safe Maps Map<Integer, Integer> squares = new Hash. Map<Integer, Integer>(); for(int i =

Usando Type-Safe Maps Map<Integer, Integer> squares = new Hash. Map<Integer, Integer>(); 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)); } 39

Usando Type-Safe Maps Outros exemplos: Map<String, String> strings = new Hash. Map<String, String>(); Map<String,

Usando Type-Safe Maps Outros exemplos: Map<String, String> strings = new Hash. Map<String, String>(); Map<String, Object> map = new Hash. Map<String, Object>(); Map<Long, String> args = new Hash. Map<Long, String>(); 40

Iterando sobre tipos parametrizados List<String> list = new Linked. List<String>(); list. add(“Happy”); list. add(“Birthday”);

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

Iterando sobre tipos parametrizados List<String> list = new Linked. List<String>(); list. add(“Happy”); list. add(“Birthday”);

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

Aceitando Tipos Parametrizados como argumentos private void print. List(List<String> list, Print. Stream out) throws

Aceitando Tipos Parametrizados como argumentos private void print. List(List<String> list, Print. Stream out) throws IOException{ for (Iterator<String> i =list. iterator(); i. has. Next(); ){ out. println(i. next()); } } 43

Retornando Tipos Parametrizados private List get. List. Of. Strings(){ List list = new Linked.

Retornando Tipos Parametrizados private List get. List. Of. Strings(){ List list = new Linked. List(); list. add(“Hello”); list. add(“World”); return list; } 44

Retornando Tipos Parametrizados private List<String> get. List. Of. Strings(){ List<String> list = new Linked.

Retornando Tipos Parametrizados private List<String> get. List. Of. Strings(){ List<String> list = new Linked. List(); list. add(“Hello”); list. add(“World”); return list; } 45

Generics e Conversões de tipo List<Integer> ints = new Array. List<Integer>( ); ints. add(1);

Generics e Conversões de tipo List<Integer> ints = new Array. List<Integer>( ); ints. add(1); ints. add(2); // Isto é ilegal List<Number> numbers = ints; // Um float foi incluido numa lista de ints! Isto resulta //numa exceção do tipo // Class. Cast. Exception numbers. add(1. 2); // Isso é pior List<Object> objects = ints; objects. add("How are you doing? "); 46

Referências Ø O'Reilly Java 1. 5 Tiger Developer's Notebook Ø http: //www. developertutorials. com

Referências Ø O'Reilly Java 1. 5 Tiger Developer's Notebook Ø http: //www. developertutorials. com Ø Java™ How to Program, Sixth Edition 47

Definindo Tipos Genéricos e Usando Curingas 48

Definindo Tipos Genéricos e Usando Curingas 48

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

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

Definição de Tipos Genéricos Ø Além de usar os tipos genéricos providos por Java

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. 50

Exemplo: Pilha public class Pilha { private Vector elements new Vector(); public Object pop()

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

Exemplo: Pilha Genérica public class Pilha<T> { private Vector<T> elements = new Vector<T>(); public

Exemplo: Pilha Genérica public class Pilha<T> { private Vector<T> elements = new Vector<T>(); public T pop() { return this. elements. remove. Element. At(0); } public void push(T obj) { this. elements. insert. Element. At(obj, 0); } Pilha<Integer> pilha. Expressoes = new Pilha<Integer>(); 52

Definindo tipos genéricos Ø Para definir uma classe genérica, basta alterar o identificador da

Definindo tipos genéricos Ø Para definir uma classe genérica, basta alterar o identificador da classe, para incluir o elemento de tipagem modificadores class Nome. Da. Classe<especificador. De. Tipo> [extends Super. Classe ] implements [lista de interfaces] { corpo. Da. Classe } Aqui fica de tipo o especificador 53

Genéricos e subtipos Ø Veja este trecho de código: List<String> list. String = new

Genéricos e subtipos Ø Veja este trecho de código: List<String> list. String = new Array. List<String>(); List<Object> list. Object = list. String; 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<A> extends List<B> !!! 54

Definindo curingas void print. Collection(Collection c){ for (Object obj: quer c){ definir uma método

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

Curingas Ø A solução neste caso, seria colocar um “? ” Indicando que você

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

Potenciais problemas class. Generica<T> { void metodo. Generico(T obj){ obj. iterator(); } } E

Potenciais problemas class. Generica<T> { void metodo. Generico(T obj){ obj. iterator(); } } E se o tipo T não definir um método iterator? 57

Pode-se definir restrições sobre os tipos! class. Generica<? extends Collection> { void metodo. Generico(T

Pode-se definir restrições sobre os tipos! class. Generica<? extends Collection> { void metodo. Generico(T obj){ obj. iterator(); } } Agora, o tipo T tem de ser do tipo Collection 58

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

Mais sobre curingas e restrições Ø É possível indicar outras restrições sobre tipos Ø <T extends S> Ø <T extends S & V> Ø <T super S> 59

Métodos Genéricos static <T> void from. Array. To. Collection(T[] a, Collection<T> c) { for

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

Referências Ø Generics Tutorial Øhttp: //java. sun. com/j 2 se/1. 5/pdf/genericstutorial. pdf Ø Using

Referências Ø Generics Tutorial Øhttp: //java. sun. com/j 2 se/1. 5/pdf/genericstutorial. pdf Ø Using and Programming Generics in J 2 SE 5. 0 Øhttp: //java. sun. com/developer/technical. Arti cles/J 2 SE/generics/index. html 61

Duvidas ? 62

Duvidas ? 62