118 pág.

Pré-visualização | Página 15 de 37
quantidade de elementos na coleção. Se adicionalmente deseja-se que esse grupo de objetos seja manipulado de acordo com alguma ordem específica, a interface derivada SortedMap pode ser utilizada. Assim, além das funcionali- dades acima, esta interface especifica métodos tais como: � Object firstKey() para retornar o elemento da coleção com a chave de menor valor. � Object lastKey() para retornar o elemento da coleção com a chave de maior valor. � SortedMap subMap(Object fromKey, Object toKey) para obter o subconjunto dos elementos compreendidos entre as chaves especificadas. Para essas interfaces, duas implementações básicas são também oferecidas nesse mesmo pacote java.util. A classe HashMap implementa o mecanismo básico de mapeamento entre chaves e valores. A classe TreeMap oferece a funcionalidade adicional de associar uma ordem aos elementos da coleção. Para alguns tipos de objetos, tais como Integer, Double ou String, uma ordem “natural” já é pré-estabelecida. Para objetos de classes da aplicação, a classe deverá implementar a interface Comparable. Um objeto que implementa a interface Collection representa um grupo de objetos genérico, onde duplicações são permitidas. Entre os métodos básicos especificados nessa interface estão: c � 2001 FEEC/UNICAMP 43 Programação orientada a objetos com Java 3.3. Framework de coleções � boolean add(Object element) para adicionar o elemento especificado à coleção. � boolean remove(Object element) para remover o elemento especificado da cole- ção. � boolean contains(object element) para verificar se a coleção contém o elemento especificado. � int size() para obter a quantidade de elementos na coleção. � Iterator iterator() para obter um objeto que permite varrer todos os elementos da coleção. Duas outras interfaces, Set e List, são derivadas diretamente de Collection. Set é uma extensão de Collection que não permite duplicações de objetos — nenhum méto- do novo é introduzido, mas apenas a necessidade de garantir essa restrição. A interface SortedSet é uma extensão de Set que agrega o conceito de ordenação ao conjunto, introduzindo a especificação de métodos tais como first(), para obter o primeiro elemento do conjunto; last(), para obter o último elemento do conjunto; e subSet(), para obter o subconjunto com todos os elementos contidos entre os dois elementos especificados como argumentos do método. A interface Set tem duas implementações já oferecidas no pacote java.util. A classe HashSet é uma implementação padrão que utiliza o valor de código hash para detectar e impe- dir duplicações. A classe TreeSet é uma implementação de SortedSet que usa uma estrutura de dados em árvore para manter ordenados os elementos do conjunto. A interface List é uma extensão de Collection que introduz mecanismos de indexação. Além dos métodos básicos de coleções, adiciona métodos tais como get() para obter o elemento armazenado na posição especificada como argumento; indexOf() para obter a posição da primeira ocorrência do objeto especificado como argumento; e subList() para obter uma sublista contendo os elementos compreendidos entre as duas posições especificadas, incluindo o elemento da primeira posição mas não o da segunda. Da mesma forma que para Set, há duas implementações padronizadas para a interface List já definidas em java.util. A classe ArrayList oferece uma implementação básica da inter- face, enquanto que a classe LinkedList oferece uma implementação otimizada para manipular listas dinâmicas, introduzindo os métodos addFirst(), getFirst(), removeFirst(),ad- dLast(), getLast() e removeLast(). Para percorrer os elementos de uma coleção no novo framework, um objeto que implementa a interface Iterator é utilizado. Essa interface especifica os métodos hasNext(), que retorna um valor booleano verdadeiro para indicar que há mais elementos na coleção, e next(), que retorna o objeto que é o próximo elemento da coleção. Adicionalmente, um método void remove() pode ser utilizado para retirar um elemento da coleção através da referência a um Iterator. A interface ListIterator é uma extensão de Iterator que permite a varredura da coleção nas duas direções, especificando novos métodos tais como boolean hasPrevious() e Object previous(). c � 2001 FEEC/UNICAMP 44 Programação orientada a objetos com Java 3.4. Extensões padronizadas 3.4 Extensões padronizadas Além das funcionalidades básicas oferecidas por esses pacotes, há também APIs definidas para propósitos mais específicos compondo a extensão padronizada ao núcleo Java. Por exemplo, o Input Method Framework está associado ao pacote java.awt.im e contempla funcionalidades para manipular textos não-ocidentais usando teclados convencionais. Funcionalidades para definir e utilizar componentes de software em Java são oferecidas através de Java Beans, um conjunto de APIs definidas através do pacote java.beans e seu subpacote java.beans.context para suportar os modelos de instrospecção, customização, eventos, pro- priedades e persistência desses componentes. Uma das extensões mais significativas é definida pelo conjunto da Java Foundation Classes, extensão de AWT que oferece um conjunto de componentes de interface gráfica com usuário com- pletamente portátil. Três pacotes compõem JFC: Swing, Drag and Drop e Java 2D. Swing define uma família de pacotes com o prefixo javax.swing com componentes e serviços GUI de aparên- cia independente de plataforma. Drag and Drop, associado ao pacote java.awt.dnd, suporta o compartilhamento de dados baseado no padrão MIME, Multipurpose Internet Mail Extension. Java 2D acrescenta novas classes aos pacotes java.awt e java.awt.image para estender as fun- cionalidades associadas à manipulação de imagens bidimensionais e acrescenta novos pacotes ja- va.awt.color, java.awt.font, java.awt.geom, java.awt.image.renderable e java.awt.print. As funcionalidades para a construção de interfaces gráficas com usuários são apresentadas na Seção 4. Outra funcionalidade acrescentada à Java foi a capacidade de acesso a bancos de dados relaci- onais usando a linguagem de consulta SQL. Através da API definida em JDBC, através do pacote java.sql, é possível enviar comandos SQL para um servidor de banco de dados e processar o retorno obtido nessa consulta. A utilização de JDBC é descrita na Seção 5.2.3. Java IDL integra a funcionalidade da arquitetura CORBA a aplicações Java, permitindo obter inter-operabilidade e conectividade baseadas nesse padrão do OMG (Object Management Group). Além das classes presentes nos pacotes org.omg.CORBA e org.omg.CosNaming, alguns apli- cativos são acrescidos ao ambiente de desenvolvimento e execução de Java, como o compilador de Java para IDL e um aplicativo que oferece o serviço de nomes. O desenvolvimento de aplicações usando Java IDL é descrito na Seção 5.4.3. c � 2001 FEEC/UNICAMP 45 Capítulo 4 Desenvolvimento de aplicações gráficas A linguagem Java oferece, dentre as funcionalidades incorporadas à sua API padrão, um extenso conjunto de classes e interfaces para o desenvolvimento de aplicações gráficas. Esse conjunto facilita a criação de saídas na forma gráfica e de interfaces gráficas com usuários (GUIs), tanto na forma de aplicações autônomas como na forma de applets. Aplicações gráficas são criadas através da utilização de componentes gráficos, que estão agrupa- dos em dois grandes pacotes: java.awt e javax.swing. AWT é o Abstract Windowing Toolkit, sendo definido através das classes do pacote java.awt e seus subpacotes, tais como java.awt.event. Essas classes agrupam as funcionalidades gráficas que estão presentes desde a primeira versão de Java, que operam tendo por base as funcionalidades de alguma biblioteca gráfica do sistema onde a aplicação é executada. Já o pacote javax.swing define uma extensão padronizada a partir de AWT que congrega componentes gráficos que utilizam exclusivamente