Anda di halaman 1dari 23

Programao Orientada por Objectos Introduo ao JavaFX 1

Prof. Jos Braz Prof. Patricia Macedo Prof. Jos Cordeiro Departamento de Sistemas e Informtica Escola Superior de Tecnologia de Setbal Instituto Politcnico de Setbal 2011/1012

Sumrio
Coleo:
O que ?

Java Collections Framework (JCF)


O que ? Interfaces genricas e Algoritmos Polimrficos

Listas
Interface List<E>
Classe ArrayList<E> Classe LinkedList<E>

Iterao e Alteraes em Colees


Ciclo foreach No modificar a coleo durante a iterao Interface e Classe Iterator<E>

Conjuntos (set)
Interface Set
Classe HashSet<E>

Mapas (Map)
Interface Map
Classe HashMap<K,V>
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 2

Sumrio
Em Java FX 2.0 necessrio falar nas classes de base ao ambiente e na sua relao de utilizao, nomeadamente: Application (s para dar uma ideia). Stage Scene Node ( com exemplos de Shape e UI Controls) Group E nas noes de propriedades. Poderamos utilizar alguns exemplos do livro do Captulo 1: 1.2 Como demo inicial 1.3 Mostra a escrita de texto 1.4 Mostra a utilizao de fontes (no sei se os efeitos adicionados no podero complicar. 1.5 Este utiliza vrias Shapes mas acho que algumas podem complicar (CubicCurve e QuadCurve) 1.6 A utilizao de cores apenas importante para os desenhos que eles tero de criar. Mas este exemplo demasiado complexo. Os exemplos anteriores tm essencialmente a ver com o desenho/parte grfica mas falta agora um pouco de controlos standard e resposta a eventos do rato ou do teclado. 1.7 Introduz os mens mas aqui acho que s se devria falar de exemplos simples (sem CheckMenuItem ou RadioMenuItem). Tambm sem falar em binding 1.8 Importante para fazerem o tabuleiro. Apenas os elementos essenciais. Mais alguns componentes bsicos. 1.9, 1.10 parecem-me demasiado complexos para eles. 1.11 Apenas interessa responderem a eventos do rato. 1.12 no 1.13 talvez s para a interaco usando o teclado. 1.14, 1.15, 1.16, 1.17 no 2.1 importante para o projecto saberem trabalhar com algumas imagens. E animaes apenas l mais para o fim. Resumindo a minha proposta seria: Semana 1 trabalhar com ambiente grfico simples: Shapes (texto, fontes) Semana 2 trabalhar com ambiente semelhante ao Swing com controlos elementares: botes, labels e caixas de texto + mens. Incluindo tratamento de eventos. Semana 3 animaes (s para os motivar com o aspecto aplicaes j que existe-laboratrio desta semana). 19-06-2012 Prof.das Jos Braz - Prof. Josno Cordeiro Prof Patricia Macedo 3

Colees e a Java Collections Framework


Colees: agrupam vrios elementos numa estrutura de dados organizada, com propriedades e funcionalidades prprias
Exemplo: o caso de uma Fila de espera, uma estrutura linear, em que os elementos que a compem se arrumam sequencialmente e em que cada novo elemento inserido no fim da fila e o primeiro elemento a remover o que primeiro foi inserido. (FIFO first in first out)

Java Collections Framework (JCF):


uma arquitetura unificada que engloba interfaces, classes (abstratas e concretas) e algoritmos (implementados por) mtodos capazes de manipular Colees. A JCF inclui as interfaces de quatro principais tipos de colees:
Conjuntos (Set): Listas (List): Mapas (Map): Filas (Queue) : Coleo de elementos sem ordem e sem elementos repetidos Coleo de elementos ordenados e com possveis repeties Coleo de pares chave-valor, sem repetio da chave Sequncias de elementos com diferentes critrios de insero e remoo

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

Java Collections Framework Interfaces Genricas

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

Java Collections Framework Interfaces Genricas


As interfaces definidas na JCF so ditas interfaces genricas porque as classes que as implementam podem armazenar um qualquer tipo de dados.
Note que o tipo de dados a armazenar por essas classes especificado na sua definio tornando-as passveis de guardar apenas dados desse tipo. Exemplos: public interface Collection<E>
Leia-se: Coleco de elementos do tipo Element A referncia sintctica <E> assinala que a interface genrica. E pode ser String, Integer, ou qualquer referncia a outro tipo de objetos.

public interface Map<K,V>


Leia-se: mapa de elementos do tipo Value com chave do tipo Key.

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

Java Collections Framework Algoritmos Polimrficos


A maioria dos algoritmos polimrficos disponibilizados pela JCF atravs da classse Collections aplicam-se especificamente a listas, alguns deles so
sort ordena uma lista por um critrio shuffle baralha os elementos da lista aleatoriamente. reverse reverte a ordem dos elementos na lista. rotate roda todos os elementos da lista numa distncia especificada. swap troca os elementos em posies especificadas de uma lista. replaceAll troca todas as ocorrncias de um valor por um outro valor especificado. fill atribui a todos os elementos da lista um valor especificado. copy copia uma lista para outra. binarySearch procura um elemento numa lista com o algoritmo de procura binria.

Exemplo de evocao de um algoritmo polimrfico:


Collections.rotate(nomeDaLista, 4); Passa os 4 ltimos elementos de nomeDalista para o principio de nomeDalista pela mesma ordem em que estavam no final da lista.
Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 7

19-06-2012

Colees Interface Collection<E>


Interface na raiz da hierarquia. Collection<E> , por isso mesmo, o menor denominador comum de todas as implementaes de colees, til como referncia genrica de colees, e na manipulao com a mxima generalidade.

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

Colees Interface List<E>


Interface que impe uma ordem na coleo. As listas podem ter elementos duplicados. O cliente de uma Lista tem, normalmente, controlo efetivo sobre o ponto onde um elemento inserido. O acesso a um elemento pode ser feito por um ndice (referncia de posio).

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

Colees ArrayList<E>
List: ArrayList<E> a implementao da interface List<E> mais comum com bom desempenho.
a nica que estudaremos detalhadamente.
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();

Declara e cria uma ArrayList chamada pessoas para armazenar objetos da classe Pessoa

Exemplo:
public static void main(String[] args) { ArrayList<String> lista = new ArrayList<String>(); // cria a ArrayList de Strings lista.add("IP"); // adiciona a String IP lista.add("POO"); // adiciona a String POO a segyuira a IP lista.add("POO"); // adiciona a String POO a seguir a POO lista.add("IP"); // adiciona a String IP a seguir a POO for(int i = 0; i <lista.size(); ++i) { // itera a lista de [0] a lista.size if (lista.get(i).equals("POO")) // se contedo de lista.get(i) for igual a POO lista.remove(i); // remove o elemento [i] da lista } lista.remove("IP"); // remove o 1 elemento c/ String IP da lista for(int i = 0; i <lista.size(); ++i) System.out.println(lista.get(i)); // O resultado surpreendente? }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 10

Colees LinkedList<E>
List: LinkedList Nas operaes de insero e remoo de elementos pode oferecer melhor desempenho.
LinkedList<Pessoa> pessoas = new LinkedList<Pessoa>(); Declara e cria uma LinkedList chamada pessoas para armazenar objetos da classe Pessoa

Exemplo:
public static void main(String[] args) { LinkedList<Integer> lista = new LinkedList<Integer>(); // Cria LinkedList de int for (int val = 0; val < 10; val++) lista.add(new Integer(val)); for (int i=0; i< lista.size(); i++) if (lista.get(i).intValue()==5) lista.remove(i); for (int i=0; i< lista.size(); i++) System.out.println(lista.get(i)); } // cria valores para val // insere val no fim da lista // itera a LinkedList // se contedo do elemento [i] == 5 // remove o elemento [i]

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

11

Iterao de Colees - Ciclo Foreach


Ciclo compacto que pode ser usado para iterar (percorrer sequencialmente) qualquer coleo ou array.
Este ciclo usa implicitamente um iterador para os objetos do tipo guardado na coleo. Exemplo:
public static void main(String[] args) { ArrayList<String> listaStrings = new ArrayList<String>(); listaStrings.add("AO"); listaStrings.add("IPOO"); listaStrings.add("POO"); listaStrings.add("PV"); listaStrings.add("POO"); listaStrings.add("POO"); for (String ls: listaStrings){ // para cada objeto String ls na listaStrings System.out.println(ls); // imprime o objeto ls if (ls.equals("POO")) // se o objeto ls for igual a POO System.out.println(ls); // imprime novamente o objeto } }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 12

Iterao de Colees E alteraes


Note que a introduo de alteraes (add, remove) numa coleo durante a sua iterao no segura e normalmente d origem a uma exceo do tipo:
ConcurrentModificationException.

Nenhum dos ciclos (for, do/while, while, foreach) deve ser usado quando se pretende alterar a lista durante a sua iterao!
public static void main(String[] args) { ArrayList<String> listaStrings = new ArrayList<String>(); listaStrings.add("AO"); listaStrings.add("IPOO"); listaStrings.add("POO"); listaStrings.add("PV"); listaStrings.add("POO"); listaStrings.add("POO"); for (String ls: listaStrings) if (ls.equals("POO")) listaStrings.remove(ls); } Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at slides.Slide10_foreach.main(Slide10_foreach.java:24)
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 13

Colees Interface Iterator


A Interface Iterator<E> define os mtodos essenciais para iterar (percorrer) uma coleo:
hasNext( ) - Determinar se a coleo tem ou no um elemento seguinte. next( ) - Devolve o elemento seguinte da iterao remove( ) - Remove o ltimo elemento iterado.

Iterator<E> Um objeto de uma classe <E> que implemente a interface Iterator e que pode ser usado para iterar qualquer coleo de objetos do tipo <E>.
a nica forma segura de alterar colees durante a iterao Entenda-se por iterar percorrer elemento a elemento uma coleo ou parte dela. Exemplo: Iterator<Pessoa> s1 = listaPessoas.iterator(); Cria um objeto iterador s1 de objetos da classe Pessoa para a coleo listaPessoas
Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 14

19-06-2012

Colees Interface Iterator


public static void main(String[] args) { ArrayList<String> listaStrings = new ArrayList<String>(); listaStrings = preencheLista(listaStrings); Iterator<String> s1 = listaStrings.iterator(); while(s1.hasNext()) { System.out.println(s1.next()); s1.remove(); } listaStrings = preencheLista(listaStrings); Iterator<String> s2 = listaStrings.iterator(); if(s2.hasNext()) do { System.out.println(s2.next()); s2.remove(); } while (s2.hasNext()); listaStrings = preencheLista(listaStrings); Iterator<String> s3 = listaStrings.iterator(); for (int i=0; i< listaStrings.size(); i++) if (s3.hasNext()){ System.out.println(s3.next()); s3.remove();} } } public static ArrayList<String> preencheLista(ArrayList<String> lista){ lista.add("IPOO"); lista.add("POO"); lista.add("PV"); lista.add("POO"); lista.add("POO"); return lista; }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 15

Colees Interface Set


Interface que impe a no existncia de duplicaes na coleo.
Representa a noo matemtica de conjuntos.

No existe ordenao de qualquer tipo sobre os elementos inseridos.


Pelo que ao programar no podemos assumir nada quanto a uma eventual ordem dos elementos!

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

16

Colees Classes Set


Set:
HashSet armazena os elementos numa hash table.
a implementao com melhor desempenho mas no garante nada quanto ordem de iterao. a nica implementao de conjuntos que estudaremos detalhadamente.
HashSet<Pessoa> pessoas = new HashSet<Pessoa>(); Declara e cria um HashSet chamado pessoas para armazenar objetos da classe Pessoa.

Outras implementaes de conjuntos que no abordaremos:


TreeSet LinkedHashSet

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

17

Colees - Classe HashSet


public static void main(String[] args) { System.out.println("*** HashSet professores"); HashSet<String> professores = new HashSet<String>(); professores.add("Ana"); professores.add("Joao"); for(String s: professores) System.out.println(s); HashSet<String> alunos = new HashSet<String>(); alunos.add("Joao"); alunos.add("Luis"); System.out.println("***** HashSet alunos"); for(String s: alunos) System.out.println(s); HashSet<String> pessoas = new HashSet<String>(professores); pessoas.addAll(alunos); System.out.println("******* HashSet pessoas = professores + alunos"); for(String s: pessoas) System.out.println(s); professores = new HashSet<String>(pessoas); professores.removeAll(alunos); System.out.println("********* HashSet professores = pessoas - alunos"); for(String s: professores) System.out.println(s); }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 18

Colees - Interface Map


Map - Interface que impe uma relao entre uma chave (Key) e um elemento (Value).
As chaves so nicas (no h chaves repetidas!) Cada chave refere um nico elemento. Note que pode haver valores repetidos, mas com diferentes chaves.

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

19

Colees Classes Map


Map
HashMap <K,V>
A nica a ser estudada detalhadamente
HashMap<Integer, Pessoa> pessoas = new HashMap<Integer, Pessoa>();
Cria um objeto HashMap chamado pessoas em que as chaves so do tipo inteiro e os valores so objetos da classe Pessoa.

O seu comportamento e desempenho em tudo semelhantes ao conjunto anlogo HashSet.

Outras implementaes de mapas que no abordaremos:


TreeMap LinkedHashMap

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

20

Colees Classes Map


public static void main(String[] args) { HashMap<Integer, String> mapaNomes = new HashMap<Integer, String>(); mapaNomes.put(1111, "Ana"); mapaNomes.put(4444, "Carlos"); mapaNomes.put(7777, "Carlos"); mapaNomes.put(9999, "Carlos Alberto"); printMap(mapaNomes);

System.out.println("**** Insere outro valor .... com a chave 4444"); mapaNomes.put(4444, "Carlos Antunes Ferreira"); printMap(mapaNomes);
}

// iterao de um Mapa public static void printMap(Map mp) { // experimenet passar uma hashMap! Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pares = (Map.Entry)it.next(); System.out.println(pares.getKey() + " = " + pares.getValue()); } }
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 21

Resumindo
Coleo agregado de elementos de um mesmo tipo JCF arquitetura que inclui: Interfaces, Classes Abstratas e Concretas, Algoritmos
Interfaces genricas Collection<E> - apartir das quais se implementam classes de coleo especificas para guardar objetos de um dado tipo <E> Os algoritmos da classe Collections manipulam listas com grande eficincia.

Listas
Classe ArrayList<E>

Iterao e Alteraes em Colees


Ciclo foreach (type safe) No modificar a coleo durante a iterao a no ser que se use o Iterator<E> - a nica forma segura de iterar e alterar uma coleo em simultaneo

Conjuntos (set)
Classe HashSet<E>

Mapas (Map)
Classe HashMap<K,V>
19-06-2012 Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo 22

Leitura Complementar

Captulo 8
Pginas 253 a 344

http://docs.oracle.com/javase/tutorial/colle ctions/interfaces/index.html

19-06-2012

Prof. Jos Braz - Prof. Jos Cordeiro - Prof Patricia Macedo

23

Anda mungkin juga menyukai