FERRAMENTA GERADORA DE CÓDIGO-FONTE DE APLICAÇÕES COMERCIAIS EM JAVA

Tamanho: px
Começar a partir da página:

Download "FERRAMENTA GERADORA DE CÓDIGO-FONTE DE APLICAÇÕES COMERCIAIS EM JAVA"

Transcrição

1 FACULDADE DE INFORMÁTICA DE PRESIDENTE PRUDENTE FERRAMENTA GERADORA DE CÓDIGO-FONTE DE APLICAÇÕES COMERCIAIS EM JAVA SIDNEY HEND DA SILVA HORAGUTI Presidente Prudente SP 2005

2 FACULDADE DE INFORMÁTICA DE PRESIDENTE PRUDENTE FERRAMENTA GERADORA DE CÓDIGO-FONTE DE APLICAÇÕES COMERCIAIS EM JAVA SIDNEY HEND DA SILVA HORAGUTI Trabalho monográfico apresentado no curso de graduação, Bacharelado em Ciência da Computação, como requisito parcial para sua conclusão. Área de concentração: Linguagens de Programação. Orientador: MSc. Francisco Assis da Silva Co-Orientador: MSc. Leandro Luiz de Almeida Presidente Prudente SP 2005

3 004 HORAGUTI, Sidney Hend da Silva. Ferramenta Geradora de Código-Fonte de Aplicações Comerciais em Java/ Sidney Hend da Silva Horaguti. Presidente Prudente: UNOESTE, p. : il Monografia (Graduação) Universidade do Oeste Paulista UNOESTE: Presidente Prudente SP, Bibliografia 1. Ferramenta Geradora de Código-Fonte. 2. Java. I. Autor. II. Título.

4 DEDICATÓRIA Dedico este trabalho primeiramente a Deus. A minha amada mãe Ghislaine e ao meu super pai Cláudio, que nunca mediram esforços para que eu pudesse cursar a faculdade e sempre estiveram presentes nos momentos mais difíceis desta jornada. Aos meus três grandes irmãos, Dayvid, Hudson e Juan, pelo carinho, confiança e esperança depositados em mim.

5 AGRADECIMENTOS A toda minha família, em especial a minha tia Teresa e meu tio Santo que, em todos os momentos de realização desta pesquisa, estiveram presentes. As minhas primas Miyuki e Mayumi que, apesar das diferenças sempre me apoiaram e acreditaram em meu potencial. Agradecimentos também aos professores orientadores, MSc. Francisco Assis da Silva e MSc. Leandro Luiz de Almeida que, na rigidez de seus ensinamentos, fez aprimorar meus conhecimentos como pessoa e profissional. A professora, MSc. Aglaê Pereira Zaupa, pelo carinho e apoio nos momentos difíceis. Aos meus amigos e irmãos de curso, Eli, Julierme, Diogo, em especial a meu grande e fiel amigo Fagner Daniel de Melo, que me ajudou nos momentos mais difíceis.

6 EPÍGRAFE [...] Mesmo uma longa jornada inicia-se com um simples passo [...] Lao Tse

7 HORAGUTI, Sidney Hend da Silva. Ferramenta geradora de aplicações comerciais em Java. Presidente Prudente: UNOESTE, Monografia de Graduação. Orientador: MSc. Francisco Assis da Silva Co-Orientador: MSc. Leandro Luiz de Almeida RESUMO Este trabalho tem por objetivo implementar uma ferramenta capaz de gerar código-fonte de aplicações comerciais na linguagem de programação Java, a partir das informações contidas no catálogo do banco de dados Interbase da aplicação. O desenvolvimento desta ferramenta foi motivado pela necessidade de se ter aplicações comerciais com um tempo de desenvolvimento extremamente baixo, que possa ser de fácil utilização pelo usuário e que possibilite ser executada em um sistema operacional gratuito, como é o caso do Linux. Pensa-se que a construção da ferramenta, a qual se objetiva este projeto, proporcionará às empresas de pequeno e médio porte a possibilidade de se beneficiar da aplicação comercial gerada, com tempo de desenvolvimento reduzido e portabilidade para diversos sistemas operacionais, livres ou proprietários. Neste trabalho é apresentada a API JDBC (Java Database Connectivity) para acesso e consultas ao banco de dados Interbase da aplicação e seu catálogo. JDBC é uma API que permite que a aplicação Java se conecte a um banco de dados relacional, como é o caso do Interbase. É demonstrada sua finalidade, suas características básicas e exemplos de sua utilização.

8 HORAGUTI, Sidney Hend da Silva. Generating tool of commercial source-code applications in Java. Presidente Prudente: UNOESTE, Graduation Monograph. Adviser: MSc. Francisco Assis da Silva Co-Adviser: MSc. Leandro Luiz de Almeida ABSTRACT This work objective is to implement a tool able to create commercial applications source-code in Java programming language through the contained information in the Interbase database catalog of the application. The tool development was motivated by the need of construct commercial applications with a low time development to facilitate the use and that can be possible executed in a free operating system like Linux. We think that a tool construction in this work provide to the small and medium companies the possibility to benefit of the generated commercial application with reduced time of development and portability for several licensed and free operating systems. In this work is presented the API JDBC (Java Database Connectivity) to access and query Interbase database of the application and database catalog. JDBC is API that allows Java application to connect in a relational database like Interbase. The objective basic characteristics and use examples are demonstrated.

9 LISTA DE FIGURAS FIGURA 1 Tabelas e campos do catálogo Interbase FIGURA 2 Tabelas do banco de vendas...27 FIGURA 3 SQL de criação do banco de vendas FIGURA 4 Programa exemplo do catálogo do banco de vendas...29 FIGURA 5 String de conexão com o banco de vendas FIGURA 6 Tabelas do banco de vendas...30 FIGURA 7 SQL que retorna as tabelas do banco de vendas...30 FIGURA 8 Campos das tabelas do banco de vendas...31 FIGURA 9 SQL que retorna os campos do banco de vendas...31 FIGURA 10 Chaves primárias do banco de vendas...32 FIGURA 11 SQL que retorna as chaves primárias do catálogo FIGURA 12 Chaves estrangeiras do catálogo...33 FIGURA 13 SQL que retorna as chaves estrangeiras...34 FIGURA 14 Classe de conexão com um banco de dados FIGURA 15 Consulta de produtos utilizando a classe Conexao...38 FIGURA 16 Código-fonte da consulta utilizando a classe Conexao...39 FIGURA 17 Tela inicial da ferramenta...43 FIGURA 18 Parâmetros iniciais da aplicação...44 FIGURA 19 Escolha dos templates da aplicação...45 FIGURA 20 Exemplo de uma classe de mapeamento FIGURA 21 Exemplo de utilização da classe de mapeamento FIGURA 22 Métodos da camada de persistência FIGURA 23 Montando SQL de inserção FIGURA 24 Montando SQL de alteração FIGURA 25 Utilização do componente SJDBComboBox...52 FIGURA 26 Utilização do componente SJDBTable FIGURA 27 Template de cadastro FIGURA 28 Instrução SQL padrão do SJDBComboBox FIGURA 29 Cadastro da aplicação comercial gerada...54 FIGURA 30 Template de consulta/relatório...55 FIGURA 31 Consulta/Relatório da aplicação gerada....56

10 FIGURA 32 Visualizador de relatórios em PDF...57 FIGURA 33 Template de movimentação...57 FIGURA 34 Movimentação da aplicação gerada FIGURA 35 Geração de um relatório com JasperResports (PAIXÃO, 2004)...61 FIGURA 36 Tags de campos FIGURA 37 Declaração de parâmetros...63 FIGURA 38 Definição de uma SQL utilizando parâmetros...63 FIGURA 39 Atribuição de valores aos parâmetros com HashMap...63 FIGURA 40 Declaração de variáveis...64 FIGURA 41 Declaração de variáveis com nível de inicialização FIGURA 42 Declaração de expressões FIGURA 43 Cadastro de um banco de dados no ireport FIGURA 44 Configuração dos visualizadores de relatório FIGURA 45 Definição da SQL do relatório...69 FIGURA 46 Definição dos campos do relatório...70 FIGURA 47 Definição dos campos de agrupamento do relatório...70 FIGURA 48 Definição do estilo do relatório...71 FIGURA 49 Término da definição do relatório...71 FIGURA 50 Layout do relatório FIGURA 51 Definição dos nomes dos campos do relatório FIGURA 52 Executando o relatório FIGURA 53 Salvando o layout do relatório...73 FIGURA 54 Visualização do relatório com o JasperViewer...74

11 LISTA DE TABELAS TABELA 1 Métodos Java para recuperação de tipos SQL...42 TABELA 2 Tipos Interbase e Java TABELA 3 Níveis de inicialização das variáveis...64 TABELA 4 Variáveis internas TABELA 5 Tipos de seções...66 TABELA 6 Ferramentas para design de relatórios....66

12 SUMÁRIO 1 INTRODUÇÃO OBJETIVOS, JUSTIFICATIVAS E MOTIVAÇÕES DO PROJETO TRABALHOS CORRELATOS ORIENTAÇÃO A OBJETOS ESTRUTURA DESSA MONOGRAFIA CATÁLOGO DO BANCO DE DADOS CATÁLOGO DO BANCO DE DADOS INTERBASE JDBC JAVA DATABASE CONNECTIVITY CONEXÃO COM O BANCO DE DADOS INTERBASE EM JAVA Classe de Conexão em Java MÉTODOS JAVA PARA RECUPERAÇÃO DE TIPOS SQL A FERRAMENTA PARÂMETROS INICIAIS DA APLICAÇÃO COMERCIAL MAPEAMENTO INTERBASE X JAVA CAMADA DE PERSISTÊNCIA COMPONENTES GRÁFICOS IMPLEMENTADOS TEMPLATE DE CADASTRO TEMPLATE DE CONSULTA/RELATÓRIO Visualizador de Relatórios em PDF TEMPLATE DE MOVIMENTAÇÃO SOFTWARES PESQUISADOS FERRAMENTAS PARA RELATÓRIOS JasperReports Dados Estrutura XML do arquivo Jasper Campos Parâmetros Variáveis Expressões...65

13 Layout ireport CONCLUSÕES...75 REFERÊNCIAS BIBLIOGRÁFICAS...76

14 12 1 INTRODUÇÃO Nos dias atuais as empresam vislumbram redução de custo e complexidades dos processos, disponibilidade dos sistemas 24 horas com segurança dos dados, atendendo as oportunidades de negócios com tecnologia de baixo custo. Java (JAVA, 2004) vem para suprir essas necessidades como uma tecnologia avançada com baixo custo e alto poder de processamento, atendendo diversos nichos de mercado e negócios, possibilitando a implementação dos mais diversos tipos de aplicações, tanto Clientes como Servidores, rodando na maioria das plataformas existentes no mercado hoje, proprietárias ou livres. O termo sistema comercial refere-se a uma organização de indivíduos ou entidades, presumivelmente trabalhando juntos para conseguir alguns objetivos comuns. As organizações possuem muitas formas e tamanhos, grandes e pequenas, com ou sem fins lucrativos, governamentais ou não (AHMED, 2002). A Sun (SUN, 2005) organizou o Java 2 Plataform, mais conhecido como Java 2 e será abordado nesta monografia apenas como Java, em três áreas específicas ou plataformas: Java 2 Micro Edition (J2ME) A plataforma para desenvolvimento de software para dispositivos incorporados como celulares, palm top, etc; Java 2 Standard Edition (J2SE) A mais familiar das plataformas Java 2, também conhecida como Java Development Kit (JDK) e incluem bibliotecas para desenvolvimentos de applets (programas Java para internet), interfaces com o usuário, cálculos aritméticos etc; Java 2 Enterprise Edition (J2EE) A plataforma para desenvolver aplicações comerciais dimensionáveis. É designada para ser usada em conjunto com o J2SE. O J2EE define uma arquitetura para desenvolvimento de aplicações comerciais complexas e distribuídas, foi originalmente anunciado pela Sun Microsystems no inicio de 1999 e foi lançado oficialmente no final de O J2EE, sendo relativamente novo, ainda está desenvolvendo alterações significativas de

