:: Topo :: doCoding :: Linguagens de Programação :: Java :: FJPOTC101 ::

Week-08

Objectivos

Esta última semana aborda essencialmente as novidades do J2SE 5.0 face ao anterior JDK 1.4:

  • Language Features Enhancements
  • Generics
  • Annotations
  • Concurrency

Aprendizagem

Version Changes

  • JDK 1.0: Initial language, very popular
  • JDK 1.1: Inner classes, new event model
  • JDK 1.2, 1.3: No changes at language level
  • JDK 1.4: Assertions (minor change)
  • JDK 5.0: Biggest changes to language since release 1.0:
    • Generics
    • Autoboxing/Unboxing
    • Enhanced for loop (“foreach”)
    • Type-safe enumerations
    • Varargs
    • Static import
    • Metadata
    • Formatted I/O
    • Big improvements on Virtual Machine
    • Monitoring & Management
    • JVM Tool Interface

Generics

  • Providenciam abstracção tipificada: as classes, interfaces e métodos podem ser parametrizadas por tipos.
  • Possibilitam código type-safe.
    Não existe uma relação de herança entre os tipos dos argumentos de uma classe genérica, mas pode existir uma relação de herança entre classes genéricas.
  • Tornam o código mais compreensível.
  • Generics com Wildcard não permitem adicionar elementos à colecção, mas permitem aceder ao itens da colecção sem se conhecer o seu tipo (somente com instâncias da classe Object).

Annotations

As Anotações são usadas para afectar o modo como os programas são tratados pelas ferramentas e libraries. São usadas pelas ferramentas na produção de ficheiros derivados dos originais.

Permitem um estilo de programação declarativo, que se traduz em menos código e em código mais fácil de manter.

A definição de Anotações é semelhante à definição de um Interfaces. São precedidas do caractere '@' e os seus métodos podem ter valores por omissão. Cada método define um elemento dessa anotação.

A utilização de Anotações é feita antes da declaração de classes, métodos ou propriedades. É um tipo especial de modificador, que pode ser usado onde são usados os modificadores normais: public, static, final. A sua utilização consiste em escrever o caractere @ seguido do tipo da anotação seguido de uma lista de pares elemento-valor entre parêntesis.

Há 3 categorias de Anotações:

  • Marker: é a forma de anotação mais simples, sem elementos.
  • Single Value: forma de anotação com um só elemento, obrigatoriamente designado por “value”.
  • Normal: forma de anotação com múltiplos elementos.

Existem também Meta-Anotações:

  • @Retention - para especificar durante quanto tempo a informação é para ser mantida:
    • SOURCE: somente nos ficheiros source.
    • CLASS: nos ficheiros source e class, mas não disponível de forma reflexiva em runtime.
    • RUNTIME: nos ficheiros source e class, e disponível de forma reflexiva em runtime.
  • @Target - para restringir o uso da anotação:
    • TYPE
    • FIELD
    • METHOD
    • PARAMETER
    • CONSTRUCTOR
    • LOCAL_VARIABLE
    • ANNOTATION_TYPE
    • PACKAGE

Concurrency Utilities

  • Reduzem o esforço de codificação
  • Têm melhor performance
  • São mais compreensíveis
  • Eliminam perigos habituais em aplicações multi-thread, tais como:
    • deadlock
    • starvation
    • race conditions
    • excessive context switching
  • Código mais facilmente mantido
  • Maior produtividade

Hands-On Lab

Pré-Requisitos

Laboratório 1

Laboratório 2

Laboratório 3

Laboratório 4

Exercícios

Referências

Considerações

Pontos Altos

Pontos Baixos

  • O conteúdo dos Hands-On Lab contém diversas gralhas. Com alguma atenção, resolvem-se todas as gralhas, mas no entanto peca por essa falta de atenção ao pormenor.
  • Alguns dos exemplos, nomeadamente os de Concorrência, não funcionam de forma satisfatória no NetBeans 6.5.1 sobre Ubuntu 8.10. Mas esse mesmo código funciona como seria de esperar no NetBeans 6.5.1 sobre Windows XP. A diferença, além do Ubuntu, é que estou a usar o OpenJDK.
    • ServerUsingThreadPoolExecutor e ServerUsingExecutors - funcionam correctamente, fora do NetBeans.
    • BlockingQueueExample e BlockingQueueExample2 - não terminam a sua execução, dentro ou fora do NetBeans.
 
docoding/languages/java/fjpotc101/week-08.txt · Modificado em: 2009/04/20 23:45 por straider     Voltar ao topo