Java 6 Programação Orientada por Objectos

  • View
    217

  • Download
    5

Embed Size (px)

DESCRIPTION

Apresentar todos os conceitos e regras fundamentais inerentes ao paradigma da programação orientada pelos objectos (POO): classes e instâncias, mensagens e métodos, encapsulamento, hierarquia e herança, modularidade, polimorfismo e programação genérica; · Apresentar um conjunto de princípios e métodos de programação que permitem desenvolver aplicações OO (escritas na linguagem JAVA ou numa outra qualquer linguagem de POO), que satisfazem propriedades importantes da Engenharia de Software, tais como modularidade, extensibilidade, robustez e generalidade; · Apresentar as várias construções actuais da linguagem JAVA6 (existentes desde JAVA5, lançada em 2004) que suportam a POO, dando especial relevo às novas construções (que tornaram obsoletas as versões anteriores da linguagem JAVA), designadamente: colecções parametrizadas, iterador foreach, tipos enumerados, auto-boxing e auto-unboxing, classes genéricas (generics) e wildcards;

Text of Java 6 Programação Orientada por Objectos

  • FCA - Editora de Informtica 253

    88 -- CCoolleecceess ee TTiippooss PPaarraammeettrriizzaaddooss

    Tpicos

    Introduo ao Java Collections Frame-work (JCF); Tipos parametrizados; Tipo parametrizado ArrayList; Iteradores de coleces; Auto-Boxing/Unboxing; Tipos parametrizados e subtipos;

    Wildcards; Tipos Map; Interface Comparable; Tipos Set; Tipos enumerados; Tipos EnumSet e EnumMap.

    8.1 Introduo

    Estudmos at agora todas as construes que nos permitem desenvolver classes JAVA ou interfaces JAVA a serem implementadas por classes. Foi feita a distino entre o papel das classes abstractas e das interfaces no desenho de aplicaes, e ficmos a saber que as interfaces existem numa hierarquia distinta da hierarquia de classes, hierarquias que se relacionam semanticamente atravs de uma relao de implementao.

    No entanto, e aparte as referncias feitas aos arrays de JAVA, que no so objectos, no estudmos ainda mecanismos ou construes que nos permitam realizar agrupamentos de objectos em estruturas que os representem como uma unidade de informao, possuindo certas propriedades e podendo ser manipulada atravs de certas operaes.

    Ainda que o termo estrutura de dados seja tradicionalmente empregue para designar os agrupamentos de entidades que no so objectos mas valores, se alargarmos um pouco o seu sentido, poderemos dizer que nos falta agora estudar estruturaes de objectos que so, ao nvel da POO, os contentores da nossa informao.

    Assim, vamos dedicar os prximos captulos ao estudo de classes que representam em JAVA estruturas de dados predefinidas, que podemos reutilizar nos nossos programas na criao de classes mais complexas de que necessitamos na resoluo de problemas de maior complexidade tambm.

  • JJAAVVAA66 EE PPRROOGGRRAAMMAAOO OORRIIEENNTTAADDAA PPEELLOOSS OOBBJJEECCTTOOSS

    254 FCA - Editora de Informtica

    Estas classes de JAVA designam-se por coleces (collections), representam as mais usuais estruturas de dados necessrias no desenvolvimento de aplicaes, possuem carac-tersticas prprias que devemos conhecer para delas podermos tirar o melhor partido, so bastante genricas e so muito eficientes. Com a possibilidade de agruparmos objectos em unidades de informao compactas e estruturadas, que representam entidades do mundo real que tm caractersticas semelhantes, elevamos em muito o nvel da nossa pro-gramao, pois temos nossa disposio excelentes estruturas de representao de dados.

    8.2 Coleces de JAVA5/6 Desde a verso original JDK1.0 de 1996, que JAVA possui no seu package java.util classes que implementam algumas das estruturas de dados (objectos), em conjunto com as respectivas operaes (algoritmos), mais utilizadas no desenvolvimento de aplicaes.

    Porm, com o aparecimento do JDK1.2, em 1999, que se d uma verdadeira revoluo no package java.util com o aparecimento de uma estrutura de interfaces, classes abstractas e classes concretas, organizadas no sentido de oferecer ao programador uma grande diversidade de implementaes eficientes das mais comuns estruturas de dados e entidades matemticas, designada JAVA Collections FrameWork (JCF), muitas vezes at apenas Collections.

    Uma coleco (noutras linguagens designada container) um objecto capaz de agrupar mltiplos elementos numa unidade nica de representao e processamento devidamente organizada, possuindo propriedades de estrutura e funcionamento prprias. Por exemplo, como certamente sabemos, uma estrutura stack (ou pilha) uma estrutura linear, ou seja, existe uma ordem sequencial nos seus elementos, e funciona segundo uma lgica de que o ltimo elemento inserido ser o primeiro a ser removido. Estas so as propriedades de uma qualquer stack. A forma de implementarmos as propriedades so inmeras, e estas propriedades so independentes dos contedos da estrutura de dados.

    A Collections FrameWork uma arquitectura unificada, constituda por interfaces, clas-ses abstractas, implementaes (classes concretas) e mtodos (algoritmos), visando repre-sentar e manipular coleces, normalizando as API, oferecendo converses entre estrutu-ras, reduzindo o esforo de aprendizagem e de programao, e oferecendo grandes solu-es para reutilizao.

    A importncia deste framework para a criao de aplicaes em JAVA absolutamente crucial, dado que a maioria das aplicaes que desenvolvemos usam muitas das classes implementadas no JCF. No entanto, e dada a proliferao destas e as diferentes especiali-zaes das suas implementaes, em termos de eficincia e utilizao, a escolha da imple-mentao adequada implica um conhecimento bastante aprofundado de todas as diferen-tes Coleces que o JCF coloca ao nosso dispor.

    Vamos assim, e numa primeira abordagem, sintetizar a estrutura interna do JCF, do ponto

  • CCOOLLEECCEESS EE TTIIPPOOSS PPAARRAAMMEETTRRIIZZAADDOOSS

    FCA - Editora de Informtica 255

    de vista dos seus prprios autores, que a dividem nas seguintes infra-estruturas:

    Utilitrios para arrays: por exemplo, a classe Arrays j antes referida, que presta servios algortmicos a arrays;

    Algoritmos: mtodos estticos da classe Collections que prestam servios s mais diversas coleces de objectos, como ordenao, procura, etc.;

    Classes abstractas: implementaes parciais de certas classes que satisfazem certas interfaces, para que sejam complementadas (implementadas) de diversas formas distintas pelas subclasses concretas;

    Wrapper, Concurrent, Special-purpose implementations: implementaes que adicionam funcionalidade a outras, como mtodos para converso de e para tipos primitivos, sincronizao ou gesto de concorrncia, restries, etc.;

    Legacy implementations: classes de anteriores implementaes que, em vez de serem desactivadas (deprecated), foram reajustadas para satisfazerem as interfa-ces do JCF;

    General-purpose implementations: classes do JCF que so as primeiras imple-mentaes das interfaces originais;

    Collection Interfaces: as API fundamentais que estruturam todas as classes do JCF, dividindo-as em quatro grandes famlias de estruturas os conjuntos, as lis-tas, as correspondncias (maps ou mappings) e as filas. Estas quatro interfaces so a base de todo o JCF em termos de tipos das coleces.

    A Collections Interface define quatro interfaces fundamentais, de tal forma que as classes que as implementam so estruturas com as seguintes propriedades:

    11.. Set: conjuntos de objectos no sentido matemtico, logo, no existindo a noo de posio, conforme primeiro, ltimo, etc., nem sendo permitidos elementos em duplicado.

    22.. List: sequncias de objectos, logo, existindo a noo de ordem, cf. primeiro, ltimo, n-simo, etc., permitindo elementos duplicados.

    33.. Map: os mappings, que so correspondncias unvocas um para um entre objec-tos (representando funes matemticas finitas), em geral correspondncias do tipo chave-valor, em que as chaves so o domnio e so um conjunto (logo, no havendo chaves em duplicado). A correspondncia apenas unvoca, porque a chaves diferentes pode ser feito corresponder o mesmo valor.

    44.. Queue: as filas so estruturas lineares do tipo FIFO (first in first out), com mto-dos prprios para insero e remoo, destinadas em geral a conter elementos em estado de espera para serem processados.

    Em finais de 2004, foi lanado o JDK1.5 Tiger (JAVA5), verso que veio introduzir na linguagem JAVA as maiores modificaes sintcticas, e no s, desde o lanamento da mesma. Estas modificaes praticamente no alteraram a JVM, excepo do cdigo gerado para as classes. No entanto, a nvel sintctico e ao nvel dos tipos de dados muito mudou, passando a verificao de tipos a ser toda realizada em tempo de compilao.

  • JJAAVVAA66 EE PPRROOGGRRAAMMAAOO OORRIIEENNTTAADDAA PPEELLOOSS OOBBJJEECCTTOOSS

    256 FCA - Editora de Informtica

    So trs as modificaes introduzidas em JAVA5 que se relacionam directamente com as coleces:

    Auto-Boxing e Auto-Unboxing: mecanismo que converte automaticamente valo-res de tipos primitivos (cf. int, double, etc.) em objectos das classes correspon-dentes (wrapper classes) quando estes so inseridos em coleces, e faz a converso contrria quando instncias de classes wrapper so lidas de coleces, evitando assim a necessidade de programar operaes de casting;

    Iterador foreach: sob a forma de um ciclo for aplicvel a coleces que podem ser iteradas (Iterable), substituindo os iteradores explcitos em muitas circuns-tncias;

    Tipos genricos: que adicionam s coleces generalidade e segurana em tempo de compilao, e eliminam o intenso casting que era necessrio.

    A modificao de maior impacto foi a que implicou a alterao, ainda que no em termos de estrutura, de todo o JCF: a introduo dos tipos genricos (Generics no original).

    A estrutura de interfaces, para alm da sua parametrizao e da introduo da interface Queue, a mesma que existia anteriormente e que se apresenta na Figura 8.1:

    Collection

    Set List Queue

    SortedSet

    Iterable

    Map

    SortedMap

    NavigableSetNavigableMap

    Figura 8.1 Interfaces do JCF Tipos de coleces

    Em primeiro lugar, uma questo de notao e leitura: Collection (ou, em geral, I) deve ler-se Collection de elementos de tipo E ou apenas uma Collection de E, em que E o tipo dos elementos, por exemplo, String, Integer, Ponto, etc.

    A primeira constatao a tirar da Figura 8.1 que as correspondncias (ou maps) no her-dam da interface Collection, pelo que, em extremo rigor, no seriam coleces. Claro que os maps so coleces de objectos, so compatveis com outras coleces, mas,

  • CCOOLLEECCEESS EE TTIIPPOOSS PPAARRAAMMEETTRRIIZZAADDOOSS

    FCA - Editora de Informtica 257

    como so parametrizados por dois tipos, no podem herdar de Collection que apenas aceita um parmetro. Ao longo do texto, sempre que falarmos de coleces de JAVA, os maps estaro i