15 13 versão para versão, especialmente na área do Enterprise Java Beans (EJB), que são as bibliotecas específicas para desenvolvimento de aplicações distribuídas. A Sun (Sun, 2005), caracterizou o J2EE nos seguintes aspectos: Regras de construção para desenvolver aplicações comerciais usando o J2EE; Uma implementação de referência para fornecer uma visão operacional do J2EE; Um conjunto de teste de compatibilidade para ser utilizado por terceiros para verificar a compatibilidade de seus produtos com o J2EE; Várias Application Programming Interface ou API (Interface de Programação da Aplicação) para permitir o acesso genérico para recursos comerciais e infra-estrutura; Tecnologias para simplificar o desenvolvimento Java comercial. A plataforma baseia-se no mantra Java: Escreva uma vez, execute em qualquer lugar, por meio de um grupo de tecnologias e um conjunto de API s. Elas são suportadas e vinculadas, por sua vez, por três elementos-chave a saber: a implementação de referência, as regras da construção e o conjunto de compatibilidade. Talvez uma das maiores vantagens de Java, seja seu suporte para componentes. O software baseado em componentes tem numerosas vantagens sobre o desenvolvimento de software tradicional (DEITEL, 2003): Produtividade mais alta: Os desenvolvedores podem conseguir mais produtividade, reunindo uma aplicação a partir de componentes predefinidos e testados previamente em vez de implementar uma solução personalizada a partir do zero; Desenvolvimento rápido: Os componentes existentes podem ser reunidos rapidamente para criar novas aplicações; Qualidade mais alta: Em vez de testar as aplicações inteiras, os desenvolvedores da aplicação baseada em componentes podem se

16 14 concentrar em testar a integração e a funcionalidade geral da aplicação conseguida pelos componentes predefinidos. A principal biblioteca J2EE utilizada neste projeto é a JDBC (REESE, 2001) (JDBC, 2004) (JAVA, 2004), responsável pela conexão com SGBD (Sistema Gerenciador de Banco de Dados), as outras bibliotecas utilizadas estão localizadas na plataforma J2SE. 1.1 Objetivos, Justificativas e Motivações do Projeto A era da informação está trazendo cada vez mais às empresas a necessidade da informatização de processos de negócios e a possibilidade de armazenar informações importantes e relevantes em Banco de Dados. A maior parte das empresas nos dias de hoje detém ou vislumbram ter um sistema computacional para informatizar alguma área da empresa no intuito de melhorar e tornar mais confiável e de mais fácil obtenção as informações geradas. As aplicações comerciais são cada vez mais utilizadas para substituir a enorme quantidade de papéis que seriam gerados com o processo manual. A informática definitivamente trouxe a possibilidade de se ter melhores resultados no planejamento de ações e investimentos nas empresas, visando o seu crescimento e uma maior vantagem competitiva. Pensando em se ter aplicações comerciais com baixo custo de produção e de se ter aplicações que possam ser executadas em diferentes plataformas, pensou-se na construção de uma ferramenta capaz de gerar o códigofonte de aplicações comerciais. Estas aplicações comerciais seriam escritas na linguagem de programação Java e utilizariam o Banco de Dados Interbase (BORLAND, 2004). Objetivando realizar uma investigação abrangente sobre a utilização de Java no desenvolvimento de aplicações comerciais. O aprendizado da utilização do Banco de Dados Interbase na linguagem Java também é considerado um fator relevante, devido ao fato que todas as informações necessárias para a geração do código-fonte da aplicação comercial estarem contidas em seu catálogo. Almeja-se a construção de uma ferramenta capaz de gerar código-fonte de aplicações comerciais na linguagem de programação Java. Estas aplicações pelo

17 15 fato de serem desenvolvidas em Java, poderão ser executadas em qualquer plataforma que possua uma máquina virtual Java (JVM Java Virtual Machine), ou seja, uma plataforma que tenha recursos que suporte esta linguagem. A necessidade de se ter a produção de uma aplicação comercial com um tempo de produção extremamente baixo, além da possibilidade de se poder executá-la em um sistema operacional gratuito e de fácil obtenção na internet como é o caso do Linux (LINUX, 2003) motivaram a idealização deste projeto. A ferramenta, instrumento pela qual objetiva incorporar as justificativas acima descritas possui um ambiente de fácil utilização pelo programador da aplicação que, numa fase anterior a da geração do código-fonte da aplicação comercial deverá modelar e construir o Banco de Dados, pois seu catálogo será utilizado pela ferramenta para obter informações a respeito das tabelas, campos e tipos dos campos para posteriormente gerar o código-fonte da aplicação comercial. 1.2 Trabalhos Correlatos Nesta seção, resumem-se os resultados das investigações realizadas para obter conhecimento de trabalhos relacionados ao apresentado nesta monografia, envolvendo inclusive abordagens diferentes. Entre as ferramentas exploradas que possuem uma abordagem semelhante à deste projeto, foram encontradas duas ferramentas, o X-Maker desenvolvido pela empresa X-Maker (XMAKER, 2004) e o Sculptor desenvolvido pela empresa Squadra (SCULPTOR, 2004), sendo que ambos são geradores de aplicativos, porém na linguagem de programação Pascal e no ambiente de desenvolvimento Delphi (BORLAND, 2004). Essas duas ferramentas podem ser encontradas nos sites dos seus respectivos fabricantes, (SCULPTOR, 2004) e (XMAKER, 2004), porém, por serem ferramentas comerciais será preciso pagar por sua utilização. Estas ferramentas são voltadas para desenvolvedores de software, suas principais funções são voltadas à manipulação de banco de dados para armazenamento de informações de qualquer natureza, agregando todos os recursos

18 16 possíveis e atuais do ambiente visual e com acesso nativo às bases de dados, ambos são projetos de empresas de desenvolvimento brasileiras. Os arquivos-fontes são gerados na linguagem Delphi 5, 6 ou 7 e pode acessar as bases de dado Interbase, FireBird, SyBase, MS-SQL Server, MySql, PostGreSql e ADO (Access, Paradox, dbase, Oracle, etc.). Uma das principais diferenças destas duas ferramentas em relação à ferramenta objetivada neste projeto se trata do acesso às tabelas já criadas anteriormente no banco de dados, nestas ferramentas é preciso criar o banco de dados dentro da ferramenta, no caso do usuário já possuir uma base de dados definida anteriormente, será preciso redefini-la para poder utilizar as funcionalidades destas duas ferramentas. 1.3 Orientação a Objetos O modelo de objetos apresenta-se como um modelo promissor para o desenvolvimento de software mais confiável devido às características inerentes ao próprio modelo de objetos, tais como abstração de dados, encapsulamento, herança e reutilização de objetos (componentes). O uso de técnicas orientadas a objetos facilita o controle da complexidade do sistema porque promove uma melhor estruturação de seus componentes, e também permite que componentes já validados sejam reutilizados (BUZATO, 98). A tecnologia orientada a objetos conduz para o reuso, e o reuso de componentes de programas conduz para um desenvolvimento de software mais rápido e programas de maior qualidade. Softwares orientados a objetos são mais fáceis de serem mantidos porque suas estruturas são naturalmente independentes (RUMBAUGH, 94) de adaptar e de ampliar, necessidades estas muito desejadas pelos desenvolvedores de softwares corporativos cujas dimensões e complexidade demandam grande esforço de projeto. A grande diferença entre uma abordagem convencional e uma orientada a objeto está na forma de visualização dos dados e processos que compõem o software. Na abordagem convencional, o software é visto como uma coleção de processos compostos por rotinas e sub-rotinas executadas de acordo com o fluxo de dados dentro do sistema, enquanto que na abordagem orientada a

19 17 objeto, essas rotinas e dados são encapsulados em uma única entidade chamada de objeto. Um objeto pode ser visto como uma entidade que possui um estado, representado por um conjunto de atributos e um conjunto de operações que modificam este estado. Cada operação associada ao objeto fornece serviços a outros objetos que são solicitados quando algum processo computacional é requisitado. Os objetos são criados de acordo com as definições de uma classe de objeto que serve de modelo para a criação dos mesmos. Isso inclui as declarações dos atributos e operações que devem ser associados ao objeto dessa classe. Cada objeto criado durante a execução de um sistema computacional recebe uma identificação única que o distingue dos demais. Um software orientado a objeto é formado por um conjunto finito de objetos que se comunicam entre si através de mensagens. Cada mensagem é um sinal enviado de um objeto a outro solicitando um serviço. Esse serviço executa uma operação que utiliza os dados a seu alcance dentro do objeto e retorna uma mensagem contendo o resultado da operação ao objeto solicitante. As vantagens decorrentes da utilização de objetos na construção de aplicações são muitas, mas podem ser citadas as seguintes (AMARAL, 2001): simplicidade: os objetos escondem a complexidade do código. Pode-se criar uma complexa aplicação gráfica usando botões, janelas, barras de rolagem, etc., sem conhecer a complexidade do código utilizado para criá-los; reutilização de código: um objeto, depois de criado, pode ser reutilizado por outras aplicações, ter suas funções estendidas e ser usado, em combinação com outros, como bloco básico para a construção de sistemas mais complexos; inclusão dinâmica: objetos podem ser inseridos dinamicamente no programa, durante a execução. Isso permite que vários programas compartilhem os mesmos objetos e classes, reduzindo o seu tamanho final.

20 18 Segundo Buzato e Rubira (BUZATO, 98), diversos autores divergem quanto às características que fazem uma linguagem ser orientada a objetos, mas a maioria concorda que o paradigma se baseia em quatro princípios básicos: abstração, encapsulamento, herança e polimorfismo. A abstração consiste na concentração nos aspectos essenciais (próprios) de uma entidade e em ignorar suas propriedades acidentais. No desenvolvimento de sistemas, isso significa concentrar-se no que um objeto é e faz, antes de decidir como ele deve ser implementado (SILVA, 2002). Muitas linguagens modernas permitem abstrações de dados, mas a capacidade de usar herança e polimorfismo proporciona maior poder. Na prática, as abstrações são fortemente acopladas com algum modelo de execução, que descreve o comportamento destas em tempo de execução (GARBINATO, 98). A área de orientação a objetos é extensa e crescente. O modelo de objetos representa em software objetos que podem ser encontrados no mundo real. Esses objetos podem ser de vários tipos, representando entidades físicas (por exemplo: aviões, robôs, etc.) ou abstratas (por exemplo: listas, pilhas, filas, etc.) (BUZATO, 98). O sucesso da orientação a objetos se deve, provavelmente, à habilidade em modelar o domínio da aplicação ao invés da arquitetura da máquina em questão (enfoque imperativo) ou mapear conceitos matemáticos (enfoque funcional) (SILVA, 2002). A característica mais importante (e diferente) da abordagem orientada a objetos para desenvolvimento de software é a unificação, através do conceito de objetos, de dois elementos que, tradicionalmente têm sido considerados separadamente em paradigmas de programação tradicionais: dados e funções. A unificação destes dois elementos de programação resulta no chamado encapsulamento (BUZATO, 98). Um objeto é uma entidade que encapsula informação de estado ou dados e possui um conjunto de operações associadas que manipulam estes dados. Um objeto pode ser usado para modelar entidades do mundo real ou de um mundo imaginário (MEYER, 88). Uma operação é definida como sendo alguma ação que um objeto realiza sobre seus próprios dados que pode resultar em uma mudança de estado.

21 19 Em geral, o estado de um objeto é completamente escondido e protegido de outros objetos e a única maneira de examiná-lo é através da invocação de uma operação (envio de uma mensagem) para este fim. Objetos representam um comportamento bem definido e uma identidade que é única. Comportamento define o modo como um objeto age e reage em termos das suas mudanças de estado e envio de mensagens e é completamente definido pelas suas operações. Identidade é a propriedade de um objeto que o distingue de outros objetos cada objeto possui um tipo, um identificador único e seus próprios dados (SILVA, 2002). Uma classe é a descrição de um molde que especifica as propriedades e o comportamento para um conjunto de objetos similares. Toda classe possui um nome e um corpo que define o conjunto de atributos e operações que suas instâncias possuem. Todo objeto é instância de apenas uma classe (SILVA, 2002). Os atributos são propriedades nomeadas de um objeto e armazenam o estado abstrato de cada objeto. Operações ou métodos caracterizam o comportamento de um objeto e é o único meio para fazer acesso, manipular e modificar os valores dos atributos de um objeto (BUZATO, 98). O mundo externo interage com um objeto invocando-lhe métodos ou passando-lhe mensagens (MEYER, 88). Encapsulamento, também chamado de ocultamento de informações, consiste na separação dos aspectos externos de um objeto dos detalhes internos da implementação. O encapsulamento impede que um programa se torne tão interdependente que uma pequena modificação possa causar grandes efeitos de propagação. A implementação de um objeto pode ser modificada sem que isso afete as aplicações que o utilizam. Pode-se modificar a implementação de um objeto para melhorar o desempenho, eliminar um erro ou consolidar um código (SILVA, 2002). Encapsulamento é o processo de combinar tipos de dados, dados e funções relacionadas em um único bloco de organização e só permitir o acesso a eles através de métodos determinados; é definido como sendo uma técnica para minimizar as interdependências entre módulos programados independentemente através de interfaces externas restritas (BUZATO, 98). A herança é um mecanismo para derivar novas classes a partir de classes existentes através de um processo de refinamento. Uma classe derivada herda a representação de dados e operações de sua classe base, mas pode seletivamente adicionar novas operações, estender a representação de dados ou

