• Nenhum resultado encontrado

Estudo Sobre o Uso de Anotações em Java

N/A
N/A
Protected

Academic year: 2021

Share "Estudo Sobre o Uso de Anotações em Java"

Copied!
8
0
0

Texto

(1)

Estudo Sobre o Uso de Anotac¸˜oes em Java

Fabricio C. Mota1, Regis S. Onishi1, Miguel D. Matrakas1 1UDC ANGLO – Faculdade Anglo Americano (FAA) Av. Paran´a, 5661, CEP: 85868-030 – Foz do Iguac¸u – PR – Brasil {caceres.mota,shindionishi}@hotmail.com, [email protected] Abstract. This article describes the use of annotations in the Java language, explaining the applications for the language pre-defined ann, creation of annot types, and its use within the frameworks Hibernate and FormBuilder.

Resumo. Este artigo descreve o uso de anotac¸˜oes na linguagem Java, expli-cando as aplicac¸˜oes de anotac¸˜oes pr´e-definidas da linguagem, a criac¸˜ao de tipos, bem como o seu uso dentro dos frameworks Hibernate e Formbuilder.

1. Introduc¸˜ao

Em 1991 a empresa Sun Microsystems, iniciou o projeto Green Project, no qual os cri-adores tinham a intenc¸˜ao de criar uma ligac¸˜ao entre os computcri-adores e os aparelhos dom´esticos. A primeira criac¸˜ao da equipe foi o StartSeven, um controle remoto com interface touchscreen, cuja linguagem de programac¸˜ao foi nomeada Oak1. Neste per´ıodo, a internet comec¸ou a aumentar sua popularidade, sendo assim, a equipe do Green Project comec¸ou a adaptar a linguagem Oak para a internet, e em 1995 foi lanc¸ado o Java, uma vers˜ao atualizada do Oak para a internet [Mendes 2009].

Diferente das linguagens convencionais, que s˜ao compiladas para c´odigo nativo,a linguagem Java ´e compilada para um bytecode com extens˜ao .class independente da ar-quitetura do sistema operacional utilizado. Esse .class poder´a ser executado por qualquer JVM em qualquer ambiente operacional [Mendes 2009].

Este artigo tem a finalidade de apresentar um dos recursos da linguagem de programac¸˜ao Java chamado anotac¸˜oes, que foram introduzidas no Java na sua vers˜ao 5, cujo recurso ´e usado para anotar classes, campos e m´etodos, de tal forma que essas marcac¸˜oes possam ser tratadas pelo compilador, bibliotecas e ferramentas de desenvolvi-mento.

2. Objetivo

Muitos programadores que utilizam a linguagem Java n˜ao tem o conhecimento de como funcionam, ou o que significam as anotac¸˜oes. O objetivo desse artigo ´e mostrar como ´e criado, o funcionamento, e as principais anotac¸˜oes pr´e definidas pela linguagem Java, al´em de apresentar alguns frameworks que utilizam anotac¸˜oes em seu funcionamento.

3. Anotac¸˜oes B´asicas

O sinal ”@”indica para o compilador que o que se segue ´e uma anotac¸˜ao. A anotac¸˜ao pode incluir elementos que podem ser nomeados e conterem valores. Sendo tamb´em poss´ıvel

(2)

utilizar varias anotac¸˜oes na mesma declarac¸˜ao. Se nas anotac¸˜oes m´ultiplas tiver mais de uma do mesmo tipo, denomina-se anotac¸˜ao de repetic¸˜oes2[Zakhour et al. 2014].

A tabela 1 mostra alguns exemplos citados acima.

Tabela 1. Exemplos

Tipo Anotac¸˜ao

Simples @Override

Com elementos

@Autor(

name = ”Fabricio Caceres Mota”, date = ”2003/03/27”)

ou

@SuppressWarnings(value = ”unchecked”) Apenas valores @SuppressWarnings(”unchecked”)

Do mesmo tipo @Author(name = ”Fabricio”) @Author(name = ”Regis”)

