Paradigmas de Linguagem de Programao Java 5 0
- Slides: 62
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
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 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 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[] 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: "+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[] 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[]) { 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 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 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 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. 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 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. : JOption. Pane. OK_OPTION 15
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
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 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 possíveis 20
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 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
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 Ø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 Ø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 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 0, baseado na ordem de declaração ØMétodo values( ) Øiteration 28
Inline Enums 29
Iterating Over Enums 30
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 Java, Second Edition By Kathy Sierra, Bert Bates 32
Generics 33
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 Ø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 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”); 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. 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 = 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, 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”); 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”); 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 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. 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. 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); 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 Ø Java™ How to Program, Sixth Edition 47
Definindo Tipos Genéricos e Usando Curingas 48
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 (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() { 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 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 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 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 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ê 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 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 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 Ø <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 (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 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
- Paradigma conductista
- Rationele actor paradigma
- Ejemplos de paradigmas personales
- Paradigma cognoscitivo
- Paradigma logico
- Mapeamento objeto-relacional
- Paradigma cognitivo
- Como hacer un paradigma
- Paradigmas eticos
- Cambios y paradigmas gerenciales
- Paradigmas curriculares
- Que es el holismo
- Paradigma conductista
- Paradigma dos 5 macacos
- Cambios culturales
- Los nuevos paradigmas
- Paradigma ejemplos
- Paradigmas de categorizacion en enfermeria
- Paradigmas de la didáctica steiman
- L
- Diferencia entre sintagma y paradigma
- Paradigmas de la investigacion
- Paradigmas de programacion
- Nuevos paradigmas educativos
- Paradigmas de interacción
- Paradigma ejemplos
- Ejemplos de pioneros del paradigma
- Paradigmas
- Ejemplos de paradigmas
- Lf vs nnn
- Seis paradigmas de interacción humana
- Import java
- Import java.util.*
- Java compiler translates java source code into
- Import java.util.scanner;
- Java import java.io.*
- Import java.awt.* import java.applet.*
- Javatpoint ejb
- Java random
- Perbedaan antara java swing dan awt adalah
- Import scanner java
- Java import java.io.*
- Import java.util.scanner;
- Import java.awt.event.*;
- Java import java.util.*
- Auto de natal pernambucano
- Linguagem imperativa
- Linguagem compilada
- Alm significado
- Funções de linguagem
- Linguagem lingua e fala
- Linguagem literaria
- Desenho com ponto linhas e formas
- Figuras de linguagem
- Linguagem compilada
- Sansa kroma letra
- Linguagem ladder simbologia
- Linguagem c
- Linguagem pessoal
- Desenvolvimento da linguagem humana
- Anafora
- Diferença entre lingua e linguagem
- A ironia ocorre quando cmsp