22 20 redefinir a implementação de operações já existentes. Uma classe base proporciona a funcionalidade que é comum a todas as suas classes derivadas, enquanto que uma classe derivada proporciona a funcionalidade adicional que especializa o seu comportamento (BUZATO, 98). Herança é o compartilhamento de atributos e operações entre classes com base em um relacionamento hierárquico (KHOSHAFIAN, 90). Uma classe pode ser definida de forma abrangente e depois refinada em sucessivas subclasses mais específicas. Cada subclasse incorpora, ou herda, todas as propriedades de sua(s) superclasse(s) e acrescenta suas próprias e exclusivas características. Nesse contexto, cada classe é declarada como uma subclasse de uma ou mais superclasses. Quando existe mais de uma superclasse, a relação de herança é denominada herança múltipla. Podem existir problemas de conflito entre informações herdadas por uma subclasse proveniente de diferentes superclasses, como, por exemplo, serem herdadas variáveis com mesmo nome, mas de tipos diferentes (SILVA, 2002). Polimorfismo significa que a mesma operação pode atuar de modos diversos em classes diferentes. No contexto de orientação a objetos, polimorfismo significa que diferentes tipos de objetos podem responder a uma mesma mensagem de forma diferente (BUZATO, 98). Por exemplo, pode-se definir um método denominado imprime() em diversas classes diferentes, mas cada versão deste método é adaptada para cada tipo de objeto diferente que será impresso. Um objeto supostamente da classe Cheque irá responder a mensagem de uma maneira, um objeto da classe Relatorio irá responder de outra forma e um objeto da classe Fotografia responderá de uma outra forma ainda. O método imprime() é polimórfico, pois é implementado diferentemente por diferentes classes de objetos (SILVA, 2002). No mundo real uma operação é simplesmente uma abstração de um comportamento análogo entre diferentes tipos de objetos. Cada objeto sabe como executar suas próprias operações. Entretanto, uma linguagem de programação baseada em objetos seleciona automaticamente o método correto para implementar uma operação com base no nome da operação e na classe do objeto que esteja sendo operado (SILVA, 2002). O usuário de uma operação não necessita saber quantos métodos existem para implementar uma determinada operação polimórfica.

23 21 Novas classes podem ser adicionadas sem que se modifique o código existente (RUMBAUGH, 94). Uma mensagem enviada a um objeto provoca um determinado comportamento no objeto receptor e, se a mesma mensagem for enviada a diferentes objetos, o comportamento poderá ser distinto. A esta interpretação particular de cada objeto frente à mesma mensagem, dá-se o nome de polimorfismo (LISBOA, 95). A programação orientada a objetos é freqüentemente tida como um novo paradigma de programação. Outros paradigmas são a programação procedimental (linguagens como C e Pascal), a programação lógica (Prolog) e a programação funcional (FP ou Haskell) (SILVA, 2002). A orientação a objetos permite que softwares sejam construídos a partir de componentes de propósitos gerais reutilizáveis, o que demonstra um modelo promissor mais confiável e modular. A utilização de técnicas orientadas a objetos facilita o controle da complexidade do sistema, porque promove uma melhor estruturação de seus componentes, e também permite que componentes já validados sejam reutilizados (BUZATO, 98). Foram observadas na linguagem Java as vantagens decorrentes da utilização do paradigma da orientação a objetos. Java foi criada para atender os requisitos do mundo real, possuindo importantes aspectos citados a seguir (NAUGTON, 96): simples e poderosa: os métodos para realizar uma determinada tarefa são claros e em número reduzido. Java propicia o poder de expressar cada idéia de forma clara e limpa, orientada a objetos, sem ter de expor todos os perigosos funcionamentos internos do sistema; segura: os programas executados na máquina virtual Java são submetidos a verificadores de código e gerenciadores de segurança, cujas normas podem ser específicas para cada aplicativo; robusta: a existência de um sistema de tratamento de exceções bem estruturado, aliado aos verificadores dinâmicos de código e às bibliotecas de componentes robustos que não permitem ao usuário

24 22 ignorar a ocorrência de erros, tornam Java uma linguagem atraente para o desenvolvimento de aplicativos confiáveis; interativa: foi criada para atender a requisitos do mundo real, entre eles a criação de programas interativos e em rede; neutra em relação à arquitetura: a linguagem Java foi desenvolvida com preocupações em garantir a longevidade e portabilidade de código entre plataformas diferentes; interpretada e de alto desempenho: a independência de plataforma é alcançada em Java através de uma representação intermediária chamada bytecode, que foi cuidadosamente projetada para que seja fácil traduzi-la diretamente para o código da máquina nativa e tenha um alto desempenho. O desempenho de Java é um fator até o momento preocupante para os programadores e tem pesado negativamente sobre a linguagem, mas pesquisas estão sendo feitas no sentido de melhorar esta situação. Estas pesquisas mostram que o desempenho de Java poderá exceder o desempenho de linguagens como C++, pois a compilação dinâmica dá ao compilador Java acesso em tempo de execução a informações que não estão disponíveis a um compilador C++ (REINHOLTZ, 2000). As considerações descritas nesta seção motivaram a utilização da orientação a objetos e, em particular, o uso da linguagem Java para a implementação da ferramenta geradora de aplicações comerciais em Java nesta monografia. 1.4 Estrutura dessa Monografia Após este capítulo introdutório, esta monografia está organizada conforme a estrutura que segue. O Capítulo 2 aborda os conceitos relacionados ao banco de dados e seu catálogo, como o SGBD Interbase organiza seu catálogo e as consultas que retornam as informações contidas neste catálogo. Na seqüência é mostrada a

25 23 implementação de um programa exemplo que recupera as informações de um banco de dados criado no SGBD Interbase. O capítulo 3 elucida os aspectos de como Java interage com um SGBD por meio da API JDBC (java.sql). Também são mostrados exemplos de uma classe de conexão com um SGBD relacional em Java e exemplos de como utilizar esta classe. O capítulo 4 apresenta as ferramentas utilizadas para a criação e design dos relatórios, bem como todos os passos para a criação de um relatório dentro destas ferramentas. Também são apresentados exemplos práticos de como estar utilizando e configurando estas ferramentas.

26 24 2 CATÁLOGO DO BANCO DE DADOS O catálogo do SGBD é uma área de dados, normalmente constituída de tabelas no banco de dados, responsável pelo armazenamento das informações exclusivas e necessárias ao funcionamento do SGBD, ela armazena uma variedade de informações, tais como: tipos e formatos de dados suportados, tabelas existentes no banco de dados, atributos, chaves primárias, secundárias e estrangeiras, relacionamentos entre tabelas, procedures, visões, regras, triggers, stored procedure, log de transações, usuários e permissões, informações sobre cada constraint criada, informações sobre replicação de dados, entre outras. 2.1 Catálogo do banco de dados Interbase Todo SGBD possui uma organização de seu catálogo, no caso do Interbase, seu catálogo é armazenado em tabelas com o nome começando com RDB$, sendo que cada tabela armazena um conjunto de campos com informações específicas. No desenvolvimento da ferramenta serão utilizadas algumas tabelas e campos do catálogo do banco de dados Interbase da aplicação, para coletar informações e parametrizar a ferramenta de forma a gerar o código-fonte da aplicação comercial em Java. A figura 1 mostra as tabelas e campos do catálogo do banco de dados, utilizadas na parametrização da ferramenta. FIGURA 1 Tabelas e campos do catálogo Interbase.

27 25 As tabelas apresentadas na figura 1, armazenam informações necessárias para o funcionamento do SGBD. Abaixo é mostrada uma descrição da função de cada tabela e seus respectivos campos, sendo que sua utilização exemplificada será mostrada mais a frente. RDB$RELATIONS: Tabela responsável pelo armazenamento das tabelas contidas no banco de dados. Campo da tabela RDB$RELATIONS: RDB$RELATION_NAME Nome da tabela, se começar com RDB$, significa que é uma tabela do catálogo. RDB$RELATION_FIELDS: Tabela responsável pelo armazenamento das informações dos atributos ou campos das tabelas. Campos da tabela RDB$RELATION_FIELDS: RDB$FIELD_SOURCE Nome do campo atribuído pelo SGBD, como uma chave primária. RDB$FIELD_NAME Nome do campo atribuído pelo usuário no momento da criação das tabelas. RDB$RELATION_NAME Nome da tabela que o campo pertence. RDB$FIELD_POSITION Posição do campo na tabela. RDB$FIELDS: Tabela responsável pelo armazenamento das informações. Campos da tabela RDB$FIELDS: RDB$FIELD_NAME Normalmente nomeado como RDB$<NUMERO>, sendo que <NUMERO> corresponde a um número seqüencial inteiro. RDB$FIELD_TYPE Código do tipo de dados do campo. RDB$FIELD_LENGTH Tamanho do campo.

28 26 RDB$TYPES: Tabela responsável pelo armazenamento dos tipos de dados reconhecidos pelo Interbase. Campos da tabela RDB$TYPES: RDB$FIELD_NAME Categoria do tipo, pode ser tipo de campos, sub-tipos, trigger, etc. RDB$TYPE Código do tipo. RDB$TYPE_NAME Nome do tipo. RDB$INDICES: Tabela responsável pelo armazenamento dos relacionamentos das tabelas. Campos da tabela RDB$INDICES: RDB$INDEX_NAME Representa o tipo do índice. RDB$RELATION_NAME Representa a tabela do relacionamento. RDB$FOREIGN_KEY Representa se a tabela possui chave estrangeira. RDB$INDEX_SEGMENTS: Tabela responsável pelo armazenamento das chaves primárias e estrangeiras. Campos da tabela RDB$INDEX_SEGMENTS: RDB$INDEX_NAME Representa se o campo é chave primária ou estrangeira. RDB$FIELD_NAME Representa o nome campo. Para demonstrar a estrutura do catálogo do banco de dados Interbase, foi implementado um programa exemplo em Borland Delphi 5, por ser um ambiente de programação Pascal e seu código-fonte ser de fácil entendimento. Como parte do exemplo, foi criado um modelo de banco de dados, contendo informações de uma simples venda de produtos, abordado nesta monografia como Banco de Vendas, como ilustra a figura 2.

29 27 FIGURA 2 Tabelas do banco de vendas. Depois de montadas as tabelas da figura 2, o próximo passo é gerar a SQL do banco de dados para que o mesmo possa ser criado no SGBD Interbase, a figura 3 mostra a SQL utilizada para criar o banco de vendas do programa exemplo CREATE TABLE Medidas ( med_cod INTEGER NOT NULL, med_nome VARCHAR(20), med_sigla CHAR(3), CONSTRAINT XPKMedidas PRIMARY KEY (med_cod) ); CREATE TABLE Produtos ( pro_cod INTEGER NOT NULL, prod_nome VARCHAR(20) NOT NULL, med_cod INTEGER NOT NULL, prod_preco DOUBLE PRECISION NOT NULL, CONSTRAINT XPKProdutos PRIMARY KEY (pro_cod) ); CREATE TABLE Clientes ( cli_cod INTEGER NOT NULL, cli_nome VARCHAR(50) NOT NULL, cli_endereco VARCHAR(50), cli_cep CHAR(9), cli_cidade VARCHAR(30), FIGURA 3 SQL de criação do banco de vendas.

30 cli_fone CHAR(13), CONSTRAINT XPKClientes PRIMARY KEY (cli_cod) ); CREATE TABLE vendas ( ven_cod INTEGER NOT NULL, ven_data TIMESTAMP NOT NULL, cli_cod INTEGER NOT NULL, ven_valortotal DOUBLE PRECISION NOT NULL, ven_desconto DOUBLE PRECISION, ven_valorpago DOUBLE PRECISION NOT NULL, CONSTRAINT XPKvendas PRIMARY KEY (ven_cod) ); CREATE TABLE itens_venda ( ven_cod INTEGER NOT NULL, pro_cod INTEGER NOT NULL, iv_qtde FLOAT NOT NULL, CONSTRAINT XPKitens_venda PRIMARY KEY (ven_cod, pro_cod) ); ALTER TABLE Produtos ADD CONSTRAINT R_4 FOREIGN KEY (med_cod) REFERENCES Medidas; ALTER TABLE vendas ADD CONSTRAINT R_5 FOREIGN KEY (cli_cod) REFERENCES Clientes; ALTER TABLE itens_venda ADD CONSTRAINT R_3 FOREIGN KEY (pro_cod) REFERENCES Produtos; ALTER TABLE itens_venda ADD CONSTRAINT R_2 FOREIGN KEY (ven_cod) REFERENCES vendas; FIGURA 3 SQL de criação do banco de vendas (continuação). As linhas 1 a 42 da figura 3 correspondem às instruções SQL necessárias para a criação das tabelas com seus respectivos campos, as linhas 43 a 58 criam os relacionamentos entre as tabelas. O programa exemplo criado possui uma fácil interação com o usuário, contendo suas funcionalidade em eventos dos botões mostrado na figura 4.

