universidade federal de santa catarina

Propaganda
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CURSO DE BACHARELADO EM SISTEMAS DE INFORMAÇÃO
DISCIPLINA: PROJETOS I
Resumo do artigo publicado na Java Magazine edição 16..
ALUNOS:
SERGIO FERREIRA DE MENDONÇA
KLEYTON WEBER DA SILVA
Tipos e Bytecode Genéricos no Java 5.0 .
A plataforma java lança sua nova versão, a Tiger, ou java 5.0, dentre as muitas inovações a mais
complexa e e irrelevante está na forma de tratamento dos tipos genéricos. Tak complexidade se dá
ao fato de uma extensão do paradigma de orientação a objetos, necessitando de uma adequação da
comunidade cojm esses novos conceitos. O artigo tem como prioridade apontar as principais
caracteriticas deste paradigma, correlacionando com as versões anteriores do Java, assim como
justificar o emprego de tipos genéricos.
Exemplo de código que manipula lista de produtos por nome de fornecedor:
Map prodMap = new HasMap();
List Frutas = new ArrayList();
frutas.add(new Produto(“Banana”));
prodMap.put(“Frutaria”,frutas);
Produto banana = (Produto)((List)prodMap.get(“Frutaria”)).get(0);
ProdMap.put(new Integer(0),”Error”);
Ao utilizar tipos genéricos o código ficaria assim:
Map<String,List<Produto>>produtos = new HasMap<String,ArrayList<Produto>>();
Lis<Produto> frutas = new ArrayList<Produto>();
frutas.add(new Produto(“Banana”));
Produto banana = produtos.get(f).get(0);
prodMap.put(new Integer(0), “Erro”);
Avaliações:




Os tipos de objetos que são colocados nas coleções são declarados.
Elimina a necessidade de typecast para extrair elementos.
Torna a operação mais segura posi o compilador não permite atribuir elementos incompativeis
no mapa, pois estes já tiverão seus tipos e chaves definidos anteriormente.
Maior complexidade na declaração e instanciação por causa do acréscimo de declarações de
tipos.
O grande propósito dos tipos genéricos é fortalecer o sistema de tipos da aplicação, pois assim as
conversões incorretas são diminuidas, diminuindo os ClassCastException inirentes da má
utilização de tipos de elementos, isso é possivel por causas das regras de tipagem estabelecidas na
nova API.
Covariância:
Ao redefinir métodos, o tipo de retorno pode ser um subtipo de retorno do metodo herdado, o tipo
de retorno pode variar na mesma direção que a herança, ou seja, em classes mais específicas esse
tipo pode ser mais específico.
O bytecode java sempre permitiu este tipo de operação, sendo que a única alteração foi feita no
compilador lpara que a linguagem possibilitasse a operação.
Constrains:
Outra inovação no Java 5 que permite o uso de singletons delegando regras de negócio para cada
classe a qual aponta para este perfi. Isto permite a construcao de metodos com regras que impedem
sua invocação erronea, como no exemplo a seguir:
static void enviaBonus ( Cliente<? extends Master>cliente, double valor)
{
cliente.credita(“Bonus”,valor);
}
A interrogação é denominada como coringa na linguagem, incorporando a constrain e possibilitando apenas a
s construções para clientes Master, ou seja, impõe uma determinada regra de negocio.
A curva de aprendizado é consideravelmente grande para adaptação aos novos conceitos impostos
pelo novo Java, mas os benefícios de robustes oferecidos são de grande valia para sistemas que
buscam cada vez mais confiança no codigo gerado.
As restrições impostas pel bytecode genérico diminuem dráticamente erros que muitas vezes são
descobertos fazes críticas das aplicações.
Download