Código X no Banco. Código na Aplicação. Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos.

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

Download "Código X no Banco. Código na Aplicação. Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos."

Transcrição

1 Erik Aceiro Antonio erikblogger.blogspot.com/): Graduado em Ciência da Computação (Mackenzie). Mestre em Engenharia (Mackenzie) com ênfase em Automação de Sistemas de Comunicações Ópticas. Doutorando em Engenharia de Software pela UFSCar sobre Atividades de VV&T. Possui as certificações SCJP 6.0 e LPI 101. Professor universitário da Anhanguera de Rio Claro e engenheiro de Software Master na VARITUS-TI. Tem experiência na implantação de TDD (Test-Drive-Development), Refactory, Padrões de Arquitetura.Web Services, JPA, EJB e J2ME. Código X no Banco Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos. Código na Aplicação Separação de Interesses, do termo em inglês Separation of Concern (SoC), esse é um conceito antigo e amplamente usado no desenvolvimento de projetos complexos e com requisitos altos de escalabilidade, portabilidade e com facilidade de manutenção. O desenvolvimento em Java confundese, às vezes, com o uso de Stored Procedures (SPs), portanto, qual é a melhor opção, código no Banco de Dados ou o Código na Aplicação. Este artigo pretende discutir e apresentar dez variáveis para conduzir a decisão de se escolher manter o código no banco de dados ou na aplicação. egundo Martin Fowler, obter alta granularidade não é uma tarefa fácil. A granularidade é um tipo de métrica empregada em orientação a objetos e outros tipos de paradigmas que têm como característica medir o grau que uma parte do sistema deve ser fatorado (ou dividido em outras partes), de forma que se possa criar um componente que possa ser reaproveitado/reutilizado. Existem dois tipos de granulariade conhecidas: granularidade grossa e granularidade fina. A primeira relaciona um alto grau de acoplamento e um sistema pouco coeso e a segunda mede o inverso, um sistema fracamente acoplado e fortemente coeso [1]. Outro conceito importante em Orientação a Objetos é o nível de separação de interesses que se deseja alcançar. Separação de Interesses ou Separation of Concern (SoC) do inglês, é um conceito antigo e amplamente usado em sistemas que tenham um certo grau de complexidade. Provavelmente o primeiro a ter introduzido o termo separação de interesses foi Dijkstra em 1974 no seu artigo On the role of scientific thought, onde relaciona o termo com os inúmeros aspectos e possibilidades existentes de pensamento. Em geral, é desejável que se tenha níveis de granularidade coerentes com o projeto 56