31 29 FIGURA 4 Programa exemplo do catálogo do banco de vendas. O programa mostrado na figura 4 possui quatro botões (TBitBtn), sendo que clicando em qualquer um dos quatro botões pode-se visualizar o resultado gerado na tabela (TDBGrid) localizada abaixo dos botões. Para que o programa exemplo pudesse encontrar e se conectar com o banco de dados exemplo foi preciso utilizar um componente de conexão (TDataSource) com a string de conexão mostrada na figura 5. 1 SERVER NAME=c:\vendas.gdb 2 USER NAME=SYSDBA 3 PASSWORD=masterkey FIGURA 5 String de conexão com o banco de vendas. A linha 1 da figura 5 informa a localização do banco de dados, a linha 2 e 3 informam nome do usuário e sua senha respectivamente. A função relacionada ao evento de cada botão será mostrada a seguir, sendo que cada botão possuirá a consulta mostrada na tela e seu código-fonte respectivo. O primeiro botão a ser detalhado refere-se à busca pelas tabelas do banco de vendas (figura 2) no catálogo, a figura 6 mostra os nomes das tabelas retornadas pela consulta. A nomenclatura tabelas, campos e chaves do usuário serão utilizadas para definir as tabelas, campos e chaves, definidas na criação do banco de dados pelo usuário.

32 30 FIGURA 6 Tabelas do banco de vendas. Ao clicar no botão Tabelas são mostradas na tela as tabelas do banco de vendas, representadas na figura 6. A figura 7 detalha o código-fonte com a SQL necessária para retornar as tabelas do banco de vendas procedure TF_Vendas.B_TabelasClick(Sender: TObject); begin Q_Catalogo.Close; Q_Catalogo.SQL.Clear; Q_Catalogo.SQL.Add('select RDB$RELATION_NAME TABELA from RDB$RELATIONS'); Q_Catalogo.SQL.Add('where RDB$RELATION_NAME not like "RDB$%"'); Q_Catalogo.SQL.Add('order by RDB$RELATION_NAME'); Q_Catalogo.Open; end; FIGURA 7 SQL que retorna as tabelas do banco de vendas. As linhas de 5 a 7 da figura 7 representam a SQL necessária para retornar as tabelas do banco de vendas no catálogo, a instrução SQL da linha 5 seleciona o campo RDB$RELATION_NAME da tabela RDB$RELATIONS, limitando-os com a instrução SQL da linha 6, retornando apenas as tabelas cujo inicio do nome não comece com RDB$ (not like "RDB$%"), tabelas cujo nome comece com RDB$ são tabelas do SGBD e não são interessantes ao propósito deste projeto, e por último a linha 7 ordena o campo RDB$RELATION_NAME em ordem crescente.

33 31 O segundo botão a ser detalhado refere-se à busca pelos campos das tabelas do banco de vendas e suas informações no catálogo, a figura 8 mostra os campos das tabelas retornadas pela consulta. FIGURA 8 Campos das tabelas do banco de vendas. Ao clicar no botão Campos são mostrados na tela os campos de cada tabela do banco de vendas, representadas na figura 8. A figura 9 detalha o código-fonte com a SQL necessária para retornar os campos das tabelas do banco de vendas procedure TF_Vendas.B_CamposClick(Sender: TObject); begin Q_Catalogo.Close; Q_Catalogo.SQL.Clear; Q_Catalogo.SQL.Add('select RF.RDB$RELATION_NAME TABELA,'); Q_Catalogo.SQL.Add(' RF.RDB$FIELD_POSITION POSICAO,'); Q_Catalogo.SQL.Add(' RF.RDB$FIELD_NAME CAMPO,'); Q_Catalogo.SQL.Add(' T.RDB$TYPE_NAME TIPO,'); Q_Catalogo.SQL.Add(' F.RDB$FIELD_LENGTH TAMANHO'); Q_Catalogo.SQL.Add('from RDB$FIELDS F, RDB$RELATION_FIELDS RF, RDB$TYPES T'); Q_Catalogo.SQL.Add('where RF.RDB$FIELD_NAME NOT LIKE "RDB$%" and'); Q_Catalogo.SQL.Add(' RF.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME and'); Q_Catalogo.SQL.Add(' T.RDB$FIELD_NAME = "RDB$FIELD_TYPE" and'); Q_Catalogo.SQL.Add(' F.RDB$FIELD_TYPE = T.RDB$TYPE'); Q_Catalogo.SQL.Add('order by RF.RDB$RELATION_NAME, RF.RDB$FIELD_POSITION'); Q_Catalogo.Open; end; FIGURA 9 SQL que retorna os campos do banco de vendas.

34 32 As linhas de 6 a 16 da figura 9 representam a SQL necessária para retornar os campos das tabelas do banco de vendas no catálogo, a instrução SQL da linha 6 a 10 seleciona os campos a serem retornados pela consultas dentro das tabelas: RDB$FIELDS, RDB$RELATION_FIELDS e RDB$TYPES, limitando-os com a instrução SQL da linha 12 a 15, retornando apenas as tabelas cujo inicio do nome não comece com RDB$ (not like "RDB$%"), o nome do tipo (RDB$FIELD_NAME), especificado na linha 13, deve possuir a nomenclatura RDB$FIELDS_TYPE que especifica que o tipo do campo do Banco de Dados é do tipo campo (linha 14) e por último a linha 16 ordena os campos RDB$RELATION_NAME e RDB$FIELD_POSITION em ordem crescente. O terceiro botão a ser detalhado refere-se à busca pelas chaves primárias das tabelas no catálogo do banco de vendas, a figura 10 mostra as chaves das tabelas retornadas pela consulta. FIGURA 10 Chaves primárias do banco de vendas. Ao clicar no botão Chaves Primárias são mostradas na tela as chaves primárias de cada tabela do banco de vendas, representadas na figura 10. A figura 11 detalha o código-fonte com a SQL necessária para retornar as chaves primárias de todas as tabelas do banco de vendas.

35 procedure TF_Vendas.B_PrimariasClick(Sender: TObject); begin Q_Catalogo.Close; Q_Catalogo.SQL.Clear; Q_Catalogo.SQL.Add('select I.RDB$RELATION_NAME TABELA,S.RDB$FIELD_NAME CHAVE_PRIMARIA'); Q_Catalogo.SQL.Add('from RDB$INDICES I, RDB$INDEX_SEGMENTS S'); Q_Catalogo.SQL.Add('where I.RDB$INDEX_NAME like "RDB$PRIMARY%" and'); Q_Catalogo.SQL.Add(' I.RDB$INDEX_NAME = S.RDB$INDEX_NAME'); Q_Catalogo.Open; end; FIGURA 11 SQL que retorna as chaves primárias do catálogo. As linhas 5 a 8 representam a SQL necessária para retornar as chaves primárias das tabelas do banco de vendas, a linha 5 seleciona os campos a serem retornados pela consulta nas tabelas definidas na linha 6: RDB$INDICES e RDB$INDEX_SEGMENTS, limitando-os com a instrução da linha 7, cujo objetivo é pesquisar apenas as chaves primárias, que o nome comece com RDB$PRIMARY. O quarto e último botão a ser detalhado refere-se à busca pelas chaves estrangeiras nas tabelas no catálogo do banco de vendas, a figura 12 mostra as chaves das tabelas retornadas pela consulta. FIGURA 12 Chaves estrangeiras do catálogo. Ao clicar no botão Chaves Estrangeiras são mostradas na tela as chaves estrangeiras de cada tabela do banco de vendas, representadas na figura 12.

36 34 A figura 13 detalha o código-fonte com a SQL necessária para retornar as chaves estrangeiras de todas as tabelas do banco de vendas procedure TF_Vendas.B_EstrangeirasClick(Sender: TObject); begin Q_Catalogo.Close; Q_Catalogo.SQL.Clear; Q_Catalogo.SQL.Add('select I.RDB$RELATION_NAME TABELA,S.RDB$FIELD_NAME CHAVE_ESTRANGEIRA'); Q_Catalogo.SQL.Add('from RDB$INDICES I, RDB$INDEX_SEGMENTS S'); Q_Catalogo.SQL.Add('where I.RDB$INDEX_NAME like "RDB$FOREIGN%" and'); Q_Catalogo.SQL.Add(' I.RDB$FOREIGN_KEY = S.RDB$INDEX_NAME'); Q_Catalogo.SQL.Add('order by I.RDB$INDEX_NAME'); Q_Catalogo.Open; end; FIGURA 13 SQL que retorna as chaves estrangeiras. As linhas 5 a 10 representam a SQL necessária para retornar as chaves estrangeiras das tabelas no catálogo do banco de vendas, a linha 5 seleciona os campos a serem retornados pela consulta nas tabelas definidas na linha 7: RDB$INDICES e RDB$INDEX_SEGMENTS, limitando-os com a instrução das linhas 8 e 9, cujo objetivo é buscar apenas as chaves estrangeiras, que o nome comece com RDB$FOREIGN.

37 35 3 JDBC JAVA DATABASE CONNECTIVITY JDBC é uma coleção de classes Java em nível de SQL que permite adicionar instruções SQL como argumentos para métodos em interfaces JDBC (REESE, 2001). Para que a JDBC possa se comunicar com uma diversidade de SGBD (Sistema Gerenciador de Banco de Dados) diferentes, é preciso que a empresa distribuidora do SGBD disponibilize drivers, de modo a direcionar as instruções SQL da aplicação Java para o SGBD e os mesmos reconheçam e interpretem de maneira adequada esses comandos, este driver converte os comandos da API JDBC para comandos nativos do SGBD. Mais precisamente, o JDBC consiste de duas camadas. A camada superior é a API JDBC. Essa API se comunica com a API de driver gerenciador JDBC, enviando para ela as diversas instruções SQL. O gerenciador deve se comunicar com os vários drivers de terceiros que efetivamente se conectam com o banco de dados, e retornar as informações da consulta ou executar a ação especificada por ela (HORSTMANN, 2002). A JDBC por utilizar SQL que é uma linguagem padrão para a maioria dos SGBD, possibilita que os desenvolvedores de aplicações em Java não se preocupem com o SGBD que a aplicação estará se comunicando, oferecendo liberdade para que o mesmo código possa ser executado em diversos SGBD, sem a necessidade de modificar todo o código, apenas o driver do Banco de Dados, para se obter uma lista completa dos drivers JDBC disponíveis, acesse o site Existem várias formas de se conectar com um banco de dados através de drivers JDBC, eles são classificados nos seguintes tipos: Transforma JDBC em ODBC e emprega um driver ODBC para se comunicar com o banco de dados, chamada de ponte JDBC/ODBC. Entretanto, a ponte não oferece suporte a JDBC2 e exige a distribuição e a configuração correta de um driver ODBC (HORSTMANN, 2002), ficando ainda restrito a plataforma Windows, não se recomenda utilizar a ponte a não ser para testes;