3.1. Anotac¸˜oes pr´e-definidas

Existe um conjunto de anotac¸˜oes pr´e definidas na API do Java. Algumas dessas s˜ao utili-zadas pelo compilador Java, e outras aplic´aveis a outras anotac¸˜oes [Zakhour et al. 2014].

3.1.1. Tipos de anotac¸˜oes utilizadas pelo compilador Java Os tipos de anotac¸˜oes pr´e-definido no java.lang s˜ao:

• @Deprecated – Essa anotac¸˜ao indica que o elemento marcado ´e obsoleto e n˜ao deve ser mais usado. Quando um programa utiliza um m´etodo, classe, ou campo, com a anotac¸˜ao @Deprecated o compilador gera um aviso. Quando um elemento ´e substitu´ıdo, ele tamb´em deve ser documentado usando a tag do Javadoc @depre-catedcomo ´e mostrado no exemplo a seguir. O uso do sinal @ no coment´ario Ja-vadoce tamb´em na anotac¸˜ao indica que eles est˜ao relacionados conceitualmente. Entretanto na tag do Javadoc comec¸a com letra min´uscula, j´a na anotac¸˜ao inicia-se com letra mai´uscula.

// Javadoc comment follows /**

* @deprecated

* explanation of why it was deprecated */

@Deprecated

static void deprecatedMethod() { }

C ´odigo 1. Exemplo de uso do @Deprecated. Adaptado de [Zakhour et al. 2014]

• @Override – Essa anotac¸˜ao indica ao compilador de que o elemento ´e utilizado para substituir um elemento declarado da classe pai de uma heranc¸a, como mos-trado no exemplo abaixo.

(3)

// Metodo de marcacao como um metodo da classe Pai // que foi substituido

@ Override

int overriddenMethod () {}

C ´odigo 2. Exemplo de uso do @Override. Adaptado de [Zakhour et al. 2014]

Essa anotac¸˜ao n˜ao ´e obrigat´oria ao substituir um m´etodo, mas ajuda a evitar er-ros. Se o m´etodo marcado n˜ao substituir corretamente o m´etodo em uma de suas classes pai, o compilador gera um erro.

• @SuppressWarnings – Essa anotac¸˜ao informa ao compilador para suprimir avi-sos espec´ıficos que podem ser gerados. No exemplo a seguir um m´etodo @De-precated que geralmente gera um aviso ´e usado. Neste caso a anotac¸˜ao faz com que o aviso n˜ao seja gerado.

// Usar um metodo obsoleto e dizer ao // compilador nao gerar um aviso

@ SuppressWarnings ("deprecation")

void useDeprecatedMethod () {

// Aviso de depreciacao Suprimida

objectOne.deprecatedMethod (); }

C ´odigo 3. Exemplo de uso do @SuppressWarnings. Adaptado de [Zakhour et al. 2014]

Cada aviso de compilac¸˜ao pertence a uma categoria. A especificac¸˜ao da lingua-gem Java lista duas categorias: deprecation e unchecked. Para suprimir v´arias categorias de avisos, usamos a seguinte sintaxe:

@ SuppressWarnings ({"unchecked", "deprecation"})

C ´odigo 4. Suprimindo v ´arias categorias de avisos. Adaptado de [Zakhour et al. 2014]

• @SafeVarargs – Essa anotac¸˜ao quando aplicada em um m´etodo ou construtor, afirma que o c´odigo n˜ao executa operac¸˜oes potencialmente perigosas em seu parˆametro. Quando esse tipo de anotac¸˜ao ´e usada, avisos n˜ao verificados rela-cionados ao parˆametro s˜ao suprimidos.

• @FunctionalInterface – Adicionado no Java SE 8, a anotac¸˜ao indica que a declarac¸˜ao de tipo ´e destinada a ser uma interface funcional3

3.1.2. Anotac¸˜oes que se aplicam em outras anotac¸˜oes

