UNIVERSIDADE ESTADUAL DO CEARÁ CENTRO DE CIÊNCIA E TECNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO ANTÔNIO MÁRCIO SOUSA MARTINS CONCEPÇÃO DE UMA LINGUAGEM DE DEFINIÇÃO DE RELATÓRIOS BASEADO EM NAKED OBJECTS FORTALEZA – CEARÁ 2012 ANTÔNIO MÁRCIO SOUSA MARTINS CONCEPÇÃO DE UMA LINGUAGEM DE DEFINIÇÃO DE RELATÓRIOS BASEADO EM NAKED OBJECTS Monografia de apresentada ao Curso de Ciência da Computação do Centro de Ciência e Tecnologia da Universidade Estadual do Ceará, como requisito para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. Dra. Mariela Inés Cortés. Co-orientador: Prof. Me. Marcius Gomes Brandão. FORTALEZA – CEARÁ 2012 Dados Internacionais de Catalogação na Publicação Universidade Estadual do Ceará Biblioteca Central Prof. Antônio Martins Filho Bibliotecário Responsável – Francisco Welton Silva Rios – CRB-3/919 M386d Martins, Antonio Márcio Sousa Definição de uma linguagem de descrição de relatórios baseados em NakedObjects / Antonio Márcio Sousa Martins. – 2013. CD-ROM. 40f. ; il. (algumas color.) : 4 ¾ pol. “CD-ROM contendo o arquivo no formato PDF do trabalho acadêmico, acondicionado em caixa de DVD Slim (19 x 14 cm x 7 mm)”. Monografia (graduação) – Universidade Estadual do Ceará, Centro de Ciências e Tecnologia, Curso de Ciência da Computação, Fortaleza, 2012. Orientação: Profa. Dra. Mariela Inês Cortés. Co-orientação: Prof. Me. Marcius Gomes Brandão. 1. Nakedobjects. 2. Programação orientada a objetos. 3. Linguagem de descrição de relatórios. I. Título. CDD: 005.1 AGRADECIMENTOS Agradeço primeiramente a Deus, que sendo o meu centro, permitiu e me deu toda a sorte de graças para caminhar na faculdade, lugar em que pude contemplá-lo em outras faces e de onde vou tirar remas para os próximos dias. Dedico também essa vitória a meus pais, Maria Auricilene e Antônio Martins, que muito influenciaram na formação de meu caráter. Não é exagero dizer e são literalmente essas as palavras: eles deram tudo o que tinham por mim. Agradeço a meu irmão de sangue, Marcelo, que sempre me inspirou a ser melhor. Agradeço aos meus irmãos em Cristo, em especial aos pertencentes à Comunidade Católica Shalom, que confirmaram a minha fé e minha faculdade. Não me esqueço de meus tios e primos, pois, embora eu tenha me privado de convívio mais intenso por conta da própria faculdade, sempre me acolheram com muito carinho, chegando até a não poucas vezes me ajudar financeiramente. Grato por meus avós que intercedem por mim junto a Deus. Grato por meus avós que intercedem por mim ainda neste mundo. Não poderia deixar de passar por meus amigos de curso. Alguns passaram muito rápido, outros exigem menos para serem lembrados. Obrigado a todos pelos momentos de distração entre um stress e outro, assim como pela partilha de material e lições de vida. Professores, muito obrigado. Não apenas pelo conteúdo ministrado, mas por tudo o que me faz dizer que professor é professor vinte e quatro horas por dia, sete dias por semana. No fim, agradeço a toda a família DI. Como não citar em meu TCC o nome do professor Clécio Thomaz, o qual considero meu padrinho. Paulo Aguiar, Wilda Fernandes, Hélio Moura, Marcos Eduardo, Bruno Garcia, Pablo Nóbrega, Alandson Mendonça, Luanna Falcão, Francisco Alves e todos que não apenas me ofereceram uma oportunidade, mas sua sincera amizade. De uma maneira especial, agradeço a Marcius Brandão, que muito contribuiu para minha formação e inspirou esse trabalho. Combati o bom combate, terminei a minha carreira, guardei a fé. São Paulo Apóstolo II Tim 4,7 RESUMO Relatórios são ferramentas úteis para apresentar informações, sejam elas conclusões ou apenas o levantamento de uma situação. Assim, relatórios comumente passam a ser ferramentas-chave no processo de comunicação e tomada de decisão em ambientes corporativos de qualquer natureza ou estatura. Por conta disso, principalmente tratando-se de grandes organizações, observa-se a demanda de um considerável número de relatórios diferentes, o que abre uma demanda para a obtenção de um meio a partir do qual, não importando a complexidade dos relatórios, sejam esses criados rapidamente e dentro de um padrão de qualidade, levando em conta facilidades para a edição e formatação desses relatórios. Atualmente, o mercado oferece diversas ferramentas que proporcionam considerável agilidade e eficácia aos desenvolvedores na tarefa de criar e manter relatórios, porém, ainda é possível melhorar essas ferramentas ou mesmo criar outras mais eficientes. O presente esforço vem oferecer a Naked Objects Report Language (NORL), que é uma linguagem concebida para a descrição de layout de relatórios a ser absorvida por frameworks baseados em Naked Objects para desenvolvimento de softwares. A ideia é dar suporte à criação de relatórios como uma responsabilidade de frameworks baseados em Naked Objects, que passam a ser capazes de criar automaticamente os relatórios, cabendo ao desenvolvedor apenas descrever o layout dos relatórios, que serão criados automaticamente. Palavras-chave: Naked objects; Programação orientada a objetos; Linguagem de descrição de relatórios. ABSTRACT Reports are useful tools for presenting information, whether conclusions or just lifting a situation. Thus, reports commonly become key tools in the process of communication and decision making in corporate environments of any nature or stature. Because of that, especially in the case of large organizations, there is a demand for a considerable number of different reports, which opens a demand for obtaining a medium from which, no matter the complexity of the reports, these are created quickly and within a quality standard, taking into account facilities for editing and formatting of these reports. Currently, the market offers several tools that provide significant speed and efficiency to developers in the task of creating and maintaining reports, however, it is still possible to improve these tools, or even create more efficient ones. This effort has to offer Naked Objects Report Language (NORL), which is a language designed to describe the layout of reports to be absorbed by Naked Objects based frameworks for software development. The idea is to support the creation of reports as a liability based frameworks Naked Objects, which are then able to automatically create reports, leaving the developer only describe the layout of the reports, which will be created automatically. Keywords: Naked objects; Object-oriented programming; Description language reports. LISTA DE FIGURAS Figura 1– Arquitetura do padrão MCV........................................................................... 16 Figura 2– Exemplo de tabela de um relatório plano....................................................... 17 Figura 3– Ilustração da operação média.......................................................................... 18 Figura 4– Exemplo de tabela em relatório de referência cruzada................................... 18 Figura 5 – Ilustração de operação em relatório de referencia cruzada............................. 19 Figura 6– Relatório de duas colunas............................................................................... 19 Figura 7– Descrição da tela de produtos do restaurante................................................. 23 Figura 8– Tela de produtos do restaurante..................................................................... 24 Figura 9 – Diagrama do termo digit................................................................................. 26 Figura 10 – Diagrama do termo number............................................................................ 26 Figura 11 – Diagrama do termo character......................................................................... 27 Figura 12 – Diagrama do termo atribute............................................................................ 27 Figura 13 – Diagrama do termooperation_descriptor...................................................... 28 Figura 14 – Diagrama do termo operation......................................................................... 28 Figura 15 – O diagrama do elemento field_table............................................................... 29 Figura 16 – Diagrama do termo table................................................................................ 29 Figura 17 – Diagrama do termo cross_table...................................................................... 30 Figura 18 – Diagrama do termo list....................................................................................31 Figura 19 – Diagrama que descreve o termo detail............................................................ 31 Figura 20 – Diagrama do termo layout.............................................................................. 32 Figura 21 – Modelagem do domínio fictício...................................................................... 33 Figura 22 – Exemplo de um relatório plano descrito em NORL....................................... 34 Figura 23 – Exemplo de um relatório de referência cruzada descrito em NORL............. 35 Figura 24 – Exemplo de um relatório com lista descrito em NORL................................. 36 Figura 25 – Exemplo de um relatório de múltiplas colunas descrito em NORL............... 37 SUMÁRIO 1 INTRODUÇÃO...................................................................................................... 11 1.1 MOTIVAÇÃO.......................................................................................................... 11 1.2 OBJETIVOS............................................................................................................. 12 1.2.1 Geral........................................................................................................................ 12 1.2.2 Específicos............................................................................................................... 12 1.3 ESTRUTURA DESSE TRABALHO....................................................................... 13 2 FUNDAMENTAÇÃO TEÓRICA........................................................................ 14 2.1 NAKED OBJECTS.................................................................................................... 14 2.2 FRAMEWORKS........................................................................................................ 14 2.3 MVC......................................................................................................................... 15 2.4 RELATÓRIOS......................................................................................................... 16 2.4.1 Tipos de relatório.................................................................................................... 17 2.4.1.1 Relatórios planos...................................................................................................... 17 2.4.1.2 Relatório de referência cruzada................................................................................ 18 2.4.2 Relatórios com várias colunas............................................................................... 19 2.5 METALINGUAGEM EXTENDED BACKUS-NOUR FORM (EBNF)................... 19 3 TRABALHOS RELACIONADOS....................................................................... 22 3.1 FERRAMENTAS PARA CRIAÇÃO DE RELATÓRIOS...................................... 22 3.2 ENTITIES E LLE...................................................................................................... 23 4 DESCRIÇÃO DA LINGUAGEM DE DEFINIÇÃO DE RELATÓRIOS........ 25 4.1 DESCRIÇÃO DA LINGUAGEM NORL................................................................ 25 4.1.1 Digit.......................................................................................................................... 25 4.1.2 Number.................................................................................................................... 26 4.1.3 Character..................................................................................................................27 4.1.4 Attribute....................................................................................................................27 4.1.5 Operation_descriptor............................................................................................... 27 4.1.6 Operation................................................................................................................. 28 4.1.7 Field_table............................................................................................................... 29 4.1.8 Table......................................................................................................................... 29 4.1.9 Cross_table............................................................................................................... 30 4.1.10 List............................................................................................................................ 30 4.1.11 Detail........................................................................................................................ 31 4.1.12 Layout...................................................................................................................... 31 5 ESTUDO DE CASO DE LAYOUTS DESCRITOS EM NORL......................... 33 5.1 PROTÓTIPOS DE DEFINIÇÃO DE UM RELATÓRIO PLANO........................ 33 5.2 PROTÓTIPO DA DEFINIÇÃO DE UM RELATÓRIO COM REFERÊNCIA CRUZADA.............................................................................................................. 34 5. 3 PROTÓTIPO DA DESCRIÇÃO DE UM RELATÓRIO COM LISTA................. 35 5.4 PROTÓTIPO DA DESCRIÇÃO DE UM RELATÓRIO DE MÚLTIPLAS COLUNAS.............................................................................................................. 36 6 CONCLUSÃO E TRABALHOS FUTUROS...................................................... 38 REFERÊNCIAS..................................................................................................... 39 11 1 INTRODUÇÃO A cada dia que passa, a ciência avança e consegue oferecer mais recursos tecnológicos à sociedade. Em resposta, a sociedade espera por novidades tecnológicas que não apenas facilitem o trabalho e multipliquem o lazer, mas que também otimizem a utilização de recursos, sejam eles tempo, mão-de-obra ou qualquer outro (PIRRO, 2008). Nesse contexto, percebe-se que o desenvolvimento de softwares tem destaque. Um número expressivo de organizações procuram adquirir softwares, para aumentara eficiência ao realizar atividades ou mesmo tornar a execução dessas tarefas possível. Dentre essas tarefas, a elaboração de relatórios é muito comum, pois o levantamento e avaliação de informações devidamente ordenadas geralmente é um fator importante no processo de tomada de decisão. Porém, à medida que determinada organização exige do software uma maior quantidade de relatórios diferentes, levanta-se o problema da criação manualde relatórios. Acriação manual de relatórios tende a ser um fator que agrega complexidade e queda de qualidade aos softwares, pois, por si só, não promove padronização, agilidade eflexibilidade para aderir a mudanças de requisitos. Não o bastante, por estar fortementeligado à habilidade do desenvolvedor, todo o processo terá maior propensão à falhas e será mais difícil mensurar o tempo necessário para concluir a tarefa de programar ou dar manutenção à geração de relatórios. Procurando minimizar esse problema, o presente trabalho vem propor uma linguagem de definição de layoutde relatóriosa partir da qual o processo possa ser automatizado através de uma ferramenta para frameworks de desenvolvimento de softwares baseado em Naked Objects (PAWSON, 2004). 1.1 MOTIVAÇÃO A demanda por softwares cresceu nos últimos anos e o mercado está aquecido (INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA, 2011). Muitas organizações corporativas têm procurado sistemas computacionais adequados para otimizar o andamento de suas diversas tarefas, dentre elas, a criação de relatórios, a qual é o foco desse trabalho. Considerando esses fatos, é preciso pensar não só em aumentar o número de desenvolvedores encarregados da criação de relatórios, mastambém tornar mais eficiente o 12 trabalho desses no que diz respeito à promoção de padronização, confiabilidade, agilidade no processo de desenvolvimento e, dentre mais pontos, flexibilidade para acomodar mudanças nas regras de negócio. Algo que pode promover essa maior eficiência da equipe de desenvolvimento na tarefa de criar relatórios é a disponibilização de adequadas ferramentas de trabalho. Há muitas ferramentas no mercado que se propõem a colaborar na criação de relatórios como iReport (TOFFOLI, 2002), BIRT (THE ECLIPSE FOUNDATION, 2011) e outras, mas nenhuma delas o resolve os problemas aderentes a criação manual de relatórios de maneira satisfatória. Desse modo, contribuir para o aperfeiçoamento das ferramentas dedicadas a criação de relatórios é algo significante. 1.2 OBJETIVOS 1.2.1 Geral Há uma grande diversidade de frameworks no mercado, atendendo às equipes de desenvolvimento nas mais variadas necessidades, tais como: aplicação de padrões de projeto, garantia de compatibilidade entre diferentes plataformas, etc. A contribuição desse trabalho para o avanço na área de desenvolvimento de sistemas consiste em oferecer base para o aperfeiçoamento de frameworks de desenvolvimento de softwares baseados em Naked Objects (PAWSON, 2004), a exemplo do framework Entities (ENTITIES framework, 2010). No presente trabalho encontram-se uma contribuição para o aprimoramento desses frameworks no que diz à agregação dafuncionalidade decriação de relatórios. 1.2.2 Específicos Entre os objetivos específicos do presente trabalho tem-se: Definição da sintaxe da linguagem de definição de relatórios Naked Objects Report Language (NORL); Ilustração do uso da linguagem para a geração de relatórios a partir de layouts exemplo. 13 1.3 ESTRUTURA DESSE TRABALHO Os capítulos a seguir são estruturados da seguinte forma. O capítulo 2 traz toda a fundamentação teórica necessária ao entendimento do problema e da solução em questão. Na seção 2.1 vê-se Naked Objects. A seção 2.2 define frameworks, seguida da Seção 2.3, que apresenta o padrão arquitetural Model View Controller (MVC). A seção 2.4 expõe a natureza dos relatórios e, então, a seção 2.5 mostrar a meta-linguagem Extended Backus-Naur Form (EBNF). No terceiro capítulo encontra-se os trabalhos relacionados. A seção 3.1 trata de algumas ferramentas oferecidas pelo mercado para criação de relatórios, a seção 3.2 trata do framework Entities e da Linguagem de Layout Entities (LLE). O quarto capítulo contem a contribuição proposta, que é a descrição da linguagem de definição de layout de relatórios. A seção 4.1 apresenta uma família de anotações necessárias à manipulação da linguagem proposta e a seção 4.2 apresenta essa linguagem. O capítulo cinco traz estudos de caso. Por fim, o Capítulo seis dá a conclusão do trabalho epropõe trabalhos futuros. 14 2 FUNDAMENTAÇÃO TEÓRICA 2.1 NAKED OBJECTS Basicamente, o conceito de Naked Objects afirma que, escrevendo o aplicativo do negócio, o desenvolvedor deve criar somente os objetos de negócio que modelam o domínio (Naked Objects) e suas lógicas de negócio encapsuladas (PAWSON, 2004). Neste cenário, o ambiente é projetado de forma a deixar claro para o usuário os objetos que estão sendo manipulados e também as ações que estão sendo executadas, como por exemplo, a execução de algum método de um objeto, a edição dos valores das propriedades desse, chegando até a sua criação e destruição. Os objetos provenientes das entidades definidas em Naked Objects possuem todos os métodos que concretizam o seu comportamento (PAWSON, 2004). O maior benefício de se desenvolver usando Naked Objects é o fato de que o esforço fica concentrado na camada de domínio, ou seja, na definição das entidades. Isso porque, a partir da definição das entidades, o framework utilizado para aplicação da metodologia de Naked Objects se torna responsável por implementar as outras camadas como a de persistência, visão, validação e as demais.Isso é possível porque muitos dos serviços requeridos pela camada de negócio podem ser implementados de forma genérica. Porém, os frameworks podem ser enriquecidos com mecanismos de forma a permitir alguma customização na camada de acordo com as necessidades (PAWSON, 2004). Pawson (2004) destaca ainda outros benefícios adquiridos com a utilização de Naked Objects, como por exemplo, ganha-se flexibilidade para atender a mudanças nos requisitos de negócio, melhora-se a comunicação entre desenvolvedores e usuários e, além disso, acelera-se o processo de desenvolvimento. Por outro lado, Naked Objects apresenta desvantagens no que diz respeito às interfaces gráficas geradas, pois o layout das mesmas não podem ser customizadas e temos apenas uma visão para cada modelo (PAWSON, 2004). 2.2 FRAMEWORKS O termo framework está presente em outras áreas do conhecimento além da Ciência da Computação. Fazendo uma análise etimológica da palavra framework temos o termo “frame” que significa quadro ou estrutura e o termo “work” que, por sua vez, significa 15 trabalho. Assim, em uma definição simplista, diremos que framework é uma estrutura abstrata de trabalho (FERREIRA, 2010). Em desenvolvimento de software, entende-se um framework como um conjunto de classes que resolvem determinado problema comum ao desenvolvimento de sistemas diferentes, porém, dentro de um domínio específico. Geralmente avalia-se a necessidade de criar ou não um framework de acordo com o nível de intercessão de uma atividade (aplicação) para outra (FAYAD, 1997). Uma vez implementados de forma genérica, os frameworks precisam ser configurados segundo a necessidade da aplicação durante a fase de implementação do software, podendo então atender por completo a um requisito para um domínio específico (FAYAD, 1997). Vale dizer também que, diferente de uma biblioteca, o framework determina o fluxo de controle da aplicação fazendo uso de um mecanismo conhecido comoinversão de controle (FAYAD, 1997). 2.3 MVC O padrão Model-View-Controller (MVC) é utilizado para separar as atribuições das camadas do software, permitindo que cada uma delas se preocupe apenas com as suas próprias designações (FOWLER; RICE; FOEMMEL, 2003). No modelo MVC, a camada modelo (Model) é responsável pelas regras de negócio que modificam e gerenciam o acesso aos dados, que o próprio modelo representa. O modelo também fornece ao controlador meios de acessar as funcionalidades da aplicação, mantendo o estado persistente do negócio (PAWSON, 2004). Por outro lado, a camada de visualização (View) reflete uma parcela ou a totalidade do modelo de forma legível ao usuário do software. Essa camada envia mensagens ao modelo por meio da camada de controle, originando eventos que modificarão o estado do modelo. Por sua vez, quando o modelo é modificado, sempre notifica as visões que dele dependem, através do estabelecimento de um protocolo de inscrição/notificação (PAWSON, 2004). Finalmente o controlador (Controller), interpreta as ações do usuário e as mapeia para chamadas ao modelo, definindo o fluxo da aplicação. A partir das ações do usuário e da resposta do modelo, o controlador ativa processos de negócios, altera estado do modelo e, além disso, seleciona a visualização a ser exibida (PAWSON, 2004).A figura abaixo ilustra o relacionamento entre as camadas do MVC. 16 Figura 1 – Arquitetura do padrão MCV Fonte: Fowler, Rice e Foemmel (2003). 2.4 RELATÓRIOS Segundo o dicionário de língua portuguesa,relatório pode ser definido como a exposição e relação dos principais fatos colhidos por uma comissão ou pessoa encarregada de estudar determinado assunto (FERREIRA, 1986). Pode-se considerar também a definição do Michaelis Moderno Dicionário da Língua Portuguesa: “Qualquer exposição pormenorizada de circunstâncias, fatos ou objetos. R. em coluna, Inform: forma de visualização dos dados em colunas, em que cada coluna é um campo de um registro, e cada linha, um registro separado” (WEISZFLOG, 2004). Como é muito comum os relatórios terem caráter oficial ou mesmo pela simples possibilidade de terem alto valor no apoio a tomada de decisões, é aconselhável que cada instituição adote padrões para formato seus relatórios. Nesse padrão são descritas informações tais como fonte, alinhamento, conteúdo de cabeçalho, estilo de numeração de página etc. A padronização torna os relatórios mais legíveis, assegura a qualidade dos documentos e contribui na caracterização da face da instituição frente ao cliente e também internamente. No entanto, a flexibilidade na construção do layout dos relatórios pode ser importante em uma situação específica, ou em algum caso, a padronização pode não ser uma política da instituição. Quanto ao grau de dificuldade da construção dos relatórios, esta pode ser medida levando em conta a diversidade de dados a serem apresentados. Além disso, a complexidade e amplitude do assunto abordado pode também influenciar. Em muitos casos, são usados sub-relatórios para tornar mais simples a construção de relatórios complexos (PEOPLESOFT, 2003). 17 2.4.1 Tipos de relatório A literatura descreve muitos tipos de relatórios. Nesse trabalho, os esforços foram concentrados sobre aqueles mais comumente empregados (PEOPLESOFT, 2003; OFFICE, 2011; SQLSERVER, 2011). 2.4.1.1 Relatórios planos São relatórios em que as informações são dispostas em uma tabela, onde cada coluna traz os valores de uma determinada variável e cada linha da mesma representa um registro. A partir daí, muitas vezes identifica-se a necessidade de agrupar os dados de acordo com um ou mais campos, sendo que cada um desses define um nível de agrupamento. Além de agrupar, é comum classificar em ordem crescente ou decrescente a disposição dos registros segundo um ou mais campos, sendo necessário definir a prioridade desses campos, caso sejam mais de um. Para melhor ilustrar, abaixo é exposta uma figura representando um relatório plano. A primeira coluna traz as matrículas dos alunos, a segunda vem com as disciplinas e a terceira com as situações dos alunos nas disciplinas. Figura 2 – Exemplo de tabela de um relatório plano 18 Por último, valedizer que se pode efetuar operações com os dados de cada coluna. Exemplos de operações são: soma, média, variância, mínimo, etc. Abaixo temos um figura que ilustra a operação média, aplicada sobre as notas do aluno. Figura 3 – Ilustração da operação média 2.4.1.2 Relatório de referência cruzada Relatórios de referência cruzada conseguem expor de maneira simples, compacta e legível os dados de um determinado campo que diz respeito, simultaneamente, a dois outros campos do mesmo registro. Ou seja, um relatório de referência cruzada é uma tabela em que os títulos das colunas indicam os valores de um campo e os títulos das linhas se referem aos valores de outro campo. Por fim, os valores das células da tabela são valores do campo que estamos relacionando com os campos que estão fazendo as linhas e colunas. Para dar um exemplo e comprovar a utilidade de referências cruzadas, a tabela do tópico anterior (2.4.1.1) foi reconstruída para caracterizar um relatório de referência cruzada para obter a situação dos alunos de acordo com sua matrícula e disciplina (Figura 4). Figura 4 – Exemplo de tabela em relatório de referência cruzada Fazendo comparação com o relatório plano, o relatório de referência cruzada é bem mais eficiente, uma vez que torna as informações mais legíveis e ocupa menor volume de espaço. Da mesma forma que relatórios planos, é possível classificar e executar operações com os dados das linhas e colunas, como ilustrado na figura abaixo, onde temos um relatório de referência cruzada expondo a quantidade de alunos aprovadose reprovados em cada disciplina. 19 Figura 5 – Ilustração de operação em relatório de referencia cruzada 2.4.2 Relatórios com várias colunas No termo “Relatório com Várias Colunas”, a palavra “colunas” tem um sentido diferente do que teria no termo “coluna da tabela”. O layout de um relatório de várias colunas é semelhante ao de um jornal. Normalmente, relatórios têm uma só coluna, enquanto jornais têm várias colunas. Para deixar mais claro, a figura abaixo ilustra um recorte de jornal, que pode ser visto como um relatório de duas colunas. Figura 6 – Relatório de duas colunas Fonte: O Povo (2011). Concluindo, esse tipo de relatório é comumente usado para criar etiquetas, porém, é possível acomodar qualquer tipo de relatório dentro de um relatório de várias colunas, considerando como se cada coluna fosse uma página. 2.5 METALINGUAGEM EXTENDED BACKUS-NOUR FORM (EBNF) Em computação, EBNF é uma família de notações meta-sintáticas criadas para descreverem linguagens livres de contexto. Por exemplo, pode-se recorrer a EBNF para descrever a sintaxe de uma linguagem de programação. Extended Backus-Nour From (EBNF), 20 definida no padrão ISO/IEC 14977, é uma extensão da Backus-Nour From (BNF). No presente trabalho, a EBNF será empregada para definir a sintaxe da linguagem de definição de relatórios aqui proposta. A seguir, há dois quadros listando os meta-caracteres da EBNF: Quadro 1 – Meta-caracteres EBNF em ordem decrescente de precedência Meta-caracteres em ordem decrescente de precedência * Repetição Exceção , Concatenação | Escolha = Definição ; Terminação Quadro 2 – Meta-caracteres EBNF de agrupamento e quebra de precedência Meta-caractere de agrupamento e quebra de precedência [...] Opcional {...} Repetição (zero ou mais) (...) Agrupamento “...” Cotação dupla „...‟ Cotação simples (*...*) Comentário ?...? Definição especial (simples) Basicamente, a EBNF define regras de construção da seguinte maneira: Identificador_da_regra = definição_da_regra ; Identificadores, que são termos não-terminais (variável), podem ser definidos com mais de uma palavra separadas por espaço, porém, pelo menos nesse trabalho, evitar-se-á escrever assim para conservar a legibilidade. Os símbolos terminais, que são uma sequência de um ou mais caracteres que formam uma unidade irredutível da linguagem, ficam entre aspas ou apóstrofes e são os elementos marcadores das linguagens definidas em EBNF. Como exemplo, verifica-se a definição dos números inteiros: numeros_nao_nulos = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; numeros = "0" | numeros_nao_nulos ; integer = [ "-" , numeros ] , {numeros} ; 21 A maioria dos padrões de linguagem de programação usa alguma variante da EBNF para definir a gramática da língua, possibilitando a construção de compiladores, uma vez que o analisador para o compilador pode ser gerado automaticamente com um gerador de analisador sintático como YACC. 22 3 TRABALHOS RELACIONADOS 3.1 FERRAMENTAS PARA CRIAÇÃO DE RELATÓRIOS O mercado oferece muitas ferramentas às quais desenvolvedores podem recorrer quando incumbidos da tarefa de criar relatórios. IReport (TOFFOLI, 2002) é um programa open sourcecriado para ajudar os desenvolvedores a criar relatórios usando a biblioteca Jasper Report. Seus códigos fontes sãodistribuídos gratuitamente segundo a licença General Public License (GNU). Contando com uma interface gráficaintuitiva, o desenvolvedor se vê capaz de criar relatórios de variados modelos para aplicações Java. O iReport, já atualmente em sua versão 4.5.0, pode ser considerada uma ferramenta madura. Outra ferramenta vocacionada à tarefa de criação de relatórios é o BIRT (THE ECLIPSE FOUNDATION, 2011), um projeto sem fins lucrativos dentro da Eclipse Foundation, sendo um sistema de código aberto. Baseado no Eclipse, esta voltado para aplicações web, dando especial suporte as baseadas em Java e J2EE. BIRT tem dois componentes principais. O primeiro deles é o designer de relatórios que se encontra dentro da IDE Eclipse, onde se cria os relatórios. O segundo componente é responsável pela geração dos relatórios em tempo de execução, podendo ser implantado no servidor de aplicação e em qualquer ambiente Java. Atualmente, BIRD está na versão 3.7.2 e já é capaz de criar relatórios bem elaborados. Porém, ambas ferramentas possuem como principal limitação ao uso o fato de que a qualidade dos produtosgerados depende em muito da habilidade do desenvolvedor, o que compromete significativamente o aspecto de confiabilidade do produto. As ferramentas acima também não facilitama incorporação das adaptações necessárias por conta de mudanças de requisitos, embora um desenvolvedor experiente consiga criar relatórios de forma relativamente ágil, se considerarmos o tempo necessário para desenvolver os mesmos relatórios sem nenhuma ferramenta semelhante. Assim como iReport e BIRD, há outros projetos como Quick Report, Cristal Report e outros, porém compartilham limitações similares. Concluindo, mesmo que todas essas ferramentas tenham representado um grande avanço no tratamento do problema da criação de relatórios, ainda há muito a fazer para se garantir eficiência no processo. 23 3.2 ENTITIES E LLE Entities (ENTITIES framework, 2010)é um framework Java que, sendo baseado em Naked Objects, tem como finalidade gerar a camada de interface gráfica a partir da camada de negócio, simplificando o processo de desenvolvimento, contribuindo para a qualidade do software e sua produção em curto espaço de tempo. A Linguagem de Layout Entities (LLE) foi criada especialmente para ser usada no desenvolvimento com o framework Entities (ENTITIES framework, 2010).Na concepção do Entities, quando se pensou em prover a customização das telas dos sistemas, descartou-se a ideia de utilizar estruturas sofisticadas como as de XML. Em lugar disso, e com foco em obter a simplicidade para a rápida implementação e interpretação da parte do desenvolvedor foi concebida uma linguagem de layout que simplesmente faz uso de texto simples (String). O framework Entities utiliza da LLE para descrever o layout das telas usadas para expor objetos ao usuário, segundo o conceito de Naked Objects. Para que fique mais claro o funcionamento da LLE, a figura abaixo apresenta o exemplo da descrição de uma tela a partir da LLE. Essa telaseria o ambiente de cadastro e manutenção de produtos utilizados em um restaurante: Figura 7 – Descrição da tela de produtos do restaurante 24 A partir dessa descrição encontrada na entidade, o Entities gera a seguinte tela: Figura 8 – Tela de produtos do restaurante Considerando que o framework Entities ainda não possui um mecanismo automatizado para a geração de relatórios, e tendo em vista as deficiências detectadas em outras ferramentas para a geração de relatórios, este trabalho visa contribuir no sentido depropor uma linguagem que defina relatórios, similarmente a como a LLE define as telas dos sistemas Entities. 25 4 DESCRIÇÃO DA LINGUAGEM DE DEFINIÇÃO DE RELATÓRIOS No presente capítulo é apresentada a linguagem de definição de relatórios, que recebeu o nome de Naked Objects Report Linguage (NORL). Durante o processo de desenvolvimento da NORL,optou-se por conceber uma linguagem que usasse de texto simples (String) para descrever layouts. Frameworks baseados em Naked Objects conseguem identificar as propriedades dos objetos de modelo, o que garante a seleção acertada dos componentes visuais que as representarão na interface apresentada ao usuário. Assim, uma vez que NORL possui total aderência à metodologia do Naked Object, ela é capaz de levar o framework a expor os objetos aos usuários em formato de relatórios, seguindo uma estratégia semelhante a da LLE (seção 3.2), ao expor os objetos aos usuários em formato detelas. 4.1 DESCRIÇÃO DA LINGUAGEM NORL A seguir, a linguagem NORL é descrita segundo a notação EBNF. Convém dizer que os diagramas que a frente ilustram da linguagem foram criados utilizando-se do sistema Railroad Diagram Generator (RADEMACHER, 2013). 4.1.1 Digit Digit é o termo que representa um digito. digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ; Segue o diagrama do termo digit: 26 Figura 9 – Diagrama do termo digit 4.1.2 Number Para representar um número, temos o termo number. number = digit , {digit} ; O diagrama abaixo descreve o termonumber: Figura 10 – Diagrama do termo number 27 4.1.3 Character Character agrega qualquer caractere apresentável. character = ? Qualquer caractere apresentável ? ; O diagrama de character está logo abaixo: Figura 11 – Diagrama do termo character 4.1.4 Attribute O attribute agrega qualquer conjunto de caracteres apresentáveis ao layout referente a um atributo da entidade que o acomoda. attribute = character , { character } ; A seguir temos o diagrama de attribute: Figura 12 – Diagrama do termo attribute 4.1.5 Operation_descriptor O termo operation_descriptor sinaliza qualquer uma das operações suportadas, como soma, média, variância etc. operation_descriptor = 'COUNT' | 'DISTINCT_COUNT' | 'SUM' | 'AVERAGE' | 'LOWEST' | 'HIGHEST' | 'STANDARD_DEVIATION' | 'VARIANCE' ; 28 A lista das operações suportadas poderá mudar de acordo com as necessidades e disposições da equipe que implementar a máquina de criar relatórios. Agora temos o diagrama do termo operation_descriptor: Figura 13 – Diagrama do termo operation_descriptor 4.1.6 Operation O termo operationsinaliza qualquer uma das operações suportadas especificando as colunas a serem computadas com o termo attribute. operation = operation_descriptor , '(' , attribute , { ',' , attribute } , ')' ; Odiagrama de operation vem a seguir: Figura 14 – Diagrama do termo operation 29 4.1.7 Field_table Field_table define as colunas de uma tabela simples com o termo attribute, ou seja, define os dados que serão visualizados na coluna e, além disso, o título da coluna. field_table = attribute , { ',' , attribute } ; O diagrama do elemento field_table vem a seguir: Figura 15 – O diagrama do elemento field_table 4.1.8 Table Table contem a descrição de uma tabela simples. Os termos HORIZONTAL e VERTICAL definem a disposição horizontal ou vertical dos objetos na tabela, sendo opcionais, pois deverá ser adotado um deles como valor default. Os termos operationefield_table descrevem a tabela segundo sua atribuição, como explicado nas secções 4.1.6 e 4.1.7 respectivamente. table = '[' , [ 'HORIZONTAL' | 'VERTICAL' ] , '[' , field_table , ']' , [ operation , { ',' , operation } ] ']' ; O digrama a seguir descreve o termo table: Figura 16 – Diagrama do termo table 30 4.1.9 Cross_table Cross_table define uma tabela de referência cruzada. Como em table, os termos operatione field_table descrevem a tabela segundo sua atribuição, como explicado nas secções 4.1.6 e 4.1.7, respectivamente. cross_table = ‘[’ , '[' field_table ']' , 'x' , '[' field_table ']' , 'x' '[' field_table ']' , [ operation , { ‘,’ , operation } ] , ‘]’ ; A seguir, temos o diagrama do termo cross_table: Figura 17 – Diagrama do termo cross_table 4.1.10 List List descreve em formato de lista uma lista pertencente à entidade que o acomoda. Pode-se definir uma lista numérica com o termo NUMBER ou uma lista com marcadores com o termo MARKER, mas esses são opcionais, cabendo definir um valor default. O termo attribute descreve os itens a serem listados. List = ‘<’ , attribute , [ ';' , 'NUMBER' | 'MARKER' ] '>' ; O diagrama a seguir descreve o termo list: 31 Figura 18 – Diagrama do termo list 4.1.11 Detail Detail define a exata disposição dos dados em forma de lista (list), tabela simples (table) ou tabela de referência cruzada (cross_table). detail = [ list | table | cross_table ] ; Abaixo temos o diagrama que descreve o termo datail: Figura 19 – Diagrama que descreve o termo detail 4.1.12 Layout Um layout é composto por ao menos um datail ou um atribute. Então, poderá suceder uma sequência contendo detaile attribute em qualquer ordem ou quantidade. Opcionalmente, é possível também definir a quantidade de colunas de um layout com o termo number, agregado a MULT_COLUMN. Para valor default, o mais conveniente é que tenhamos apenas uma coluna. layout = ‘[‘ , ['MULT_COLUMN;' , number ] , (attribute | datail) , { { attribute } , { detail } } , ‘]’ , [ ',' , layout ] ; 32 A seguir temos o diagrama do termo layout: Figura 20 – Diagrama do termo layout A partir da sintaxe definida para a linguagem NORL é possível a criação dos relatórios mais comumente utilizados.NORL atendeao Relatório Plano, ao Relatório de Referência Cruzada e, também, ao Relatório de Varias Colunas. Essa linguagem também propicia fazer agrupamentos e a realizar operações com os dados das tabelas. 33 5ESTUDO DE CASO DELAYOUTS DESCRITOS EM NORL Neste capítulo são apresentados alguns protótipos para ilustrar a utilização da NORL para a criação de relatórios. Abaixo temos o diagrama de classes que modela o domínio o qual se vai considerar: Figura 21 – Modelagem do domínio fictício 5.1 PROTÓTIPOS DE DEFINIÇÃO DE UM RELATÓRIO PLANO Abaixo é descrito o layout de um relatório plano com o seguinte código: [relatorio.img_estado, relatorio.titulo, relatorio.img_uece, relatorio.corpo, [[aluno.matricula,disciplina,situacao]cresc(aluno.matricula)], relatorio.assinatura] Essa definição seria aplicada em um objeto da classe Historico. „relatorio‟, é um membro de Historico e também uma referência para o objeto da classe Relatorio. Por meio dessa referência, temos acesso aos atributos da classe Relatorio. Da mesma forma, temos as referencias e acesso aos atributos da classe Aluno, Disciplina e SituacaoDisciplina. A partir daí, o framework deverá selecionar o componente visual mais adequado de acordo com o tipo do atributo referenciado na descrição. Por exemplo, o atributo „relatorio.img_estado‟, que é um array de bytes, é apresentado como uma imagem. 34 A definição da tabela está em negrito na descrição de relatório dada acima. Estamos também usando da operação „cresc‟, que aqui classifica em ordem crescente os registros segundo a matrícula do aluno. A seguir, mostra-se a figura que ilustra o relatório gerado pelo framework a partir da descrição feita acima: Figura 22 – Exemplo de um relatório plano descrito em NORL 5.2 PROTÓTIPO DA DEFINIÇÃO DE UM RELATÓRIO COM REFERÊNCIA CRUZADA O código para a geração de um relatório com referência cruzada é descrito da seguinte forma: [relatorio.img_estado, relatorio.img_uece, relatorio.corpo, [ [aluno.matricula,aluno.nome]x [disciplina.descricao]x [situação.descricao] cresc(aluno.matricula,aluno.nome) ], relatorio.assinatura] relatorio.titulo, 35 O presente relatório de referência cruzada para apresentar os mesmos dados que o relatório plano, acrescentando também o nome dos alunos. A seguir, mostramos o relatório gerado pelo framework a partir dessa definição: Figura 23 – Exemplo de um relatório de referência cruzada descrito em NORL 5.3 PROTÓTIPO DA DESCRIÇÃO DE UM RELATÓRIO COM LISTA O código para a geração de um relatório com lista é descrito da seguinte forma: [relatorio.img_estado, relatorio.titulo, relatorio.img_uece, relatorio.corpo, <aluno.selecionados>,relatorio.assinatura] Como resultado da interpretação do código acima, temos um relatório que lista o conteúdo do atributo „selecionados‟, que é do tipo lista e pertence a um objeto da classe Aluno. Abaixo temos o relatório que seria gerado pelo framework a partir da descrição acima: 36 Figura 24 – Exemplo de um relatório com lista descrito em NORL 5.4 PROTÓTIPO DA DESCRIÇÃO DE UM RELATÓRIO DE MÚLTIPLAS COLUNAS O código para a geração de um relatório com múltiplas colunas é descrito da seguinte forma: [relatorio.img_estado, relatorio.titulo, relatorio.img_uece, relatorio.corpo, [MULT_COLUNM:2:<aluno.selecionados>],relatorio.assinatura] O relatório gerado a partir do código acima é semelhante ao da seção 5.3. A diferença é que a lista é mostrada em duas colunas, como é descrito no código em negrito. Então, temos o relatório que seria gerado pelo framework a partir da descrição anterior: 37 Figura 25 – Exemplo de um relatório de múltiplas colunas descrito em NORL 38 6 CONCLUSÃO E TRABALHOS FUTUROS O fruto desse trabalho é a Naked Object Repor tLinguage (NORL). Uma linguagem capaz de descrever o layout de relatórios, o que possibilita a automatização da construção de relatórios de forma aderente ao padrão Naked Objects. Por conta disso, qualquer framework baseado em Naked Objects pode implementar uma máquina de criação de relatórios capaz de interpretar a linguagem NORL e com base nela gerar seus próprios relatórios. Vale ressaltar que se trata de uma linguagem simples, o que propicia um rápido aprendizado por parte do desenvolvedor e consequentemente, um baixo custo de manutenção dos relatórios.Assim, depois da implementação da máquina de criação de relatórios,espera-se que tal tarefa não mais seja um fator que agrega tanta complexidade ao processo de desenvolvimento. A NORL foi concebida de forma genérica para que toda a comunidade se beneficiasse dela, mas a motivação inicial foi atender às necessidades do setor de desenvolvimento da UECE. Agora, a instituição conta com mais um recurso para otimizar o seu desempenho. Como trabalho futuro pretende-se implementar o modelo aqui proposto no framework Entities. 39 REFERÊNCIAS ENTITIES framework. UECE tira segundo lugar no Prêmio Ceará de Cidadani@ Eletrônica 2012. Postado por Marcius Brandão. Fortaleza, 2010. Disponível em: <http://entitiesframework.blogspot.com/>. Acesso em: 15 jun. 2011. FAYAD, M. Building application frameworks: object-oriented application frameworks. New York: [s.n.], 1997. FERREIRA, A. B. H. Novo dicionário Aurélio da língua portuguesa. 2. ed. Rio de Janeiro: Sem Fronteira, 1986. FERREIRA, A. G. Frameworks baseados em Domain Driven Design e Naked Object: um estudo de caso. 2010. 70 f. Monografia (Curso de Graduação em Sistemas de Informação) – Faculdade 7 de Setembro, Fortaleza, 2010. INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Disponível em: <http://www.ibge.gov.br/home/ presidencia/noticias/noticia_visualiza.php?id_noticia=1860>. Acesso em: 03 mar. 2011. O POVO. Disponível em: <http://www.opovo.com.br/app/opovo/jornaldoleitor/2011/01/15/ noticiasjornaljornaldoleitor,2088637/a-medicina-natural.shtml>. Acesso em: 2 fev. 2011. OFFICE, M. Tipos de relatórios que você pode criar no access. Disponível em: <http://office.microsoft.com/pt-br/access-help/tipos-de-relatorios-que-voce-pode-criar-noaccess-HA001045080.aspx>. Acesso em: 28 jul. 2011. OWLER, M.; RICE, D.; FOEMMEL, M. Patterns of enterprise application architecture. [S.l.]: Addison-Wesley, 2003. 512 p. PAWSON, R. Naked object. [S.l.: s.n.], 2004. PEOPLESOFT. Enterpriseone, P. 8. 9. Geração de relatórios empresariais. [S.l.: s.n.], set. 2003. Disponível em: <http://docs.oracle.com/cd/E12293_01/jded/acrobat/AC89POR0309. pdf>. Acesso em: 20 jun. 2011. PIRRO, W. Alguns impactos sociais do desenvolvimento científico e tecnológico. Revista Cientifica Digital da Faetec, 2008. RADEMACHER, G. Welcome to Railroad Diagram Generator!. Railroad Diagram Generator, v. 1.25.661, 30 May 2013. Disponível em: <http://railroad.my28msec.com/ rr/ui>. Acesso em: 15 ago. 2012. SQLSERVER, M. Tipos de relatórios (Construtor de Relatórios 2.0). Disponível em: <http://technet.microsoft.com/pt-br/library/dd207050%28v=sql.100%29.aspx>. Acesso em: 20 jun. 2013. THE ECLIPSE FOUNDATION. BIRD Project: business intelligence and reporting tools. Disponível em: <http://www.eclipse.org/birt/phoenix/>. Acesso em: 15 ago. 2011. 40 TOFFOLI, G. A design tool iReport for Jasper Reports: documentation and tutorial. Manual for iReport>= 0.2.0 (pure java version of iReport). [S.l: s.n.], 2002. Disponível em: <http://ireport.sourceforge.net/manual0.2.0.html#1.0>. WEISZFLOG, W. Michaelis moderno dicionário da lingua portuguesa. São Paulo: Melhoramentos, 2004.