38 36 Escrito Parcialmente em Java e código nativo; Biblioteca em Java puro que utiliza um protocolo independente de banco de dados para enviar pedidos JDBC ao componente servidor; transforma esses pedidos em protocolo específico do SGBD; Biblioteca em Java puro que transforma pedidos JDBC diretamente em um protocolo específico do SGBD (HORSTMANN, 2002). A API JDBC pode ser utilizada em qualquer aplicação desenvolvida em Java, ela é nada mais que o pacote java.sql, onde podem ser encontradas as interfaces necessárias para acessar e manipular a maioria dos SGBD relacionais existentes no mercado. O programador precisa somente conhecer o modo de utilizar a API JDBC e a forma como o driver específico se conecta ao banco. 3.2 Conexão com o Banco de Dados Interbase em Java Para que se possa manipular e obter as informações contidas no banco de dados é necessário que se estabeleça uma conexão com o banco de dados. A API JDBC Java implementa uma variedade de classes com métodos e objetos para acessar e manipular um banco de dados qualquer. Na seção seguinte será detalhada e exemplificada cada uma dessas classes Classe de Conexão em Java Para se conectar a um SGBD foi criada uma classe de conexão em Java, onde foram implementados os métodos Conecta(), Desconecta() e getconexao(). A figura 14 demonstra o código-fonte da Classe de Conexão import java.sql.*; import java.awt.event.*; public class Conexao { private String driver = "org.firebirdsql.jdbc.fbdriver"; private String url = "jdbc:firebirdsql:localhost/3050:c:\\vendas.gdb"; private String usuario = "SYSDBA"; FIGURA 14 Classe de conexão com um banco de dados.

39 37 9 private String senha = "masterkey"; private Connection con; public boolean Conecta() 14 { 15 boolean status=false; 16 try { 17 Class.forName(driver); 18 try { 19 con = DriverManager.getConnection(url,usuario,senha); 20 status=true; 21 } 22 catch(sqlexception sqle) { 23 sqle.printstacktrace(); 24 status=false; 25 } 26 } 27 catch(classnotfoundexception cnfe) { 28 cnfe.printstacktrace(); 29 status=false; 30 } 31 return(status); 32 } public void Desconecta() 35 { 36 try { 37 con.close(); 38 } 39 catch(sqlexception sqle) { 40 sqle.printstacktrace(); 41 } 42 } public Connection getconexao() 45 { 46 return(con); 47 } 48 } FIGURA 14 Classe de conexão com um banco de dados (continuação). As linhas 1 e 2 da figura 14 adicionam a classe Conexao às bibliotecas java.sql que é o JDBC e as bibliotecas java.awt.event para tratamento de exceção caso ocorra algum erro. As linhas 6 a 9 especificam as variáveis de instância da classe Conexao, onde a variável driver especifica o nome do driver utilizado, a url especifica a porta utilizada pelo SGBD e o caminho do banco de

40 38 dados, a variável usuario especifica o usuário que acessará o banco de dados e por último a variável senha que especifica a senha do usuário. O método Conecta() (linhas 13 a 32) é responsável pelo estabelecimento de uma conexão e retorna um boolean indicando se foi possível ou não se conectar ao banco. A carga do driver utilizada é feita dinamicamente na linha 17. Após carregar o driver é preciso estabelecer a conexão (linha 19) passando como parâmetro a url, o usuario e a senha do banco de dados, a classe DriverManager é responsável pela abertura e fechamento de uma conexão com o banco através de um driver JDBC devidamente registrado, ao final do método é retornado um boolean indicando se foi possível completar a conexão ou se houve erros durante o estabelecimento da conexão. Quando há a abertura de uma conexão, a classe DriverManager seleciona o driver conforme a URL especificada pelo usuário, uma vez estabelecida a conexão, as instruções ao banco de dados são efetuadas diretamente ao JDBC, que as converte para comandos do SGBD. O método Desconecta() (linhas 34 a 42) é responsável pela desconexão com o banco de dado, sendo possível através do método close() (linha 37). Por último, o método getconexao() (linhas 44 a 47) responsável por retornar o objeto representando a conexão do objeto Conexao. Para demonstração da utilização da classe Conexao, representada na figura 14, foi implementado um programa cujo resultado é mostrado na figura 15. FIGURA 15 Consulta de produtos utilizando a classe Conexao.

41 39 A figura 16 apresenta a utilização da classe Conexao com uma consulta na tabela de produtos do banco de dados exemplificado anteriormente na figura 3 da seção 2.1 do capítulo import java.awt.event.*; import javax.swing.*; import java.sql.*; import javax.swing.table.*; class PesquisaProduto extends JFrame { private Conexao con; private JTable JTTabela; private DefaultTableModel model; public PesquisaProduto() { super("exemplo de Utilização da Classe Conexao"); constroitela(); Pesquisa(); setdefaultcloseoperation(jframe.exit_on_close); } private void constroitela() { setsize(400,150); model = new DefaultTableModel(); model.addcolumn("cod."); model.addcolumn("nome Produto"); model.addcolumn("medida"); model.addcolumn("preço"); JTTabela = new JTable(model); JScrollPane scroller= new JScrollPane(JTTabela); getcontentpane().add(scroller); JTTabela.getColumnModel().getColumn(0).setPreferredWidth(30); JTTabela.getColumnModel().getColumn(1).setPreferredWidth(290); } private void Pesquisa() { con = new Conexao(); if (con.conecta()) { try { Statement st = con.retconexao().createstatement(); String sql = "select p.pro_cod, p.prod_nome, m.med_sigla, "+ "p.prod_preco from produtos p, medidas m "+ "where p.med_cod = m.med_cod"; FIGURA 16 Código-fonte da consulta utilizando a classe Conexao.

42 40 46 ResultSet rs = st.executequery(sql); 47 while (rs.next()) 48 { 49 String linha[]={rs.getstring("pro_cod"), 50 rs.getstring("prod_nome"), 51 rs.getstring("med_sigla"), 52 "R$ "+rs.getstring("prod_preco")}; 53 model.addrow(linha); 54 } 55 st.close(); 56 con.desconecta(); 57 } 58 catch(sqlexception e){e.printstacktrace();} 59 } 60 } public static void main(string args[]) 63 { 64 PesquisaProduto p = new PesquisaProduto(); 65 p.setvisible(true); 66 } 67 } FIGURA 16 Código-fonte da consulta utilizando a classe Conexão (continuação). As linhas 1 a 4 da figura 16, correspondem a chamada das bibliotecas necessárias ao funcionamento do exemplo, foi criada uma classe PesquisaProduto (linhas 6 a 67) herança de JFrame, as linhas de 8 a 10 declaram as variáveis de instâncias da classe PesquisaProduto, o objeto con (linha 8) da classe Conexao é responsável pela conexão com o SGBD, a JTTabela da classe JTable (linha 9) é responsável pela exibição da consulta na tela, este objeto é uma grid semelhante a uma DBGrid do Delphi ou planilha do Microsoft Excel e o model da classe DefaultTableModel representa o modelo que é aplicado ao JTTable, definindo o nome das colunas. O método Pesquisa() (linha 35 a 60) é responsável pela conexão com o banco de dados e a exibição dos dados na tela, na linha 37 foi instanciada a conexão através do objeto com, se a conexão foi estabelecida (linha 38), então deve-se efetuar a SQL da consulta, com a conexão estabelecida, é necessário manipular o banco de dados através de comandos SQL. A API JDBC não tem nenhuma restrição quanto ao dialeto SQL, sendo possível enviar instruções em qualquer dialeto SQL ao banco, o objeto da linha 42, st da classe Statement, será

43 41 utilizado para enviar comandos SQL simples ao banco de dados, isto é, que não envolvem parâmetros. As linhas 43 a 45 criam a SQL necessária para executar a consulta, com o comando (linha 46) executequery(sql), passando como parâmetro a SQL desejada é possível retornar as informações da consulta, estas informações são chamadas conjunto de resultado ou simplesmente ResultSet. O rs é um objeto da classe ResultSet, que contém registros retornados pela consulta SQL, como uma consulta pode retornar mais de um registro de resultado é preciso manipulá-los de forma a capturar todas os registros retornados, as linhas 47 a 54 fazem este tratamento com a condição de adicionar ao model todos os registros de rs. O método next() permite mover o cursor entre cada registro da tabela, um após o outro sucessivamente até o final dos registros, quando isto ocorrer o método retornará false. Além do método next() é possível utilizar os métodos first() e last(), que move o cursor para o início e para o final dos registros respectivamente. 3.3 Métodos Java para recuperação de tipos SQL Para recuperação dos valores contidos em cada coluna de um registro precisa se previamente conhecer o tipo do valor associado ao atributo (o domínio do atributo). Para isso o objeto ResultSet dispõe de métodos apropriados para recuperação de dados SQL. A tabela 1 demonstra os métodos em Java.

44 42 TABELA 1 Métodos Java para recuperação de tipos SQL. TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE DECIMAL NUMERIC BIT CHAR VARCHAR LONGVARCHAR BINARY VARBINARY LONGVARBINARY DATE TIME TIMESTAMP CLOB BLOB ARRAY REF STRUCT JAVA OBJECT getbyte X getshort getint getlong getfloat getdouble getbigdecimal getboolean getstring getbytes X X X X X X X X X X X X X getdate gettime gettimestamp getasciistream getunicodestream getbinarystream getclob getblob getarray getref getcharacterstream getobject X X X X X X X X X X X X X As linhas da tabela 1 representam os métodos em Java e as colunas representam os tipos em SQL, os x representa qual método em Java é apropriado para recuperar o tipo em SQL.

45 43 4 A FERRAMENTA A ferramenta objetivo desta monografia, nomeada GenJava, tem a finalidade de gerar código-fonte de aplicações comerciais a partir da coleta de dados contidos no banco de dados da aplicação comercial a ser gerada, em uma área de dados conhecida como catálogo do banco de dados, que em um passo anterior ao da geração do código-fonte pela ferramenta GenJava, deve se construir e modelar este banco de dados em Interbase. Estas aplicações comerciais são compostas por cadastro, consultas, relatórios e movimentações, uma vez que para cada uma destas operações foi implementado um template, onde possui a finalidade de parametrizar a ferramenta de modo a gerar o código-fonte da aplicação comercial. Todos os templates da ferramenta GenJava possuem interfaces gráficas, implementadas através das classes do pacote Swing da linguagem Java, de modo a proporcionar uma melhor visualização e manipulação das rotinas pelos usuários, desta forma a aplicação se torna mais amigável e de simples manuseio, destinando-se a usuários e programadores com nível intermediário na linguagem Java e no banco de dados Interbase. A figura 17 demonstra a tela inicial da ferramenta. FIGURA 17 Tela inicial da ferramenta. Selecionando a opção Arquivo no menu principal da figura 17, abrese a tela de configuração dos parâmetros iniciais da aplicação comercial a ser gerada, demonstrada na seção 4.1 Parâmetros iniciais da ferramenta.

46 44 É muito importante frisar o perfil do usuário que utilizará a ferramenta. Estes usuários não precisam ser experts em Java nem mesmo em banco de dados, mais devem possuir os conceitos básicos da linguagem Java, manipulação de suas bibliotecas de interação com o usuário (Swing) e ter conhecimento da modelagem do banco de dados Interbase da aplicação. Quanto ao código-fonte da aplicação comercial gerada, foi levado em consideração sua legibilidade e sua estruturação, que diz respeito a um conjunto de convenções que auxiliam a leitura e o entendimento pelos programadores, para que isso fosse possível, foram utilizados os conceitos da orientação a objetos, permitindo a componentização e o reuso dos recursos implementados. 4.1 Parâmetros Iniciais da Aplicação Comercial Em um momento inicial, o usuário deverá configurar os respectivos parâmetros para conexão com o banco de dados, tais como: nome do usuário, senha, driver JDBC utilizado e a localização do banco de dados (local ou remoto) e do kit de desenvolvimento Java, mais conhecido como JDK - Java Development Kit (Java, 2004). Para a inserção destes dados, foi implementada uma tela que permite com que o usuário, insira os dados de maneira simples e amigável, o layout desta tela segue nas figuras 18a e 18b. (a) (b) FIGURA 18 Parâmetros iniciais da aplicação.