Segundo [Zakhour et al. 2014], os tipos de anotac¸˜oes que se aplicam em outras anotac¸˜oes s˜ao denominadas meta-anotac¸˜oes. Existem v´arios tipos de meta-anotac¸˜oes definidas no java.lang.annotation, como:

• @Retention – Essa anotac¸˜ao especifica como a anotac¸˜ao marcada ´e armazenada: 3Interfaces funcionais s˜ao interfaces com um ´unico m´etodo abstrato.

(4)

a) RetentionPolicy.SOURCE – A anotac¸˜ao marcada, ´e interpretada somente no c´odigo fonte e ignorada durante a compilac¸˜ao,

b) RetentionPolicy.CLASS – A anotac¸˜ao marcada ´e retida somente durante a compilac¸˜ao do c´odigo,

c) RetentionPolicy.RUNTIME – A anotac¸˜ao marcada ´e mantida pela JVM4 para que possa ser usada pelo ambiente de execuc¸˜ao.

• @Documented – Essa anotac¸˜ao indica sempre que a anotac¸˜ao especificada ´e usada, esses elementos devem ser documentados utilizando a ferramenta Javadoc. • @Target – Essa anotac¸˜ao restringe os tipos de elementos Java que podem ser

aplicadas `a outra anotac¸˜ao.

a) ElementType.ANNOTATION TYPE – pode ser aplicada a um tipo de anotac¸˜ao, b) ElementType.CONSTRUCTOR – pode ser aplicada a um construtor,

c) ElementType.FIELD – pode ser aplicada a um campo ou propriedade, d) ElementType.LOCAL VARIABLE – pode ser aplicado a uma vari´avel local, e) ElementType.METHOD – pode ser aplicada a um m´etodo,

f) ElementType.PACKAGE – pode ser aplicado a uma declarac¸˜ao de pacote, g) ElementType.PARAMETER – pode ser aplicado com os parˆametros de um

m´etodo,

h) ElementType.TYPE – pode ser aplicado a qualquer elemento de uma classe. • @Inherited – Indica que um tipo de anotac¸˜ao ´e automaticamente herdada. Se uma

meta-anotac¸˜ao Inherited est´a presente em uma declarac¸˜ao de tipo de anotac¸˜ao, e o usu´ario consulta o tipo de anotac¸˜ao em uma declarac¸˜ao de classe, e a declarac¸˜ao de classe n˜ao tem nenhuma anotac¸˜ao para esse tipo, ent˜ao a superclasse da classe ser´a automaticamente consultada para o tipo de anotac¸˜ao. Este processo ser´a repetido at´e que uma anotac¸˜ao para este tipo seja encontrado, ou o topo da hierarquia de classe (objeto) seja alcanc¸ado. Se nenhuma superclasse tenha uma anotac¸˜ao para este tipo, a consulta ir´a indicar que a classe em quest˜ao n˜ao tem essa anotac¸˜ao. Nota-se que este tipo de meta-anotac¸˜ao n˜ao tem efeito se o tipo de anotac¸˜ao ´e usada para anotar qualquer coisa diferente de uma classe e que esta meta-anotac¸˜ao s´o faz com que as anotac¸˜oes sejam herdadas de superclasses, assim, n˜ao tem efeito sobre interfaces.

• @Repeatable – informa ao compilador que a anotac¸˜ao indicada pode ser usada v´arias vezes. (Dispon´ıvel a partir do Java 8)

3.2. Declarando uma anotac¸˜ao

Muitas anotac¸˜oes substituem coment´arios no c´odigo. Suponha que um grupo de desenvol-vedores de software tradicionalmente comec¸am o corpo de toda classe com coment´arios provendo informac¸˜oes importantes:

public class Generation3List extends Generation2List {

// Author: John Doe // Date: 3/17/2002 // Current revision: 6 // Last modified: 4/12/2004 4Java Virtual Machine

(5)

// By: Jane Doe

// Reviewers: Alice, Bill, Cindy // class code goes here

}

C ´odigo 5. Exemplo de coment ´arios. Adaptado de [Zakhour et al. 2014]

Para adicionar o mesmo metadado com uma anotac¸˜ao, primeiramente deve-se de-finir o tipo de anotac¸˜ao. A sintaxe para fazer isso ´e:

@interface ClassPreamble { String author(); String date();

int currentRevision() default 1; String lastModified() default "N/A"; String lastModifiedBy() default "N/A";

// Note use of array

String[] reviewers(); }

C ´odigo 6. Definindo o tipo de anotac¸ ˜ao. Adaptado de [Zakhour et al. 2014]

A definic¸˜ao do tipo de anotac¸˜ao ´e similar a uma definic¸˜ao de interface onde a palavra-chave interface ´e precedido por um (@). O corpo da definic¸˜ao de anotac¸˜ao an-terior cont´em declarac¸˜oes de elementos do tipo anotac¸˜ao, que se parecem muito com os m´etodos. Nota-se que eles podem definir os valores padr˜ao opcionais. Ap´os o tipo de anotac¸˜ao ser definida, pode-se usar anotac¸˜oes deste tipo, com valores preenchidos, como:

@ClassPreamble (

author = "John Doe", date = "3/17/2002", currentRevision = 6,

lastModified = "4/12/2004", lastModifiedBy = "Jane Doe",

// Note array notation

reviewers = {"Alice", "Bob", "Cindy"} )

public class Generation3List extends Generation2List {

// class code goes here

}

C ´odigo 7. Utilizando a anotac¸ ˜ao definida. Adaptado de [Zakhour et al. 2014]

Obs.: Para fazer com que as informac¸˜oes contidas em @ClassPreamble aparec¸am na documentac¸˜ao gerada pelo Javadoc, vocˆe deve anotar a definic¸˜ao @ClassPreamble com a anotac¸˜ao @Documented,

@Documented annotation:

(6)

import java.lang.annotation.*;

@Documented

@interface ClassPreamble {

// Annotation element definitions

}

C ´odigo 8. Documentando a anotac¸ ˜ao definida. Adaptado de [Zakhour et al. 2014]

4. Anotac¸˜oes em Frameworks

Segundo [Fayad and Schmidt 1997], frameworks ´e um conjunto de classes que colabo-ram para realizar uma responsabilidade para um dom´ınio de um subsistema da aplicac¸˜ao. Existem alguns frameworks que se utilizam de anotac¸˜oes para seu funcionamento. Nessa sec¸˜ao ser˜ao apresentados alguns dos frameworks para Java que utilizam anotac¸˜oes. 4.1. Formbuilder

O framework FormBuilder, foi desenvolvido para automatizar a gerac¸˜ao de telas Prime-Faces e agilizar o desenvolvimento para aplicac¸˜oes Web. O FormBuilder gera trˆes tipos de componentes: bot˜ao, caixa de edic¸˜ao e caixa de marcac¸˜ao, esses componentes s˜ao ge-rados atrav´es de anotac¸˜oes declaradas nas classes de controle desenvolvidas. A ligac¸˜ao entre a classe de controle e a pagina web ´e realizada atrav´es de uma tag JSF5customizada [Lohn and Vahldick 2013] .

Segue abaixo um exemplo de utilizac¸˜ao do framework, onde cada anotac¸˜ao Button foi associada a um m´etodo.

(a) Declarac¸˜ao das anotac¸˜oes Button (b) P´agina gerada

Figura 1. Exemplo de uso do Framework FormBuilder [Lohn and Vahldick 2013]

4.2. Hibernate

”O Hibernate ´e um framework object relacional mapping(ORM). ´E um framework que utiliza anotac¸˜oes ou arquivos xml para a persistˆencia de objetos Java em um banco de dados relacional. O desenvolvedor define como os objetos s˜ao mapeados nas tabelas do banco e o Hibernate faz todo o acesso ao banco, gerando inclusive os comandos SQL se necess´arios”[Mrack 2006].

5Java Server Faces (JSF) ´e um framework MVC para a construc¸˜ao de interface de usu´ario em aplicac¸˜oes web.

(7)

Na figura 2 tem-se um exemplo do framework Hibernate utilizando anotac¸˜oes. Se-gundo [Soares and da Costa Marchi 2013] as annotations auxiliam o Hibernate em como se deve criar os atributos na tabela do banco de dados, como por exemplo o @Entity que declara uma entidade do tipo relacional como uma tabela, por´em ainda continua sendo uma classe Java, tamb´em tendo o @id que define o identificador da tabela e annotati-onsutilizada para realizar associac¸˜oes, tais como @ManyToOne que define um atributo de muitos para um ou a annotation @OneToMany que define um atributo de um para muitos.

Figura 2. Exemplo de classe com anotac¸ ˜ao de Hibernate [Soares and da Costa Marchi 2013].

5. Conclus˜ao

O uso adequado das anotac¸˜oes pr´e-definidas do Java pode ser vantajoso para a melhor compreens˜ao do funcionamento da classe, assim, considerado como boa pr´atica o seu uso.

Anotac¸˜oes personalizadas podem ser criadas para a resoluc¸˜ao de problemas pon-tuais para os quais n˜ao se encontra ferramentas prontas, mas podem tornar dif´ıcil a futura manutenc¸˜ao de c´odigo se mal documentadas.

Existe uma grande variedade de frameworks que se utilizam da praticidade das anotac¸˜oes, indicando que a aplicabilidade das anotac¸˜oes ´e extensa e promissora.

Referˆencias

Fayad, M. and Schmidt, D. C. (1997). Object-oriented application frameworks. Commun. ACM, 40(10):32–38.

Lohn, S. and Vahldick, A. (2013). Formbuilder: Framework para gerac¸˜ao autom´atica de telas primefaces com base em anotac¸˜oes. REAVI-Revista Eletrˆonica do Alto Vale do Itaja´ı, 2(1):64–74.

Mendes, D. R. (2009). Programac¸˜ao Java com ˆEnfase em Orientac¸˜ao a Objetos. Novatec, 1th edition.

(8)

Mrack, M. (2006). Hibernate, uma vis˜ao geral sobre o framework padr˜ao de fato para ma-peamento objeto-relaciona. http://pt.slideshare.net/mmrack/workshop-hibernate-com-comentarios,acessado em 16 de maio de 2014.

Soares, L. G. Z. and da Costa Marchi, K. R. (2013). Uma abordagem sobre mapeamento objeto relacional com hibernate.

Zakhour, S. B., Kannan, S., and Gallardo, R. (2014). The java tutorials. http://docs. oracle.com/javase/tutorial/java/annotations/index.html. [Online; acessado em 16 de maio de 2014].

Referências

Documentos relacionados

bom testemunho e recomendações do Pastor e Conselho Diretor Local de sua Igreja, conforme Ficha de Apresentação do seu pastor, segue também sob minha recomendação,

O planejamento fatorial foi aplicado satisfatoriamente para a otimização dos parâmetros da técnica de voltametria linear de redisso- lução anódica no desenvolvimento

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

200 ml de água de coco 200 ml de água de coco 1 folha de couve 1 folha de couve Hortelã a gosto Hortelã a gosto Modo de preparo Modo de preparo Bater todos os. Bater todos os

A partir de 2004, com a junção de desenvolvimento tecnológico e inovação em política pública, o Brasil implementou um sistema de vanguarda para monitoramento e fiscalização

Para obter informações sobre como obter assistência dentro da garantia, entre em contato com a Assistência ao Cliente da ViewSonic (consulte a página Suporte ao Cliente). Você

  O Parque Estadual Intervales foi escolhido por estar numa região próxima a cidade de São Paulo, a qual poderíamos ir em um final de semana para o levantamento de

a) Aplicação das provas objetivas. b) Divulgação dos gabaritos oficiais do Concurso Público. c) Listas de resultados do Concurso Público. Os recursos interpostos que não se