2 desenvolvido. Para se alcançar esses níveis deve-se realizar um "tradeoff" entre os princípios de orientação a objetos e as necessidades do projeto, algumas variáveis que devem ser identificadas e controladas como pontos de prova são: (1) desenvolvedores com conhecimento na linguagem; (2) flexibilidade; (3) portabilidade; (4) desempenho; (5) tempo de desenvolvimento; (6) capacidade de testar o sistema e efetuar a depuração; (7) escalabilidade; (8) compreensão do código; (9) duplicidade; (10) encapsulamento. Esses dez princípios enumerados anteriormente estão diretamente associados com dois fatores constantes ao desenvolvimento de software Banco de Dados (BD) e Linguagem de Programação (LP). Essas duas constantes levam a decisões de projetos importantes, um deles é se a codificação da regra de negócio do sistema deve estar localizada no banco de dados de dados, na forma de Stored Procedure (SP) ou codificada na aplicação. O artigo primeiro trata da motivação quanto à separação de interesses, mostrando exemplos de código de banco de dados entrelaçado com o código da aplicação, em seguida é apresentada uma discussão sobre as dez variáveis de controle com foco em medidas de desempenho e manutenção, finalmente uma tabela relaciona o código com no banco ou na aplicação que auxilia na tomada de decisões. Separação de interesses A separação de interesses é uma abordagem que inclui diversos aspectos simultaneamente. Às vezes, tal separação não é perfeitamente possível, mas é ainda uma técnica disponível para o efetivo ordenamento dos pensamentos. A seguir, são apresentadas três formas de separação de interesses para uma aplicação simples de persistência de dados. Essa separação pode ser encontrada em um projeto orientado a objetos quando encapsulamos o comportamento de um objeto na forma de um método (veja a Listagem 1). Listagem 1. Código em Java para recuperar o pedido atual. class LogicaPedido{ Collection<Pedido> result; //... public Collection<Pedido> pedidomesatual(){ int clienteid = daocliente.buscacliente( eva ); for(pedido datapedido: daopedido.buscapedidopeloid(clienteid)) if( datapedido.pedidoatual() ) result.add(datapedido); return result; class DAOCliente{ public int busca_cliente(string nome) throws SQLException{ String sql= SELECT FROM cliente WHERE nome=? ; //Rotina para usar o PreparedStatement return id; class DAOPedido{ public Collection<Pedido> busca_pedido(int id) throws SQLException{ String sql= SELECT FROM pedido WHERE id=? ; Collection<Pedido> pedidos; //Rotina para usar o PreparedStatement return pedidos; A listagem anterior mostra apenas o DAOCliente e DAOPedido. Na listagem é possível observar claramente a separação de interesses entre a aplicação e o código SQL do banco de dados. A separação de interesses foi obtida com auxílio do padrão de projeto DAO, nesse caso o padrão de projeto consegue separar com alta granularidade os componentes do sistema responsáveis pela camada de persistência, centralizando assim a responsabilidade da lógica. Um modelo ideal para esse exemplo, seria a integração dos padrões DAO e MVC [4,5,9]. Em contrapartida, uma segunda abordagem é apresentada na Listagem 2. Listagem 2. Código em Java para recuperar o pedido atual com SQL. class LogicaPedido{ Collection<Pedido> result; //outras variaveis de instancias DAOCliente DAOPedido public Collection<Pedido> pedidomesatual() throws SQLException{ int clienteid; String nome; PreparedStatemente st; Collection<?> result; String sql = SELECT DISTINCT MONTH(ip.data) AS mes FROM itens_ pedido ip INNER JOIN pedido p ON ip.pedidoid = p.pedidoid INNER JOIN cliente c ON p.clienteid = c.clienteid WHERE (c.nome =?) AND(ip.produto = tablet ) GROUP BY ip.pedidoid, ip.data, c.nome HAVING (SUM(ip.preco) > 5000) ; //criar PreparedStatement //... ResultSet rs = st.executequery(sql); while(rs.next()){ result.add(rs.getdate( mes ).tostring()); return result; A Listagem 2 é um exemplo de código em Java que usa diretamente uma associação com a linguagem SQL. Embora o exemplo SQL não seja complexo, essa listagem é um exemplo claro que à medida que a aplicação vai necessitando de novos recursos e consultas, o código SQL pode se tornar cada vez mais complicado e de difícil manutenção. Outro exemplo é mostrado na Listagem 3, onde é usado para retornar um Pedido uma Stored Procedure (SP) em Postgres/plpgsql. Essa SP usa um cursor para retornar um conjunto de itens, esse cursor é aberto com um comando SQL equivalente ao da Listagem 2, observe no entanto as diferenças entre as formas de declaração entre as listagens anteriores. Como se pode observar, da primeira listagem até a última (Listagem de 1 a 3), que o nível de abstração e semântica vai do maior para um menor grau de abstração. A Listagem 3 não apresenta um nível desejável de SoC e também viola condições e conceitos importantes de orientação a objetos como encapsulamento e reutilização de código. Pode-se observar que essa listagem apresenta um alto nível de acoplamento e baixa coesão, pois a função fn_retorna_pedido() não pode ser um componente e "plugada" facilmente em outras partes do sistema (observe os métodos da Listagem 1). 57

3 Listagem 3. Código de uma Stored Procedure em Postgres/ plpgsql. CREATE OR REPLACE FUNCTION fn_retorna_pedido(integer) RETURNS TEXT AS $$ DECLARE BEGIN END; $$ ppedido ALIAS FOR $1; cursor col_data result result:= ; REFCURSOR; exemplo.itens_pedido.data%type; TEXT; OPEN cursor FOR SELECT DISTINCT MONTH(ip.data) AS mes LOOP FROM itens_pedido ip INNER JOIN pedido p ON ip.pedidoid = p.pedidoid INNER JOIN cliente c ON p.clienteid = c.clienteid WHERE (c.nome = ppedido) AND (ip.produto = IPhone ) GROUP BY ip.pedidoid, ip.data, c.nome HAVING (SUM(ip.preco) > 5000); FETCH cursor INTO col_data EXIT WHEN NOT FOUND; result:=result col_data \n ; / é uma concatenacao END LOOP; RETURN result; LANGUAGE plpgsql VOLATILE Desenvolvedores com conhecimento na Linguagem A figura 1 ilustra dez Linguagens de Programação (LPs) em função da porcentagem/popularidade dos principais motores de buscas da Internet (veja a figura 1). As linguagens de referência no índice TIOBE (mês de referência junho de 2010), com aproveitamento acima de 50% são as linguagens C/C++ e Java. É conveniente notar que segundo o índice TIOBE, essas linguagens são as mais populares a partir dos principais motores de buscas atuais. Nota-se uma mínima popularidade em relação à família de linguagens PL/SQL (3,94%) contra (90,17%) da linguagem Java. Essa característica tem um impacto direto na quantidade de desenvolvedores que tem conhecimento sobre linguagem de banco de dados (SP), isso pode em certo sentido prejudicar o bom desenvolvimento do sistema, caso o sistema seja desenvolvido com prazos críticos e com pessoal não treinado. Portabilidade e desempenho Linguagem de Programação como PL/SQL são linguagens que estão diretamente ligadas a banco de dados, como Oracle, mys- QL, Postgres, SQL Server, Informix, Sybase, DB2, entre outros. Segundo Martin Fowler, existe uma dependência direta entre um sistema de banco de dados e a capacidade do sistema se tornar mais flexível. O código totalmente implementado no banco de dados caracteriza por outro lado um alto desempenho se comparado com as chamadas preparadas em Java. O desempenho do banco de dados se comparado com rotinas alocadas no pool de conexão da linguagem Java e servidores de aplicação como o Apache Tomcat e Glassfish podem, para consultas complexas, executar dezenas de vezes mais rápidas. Esse resultado, em alguns casos, é tomado como o primeiro na decisão de projeto e arquitetura de um sistema, no entanto tal prática deve ser claramente analisada. Como primeira comparação, considere uma implementação em linguagem C para uma tarefa de troca de valores, esse tipo de operação é muito comum para algoritmos de ordenação como o Bubble Sort. A Listagem 4 mostra um exemplo de uma chamada em Assembly (AT&T) para realizar uma operação de troca. Listagem 4. Código em Linguagem de Máquina integrado com C para operações de troca. void troca_lm(int a, int b){ int atemp,btemp; asm ( movl %2, %%eax; movl %3, %%ebx; movl %%eax, %%edx; movl %%ebx, %%eax; movl %%edx, %%ebx; movl %%eax, %0; movl %%ebx, %1; : =r (atemp), =r (btemp) / saida : r (a), r (b) / entrada : %eax, %ebx, %edx / registradores usados ); Figura 1. Dez linguagens de programação (adaptado TIOBE [2]. 58

4 A figura 2 ilustra o tempo de troca em linguagem C com a integração da Linguagem de Montagem LM-AT&T (curva em vermelho), o tempo em linguagem C puro sem o uso de LM (curva em vermelho) e uma curva de Speedup (curva em azul). Para mais informações sobre código em LM (ver links) [8]. resultados apresentados (figura 2) obteve-se valores de Speedup de aproximadamente 1,3. Como era de se esperar, observa-se uma ligeira melhora da linguagem de montagem sobre a linguagem C. Essa melhora deve-se a capacidade da linguagem C acessar diretamente registradores otimizando assim a aplicação. É importante notar que mesmo a linguagem de montagem tendo um resultado melhor, o algoritmo Figura 2. Número de troca em função do tempo para código em C e AT&T. A curva de Speedup é definida como o tempo de execução de uma linguagem serial sobre o tempo de execução de uma linguagem em paralelo. Essa medida geralmente é empregada em sistemas paralelos e distribuídos e tem como objetivo investigar o quanto uma linguagem é melhor em relação à outra. No livro Introduction to Assembly Language Programmmin (ver livros) o autor usa este tipo de medida como uma razão entre o tempo de execução da linguagem C sobre o tempo de execução da linguagem de Montagem para mostrar o seu desempenho. Um valor de Speedup maior que 1 indica que a Linguagem de Montagem (LM) é melhor (executa em menor tempo) que a linguagem C. Para os Figura 3. Diagrama de pacotes do DAO. empregado não é a melhor implementação. Esse exemplo mostra claramente a necessidade de SoC em uma aplicação, permitindo assim obter maiores desempenhos. De uma forma semelhante, Stored Procedures (SP) permitem ao programador obter valores elevados de desempenho, contudo o desenvolvedor deve conhecer em detalhes a linguagem e reconhecer que também não são todos os pontos ou partes do sistema que devem ser implemen- Figura 4. Diagrama de classes do DAO. 59

5 tados no banco de dados. Para esse caso simples de uma troca, o problema em C torna-se trivial, mas para outros tipos de rotinas se torna praticamente inaceitável o uso de linguagem de montagem. A linguagem C com o uso da inner function asm() permite facilmente a integração de código de máquina em um programa estruturado. Pode-se constatar também que o desenvolvimento em linguagem C em ambientes Linux é totalmente facilitado pela adoção de técnicas de depuração como o uso da ferramenta de depuração como o GDB (ver links). Para permitir uma análise comparativa semelhante, foram feitas medidas de desempenho em Java usando JDBC, Bash/Linux e também o pgadmin. As figuras 3 e 4 mostram os diagramas de pacotes e também de classes usados neste artigo para os testes em Java. Para o desenvolvimento foi usado o Design Pattern DAO, do livro J2EE Core (ver livros) e também o Framework JUnit 4.0 para realizar testes de Unidade e Integração com o DAO. A figura 5 mostra o modelo DER do diagrama do banco de dados criado em Postgres/SQL e também duas SPs criadas para a persistência e remoção de dados do banco (típicas rotinas de CRUD Create, Recover, Update, Delete). A Listagem 6 mostra a SP em Postgres/plpgsql para a inserção de apenas um registro no banco de dados e a Listagem 7 mostra uma rotina com um loop para inserir vários registros no banco. Listagem 6. Procedure em Postgres para a inserção de apenas um registros no banco. CREATE OR REPLACE FUNCTION mundoj.fn_insere(character varying) RETURNS void AS $BODY$ DECLARE pnome ALIAS FOR $1; BEGIN INSERT INTO mundoj.pessoa (nome) VALUES(pnome); END; $BODY$ Listagem 7. Procedure em Postgres para a inserção de vários registros no banco. CREATE OR REPLACE FUNCTION mundoj.fn_insere_pessoa(integer) RETURNS void AS $BODY$ DECLARE total ALIAS FOR $1; i INTEGER; BEGIN i:=1; END; LOOP INSERT INTO mundoj.pessoa (NOME) VALUES( EVA ); i:=i+1; EXIT WHEN i>total; END LOOP; $BODY$ Figura 5. Modelo DER do banco de dados testado. A Listagem 5 mostra a criação da tabela pessoa do modelo anterior, repare que nessa listagem foi omitida as outras tabelas, mas a sua criação segue o mesmo princípio em SQL. Listagem 5. Procedure em Postgres para a inserção de vários registros no banco. CREATE TABLE mundoj.pessoa ( ); id serial NOT NULL, nome character varying(255) NOT NULL, endereco character varying(255), cpf character varying(11) NOT NULL, data_nascimento date, site character varying(255) ALTER TABLE mundoj.pessoa ADD CONSTRAINT pk_id_pessoa PRIMARY KEY(id); Além das SPs para inserção de dados foram desenvolvidos scripts em Bash/Linux para simular a inserção de vários registros no banco com e sem o uso de SPs. As listagens 8 e 9 mostram os scripts em Bash/Linux para simular esse resultado para registros, o restante do script foi omitido por simplicidade. Os valores de tempo foram obtidos com o uso do comando time do Linux, um exemplo de saída é mostrado (Listagem 10). Listagem 8. Procedure em Postgres para a inserção de vários registros no banco. if [ $1 -eq 1000 ]; then echo processando 1000 inserts for i in { ; do psql -U postgres -h mundoj -c \ INSERT INTO mundoj.pessoa (nome) VALUES ( eva${i ) > /dev/null done fi 60

6 Listagem 9. Procedure em Postgres para a inserção (via Stored Procedure) de vários registros no banco. if [ $1 -eq 1000 ]; then echo processando 1000 inserts for i in { ; do psql -U postgres -h mundoj -c \ SELECT mundoj.fn_insere( eva ) > /dev/null; done fi Listagem 10. Obtenção dos valores de tempo. time /opt/postgresql/8.4/bin/psql -U postgres -h estudos -c SE- LECT mundoj.fn_insere( eva ) > /dev/null; real 0m0.127s user 0m0.004s sys 0m0.008s A partir da Listagem 10 pode-se constatar três estatísticas de tempo. Estes tempos consistem de (I) o tempo real de invocação e término da execução do comando psql, (II) o tempo de CPU do usuário, ou seja, o tempo de processamento apenas no processador, também conhecido como CPU-Bound, e (III) o tempo de sistema da CPU, ou melhor dizendo, o tempo de IO-Bound da CPU para operações de interrupções. Listagem 11. Interface DAO para o objeto Pessoa. Interface que representa um DAO comum para o objeto Erik Aceiro Antonio aceiro@gmail.com public interface DAOPessoa { Método que insere uma pessoa no banco de Pessoa um objeto do pacote SQLException - lança uma exception caso não consiga inserir public void inserepessoa(pessoa p) throws SQLException; Método que atualiza uma pessoa no banco de id um inteiro válido para a chave da SQLException - lança uma exception caso não consiga inserir public void removepessoapeloid(int id) throws SQLException; Método retorna uma pessoa no banco de id um inteiro válido para a chave da SQLException - lança uma exception caso não consiga inserir cont. Listagem 11. Interface DAO para o objeto Pessoa. public Pessoa retornapessoapeloid(int id) throws SQLException; Método que atualiza uma pessoa no banco de dados. A atualização ocorre pelo Pessoa um objeto do pacote SQLException - lança uma exception caso não consiga inserir public void atualizapessoa(pessoa p) throws SQLException; Observe que para o comando time apresentar o resultado corretamente, o Postgres deve ser configurado sem a senha de autenticação, pois em caso contrário o psql irá solicitar uma senha de autenticação. As listagens 12 e 13 mostram o DAOPessoa e também o caso de teste no JUnit. Listagem 12. Implementação do DAO para o objeto Pessoa. Classe que implementa a interface Erik Aceiro Antonio erik.antonio@ufscar.dc.br public class DAOPessoaImp implements DAOPessoa { /campos comuns a todos os métodos private ResultSet resultset; private PreparedStatement prepstatement; private Statement statement; private DAOConnector daoconnector; private Connection conn; /métodos principais do DAOPessoa public DAOPessoaImp() throws SQLException, ClassNotFoundException { conn = public boolean inserepessoa(pessoa p) throws SQLException { int pos=0; String sql = INSERT INTO mundoj.pessoa (nome, endereco, cpf, data_ nascimento, escolaridade, , site) VALUES (?,?,?,?,?,?,?) ; prepstatement = conn.preparestatement(sql); for(int j=1; j<=10; j++){ System.out.println( resultados para +(j100)); long starttime = System.currentTimeMillis(); for(int i=0; i< (100j); i++){ pos=0; prepstatement.setstring(++pos, p.getnome()); prepstatement.setstring(++pos, p.getendereco()); prepstatement.setstring(++pos, p.getcpf()); 61

7 cont. Listagem 12. Implementação do DAO para o objeto Pessoa. prepstatement.setdate(++pos, new Date(p.getDataNascimento().getTime())); prepstatement.setstring(++pos,p.getescolaridade()); prepstatement.setstring(++pos,p.get ()); prepstatement.setstring(++pos,p.getsite()); prepstatement.execute(); long stoptime long diff = System.currentTimeMillis(); = (stoptime-starttime); System.out.println(String.format( total %02d.%03ds,(diff/60), (diff%60))); return true; //outros métodos do DAO devem ser implementados aqui //Fecha o DAOImp Listagem 13. Caso de Teste com o JUnit 4.0 para a inserção de 100 até registros. public class CasoDeTesteInserePessoa { private DAOPessoaImp public static void setupbeforeclass() throws Exception public static void teardownafterclass() throws Exception public void setup() throws Exception { dao = new DAOPessoaImp(); A figura 6 mostra uma captura do IDE Eclipse para a operação de inserção da listagem anterior (ver listagens 12 e 13). Figura 6. JUnit no Eclipse com os tempos de execução para o DAO. Para fornecer um comparativo entre o tempo de execução das operações de inserção os gráficos das figuras 8 e 9 mostram os tempos em Java usando instruções preparadas do banco (JDBC), tempo de execução com e sem o uso de SPs em Bash/Linux, e instruções com SP executadas diretamente pela interface do pgadmin. A partir dos gráficos observa-se que o tempo de execução para cada uma das aplicações é diferente. A linguagem Java é a que apresentou um melhor tempo de resposta (quanto mais para baixo for a curva melhor o tempo). A figura 9 mostra a relação do melhor tempo obtido em Java em relação ao melhor tempo de execução da Stored Procedure (SP). O melhor tempo da SP foi obtido a partir do comando time do Linux. A figura 8 também mostra que o desempenho do pgadmin é inferior à linguagem Java e também apresenta uma grande instabilidade, mostrando grandes picos dos resultados de inserções. Essa característica está relacionada com a maneira como o pgadmin cria e gerencia os DataSources de conexão. A figura 10 também mostra a razão de Speedup (melhor tempo em Java sobre o melhor tempo do banco), a curva de Speedup em verde mostra praticamente que o desempenho do banco em relação à linguagem Java é muito superior, o maior valor de Speedup obtido foi de 200 para public void teardown() throws Exception { dao = public void testinserepessoa() throws SQLException{ Pessoa p = new Pessoa(); p.setnome( Erik ); p.setendereco( Rio Claro/SP ); p.setcpf( ); Figura 8. Tempo de execução para a instrução INSERT/SQL. // cria uma data GregorianCalendar greg = new GregorianCalendar(); greg.set(2010, 9, 23); p.setdatanascimento( greg.gettime() ); // atribui a data para objeto p.setescolaridade( programador ); p.set ( aceiro@gmail.com ); p.setsite( ); Assert.assertTrue( dao.inserepessoa(p) ); 62 Figura 10. Tempo de execução e Speedup para a instrução INSERT/SQL.

8 Escalabilidade Quando o número de acessos no Twitter dispararou, este passou a usar uma forma combinada e otimizada de MySQL/memcached e mais de 45 módulos rodando com Apache Cassandra. Este ambiente misto permite hoje 50 milhões de tweets/dia, atualmente o twitter tem uma base de 125 milhões de usuários, veja (Twitter & Performance: An Update, O Facebook, outro gigante das redes sociais, gera cerca de 60 milhões de fotos por semana. Esses dois cenários mostram a grande importância da escalabilidade. Escalabilidade está associada com elasticidade e é uma propriedade de sistemas, redes ou processos em assimilar uma carga crescente de trabalho de forma comportada. Existem dois tipos de escalabilidade. Escalabilidade Vertical e Escalabilidade Horizontal. Escalabilidade Vertical um mesmo nó expandido com mais memória, processadores e discos. Escalabilidade Horizontal aumento no número de nós. Para se Escalar Horizontalmente existe algumas técnicas como: Cache, Fila, Master/Slave e Particionamento. Cada uma delas tem suas vantagens e desvantagens, mas o principal destaque está associado com alteração da regras de negócios associadas ao mapeamento relacional, tornando dessa forma sistemas de banco de dados relacionais com interesses e regras de negócios localizadas no banco mais difíceis de serem escalados, pois nessas situações é preciso uma reengenharia na estrutura e arquitetura de projeto. Uma solução alternativa para escalar sistemas atualmente empregada são os bancos de dados NoSQL, que usam mecanismos de mapeamento baseado em chave-valor, alguns exemplos são Bigtable da Google, Dynamo e CouchDB que usa soluções em JSON. Manutenção Neste artigo tratamos de diversos aspectos Transversais, ou seja, os requisitos não-funcionais. Contudo, interesses de Manutenção também devem ser considerados. As variáveis de Manutenabilidade que influenciam o desenvolvimento estão relacionadas com princípios de programação e Orientação a Objetos, como, por exemplo: Duplicidade de Código; Encapsulamento e Proteção; Flexibilidade para Reúso; Compreensão do código; Tempo de Desenvolvimento e Atividades de VV&T (Validação, Verificação & Teste). Encapsulamento e proteção Indica a capacidade de se usar código com proteção de acesso. Neste caso, o princípio de Encapsulamento de um objeto. Em Java o encapsulamento de um atributo/método é obtido via a palavrachave private. Tornar um campo de uma classe oculta para acesso externo garante proteção evitando que um campo seja alterado de forma indevida e diminui o acoplamento com outra classe, aumentando as chances de reúso. Veja o exemplo da Listagem 14, em que um objeto Mock simula um cadastro de Pedido e o número do pedido é alterado antes de ser inserido em um banco de dados, neste caso se o objeto umpedido tivesse sido instanciado com o valor que realmente deveria ser persistido no banco de dados o objeto que o usuário vê e o que é inserido passam a ser diferentes tornando a aplicação inconsistente. Listagem 14. Sem encapsulamento. Classe Mock que simula um Pedido public class Pedido{ int numeropedido; //... public class CadastroPedidoMockBD{ public void inserepedido(pedido umpedido){ Pedido novopedido = umpedido; novopedido.numeropedido = 1000; /altera o valor do pedido lista.add(p); //prossegue e insere no banco inconsistência!! Com a linguagem Java é possível corrigir isso com a palavra-chave private, essa alteração é mostrada na Listagem 15. No caso de banco de dados relacionais não existe um operador ou palavrachave que controle o acesso a certas variáveis e que impeça o acoplamento indevido com outros componentes. Vale apena ressaltar, que mesmo a linguagem em alguns casos é possível acessar um atributo privado como no caso da Linguagem AspectJ ou através da Reflection API. Listagem 15. Com encapsulamento. Classe Mock que simula um Pedido public class Pedido{ private int numeropedido; //... public class CadastroPedidoMockBD{ public void inserepedido(pedido umpedido){ Pedido novopedido = umpedido; novopedido.numeropedido = 1000; /não é possível alterar lista.add(p); //prossegue e insere no banco Duplicidade, flexibilidade e compreensão de código Duplicidade de código reflete o quanto do código é replicado e de difícil manutenção. Em alguns casos no banco de dados com PL/SQL pode-se construir funções que podem ser reaproveitadas, contudo o reaproveitamento fica limitado a Programação Estruturada. Outro aspecto que deve ser destacado é a capacidade de reúso que linguagens Orientadas a Objetos fornecem, como é o caso da Herança e Composição. A não ser que se esteja utilizando um banco de dados Orientados a Objetos, como, por exemplo, o db4 da Db4Object Inc. a aplicação geralmente fica limitada ao escopo de programas que usam princípios de Programação Estruturada. 63

9 Depuração e atividades de VV&T Um aspecto pouco explorado quanto a Stored Procedures em banco de dados são as ferramentas de depuração e de Atividades de Testes VV&T (Validação, Verificação e Testes). Atualmente é escasso o número de ferramentas que facilitam a depuração e o teste, a ferramenta dbunit [2] é uma extensão do JUnit que permite realizar teste de unidade em banco de dados, mas que não fornece nenhuma garantia estrutural ou de cobertura. No caso do Postgres, existe o plugin edb-debugger que é disponível para download (ver links), esse plugin precisa de uma versão do Postgres fonte para ser compilado pela comando make do Linux. Uma alternativa na forma de uma distribuição binária é o uso do Postgres e pgadmin 3 distribuídos pela EnterpriseBD (ver links). A figura 11 mostra o exemplo da Stored Procedure para inserção sendo depurada pelo pgadmin [6,7]. Comparativo A tabela a seguir traz um resumo das principais variáveis discutidas neste artigo e pretende servir como indícios na tomada de decisões de projetos críticos. Essa tabela é uma adaptação do modelo de qualidade em Engenharia de Software proposto por Boehm [10]. Transversais Manutenabilidade Variáveis Desenvolvedores PL/SQL Portabilidade Desempenho Escalabilidade Duplicidade de Código Encapsulamento e Proteção Flexibilidade para Reúso Compreensão do código Tempo de Desenvolvimento Atividades de VV&T Fator de Impacto Figura 11. Depuração com pgadmin. A depuração no pgadmin é fornecida com um plugin que permite visualizar valores para cada tipo de variável que está sendo usada dentro da Stored Procedure através de uma listagem equivalente de uma consulta em SQL. Ao lado direito é exibida uma tela de stack, que mostra a pilha de chamada. Um problema no uso do plugin é que o mesmo vem desabilitado na inicialização do pgadmin, então é necessário adicionar uma linha no arquivo de configuração do pgadmin para habilitar o programa na inicialização, como a configuração do pgadmin com o plugim de depuração está fora do escopo deste artigo, procure consultar os links de referências para obter mais informações. Com o MySQL também é possível efetuar depuração através do MySQL Query Browser. A figura 12 mostra também um exemplo de depuração no MySQL semelhante ao Postgres. Para finalizar, um aspecto importante que deve ser considerado é a deficiência causada para o desenvolvimento orientado a testes TDD (Test-Driven-Development) quando se foca no desenvolvimento de Stored Procedures com toda a regra de negócios focada no banco de dados. Nesse caso, abre-se mão de todo o ciclo de desenvolvimento Red-Green-Refactory e a facilidade de frameworks como o JUnit. Figura 12. Depuração com MySQL Query Browser. Esta tabela agrupa as Variáveis e o seu respectivo Fator de Impacto. Cada Fator de Impacto apresenta três categorias possíveis: Baixo, representado pela seta vermelha para baixo ( ), Médio ou Imparcial ilustrado pelo sinal de igual amarelo ( ) e alto com a seta verde ( ). Essa tabela ilustra uma forma de se medir o quanto um sistema desenvolvido com código no banco pode ser influenciado. Neste caso, esses valores foram extraídos a partir do próprio artigo, contudo, esses valores não são fixos e podem ser alterados de projeto para projeto. Considerações finais Este artigo teve como objetivo apresentar algumas das principais medidas para se identificar quando usar código no banco ou na aplicação. O artigo também discutiu a necessidade do uso de SoC na aplicação e também mostrou como implementar casos de teste com JUnit para efetuar teste de integração e unidade para obtenção de tempos de execução para o objeto DAO Referências [1] FOWLER, M.. Domain Logic and SQL. Disponível em < [2] DBUNIT (2010). Site Oficial. Disponível em < [3] TIOBE (2010). Índice de popularidade. Disponível em < [4] GoF (1995) - Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison- Wesley, (1995). ISBN [5] HUSTON, V. Padrões de Projeto. Disponível em< [6] EDB (2010). Edb Debugger. Disponível em < [7] ENTERPRISEDB (2010). Enterprise DB e Postgres. Disponível em < [8] DANDAMUDI, S. P. (2000). Introduction to Assembly Language Programming: From 8086 to Pentium Processors (Undergraduate Texts in Computer Science). Sivarama P. Dandamudi, 2ed. [9] ALUR, D., MALKS, D., CRUPI, J. Core J2EE Patterns, Best Practices and Design Strategies, 2ed. Prentice Hall, 2 ed. (2003). [10] BOEHM, B. W., BROWN, J. R., KASPAR, H., LIPOW, M., MACHLEOD, G. J.. Characteristics of Software Quality (1978) 64

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

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

Persistência e Banco de Dados em Jogos Digitais

Persistência e Banco de Dados em Jogos Digitais Persistência e Banco de Dados em Jogos Digitais Prof. Marcos Francisco Pereira da Silva Especialista em Engenharia de Software Jogos Digitais - Computação Gráfica 1 Agenda Vantagens de usar a abordagem

Leia mais

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária Cascavel Novembro de 2009 Pedro Patitucci Finamore Daniel Bordignon Cassanelli Marco Antonio da Rosa DIAGRAMAS DE CLASSE E SEQUÊNCIA

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 11-1. INTRODUÇÃO TRIGGERS (GATILHOS OU AUTOMATISMOS) Desenvolver uma aplicação para gerenciar os dados significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface, passando

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

Projeto de Banco de Dados

Projeto de Banco de Dados Projeto de Banco de Dados Prof. Marcelo Siedler Objetivos do documento: Apresentar os conceitos de stored procedutes e funções. Exercícios. Referência: http://dev.mysql.com/doc/refman/4.1/pt/stored-procedures.html

Leia mais

Leonardo Gresta Paulino Murta leomurta@gmail.com

Leonardo Gresta Paulino Murta leomurta@gmail.com Leonardo Gresta Paulino Murta leomurta@gmail.com O Que é JDBC? API de acesso a banco de dados relacional do Java Faz uso do driver provido pelo banco de dados Roda SQL (create, insert, update, etc.) no

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC Java Database Connectivity Provê acesso SQL ao banco de dados Principais

Leia mais

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br Programação com acesso a BD Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br 1 Modelos de Dados, Esquemas e Instâncias 2 Modelos de Dados, Esquemas e Instâncias Modelo de dados: Conjunto de conceitos

Leia mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio 32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio

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

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

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

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

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

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido Arquitetura Roteiro Arquitetura Tipos de Arquitetura Centralizado Descentralizado Hibrido Questionário 2 Arquitetura Figura 1: Planta baixa de uma casa 3 Arquitetura Engenharia de Software A arquitetura

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

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

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

Dado: Fatos conhecidos que podem ser registrados e têm um significado implícito. Banco de Dados:

Dado: Fatos conhecidos que podem ser registrados e têm um significado implícito. Banco de Dados: MC536 Introdução Sumário Conceitos preliminares Funcionalidades Características principais Usuários Vantagens do uso de BDs Tendências mais recentes em SGBDs Algumas desvantagens Modelos de dados Classificação

Leia mais

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com SQL Procedural Josino Rodrigues Neto josinon@gmail.com SQL Procedural Agregada em SQL-92 As ferramentas têm nomes para suas linguagens SQL procedurais/embutidas Oracle : PL/SQL Postgres PL/Pgsql SQL Server

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

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

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

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL Prof. Ms. Luiz Alberto Contato: lasf.bel@gmail.com Linguagem de Programação de Banco de Dados Triggers em PostgreSQL Todos os bancos de dados comerciais possuem uma linguagem procedural auxiliar para a

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

Rotina de Discovery e Inventário

Rotina de Discovery e Inventário 16/08/2013 Rotina de Discovery e Inventário Fornece orientações necessárias para testar a rotina de Discovery e Inventário. Versão 1.0 01/12/2014 Visão Resumida Data Criação 01/12/2014 Versão Documento

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

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

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

2 Desenvolvimento de Software Orientado a Aspectos

2 Desenvolvimento de Software Orientado a Aspectos 2 Desenvolvimento de Software Orientado a Aspectos Separação de concerns é um princípio bem estabelecido da engenharia de software que diz que, para se dominar a complexidade do desenvolvimento de software,

Leia mais

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013

QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 QUESTINAMENTOS AO EDITAL DE CONCORRÊNCIA 01/2013 Prezados Senhores da comissão de licitação da UENF, seguem alguns questionamentos acerca do edital de concorrência 01/2013 para esclarecimentos: 1. ANEXO

Leia mais

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Sobre entidades externas ao sistema Quais sistemas externos devem ser acessados? Como serão acessados? Há integração com o legado a ser feita?

Leia mais

Disciplina: Unidade V: Prof.: E-mail: Período:

Disciplina: Unidade V: Prof.: E-mail: Período: Encontro 17 Disciplina: Sistemas de Banco de Dados Unidade V: Introdução à Linguagem SQL Prof.: Mario Filho E-mail: pro@mariofilho.com.br Período: 5º. SIG - ADM 13. Introdução à Linguagem SQL Introdução

Leia mais

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser A1Criando um módulo de negócio Capítulo 27 Aplicação dividida em módulos - Introdução Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser compreendido como uma solução de

Leia mais

Banco de Dados. Maurício Edgar Stivanello

Banco de Dados. Maurício Edgar Stivanello Banco de Dados Maurício Edgar Stivanello Agenda Conceitos Básicos SGBD Projeto de Banco de Dados SQL Ferramentas Exemplo Dado e Informação Dado Fato do mundo real que está registrado e possui um significado

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

Padrões de projeto 1

Padrões de projeto 1 Padrões de projeto 1 Design Orientado Objeto Encapsulamento Herança Polimorfismo Design Patterns 2 Responsabilidades Booch e Rumbaugh Responsabilidade é um contrato ou obrigação de um tipo ou classe. Dois

Leia mais

USANDO O IZCODE PARA GERAR SOFTWARE RAPIDAMENTE

USANDO O IZCODE PARA GERAR SOFTWARE RAPIDAMENTE USANDO O IZCODE PARA GERAR SOFTWARE RAPIDAMENTE SUMÁRIO usando o izcode... 1 para gerar software rapidamente... 1 introdução... 2 o que é o izcode?... 2 Como funciona o izcode?... 2 os tipos diferentes

Leia mais

Java na WEB Banco de Dados

Java na WEB Banco de Dados 1 Java na WEB Banco de Dados Objetivo: Ao final da aula o aluno será capaz de: Criar aplicações JSP com acesso ao Banco de Dados MySql Configurar o TomCat para acessar o MySql. Não é Objetivo: Ao final

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

PL/pgSQL por Diversão e Lucro

PL/pgSQL por Diversão e Lucro PL/pgSQL por Diversão e Lucro Roberto Mello 3a. Conferência Brasileira de PostgreSQL - PGCon-BR Campinas - 2009 1 Objetivos Apresentar as partes principais do PL/pgSQL Apresentar casos de uso comum do

Leia mais

1 http://www.google.com

1 http://www.google.com 1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou

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

Fábrica de Software 29/04/2015

Fábrica de Software 29/04/2015 Fábrica de Software 29/04/2015 Crise do Software Fábrica de Software Analogias costumam ser usadas para tentar entender melhor algo ou alguma coisa. A idéia é simples: compara-se o conceito que não se

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. JDBC CRIANDO O BANCO DE DADOS: Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. CRIANDO O PROJETO JAVA PARA DESKTOP: Crie um projeto Java chamado Prograd Crie um pacote chamado

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

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com)

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com) JDBC Prof. Márcio Bueno (poonoite@marciobueno.com) JBDC Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que faz o envio de instruções SQL para qualquer banco

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

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

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 02 Análise e Projeto OO Edirlei Soares de Lima Análise A análise modela o problema e consiste das atividades necessárias para entender

Leia mais

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Structured Query Language (SQL) Ambiente Simplificado de um SGBD Structured Query Language (SQL) Ambiente Simplificado de um SGBD 2 1 Características dos SGBDs Natureza auto-contida de um sistema de banco de dados: metadados armazenados num catálogo ou dicionário de

Leia mais

Transações Seguras em Bancos de Dados (MySQL)

Transações Seguras em Bancos de Dados (MySQL) Transações Seguras em Bancos de Dados (MySQL) Índice Entendendo os storage engines do MySQL 5 1 As ferramentas 1 Mais algumas coisas que você deve saber 1 Com a mão na massa 2 Mais ferramentas Usando o

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

SQL. Curso Prático. Celso Henrique Poderoso de Oliveira. Novatec

SQL. Curso Prático. Celso Henrique Poderoso de Oliveira. Novatec SQL Curso Prático Celso Henrique Poderoso de Oliveira Novatec 1 Introdução Desde o início da utilização dos computadores, sabemos que um sistema é feito para aceitar entrada de dados, realizar processamentos

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

Padrões de Projeto e Persistência com DAO

Padrões de Projeto e Persistência com DAO Curso de Análise de Sistemas Análise de Sistemas II Padrões de Projeto e Persistência com DAO Prof. Giuliano Prado de Morais Giglio, M.Sc. Introdução a Padrões de Projeto Padrões de Projeto foram inicialmente

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

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

Bancos de Dados I. Integridade semântica

Bancos de Dados I. Integridade semântica Bancos de Dados I PUC-Rio Departamento de Informática (DI) Eng./Ciência da Computação e Sist. Informação Contrôle de Integridade em SGBDs: procedimentos armazenados, gatilhos e funções Prof. sergio@inf.puc-rio.br

Leia mais

Banco de Dados. Prof. Leonardo Barreto Campos 1

Banco de Dados. Prof. Leonardo Barreto Campos 1 Banco de Dados Prof. Leonardo Barreto Campos 1 Sumário Introdução; Banco de Dados Relacionais; SQL; MySQL; Manipulando Banco de Dados com o JDBC; Bibliografia; Prof. Leonardo Barreto Campos 2/25 Introdução

Leia mais

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada Revisão de tpicos anteriores BANCO DE DADOS Linguagem de consulta SQL Roberto Duarte Fontes Brasília - DF roberto@fontes.pro.br Projeto de banco de dados Modelagem Conceitual (independe da implementação)

Leia mais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Programação Servidor para Sistemas Web 1 Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Objetivo: Apresentar a teoria por trás dos padrões na construção de aplicações Web. INTRODUÇÃO Nas aulas anteriores

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

MANUAL INSTALAÇÃO WEB SERVICE

MANUAL INSTALAÇÃO WEB SERVICE MANUAL INSTALAÇÃO WEB SERVICE Recebimento de dados pelo Hospital Versão 1.1 2/9/2014 Contato suporte@gtplan.com.br Índice Introdução... 2 Requerimentos para instalação do Web Service... 2 Instalação...

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

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia Sistemas de Informação Ling.Prog.V Prof. Roberto Couto Lima Fonte: Curso Java Prof. Fabricio Leonard Leopoldino (Universo)

Leia mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos técnicos do desenvolvimento baseado em componentes Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos

Leia mais

Documento de Projeto de Sistema

Documento de Projeto de Sistema Documento de Projeto de Sistema 1 IFES / Serra Projeto: Gerenciador de Pelada - Oasis Registro de Alterações: Versão Responsável Data Alterações 0.1 Eduardo Rigamonte, Geann Valfré, João Paulo Miranda,

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

Leia mais

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB) RELATÓRIO DE ENTREGA DO PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB) PARA A ELABORAÇÃO DOS PLANOS MUNICIPAIS DE GESTÃO INTEGRADA DE RESÍDUOS SÓLIDOS PMGIRS PARA OS MUNICÍPIOS DE NOVO HORIZONTE, JUPIÁ, GALVÃO,

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

Integração de sistemas utilizando Web Services do tipo REST

Integração de sistemas utilizando Web Services do tipo REST Integração de sistemas utilizando Web Services do tipo REST Jhonatan Wilson Aparecido Garbo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil jhowgarbo@gmail.com jaime@unipar.br

Leia mais

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

Agenda da Aula. Resumo dos Padrões (Aula 4) Padrões Arquiteturais. Arquitetura Cliente-Servidor. Arquitetura Cliente-Servidor

Agenda da Aula. Resumo dos Padrões (Aula 4) Padrões Arquiteturais. Arquitetura Cliente-Servidor. Arquitetura Cliente-Servidor Reuso de Software Aula 05 Agenda da Aula Linha de Produtos de Software Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo reuso.software@gmail.com 19 Março 2012 Padrões arquiteturais Cliente-Servidor

Leia mais

Comparativo de desempenho do Pervasive PSQL v11

Comparativo de desempenho do Pervasive PSQL v11 Comparativo de desempenho do Pervasive PSQL v11 Um artigo Pervasive PSQL Setembro de 2010 Conteúdo Resumo executivo... 3 O impacto das novas arquiteturas de hardware nos aplicativos... 3 O projeto do Pervasive

Leia mais

MULTIACERVO - VERSÃO 18.* MANUAL PARA CONVERSÃO DA VERSÃO 17.* PARA 18.*

MULTIACERVO - VERSÃO 18.* MANUAL PARA CONVERSÃO DA VERSÃO 17.* PARA 18.* MULTIACERVO - VERSÃO 18.* MANUAL PARA CONVERSÃO DA VERSÃO 17.* PARA 18.* CONTEÚDO: A) Procedimentos comuns para todas as arquiteturas B) Procedimentos exclusivos arquitetura com sgbd MS-SQL-SERVER C) Procedimentos

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

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados.

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados. BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos alexandre.matos@udesc.br INTRODUÇÃO Hoje é

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

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

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Introdução à Banco de Dados. Nathalia Sautchuk Patrício Introdução à Banco de Dados Nathalia Sautchuk Patrício Histórico Início da computação: dados guardados em arquivos de texto Problemas nesse modelo: redundância não-controlada de dados aplicações devem

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Introdução Projeto de Arquitetura (Cap 11 - Sommerville) UNIVERSIDADE FEDERAL DE ALAGOAS Curso de Ciência da Computação Engenharia de Software I Prof. Rômulo Nunes de Oliveira Até agora, estudamos: Os

Leia mais

Sistemas de Informação

Sistemas de Informação Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07 Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK

Leia mais

Google Drive. Passos. Configurando o Google Drive

Google Drive. Passos. Configurando o Google Drive Google Drive um sistema de armazenagem de arquivos ligado à sua conta Google e acessível via Internet, desta forma você pode acessar seus arquivos a partir de qualquer dispositivo que tenha acesso à Internet.

Leia mais

Struts 2 : Projeto e Programação Editora: Ciência Moderna Autor: Antunes Budi Kurniawan Número de páginas: 600

Struts 2 : Projeto e Programação Editora: Ciência Moderna Autor: Antunes Budi Kurniawan Número de páginas: 600 Objetivo Com enfoque totalmente prático permite que programadores Java possam ampliar seus conhecimentos no mundo Web na criação de sistemas profissionais. Utilizar os modelos de programação com Servlets,

Leia mais

Comandos de Manipulação

Comandos de Manipulação SQL - Avançado Inserção de dados; Atualização de dados; Remoção de dados; Projeção; Seleção; Junções; Operadores: aritméticos, de comparação,de agregação e lógicos; Outros comandos relacionados. SQL SQL

Leia mais

VIRTUALIZAÇÃO CONVENCIONAL

VIRTUALIZAÇÃO CONVENCIONAL VIRTUALIZAÇÃO CONVENCIONAL Sera usado o VirtualBox 5.0.8 a versão mais atual e estável da aplicação, para virtualização de um sistema Linux sobre a plataforma Windows. Para esse modelo pratico de virtualização

Leia mais

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

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc. MODELAGEM DE DADOS PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS Aula 2 Prof. Rafael Dias Ribeiro. M.Sc. @ribeirord 1 Objetivos: Revisão sobre Banco de Dados e SGBDs Aprender as principais

Leia mais

Eduardo Bezerra. Editora Campus/Elsevier

Eduardo Bezerra. Editora Campus/Elsevier Princípios de Análise e Projeto de Sistemas com UML 2ª edição Eduardo Bezerra Editora Campus/Elsevier Capítulo 11 Arquitetura do sistema Nada que é visto, é visto de uma vez e por completo. --EUCLIDES

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

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA RESUMO DE AULA CRIAÇÃO E MANIPULAÇÃO DO BANCO DE DADOS

Leia mais

UML - Unified Modeling Language

UML - Unified Modeling Language UML - Unified Modeling Language Casos de Uso Marcio E. F. Maia Disciplina: Engenharia de Software Professora: Rossana M. C. Andrade Curso: Ciências da Computação Universidade Federal do Ceará 24 de abril

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

Leia mais