47 45 Os dados da aplicação (figura 18a) são necessários para que a ferramenta localize as bibliotecas Java para gerar o arquivo jar e salvá-lo no disco. Os dados que dizem respeito ao banco de dados (figura 18b), são fundamentais para que a ferramenta possa encontrar o banco de dados e consiga desta forma, acessar seu catálogo de dados para parametrizar os templates da ferramenta responsáveis por gerar cada operação da aplicação (cadastro, consulta, relatório e movimentação) e posterior à geração da aplicação comercial, acessar os dados através de comandos SQL gerenciados pela camada de persistência, comando estes que permitem inserir, alterar, deletar e recuperar os dados do banco de dados. Determinada às configurações do banco de dados, o próximo passo é se conectar com o banco de dados através da classe Conexao, demonstrada na seção Classe de Conexão em Java. Depois de determinados os parâmetros iniciais e selecionado o botão OK da figura 18, inicia-se a tela responsável por acessar os templates das operações da aplicação, de acordo com a escolha do usuário, a figura 19 demonstra esta tela. FIGURA 19 Escolha dos templates da aplicação A primeira coluna da tabela ilustrada na tela de escolha dos templates das telas da aplicação, ilustrada na figura 19, demonstra todas as tabelas contidas no catálogo do banco de dados (acessadas com a instrução SQL da figura 7 da

48 46 seção 2.1 do capítulo 2) da aplicação, seguida de mais três colunas com a opção de checagem, Cadastros, Consultas/Relatórios e Movimentações respectivamente. A idéia desta tela é que o usuário determine o que a tabela do banco deverá gerar, no caso as quatro operações implementadas na ferramenta (cadastro, consulta/relatório e movimentação). Para cada coluna checada, representando as operações da aplicação comercial a ser gerada, deve-se levar em consideração alguns critérios básicos, são eles: Cadastro Para que se gere um cadastro é preciso que a tabela do banco possua apenas uma chave primária do tipo inteiro, N campos de tipos reconhecidos pela ferramenta (seção 4.2 Mapeamento Interbase X Java) e N chaves estrangeiras do tipo inteiro; Consulta/Relatório Não há restrição quanto ao número de campos é preciso somente que os campos sejam de tipos suportados pela ferramenta; Movimentação A tabela a gerar uma movimentação deve ser do tipo mestre (entidade forte), seguir as regras de um cadastro e possuir uma tabela detalhe (entidade fraca), onde, a tabela detalhe deve possuir a chave primária composta por as duas tabela (mestre/detalhe) ou uma chave seqüencial (auto-incremento) do tipo inteiro. Depois de checadas as operações que farão parte da aplicação e selecionado o botão OK da figura 19, o usuário deverá parametrizar cada uma destas operações através de seus respectivos templates. Além de gerar os templates de parametrização das operações da aplicação a ser gerada, esta tela (figura 19) tem o papel de gerar as classes de mapeamento Interbase X Java, apresentada na seção 4.2, através da leitura do catálogo do banco obtendo-se todas as tabelas, campos, relacionamentos e tipos de dados. Uma vez obtida estas informações a ferramenta gera as classes de mapeamento, cuja função é auxiliar a camada de persistência e interagir com a camada de negócio. Para que fosse possível persistir os dados da memória no

49 47 banco de dados de maneira simplificada, limpa e coesa, foi implementada uma camada de persistência utilizando os conceitos de reflexão (Reflection) de Java. 4.2 Mapeamento Interbase x Java O mapeamento das tabelas do banco de dados consiste na construção de classes em Java com a mesma estrutura de uma tabela do banco de dados. Cada classe de mapeamento tem seu nome definido através do nome de uma tabela do banco de dados e suas variáveis de instâncias é o reflexo dos campos da tabela, com seus respectivos métodos get e set devidamente declarados com seus tipos Interbase convertidos em tipos Java. A tabela 2 apresenta os tipos de dados suportados pela ferramenta. TABELA 2 Tipos Interbase e Java. Interbase VARYING TEXT LONG DOUBLE FLOAT TIMESTAMP Java java.lang.string java.lang.string java.lang.long java.lang.double java.lang.float java.util.date Esse processo de mapeamento do banco de dados para classes correspondentes em Java é o ponto de partida para se gerar os cadastros, consultas/relatórios e movimentações que farão parte da aplicação comercial. O processo de mapeamento interage como um intermediário entre a camada de negócio e de persistência, permitindo que os dados exibidos na tela sejam persistidos no banco de dados e vice-versa, possibilitando a minimização do uso de instruções SQL no meio do código-fonte, dificultando a componentização e a legibilidade. A figura 20 demonstra uma classe de mapeamento gerada a partir de uma tabela do banco de dados definida nas figuras 2 e 3 do capítulo public class MEDIDAS { private java.lang.integer MED_COD; private java.lang.string MED_NOME, MED_SIGLA; public void setmed_cod(java.lang.integer MED_COD) { FIGURA 20 Exemplo de uma classe de mapeamento.

50 48 5 this.med_cod=med_cod; 6 } 7 public void setmed_nome(java.lang.string MED_NOME) { 8 this.med_nome=med_nome; 9 } 10 public void setmed_sigla(java.lang.string MED_SIGLA) { 11 this.med_sigla=med_sigla; 12 } 13 public java.lang.integer getmed_cod() { 14 return this.med_cod; 15 } 16 public java.lang.string getmed_nome() { 17 return this.med_nome; 18 } 19 public java.lang.string getmed_sigla() { 20 return this.med_sigla; 21 } 22 } FIGURA 20 Exemplo de uma classe de mapeamento (continuação). O trecho de código apresentado na figura 20 demonstra uma classe de mapeamento gerada a partir da tabela MEDIDAS apresentada nas figuras 2 e 3 da seção 2.1 do capítulo 2. O nome da classe de mapeamento é definido levando em consideração o nome da tabela do banco de dados, as linhas 2 e 3 definem a declaração das variáveis de instâncias representando os campos da tabela com seus respectivos tipos em Java, as linhas 4 a 12 representam os métodos sets responsáveis por atribuir valores às variáveis de instância, e por último as linhas 13 a 21 representam os métodos gets, responsáveis por de recuperarem os valores atribuídos as variáveis de instâncias, lembrando que o nome dos métodos é definido através do nome do campo na tabela, recuperados por meio da instrução SQL definida na figura 9 da seção 2.1 do capítulo 2. Para exemplificar a utilização da classe de mapeamento definida na figura 20 foi implementado um trecho de código, apresentado na figura MEDIDAS objeto = new MEDIDAS(); if(this.getop()=='n') objeto.setmed_cod(persistent.getmax(objeto, "MED_COD")); else objeto.setmed_cod(integer.parseint(jtextfield0.gettext().trim())); objeto.setmed_nome(utils.trunc(jtextfield1.gettext().trim(), 50)); objeto.setmed_sigla(utils.trunc(jtextfield2.gettext().trim(), 3)); if(persistent.gravar(objeto)) { FIGURA 21 Exemplo de utilização da classe de mapeamento.

51 JOptionPane.showMessageDialog(this,"Sucesso ao gravar os dados","aviso", JOptionPane.INFORMATION_MESSAGE); } else JOptionPane.showMessageDialog(this,"Erro ao gravar os dados,"erro", JOptionPane.ERROR_MESSAGE); FIGURA 21 Exemplo de utilização da classe de mapeamento (continuação). A linha 1 da figura 21 representa a criação de um objeto da classe MEDIDAS definida na figura 20, as linhas 2 a 6 representam a atribuição dos valores definidos nos componentes gráficos da classe JTextFields às variáveis de instâncias do objeto objeto, a linha 7 representa a persistência do objeto objeto no banco de dados, através do método Gravar da camada de persistência, apresentada na seção 4.3. Por último, as linhas 8 a 12 definem o tratamento de erro retornado pelo método Gravar da camada de persistência. 4.3 Camada de Persistência A camada de persistência é responsável por encapsular toda lógica necessária para que o objeto ou sua coleção seja salvo, recuperado ou excluído de um meio de armazenamento, normalmente um banco de dados. Dessa forma as responsabilidades dos objetos ficam bem claras, permitindo assim não só uma manutenção descomplicada como também abre portas para a componentização dos objetos, ou seja, o reaproveitamento de código. Existem várias técnicas para se implementar uma camada de persistência, na ferramenta GenJava foi desenvolvida uma camada de persistência com a técnica Reflection, que consiste em permitir um programa Java examinar ou fazer a introspecção dele mesmo, de forma a obter suas propriedades e estruturas. Com isso, pode-se, por exemplo, obter o nome de todos os membros de uma classe, como atributos e métodos, bem como executar um método usando a invocação dinâmica. Utilizando-se da classe Reflection é possível implementar uma camada de persistência genérica para que seja possível persistir qualquer objeto envolvido no sistema. Para que se possa efetuar a persistência de um objeto é preciso que o mesmo esteja mapeado no banco de dados, com sua estrutura

52 50 idêntica a do banco de dados, apresentado na seção 4.2 (Mapeamento Interbase X Java); a figura 22 exibe os métodos da camada de persistência implementada public class Persistencia { private Conexao con; public Persistencia(Conexao con) {...} private String getfieldsandvalues(object o) { } private String getsetsandvalues(object o) { } private String getstringtype(object o) { } private boolean localizapk(object o, String chave) { } public Integer getmax(object o, String keyfield) { } public boolean Gravar(Object o) { } public ResultSet Recuperar(String sql) { } public boolean Deletar(String sql) {} } FIGURA 22 Métodos da camada de persistência. A linha 4 da figura 22 representa o construtor da classe Persistencia, que recebe como parâmetro um objeto da classe Conexao representando a conexão com o banco de dados onde serão executadas as instruções SQL, as linha 5 e 6 representam os métodos getfieldsandvalues e getsetsandvalues, cujo funcionamento será apresentado nas figuras 23 e 24 respectivamente. O método getstringtype, apresentado na linha 7 é responsável por retornar o formato do valor de um determinado tipo, ou seja, se um valor for do tipo String, ele deverá ser adicionado a instrução SQL com aspas, de forma com que o banco de dados o reconheça como um valor correto. Quando há a necessidade de verificar se um determinado campo é uma chave primária, para que não seja adicionado a cláusula set e sim na cláusula where desta instrução, é necessário que se utilize o método localizapk, apresentado na linha 8. A linha 9 representa o método que retorna o maior código gerado de uma determinada tabela, ideal quando se deseja inserir um novo registro na tabela. Por último, as linhas 10 a 12, são responsáveis por executar as instruções geradas nos métodos getfieldsandvalues e getsetsandvalues apresentados na figura 22.

53 51 A figura 23 detalha o método getfieldsandvalues, responsável por montar a instrução SQL de inserção (insert) no banco de dados private String getfieldsandvalues(object o) { String fields="", values=""; try { Field f[] = o.getclass().getdeclaredfields(); for(int i=0; i<f.length; i++) { Method meth = o.getclass().getmethod("get"+f[i].getname()); Object ret = meth.invoke(o); if(ret!=null) { fields+=f[i].getname()+","; values+=getstringtype(ret)+","; } } } return "("+fields+") values("+values+");"; } FIGURA 23 Montando SQL de inserção. A figura 24 detalha o método getsetsandvalues, responsável por montar a instrução SQL de alteração (update) no banco de dados private String getsetsandvalues(object o) { String sets="", where=""; try { Field f[] = o.getclass().getdeclaredfields(); for(int i=0; i<f.length; i++) { Method meth = o.getclass().getmethod("get"+f[i].getname()); Object ret = meth.invoke(o); boolean status = localizapk(o, f[i].getname()); if(ret!=null) { if(! status) sets +=f[i].getname()+" = "+getstringtype(ret)+","; else where+=f[i].getname()+" = +getstringtype(ret)+" and "; } else sets +=f[i].getname()+" = null,"; } sets = " set "+sets.substring(0,sets.length()-1); if(where.length()>0) { where = " where "+where.substring(0, where.length()-4); return sets+where; } return sets+where; } FIGURA 24 Montando SQL de alteração.

54 Componentes Gráficos Implementados Visando a visualização dos campos do banco de dados na tela da aplicação a ser gerada, foram implementadas classes visuais que permita que os campos do banco de dado sejam mapeados em campos gráficos e editáveis na tela (Edits, ComboBox, Grids). Para melhorar a facilidade de manipulação por parte do usuário, cada chave estrangeira na tabela é mapeada na tela pelos templates como um SJDBComboBox, herdado da classe JComboBox, conectado ao banco de dados, apontando para sua respectiva tabela, de modo que ao abrir uma tela da aplicação, o componente acesse o banco de dados e exiba todos os valores da tabela, segundo as restrições da SQL, a figura 25 ilustra o formato do componente. FIGURA 25 Utilização do componente SJDBComboBox. Uma das classes implementada foi a SJDBTable, herdada das classes JTable e AbstractTableModel, cuja funcionalidade é a exibição dos dados contidos no banco de dados na tela, em um formato de tabela (Grid), a figura 26 ilustra uma tela que utiliza este componente. FIGURA 26 Utilização do componente SJDBTable.

55 Template de Cadastro Este template é responsável por parametrizar a operação de cadastro da aplicação, levando em consideração que ao escolher este template o usuário tenha seguido as regras de construção de um cadastro apresentadas na seção 4.1, a figura 27 ilustra o formato deste template. FIGURA 27 Template de cadastro. A coluna Key Field da figura 27 representa todas as chaves estrangeiras que a tabela possui, localizadas a partir da instrução SQL apresentada na figura 13. A segunda coluna, nomeada de Display Field representa qual campo aparecerá ao usuário, uma vez que na maioria das vezes as chaves estrangeiras são do tipo inteiro, referência a uma chave primária em outra tabela, o que acaba dificultando a visualização dos dados pelo usuário se exibido este campo, a grosso modo, internamente se trabalha com o Key Field e visualmente ao usuário aparece o Display Field, lembrando que toda chave estrangeira aparecerá na tela no formato de um componente SJDBComboBox apresentado na figura 25. A última coluna representa o SQL responsável por recuperar os dados no banco de dados caso haja alguma instrução especial, uma vez que por padrão a ferramenta considera uma instrução SQL como segue na figura 28.

56 select Key Field, Display Field from tabela origem de Display Field order by Display Field FIGURA 28 Instrução SQL padrão do SJDBComboBox. na figura 29. O resultado da configuração do template de cadastro é demonstrado FIGURA 29 Cadastro da aplicação comercial gerada Pode-se perceber que na figura 29, todos os campo da tabela CLIENTES foram colocados na tela no formato de um componente JTextField, padrão aos campos que não são chaves estrangeiras, já os campos que são chaves estrangeiras seguem como componentes da classe SJDBComboBox exemplificado pelo campo EST_UF mais que internamente está sendo considerado o campo EST_COD, como segue na figura Template de Consulta/Relatório Este template é responsável por gerar duas operações da aplicação: consulta e relatório, onde diferem apenas no modo de visualização, no caso das consultas os dados são mostrados em uma SJDBTable e no relatório em formato PDF, podendo ser aberto em qualquer visualizador de PDF, ou ainda, utilizar o visualizador de relatórios em PDF implementado com a biblioteca JPedal (JPedal, 2005) para atender as necessidades da aplicação.

57 55 Antes de ser implementado o template de consulta/relatório, foram estudadas algumas biblioteca e ferramentas para se gerar relatórios, mais devido ao fato de serem aplicações externas à ferramenta GenJava, foi proposto a utilização da biblioteca itext (itext, 2005) que pode ser facilmente integrada ao código-fonte da ferramenta, de modo que os usuários não necessitem possuir as bibliotecas e ferramentas instaladas em suas máquinas, basta apenas rodar o arquivo de execução da aplicação comercial gerada. Foi acrescentado um capítulo (capítulo 5) especial, com ênfase nestas ferramentas e bibliotecas, mesmo não tendo sido utilizadas no projeto. A figura 30 apresenta o template de consulta/relatório, responsável pela parametrização destas operações. FIGURA 30 Template de consulta/relatório. A primeira coluna da tabela (Grid) superior, Field Column, da figura 30 representa os campos contidos na tabela escolhida, no caso a de CLIENTES, recuperados através da instrução SQL apresentada na figura 9 da seção 2.1 do capítulo 2. A segunda coluna, Display Column, representa como os campos serão apresentados ao usuário, podendo ser digitado o nome que mais se enquadra na funcionalidade do campo. Checando a penúltima coluna, Filtro, será adicionada aàtela uma opção de filtragem de dados e por último a coluna Coluna

58 56 indica se o campo aparecerá ao usuário ou não, de acordo com a opção de checagem escolhida. A segunda tabela (Grid) se assemelha ao funcionamento da configuração das chaves estrangeiras do template de cadastro, figura 27, diferenciando-se apenas pelas três últimas colunas, Display Column, Filtro, Coluna que segue o funcionamento apresentado no parágrafo anterior. O resultado depois de configurado este template segue na figura 31. FIGURA 31 Consulta/Relatório da aplicação gerada. A figura 31 demonstra a tela de consulta/relatório gerada pelo template respectivo, percebe-se que no canto esquerdo superior da tela, existe uma série de opções de filtragem configurados no template, de modo que ao escolher uma opção, digitar um valor no campo do lado direito e selecionar o botão Pesquisar, os dados serão recuperados do banco de dados seguindo a filtragem estabelecida pelo usuário. Quando há a necessidade de se imprimir os resultados exibidos na tela, é preciso que o usuário selecione o botão Imprimir e determine um caminho para que o relatório seja salvo Visualizador de Relatórios em PDF Para simplificação do manuseio dos PDF s gerados na operação de geração de relatórios, foi implementado um visualizador de PDF com a biblioteca JPedal, possibilitando que os usuários não precisem instalar nenhum software a parte para visualizar seus relatórios.

59 57 Este visualizador pode ser chamado em dois momentos na aplicação gerada, uma no menu inicial da aplicação e outra ao se gerar um relatório, uma vez que nesta segunda opção é chamado automaticamente. Confirmando a mensagem que aparece na tela, ao abrir o relatório, este já é mostrado no visualizador como segue na figura 32. FIGURA 32 Visualizador de relatórios em PDF. 4.7 Template de Movimentação O template de movimentação (figura 33) é responsável por configurar as rotinas de movimentações da aplicação a ser gerada, é necessário que o usuário ao selecionar esta opção na tela de escolha dos templates da aplicação (figura 19 da seção 4.1), leve em consideração as regras apresentadas na seção 4.1. FIGURA 33 Template de movimentação.

60 58 A primeira tabela (Grid) apresentada na figura 33, representa as chaves estrangeiras encontradas na tabela de origem, sendo que sua configuração segue o mesmo principio apresentado na template de cadastro na seção 4.5. A segunda tabela diz respeito às tabelas detalhes que a tabela possui, na existência de mais de uma, pode-se selecionar qual tabela detalhe será utilizada para parametrizar a rotina de movimentação. A última tabela refere-se as chaves estrangeiras encontradas na tabela mestre. A figura 34 mostra a tela de movimentação de vendas após ser gerada pela ferramenta. FIGURA 34 Movimentação da aplicação gerada.

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noções de. Microsoft SQL Server. Microsoft SQL Server Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados

Leia mais

Programação com Acesso a Banco de Dados

Programação com Acesso a Banco de Dados Campus Ipanguaçu Curso: Técnico em Informática Programação com Acesso a Banco de Dados AULA 17 ACESSO A BANCO DE DADOS COM JDBC PROF.: CLAYTON M. COSTA 2 011.2 Introdução Aplicação + Banco de Dados: Funcionalidade

Leia mais

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes

Leia mais

JDBC Java Database Connectivity

JDBC Java Database Connectivity 5 JDBC Java Database Connectivity Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1 Meta Trabalhar com bancos de dados em aplicações web em JSP através das classes

Leia mais

Aula 1 Acesso a Banco de Dados

Aula 1 Acesso a Banco de Dados Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados Prof. Josenildo Silva jcsilva@ifma.edu.br Introdução O JDBC (Java Database Connectivity) foi criado com o intuito de fornecer aos programadores

Leia mais

Persistência de Classes em Tabelas de Banco de Dados

Persistência de Classes em Tabelas de Banco de Dados UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução! Em algumas situações, pode ser necessário preservar os objetos

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

Leia mais

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Manipulação de Banco de Dados com Java Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Acesso a um SGBD Em sistemas mais simples o uso de arquivos pode ser usado mas para aplicações

Leia mais

JPA: Persistência padronizada em Java

JPA: Persistência padronizada em Java JPA: Persistência padronizada em Java FLÁVIO HENRIQUE CURTE Bacharel em Engenharia de Computação flaviocurte.java@gmail.com Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados Prof. Josenildo Silva jcsilva@ifma.edu.br Introdução O JDBC (Java Database Connectivity) foi criado com o intuito de fornecer aos programadores

Leia mais

Um Driver NDIS Para Interceptação de Datagramas IP

Um Driver NDIS Para Interceptação de Datagramas IP Um Driver NDIS Para Interceptação de Datagramas IP Paulo Fernando da Silva psilva@senior.com.br Sérgio Stringari stringari@furb.br Resumo. Este artigo apresenta o desenvolvimento de um driver NDIS 1 para

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br Introdução a Banco de Dados Aula 03 Prof. Silvestri www.eduardosilvestri.com.br Arquiteturas de Banco de Dados Arquiteturas de BD - Introdução Atualmente, devem-se considerar alguns aspectos relevantes

Leia mais

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES Alexandre Egleilton Araújo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil araujo.ale01@gmail.com, jaime@unipar.br Resumo.

Leia mais

Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br

Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br Ementa Introdução a Banco de Dados (Conceito, propriedades), Arquivos de dados x Bancos de dados, Profissionais de Banco de dados,

Leia mais

Figura 1. A Classe Java

Figura 1. A Classe Java Conexã o com MySQL Connection Factory Para criar as conexões com o banco de dados será utilizado um padrão chamado Factory, onde através dele se terá uma única classe que proverá uma fábrica de conexão

Leia mais

Conceitos de Banco de Dados

Conceitos de Banco de Dados Conceitos de Banco de Dados Autor: Luiz Antonio Junior 1 INTRODUÇÃO Objetivos Introduzir conceitos básicos de Modelo de dados Introduzir conceitos básicos de Banco de dados Capacitar o aluno a construir

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação SOFT DISCIPLINA: Engenharia de Software AULA NÚMERO: 10 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir os conceitos de coesão e acoplamento. DESENVOLVIMENTO Projetar

Leia mais

Figura 1 - Arquitetura multi-camadas do SIE

Figura 1 - Arquitetura multi-camadas do SIE Um estudo sobre os aspectos de desenvolvimento e distribuição do SIE Fernando Pires Barbosa¹, Equipe Técnica do SIE¹ ¹Centro de Processamento de Dados, Universidade Federal de Santa Maria fernando.barbosa@cpd.ufsm.br

Leia mais

Manipulação de Banco de Dados com Java 1. Objetivos

Manipulação de Banco de Dados com Java 1. Objetivos Manipulação de Banco de Dados com Java 1. Objetivos Demonstrar os fundamentos básicos para a manipulação de banco de dados com Java; Apresentar a sintaxe de comandos SQL usados em Java. 2. Definições A

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Orientação à Objetos. Aécio Costa

Orientação à Objetos. Aécio Costa Aécio Costa O paradigma da orientação à objetos Paradigma? Um paradigma é uma forma de abordar um problema. No contexto da modelagem de um sistema de software, um paradigma tem a ver com a forma pela qual

Leia mais

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Banco de Dados Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Roteiro Mapeamento de objetos para modelo relacional Estratégias de persistência Persistência JDBC Mapeando Objetos para o Modelo Relacional

Leia mais

Capítulo 1. Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object)

Capítulo 1. Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object) Capítulo 1 Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object) Introdução Os programas desenvolvidos em Java comunicam se com um banco de dados

Leia mais

Android e Bancos de Dados

Android e Bancos de Dados (Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do

Leia mais

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Introdução Hardware X Software Corpo Humano Parte Física Componentes 18 Capacidade de utilizar o corpo em atividades especificas explorando seus componentes Hardware Introdução Parte física: placas, periféricos,

Leia mais

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL 1. O que é Linguagem SQL 2. Instrução CREATE 3. CONSTRAINT 4. ALTER TABLE 5. RENAME TABLE 6. TRUCANTE TABLE 7. DROP TABLE 8. DROP DATABASE 1 1. O que é Linguagem SQL 2. O SQL (Structured Query Language)

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

SQL APOSTILA INTRODUÇÃO A LINGUAGEM SQL

SQL APOSTILA INTRODUÇÃO A LINGUAGEM SQL SQL APOSTILA INTRODUÇÃO Uma linguagem de consulta é a linguagem por meio da qual os usuários obtêm informações do banco de dados. Essas linguagens são, tipicamente, de nível mais alto que as linguagens

Leia mais

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos Programação Estruturada e Orientada a Objetos Fundamentos Orientação a Objetos 2013 O que veremos hoje? Introdução aos fundamentos de Orientação a Objetos Transparências baseadas no material do Prof. Jailton

Leia mais

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL Prof. MSc. Hugo Souza Iniciando nossas aulas sobre

Leia mais

Módulo 4: Gerenciamento de Dados

Módulo 4: Gerenciamento de Dados Módulo 4: Gerenciamento de Dados 1 1. CONCEITOS Os dados são um recurso organizacional decisivo que precisa ser administrado como outros importantes ativos das empresas. A maioria das organizações não

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas Operacionais Prof. Marcelo Sabaris Carballo Pinto Gerenciamento de Dispositivos Gerenciamento de Dispositivos de E/S Introdução Gerenciador de Dispositivos Todos os dispositivos

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

LINGUAGEM DE BANCO DE DADOS

LINGUAGEM DE BANCO DE DADOS LINGUAGEM DE BANCO DE DADOS Gabriela Trevisan Bacharel em Sistemas de Informação Universidade Federal do Rio Grande Pós-Graduanda Formação Pedagógica de Professores (FAQI) Conceito de BD Um banco de dados

Leia mais

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor

Leia mais

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP Paulo Fernando da Silva psilva@senior.com.br Sérgio Stringari stringari@furbbr Resumo. Este artigo apresenta a especificação

Leia mais

Banco de Dados BrOffice Base

Banco de Dados BrOffice Base Banco de Dados BrOffice Base Autor: Alessandro da Silva Almeida Disponível em: www.apostilando.com 27/02/2011 CURSO TÉCNICO EM SERVIÇO PÚBLICO Apostila de Informática Aplicada - Unidade VI Índice Apresentação...

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak Usando PostgreSQL na Regra de Negócio de um ERP Fabiano Machado Dias Eduardo Wolak Regra de negócio? São todas as regras existentes num sistema de informação, que ditam seu comportamento, suas restrições

Leia mais

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona alcides.pamplona@gmail.com Tópicos API JDBC Utilizando JDBC Statement PreparedStatement Mapeamento Objeto-Relacional 2 API JDBC 3 API

Leia mais

Satélite. Manual de instalação e configuração. CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br

Satélite. Manual de instalação e configuração. CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br Satélite Manual de instalação e configuração CENPECT Informática www.cenpect.com.br cenpect@cenpect.com.br Índice Índice 1.Informações gerais 1.1.Sobre este manual 1.2.Visão geral do sistema 1.3.História

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd. Apresentação Este curso tem como objetivo, oferecer uma noção geral sobre a construção de sistemas de banco de dados. Para isto, é necessário estudar modelos para a construção de projetos lógicos de bancos

Leia mais

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0 Índice 1 - Objetivo 2 - Descrição do ambiente 2.1. Tecnologias utilizadas 2.2. Estrutura de pastas 2.3. Bibliotecas já incluídas 3 - Características gerais 4 - Criando

Leia mais

1. Domínio dos Atributos

1. Domínio dos Atributos Structure Query Language SQL Guilherme Pontes lf.pontes.sites.uol.com.br 1. Domínio dos Atributos Por domínio, ou tipo, pode-se entender como a maneira como determinado atributo (ou campo, se tratando

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

3 SCS: Sistema de Componentes de Software

3 SCS: Sistema de Componentes de Software 3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário

Leia mais

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE Aluno: Roberto Reinert Orientador: Everaldo A. Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Workflow Processo

Leia mais

Figura 01 Kernel de um Sistema Operacional

Figura 01 Kernel de um Sistema Operacional 01 INTRODUÇÃO 1.5 ESTRUTURA DOS SISTEMAS OPERACIONAIS O Sistema Operacional é formado por um Conjunto de rotinas (denominado de núcleo do sistema ou kernel) que oferece serviços aos usuários e suas aplicações

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Programação SQL. Introdução

Programação SQL. Introdução Introdução Principais estruturas duma Base de Dados: Uma BD relacional é constituída por diversas estruturas (ou objectos ) de informação. Podemos destacar: Database: designa a própria BD; Table/Tabela:

Leia mais

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais Curso de Java Orientação a objetos e a Linguagem JAVA Roteiro A linguagem Java e a máquina virtual Objetos e Classes Encapsulamento, Herança e Polimorfismo Primeiro Exemplo A Linguagem JAVA Principais

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Servidor de Aplicações WEB Tomcat Servidor Tomcat Foi desenvolvido

Leia mais

Manual do Painel Administrativo

Manual do Painel Administrativo Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Modelo Cliente- Servidor Modelo de Aplicação Cliente-servidor Os

Leia mais

FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO

FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO O Driver IGS possui um módulo de configuração que possibilita a comunicação com protocolos proprietários. Trata-se do Driver

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

agility made possible

agility made possible RESUMO DA SOLUÇÃO Utilitário ConfigXpress no CA IdentityMinder a minha solução de gerenciamento de identidades pode se adaptar rapidamente aos requisitos e processos de negócio em constante mudança? agility

Leia mais

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância 5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância O capítulo anterior apresentou uma discussão sobre a inclusão dos chamados learning services no processo

Leia mais

Manual do Ambiente Moodle para Professores

Manual do Ambiente Moodle para Professores UNIVERSIDADE FEDERAL DA FRONTEIRA SUL Manual do Ambiente Moodle para Professores Tarefas Versão 1.0b Setembro/2011 Direitos Autorais: Essa apostila está licenciada sob uma Licença Creative Commons 3.0

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

Análise de Ponto de Função

Análise de Ponto de Função Complemento para o Curso Análise de Ponto de Função FUNÇÕES DO TIPO DADO O termo Arquivo não significa um arquivo do sistema operacional, como é comum na área de processamento de dados. Se refere a um

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

Documento de Arquitetura

Documento de Arquitetura Documento de Arquitetura A2MEPonto - SISTEMA DE PONTO ELETRÔNICO A2MEPonto - SISTEMA DE PONTO ELETRÔNICO #1 Pág. 1 de 11 HISTÓRICO DE REVISÕES Data Versão Descrição Autor 28/10/2010 1 Elaboração do documento

Leia mais

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO-GERAL DE MODERNIZAÇÃO E INFORMÁTICA CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS MANUAL

Leia mais

Manual SAGe Versão 1.2 (a partir da versão 12.08.01)

Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação

Leia mais

1. Apresentação. 1.1. Objetivos

1. Apresentação. 1.1. Objetivos 1.1. Objetivos 1. Apresentação Neste capítulo estão descritos os objetivos gerais do livro, os requisitos desejáveis do estudante para que possa utilizá-lo eficientemente, e os recursos necessários em

Leia mais

Análise de Dados do Financeiro

Análise de Dados do Financeiro Análise de Dados do Financeiro Introdução Para reunir em um só local as informações de contas a pagar e receber cadastradas e/ou geradas no sistema TTransp existe a interface de análise de dados do financeiro.

Leia mais

Conteúdo Programático de PHP

Conteúdo Programático de PHP Conteúdo Programático de PHP 1 Por que PHP? No mercado atual existem diversas tecnologias especializadas na integração de banco de dados com a WEB, sendo o PHP a linguagem que mais se desenvolve, tendo

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO UTILIZANDO O HIBERNATE Rafael Laurino GUERRA, Dra. Luciana Aparecida Martinez ZAINA Faculdade de Tecnologia de Indaiatuba FATEC-ID 1 RESUMO Este artigo apresenta

Leia mais

Modelagemde Software Orientadaa Objetos com UML

Modelagemde Software Orientadaa Objetos com UML Modelagemde Software Orientadaa Objetos com UML André Maués Brabo Pereira Departamento de Engenharia Civil Universidade Federal Fluminense Colaborando para a disciplina CIV 2802 Sistemas Gráficos para

Leia mais

Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.

Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu. Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.br) JDBC Conceito Tipos Transações Tipos SQL e JAVA Conexão JDBC Implementação

Leia mais

GRS Gerador de Redes Sistêmicas. (outubro/2004)

GRS Gerador de Redes Sistêmicas. (outubro/2004) 116 APÊNDICE A MANUAL DO GRS Universidade Federal do Rio de Janeiro UFRJ Departamento de Ciência da Computação DCC Instituto de Matemática IM / Núcleo de Computação Eletrônica NCE GRS Gerador de Redes

Leia mais

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional Juarez Bachmann Orientador: Alexander Roberto Valdameri Roteiro Introdução Objetivos Fundamentação teórica Desenvolvimento

Leia mais

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc.

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 1. Prof. Rafael Dias Ribeiro. M.Sc. MODELAGEM DE DADOS PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS Aula 1 Prof. Rafael Dias Ribeiro. M.Sc. @ribeirord 1 Objetivos: Apresenta a diferença entre dado e informação e a importância

Leia mais

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados Banco de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix

Leia mais

Desenvolvendo Websites com PHP

Desenvolvendo Websites com PHP Desenvolvendo Websites com PHP Aprenda a criar Websites dinâmicos e interativos com PHP e bancos de dados Juliano Niederauer 19 Capítulo 1 O que é o PHP? O PHP é uma das linguagens mais utilizadas na Web.

Leia mais

Prof. Marcelo Henrique dos Santos

Prof. Marcelo Henrique dos Santos ORIENTAÇÃO A OBJETOS COM PROTOTIPAÇÃO CAPÍTULO 02 CONCEITOS FUNDAMENTAIS OBJETIVOS Definiremos alguns conceitos fundamentais de forma a não deixar dúvidas básicas ou interpretações que nos coloquem em

Leia mais

Introdução à Programação. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR

Introdução à Programação. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR Introdução à Programação Orientada a Objetos Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR Fev/2014 Histórico das linguagens de programação ENIAC (1944) Programação

Leia mais

02 - Usando o SiteMaster - Informações importantes

02 - Usando o SiteMaster - Informações importantes 01 - Apresentação do SiteMaster - News Edition O SiteMaster foi desenvolvido para ser um sistema simples de gerenciamento de notícias, instalado em seu próprio computador e com configuração simplificada,

Leia mais

Engenharia de Requisitos Estudo de Caso

Engenharia de Requisitos Estudo de Caso Engenharia de Requisitos Estudo de Caso Auxiliadora Freire Fonte: Engenharia de Software 8º Edição / Ian Sommerville 2007 Slide 1 Engenharia de Requisitos Exemplo 1 Reserva de Hotel 1. INTRODUÇÃO Este

Leia mais

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Um Sistema Gerenciador de Banco de Dados (SGBD) é constituído por um conjunto de dados associados a um conjunto de programas para acesso a esses

Leia mais

Principais Comandos SQL Usados no MySql

Principais Comandos SQL Usados no MySql Principais Comandos SQL Usados no MySql O que é um SGBD? Um Sistema Gerenciador de Banco de Dados (como no Brasil) ou Sistema Gestor de Base de Dados (SGBD) é o conjunto de programas de computador (softwares)

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de Computadores I Organização Básica B de Computadores

Leia mais

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Luis Gustavo Zandarim Soares 1, Késsia Rita da Costa Marchi 1 1 Universidade Paranaense (Unipar) Paraná PR Brasil luisgustavo@live.co.uk,

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II BANCO DE DADOS II AULA 1 Linguagem SQL Linguagem de definição de dados (DDL) DISCIPLINA: Banco de Dados

Leia mais

FLUXO DE CAIXA: Módulo BI (Business Intelligence)

FLUXO DE CAIXA: Módulo BI (Business Intelligence) RELATÓRIO DE ESTÁGIO: Tânia Cristina Leite RA: 046567 Orientador: Prof. Dr. Aurelio Ribeiro Leite de Oliveira FLUXO DE CAIXA: Módulo BI (Business Intelligence) Universidade Estadual de Campinas Instituto

Leia mais

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2012 Edição 7 Listando e Gravando Listando itens em ComboBox e gravando os dados no

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 05 Estrutura e arquitetura do SO Parte 2 Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC,

Leia mais

Java com Banco de Dados Posgree

Java com Banco de Dados Posgree Java com Banco de Dados Posgree Prof. Luiz Claudio Ferreira de Souza www.luizclaudiofs.blogspot.com 1 Driver para ligação Java e Postgre http://jdbc.postgresql.org/download.html www.luizclaudiofs.blogspot.com

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

Leia mais

Acesso a Bancos de Dados em Java (JDBC)

Acesso a Bancos de Dados em Java (JDBC) Acesso a Bancos de Dados em Java (JDBC) Jomi Fred Hübner Universidade Regional de Blumenau Departamento de Sistemas e Computação Roteiro Introdução Objetivo da JDBC Vantagens Visão geral do acesso a SGBDs

Leia mais

Integrando Java com Banco de Dados

Integrando Java com Banco de Dados Especialização em Engenharia de Software Programação Orientada a Objetos JDBC Java Database Connectivity Sérgio Soares scbs@cin.ufpe.br Objetivos Apresentar os conceitos básicos da especificação de Java

Leia mais

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia. 1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade

Leia mais

Roteiro 2 Conceitos Gerais

Roteiro 2 Conceitos Gerais Roteiro 2 Conceitos Gerais Objetivos: UC Projeto de Banco de Dados Explorar conceitos gerais de bancos de dados; o Arquitetura de bancos de dados: esquemas, categorias de modelos de dados, linguagens e

Leia mais