• Home
  • Chat IA
  • Guru IA
  • Tutores
  • Central de ajuda
Home
Chat IA
Guru IA
Tutores

·

Sistemas de Informação ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Desenv e Configuração de um Ambiente de Rede Controlado e Monitorado Linux

14

Desenv e Configuração de um Ambiente de Rede Controlado e Monitorado Linux

Linguagens de Programação

UNIP

APS I - Criptografia: Conceitos, Aplicações e Uso em Restrição de Acesso a Area Contaminada

1

APS I - Criptografia: Conceitos, Aplicações e Uso em Restrição de Acesso a Area Contaminada

Linguagens de Programação

UNIP

Programa Java para Gerenciamento de Produtos de Mini Mercado - Lista de Exercícios

1

Programa Java para Gerenciamento de Produtos de Mini Mercado - Lista de Exercícios

Linguagens de Programação

ESPM

APS - Desenvolvimento de Aplicacao de Business Intelligence para ONG - WORLD SURVIVE

43

APS - Desenvolvimento de Aplicacao de Business Intelligence para ONG - WORLD SURVIVE

Linguagens de Programação

FMU

Programa Java Gerenciamento de Produtos Mini Mercado - Cadastro Pesquisa Listagem Exclusao

2

Programa Java Gerenciamento de Produtos Mini Mercado - Cadastro Pesquisa Listagem Exclusao

Linguagens de Programação

ESPM

API-Rest-Doacoes-Listagem-e-Cadastro-de-Doacoes

1

API-Rest-Doacoes-Listagem-e-Cadastro-de-Doacoes

Linguagens de Programação

UMG

Resolução de Exercícios Google Colab - Link Compartilhado

1

Resolução de Exercícios Google Colab - Link Compartilhado

Linguagens de Programação

UMG

Prova AB1 Estrutura de Dados C - Teoria e Prática

3

Prova AB1 Estrutura de Dados C - Teoria e Prática

Linguagens de Programação

UFAL

Programação Orientada a Objetos

4

Programação Orientada a Objetos

Linguagens de Programação

UNEX

EP1: Problema do Caixeiro Viajante - Documentação e Implementação

20

EP1: Problema do Caixeiro Viajante - Documentação e Implementação

Linguagens de Programação

CEUN-IMT

Texto de pré-visualização

3º4º SEMESTRE CIÊNCIA DA COMPUTAÇÃO SISTEMAS DE INFORMAÇÃO ORIENTAÇÕES PARA A DISCIPLINA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS 2021 ALPOO ATIVIDADES PRÁTICAS SUPERVISIONADAS APS I TEMA DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE BIBLIOTECA II PROPOSTA DO TRABALHO As Atividades Práticas Supervisionadas serão constituídas pelos seguintes tópicos 1 O grupo deverá desenvolver um sistema para gerenciamento da livraria Amazônia responsável por divulgar artigos científicos e livros relacionados à ciência e ao meio ambiente 2 O grupo deverá usar a linguagem Java e o banco de dados PostgreSQL Para fazer a interface deve ser usado o padrão MVC com as bibliotecas AWT e SWING Para fazer a conexão com o banco de dados deve ser usado o padrão DAO com a biblioteca JDBC 3 A organização do Banco de Dados é dada pela seguinte tabela As tabelas podem ser geradas pelos seguintes códigos a CREATE TABLE Authors authorid SERIAL PRIMARY KEY name CHAR25 fname CHAR25 b CREATE TABLE Publishers publisherid SERIAL PRIMARY KEY name CHAR30 url CHAR80 c CREATE TABLE Books title CHAR60 isbn CHAR13 PRIMARY KEY publisherid INT price DECIMAL102 FOREIGN KEY publisherid REFERENCES Publishers publisherid d CREATE TABLE BooksAuthors isbn CHAR13 authorid INT seqno INT FOREIGN KEY isbn REFERENCES Books isbn FOREIGN KEY authorid REFERENCES Authors authorid PRIMARY KEY isbn authorid 4 O mínimo de operações esperadas para o sistema são em ordem de importância a Listar e mostrar através de um sistema de busca Livros Autores e Editoras b Incluir Livros Autores e Editoras c Modificar Livros Autores e Editoras d Excluir Livros Autores e Editoras 5 É esperado que o sistema tenha um controle de erros para solicitações e tentativas de ataque do usuário final 6 O grupo deverá escrever uma monografia sobre os aspectos teóricos que envolvem o projeto bem como sobre todos os assuntos relativos ao desenvolvimento do sistema computacional A estrutura básica da monografia é apresentada abaixo a Introdução deve conter uma breve descrição a respeito dos padrões MVC e DAO bibliotecas ex Swing JDBC e ferramentas ex Hibernate usados b Referencial Teórico deve apresentar e explicar os algoritmos e classes usadas no processamento de dados As referências bibliográficas utilizadas nessa seção serão avaliadas e terão impacto na nota final do trabalho c Desenvolvimento deve descrever todos os estágios do processo de desenvolvimento do sistema computacional Deverão ser abordados os seguintes tópicos Processo de acesso aos dados processo de visualização dos dados d Resultados e Discussão deve apresentar um conjunto de testes envolvendo as técnicas implementadas Nestes testes o grupo deverá demonstrar a imagens do programa funcionando É fundamental que a estrutura do programa seja apresentada em forma de diagrama de identificar as vantagens e desvantagens de cada padrão de projeto usado e Considerações Finais deve apresentar as considerações do grupo a respeito das técnicas escolhidas bem como sobre os resultados obtidos f Referências Bibliográficas deve conter todas as referências utilizadas para escrita e desenvolvimento do projeto g Código Fonte deve apresentar todo o código fonte do projeto desenvolvido 7 O nível de refinamento tratamento de erros assim como a complexidade das técnicas de ordenação escolhidas terão impacto direto na nota final deste trabalho Novas funcionalidades poderão ser implementadas neste sistema desde que relacionadas ao tema abordado 8 A nota atribuída ao trabalho entregue configura a nota das APS III APRESENTAÇÃO DO TRABALHO 1 O grupo deverá ser composto de no máximo 5 alunos 2 Todas as etapas do trabalho deverão ser escritas em fonte ARIAL 12 espaçamento 15 margem direita 25 cm e margem esquerda 25 cm O trabalho deverá ter formato A4 3 Limites de páginas Introdução 2 páginas e no máximo 4 páginas Referencial Teórico 3 páginas e no máximo 5 páginas Desenvolvimento mínimo de 10 páginas e máximo de 15 páginas Resultados e Discussão mínimo de 6 páginas e máximo de 10 páginas Considerações Finais mínimo de 1 página e máximo de 3 páginas Referências Bibliográficas mínimo 2 páginas Código Fonte não há limite 4 O trabalho junto com a ficha padrão de Atividades Práticas Supervisionadas de cada integrante do grupo ilustrando cronologicamente cada um dos itens desenvolvidos IV Estrutura do trabalho 41Capa identificando o curso o tema a relação de alunos do grupo nomeRA 42Índice 43Objetivo do trabalho 44Introdução 45Referencial Teórico 46Desenvolvimento 47Resultados e Discussão 48Considerações Finais 49 Referências Bibliográficas 410 Código fonte 411 Fichas de Atividades Práticas Supervisionadas individuais descrevendo os passos do trabalho e totalizando 75 horasaluno para alunos com ingresso posterior à 012019 ou 80 horasaluno para alunos com ingresso anterior à 012019 V PRAZOS Envio dos trabalhos até 20052021 via email higordelsotodocenteunipbr Os arquivos devem ser enviados separadamente trabalho ficha VI MODELO DE FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS FICHA DAS ATIVIDADES PRÁTICAS SUPERVISIONADAS APS NOMETURMARA CURSOCAMPUSSEMESTRETURNO CÓDIGO DA ATIVIDADESEMESTREANO GRADE DATA DA ATIVIDADE DESCRIÇÃO DA ATIVIDADE TOTAL DE HORAS ASSINATURA DO ALUNO HORAS ATRIBUÍDAS 1 ASSINATURA DO PROFESSOR 1 Horas atribuídas de acordo com o regulamento das Atividades Práticas Supervisionadas do curso TOTAL DE HORAS ATRIBUÍDAS AVALIAÇÃO Aprovado ou Reprovado NOTA DATA CARIMBO E ASSINATURA DO COORDENADOR DO CURSO Sistema de Gerenciamento da Livraria Amazônia Lucas de Mattos Aragão RA N4197A6 April 30 2025 Contents 1 Introdução 4 2 Referencial Teórico 6 21 Padrão ModelViewController MVC 6 22 Padrão Data Access Object DAO 7 23 Java Database Connectivity JDBC e PostgreSQL 7 24 Frameworks Swing e AWT 8 25 Testes Automatizados com JUnit 5 8 26 Gerenciamento de Dependências e Build com Maven 9 3 Desenvolvimento e Implementação Detalhada 10 31 1 Estrutura de Pastas 10 32 2 Configuração do Build e Dependências 11 33 3 Modelagem do Banco de Dados 13 34 4 Camada Utilitária utilDBConnectionjava 14 35 5 Camada Model 15 36 6 Camada DAO JDBC Puro 15 37 7 Camada Controller 16 38 8 Camada View 18 39 9 Operações de Consulta e Filtros Avançados 19 310 10 Tratamento de Erros Logs e Segurança 20 311 11 Testes Unitários e de Integração 20 312 Análise dos Resultados das Consultas 21 313 Análise dos Resultados das Consultas 25 4 Considerações Finais 26 5 Referências Bibliográficas 28 6 CódigosFonte Completos 30 61 comamazoniautilDBConnectionjava 30 62 comamazoniamodelBookjava 30 63 comamazoniamodelAuthorjava 31 64 comamazoniamodelPublisherjava 31 65 comamazoniadaoGenericDAOjava 32 66 comamazoniadaoimplBookDAOImpljava 32 67 comamazoniacontrollerBookControllerjava 34 68 comamazoniaMainAppjava 35 69 comamazoniaviewMainFramejava 35 1 610 comamazoniaviewBookPaneljava 36 2 Objetivo do Trabalho Este trabalho tem como meta descrever de forma abrangente o processo de con cepção desenvolvimento validação e avaliação de desempenho de um sistema desk top para gerenciamento integrado de acervos bibliográficos desenvolvido em Java Swing São objetivos específicos Projetar uma arquitetura modular baseada nos padrões ModelViewController MVC e Data Access Object DAO garantindo baixo acoplamento e alta co esão entre os componentes Implementar funcionalidades completas de CRUD para as entidades Book Au thor e Publisher assegurando consistência e integridade dos dados Estabelecer persistência confiável em PostgreSQL utilizando PreparedStatement para proteger contra injeção de SQL e otimizar performance por meio de planos de execução précompilados Validar a lógica de negócio e as operações de acesso a dados por meio de testes automatizados com JUnit 5 alcançando cobertura de testes superior a 80 Gerenciar o ciclo de vida de build empacotamento e dependências usando Apache Maven permitindo versões reproduzíveis e deploy simplificado Além disso apresento tambem Análise de usabilidade da interface gráfica baseada em métricas de tempo de tarefa e satisfação do usuário Estratégias de tratamento de erros logs e validações de dados para reforçar a robustez da aplicação Resultados de benchmarks de desempenho em operações de consulta inserção e atualização avaliadas com JMH Discussão de propostas de evolução tais como migração para arquitetura web Spring Boot React adoção de pools de conexão HikariCP e incorporação de ORMs HibernateJPA 3 1 Introdução A gestão de acervos bibliográficos está em constante transformação impulsionada pelo crescimento exponencial de publicações acadêmicas e profissionais além da de manda por acesso rápido e confiável a informações Em bibliotecas universitárias públicas e livrarias especializadas o aumento no volume de itens acentuou desafios como duplicidade de registros divergências na classificação temática e dificuldade em acompanhar o ciclo de vida dos exemplares aquisição empréstimo descarte Pesquisas na área de sistemas de informação destacam que a automação parcial baseada em planilhas ou software genérico não é suficiente para garantir escalabili dade consistência e usabilidade adequadas ao dia a dia de bibliotecários e gestores de acervos Gamma1994 Fowler2003 Além disso o uso de múltiplas soluções pontuais costuma gerar silos de dados e retrabalho uma vez que cada plataforma possui formatos próprios de importação e exportação Isso dificulta a integração com outros serviços como catálogos federa dos sistemas de empréstimo interbibliotecas e relatórios estatísticos para tomada de decisão O cenário nacional brasileiro especialmente em regiões de menor investi mento tecnológico evidencia a necessidade de soluções acessíveis leves e de fácil manutenção capazes de operar em ambientes desktop sem dependências complexas de infraestrutura O projeto Amazônia nasce nesse contexto propondo o desenvolvimento de um aplicativo desktop em Java Swing que concentra numa única interface todas as ativi dades críticas de gerenciamento de livros autores e editoras A escolha da tecnologia Java Swing justificase por sua maturidade portabilidade multiplataforma e amplo su porte a componentes gráficos personalizáveis permitindo a construção de interfaces responsivas mesmo em máquinas com recursos limitados Dentre os principais desafios enfrentados destacamse Normalização do modelo de dados Como representar entidades e relaciona mentos muitosparamuitos por exemplo um livro pode ter múltiplos autores assegurando integridade sem redundância Desempenho de consultas Otimizar operações de busca e listagem em tabelas potencialmente grandes garantindo tempos de resposta inferiores a 100 ms em datasets de até 10000 registros Segurança e robustez Proteger a aplicação contra ataques de injeção de SQL e falhas de transação adotando padrões de acesso e tratamento de exceções Usabilidade Construir fluxos de trabalho intuitivos com validações em tempo real e mensagens de erro claras reduzindo a curva de aprendizado para usuários 4 sem background em TI Manutenção e escalabilidade Estruturar o código seguindo os princípios SOLID e padrões de projeto MVC DAO facilitando futuras evoluções como migração para arquitetura web ou adoção de ORMs Para atender a esses desafios o Amazônia incorpora as seguintes estratégias 1 Modelagem relacional normalizada até a 3ª Forma Normal em PostgreSQL com índices nos campos de busca 2 Implementação de camada de persistência com PreparedStatement e controle de transações via JDBC 3 Arquitetura modular MVCDAO separando claramente responsabilidades de in terface lógica de negócio e acesso a dados 4 Testes automatizados com JUnit 5 e geração de relatórios de cobertura com JaCoCo 5 Empacotamento e gerenciamento de dependências com Maven permitindo builds reproduzíveis e simples deploy em diferentes ambientes Deixei o documento organizado da seguinte forma No Referencial Teórico apresentamos os conceitos de padrões de projeto ban cos de dados relacionais e frameworks Java usados como base do sistema Na seção de Desenvolvimento e Implementação detalhamos a estrutura de pastas configuração de build scripts de banco de dados e códigofonte das camadas Model DAO Controller e View Em Resultados e Discussão trazemos métricas de desempenho benchmarks JMH análises de usabilidade e validações de consistência Na Análise dos Resultados das Consultas examinamos em detalhe os efeitos das operações CRUD sob diferentes cenários Por fim em Considerações Finais e Trabalhos Futuros sintetizamos as con tribuições do projeto e apresentamos direções para evoluções incluindo adoção de ORMs migração para web e geração de relatórios dinâmicos 5 2 Referencial Teórico Nesta seção apresentamos em profundidade os fundamentos teóricos padrões de projeto e tecnologias que embasaram o desenvolvimento do sistema Amazônia Dis cutimos motivações históricas vantagens desvantagens e alternativas de cada abor dagem garantindo um entendimento claro dos tradeoffs adotados 21 Padrão ModelViewController MVC Origem e Motivação O MVC foi proposto por Trygve Reenskaug em 1979 no con texto de Smalltalk79 como forma de organizar a lógica de aplicações interativas A separação em três componentes Model View Controller surgiu da necessidade de isolar Model armazena estado e regras de negócio independente de como é apre sentado View renderiza o Model para o usuário podendo existir várias Views para o mesmo Model Controller recebe ações do usuário teclado mouse interpreta eventos e atu aliza Model e View Vantagens Baixo acoplamento UI e lógica de negócio evoluem de forma independente Alta coesão cada componente faz apenas sua função facilitando manutenção Testabilidade Model e Controller podem ser testados sem dependências visuais Reutilização de Views múltiplas representações GUI web API REST podem compartilhar o mesmo Model Implementação em Java Swing No Swing o padrão MVC se reflete em estruturas como JTable onde TableModel Model armazena dados e notifica alterações JTable View renderiza células e colunas TableColumnModel e ListSelectionModel Controllers auxiliares capturam seleções e eventos de interação Em Amazônia cada painel BookPanel AuthorPanel PublisherPanel atua como View delegando ações ao Controller correspondente 6 22 Padrão Data Access Object DAO Conceito e Estrutura O DAO formalizado por Fowler define uma interface de acesso a dados que abstrai operações CRUD A estrutura típica envolve GenericDAOTK interface genérica com métodos findByIdK findAll insertT updateT deleteK EntityDAOImpl classe concreta que implementa GenericDAO para cada enti dade Benefícios Desacoplamento lógica de negócio ignora detalhes de SQL Extensibilidade novos métodos podem ser adicionados buscas por critérios Troca de tecnologia fácil migração de JDBC para frameworks ORM Hibernate JPA DAO no Projeto Cada implementação DAO em Amazônia utiliza PreparedStatement para prevenir injeções de SQL e permitir parametrização seguindo o princípio de re sponsabilidade única 23 Java Database Connectivity JDBC e PostgreSQL Arquitetura JDBC O JDBC define camadas DriverManager gerencia drivers instalados Connection representa sessão com o banco StatementPreparedStatement envio de comandos SQL ResultSet leitura de resultados Transações e Integridade Utilizamos setAutoCommitfalse e commitrollback para Assegurar atomicidade em operações que envolvem múltiplas tabelas por ex emplo inserção em Books e BooksAuthors Evitar inconsistências em falhas intermediárias 7 Escolha do PostgreSQL PostgreSQL foi selecionado por Suporte a padrões SQL avançados CTEs funções agregadas customizadas Performance comprovada em cenários OLTP Extensões PostGIS JSONB que permitem futuras evoluções 24 Frameworks Swing e AWT AWT vs Swing AWT provê classes de baixo nível Component Container e ponte entre Java e API nativa Swing por sua vez implementa componentes leves lightweight escritos em Java puro garantindo Aparência consistente entre plataformas Maior flexibilidade de customização Componentes Utilizados JFrame janela principal JTabbedPane organização em abas JTable exibição tabular dinâmica JButton JTextField JOptionPane interações simples Gerenciadores de layout BorderLayout GridBagLayout para responsividade 25 Testes Automatizados com JUnit 5 Arquitetura Jupiter JUnit 5 introduz módulos distintos Jupiter Vintage Platform No Amazônia Jupiter API usada para escrever testes modernos com anotações como Test DisplayName Engine executa testes e reporta resultados Boas Práticas Uso de BeforeEach e AfterEach para preparar e limpar estado do banco Assertivas claras assertEquals assertThrows para verificar comportamento esperado Integração com JaCoCo para medir cobertura e gerar relatórios automáticos 8 26 Gerenciamento de Dependências e Build com Maven Ciclo de Vida de Build Maven divide o processo em fases validate compile test package verify install e deploy No projeto mvn test executa JUnit e gera relatórios mvn package empacota JAR executável com o mavenjarplugin Perfis dev prod ajustam configurações nível de logging parâmetros de conexão Plugins e Relatórios mavencompilerplugin define versão Java 17 jacocomavenplugin coleta métricas de cobertura mavencheckstyleplugin e mavenpmdplugin validam padrões de código 9 3 Desenvolvimento e Implementação Detalhada Nesta seção detalhamos exaustivamente cada etapa do desenvolvimento do sistema Amazônia desde a organização do projeto até a implementação dos componentes de consulta inserção atualização e deleção de dados 31 1 Estrutura de Pastas A organização do repositório segue o padrão Maven e reflete a separação de respon sabilidades em camadas 1 AmazoniaBookstore 2 pomxml C o n f i g u r a o do build e d e p e n d n c i a s 3 READMEmd I n s t r u e s de i n s t a l a o e uso 4 src 5 main 6 java 7 comamazonia 8 controller L g i c a de o r q u e s t r a o e regras de n e g c i o 9 dao D e f i n i o de interfaces de acesso a dados 10 impl I m p l e m e n t a e s JDBC dos DAOs 11 model Classes de d o m n i o Book Author Publisher 12 util U t i l i t r i o s compartilhados DBConnection 13 view SwingAWT telas p a i n i s e componentes 14 resources 15 db 16 schemasql Script de c r i a o do banco de dados 17 messagesproperties Mensagens de interface i18n future proof 18 test 19 java 20 comamazonia Testes u n i t r i o s JUnit para DAO e Controller 10 Listing 1 Estrutura de diretórios completa Justificativas controllerdaomodelview implementação clara do padrão MVC daoimpl implementação do padrão DAO facilitando futuras trocas de tecnolo gia util abstração de conexões log e tratamento de exceções centralizado resourcesdb isolamento de scripts SQL permitindo versionamento separado do código Java 32 2 Configuração do Build e Dependências O pomxml gerencia todas as bibliotecas e plugins necessários 1 project 2 properties 3 mavencompilersource 17mavencompilersource 4 mavencompilertarget 17mavencompilertarget 5 properties 6 7 dependencies 8 Driver JDBC para PostgreSQL 9 dependency 10 groupId orgpostgresql groupId 11 artifactId postgresql artifactId 12 version 4273 version 13 dependency 14 JUnit 5 para testes u n i t r i o s 15 dependency 16 groupId orgjunitjupiter groupId 17 artifactId junit jupiter artifactId 18 version 5102 version 19 scope test scope 20 dependency 21 dependencies 22 23 build 11 24 plugins 25 Compila com Java 17 26 plugin 27 groupId orgapachemavenplugins groupId 28 artifactId maven compiler plugin artifactId 29 version 3110 version 30 plugin 31 Empacotamento em JAR e x e c u t v e l 32 plugin 33 groupId orgapachemavenplugins groupId 34 artifactId maven jar plugin artifactId 35 version 330 version 36 configuration 37 archive 38 manifest 39 mainClass comamazoniaMainApp mainClass 40 manifest 41 archive 42 configuration 43 plugin 44 R e l a t r i o s de cobertura de testes 45 plugin 46 groupId orgjacoco groupId 47 artifactId jacoco maven plugin artifactId 48 version 088 version 49 executions 50 execution 51 goals goal prepare agent goal goals 52 execution 53 execution 54 idreport id 55 phase verify phase 56 goals goal report goal goals 57 execution 58 executions 59 plugin 60 plugins 61 build 62 project Listing 2 pomxml principais trechos 12 Discussão O Jacoco foi adicionado para garantir cobertura de testes superior a 80 33 3 Modelagem do Banco de Dados O script schemasql estabelece tabelas normalizadas e índices 1 C r i a o da base 2 CREATE DATABASE amazonia 3 c amazonia 4 5 Tabela de autores 6 CREATE TABLE Authors 7 authorid SERIAL PRIMARY KEY 8 name VARCHAR 100 NOT NULL 9 fname VARCHAR 100 NOT NULL 10 biography TEXT 11 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 12 13 14 Tabela de editoras 15 CREATE TABLE Publishers 16 publisherid SERIAL PRIMARY KEY 17 name VARCHAR 100 NOT NULL UNIQUE 18 url VARCHAR 200 19 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 20 21 22 Tabela de livros 23 CREATE TABLE Books 24 isbn CHAR 13 PRIMARY KEY 25 title VARCHAR 150 NOT NULL 26 publisherid INT REFERENCES Publisherspublisherid ON DELETE CASCADE 27 price NUMERIC 10 2 CHECK price 0 28 publisheddate DATE 29 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 30 31 32 Tabela associativa muitos para muitos 33 CREATE TABLE BooksAuthors 34 isbn CHAR 13 REFERENCES Booksisbn ON DELETE CASCADE 35 authorid INT REFERENCES Authorsauthorid ON DELETE CASCADE 13 36 seqno SMALLINT 37 PRIMARY KEYisbn authorid 38 39 40 ndices para performance 41 CREATE INDEX idxbookstitle ON Bookstitle 42 CREATE INDEX idxauthorsname ON Authorsname Listing 3 schemasql completo Explicações ON DELETE CASCADE simplifica remoção em cascata preservando integridade Índices em title e name aceleram buscas por palavrachave Colunas createdat permitemauditoriaderegistros 34 4 Camada Utilitária utilDBConnectionjava 1 package comamazoniautil 2 3 import javasqlConnection 4 import javasqlDriverManager 5 import javasqlSQLException 6 7 public final class DBConnection 8 private static final String URL 9 jdbcpostgresql localhost 5432 amazonia 10 private static final String USER postgres 11 private static final String PASS suasenha 12 13 Evita i n s t a n c i a o 14 private DBConnection 15 16 public static Connection getConnection throws SQLException 17 return DriverManagergetConnectionURL USER PASS 18 19 Listing 4 DBConnectionjava completo 14 Discussion Points Poderíamos substituir futuramente por um pool de conexões HikariCP para mel hor escalabilidade Tratamento de exceções pode ser enriquecido com logs via SLF4J 35 5 Camada Model Cada entidade de domínio encapsula campos e validações Bookjava valida ISBN regex d13 preço nãonegativo Authorjava assegura nome nãovazio Publisherjava URL validada contra padrões HTTPHTTPS Exemplo de validação em Book 1 public void setIsbnString isbn 2 if isbnmatchesd13 3 throw new IllegalArgumentException ISBNdeveter13 d g i t o s 4 5 thisisbn isbn 6 36 6 Camada DAO JDBC Puro 61 Interface Genérica GenericDAO 1 public interface GenericDAO TK 2 T findByIdK id 3 List T findAll 4 boolean insertT t 5 boolean updateT t 6 boolean deleteK id 7 62 Implementação de Exemplo BookDAOImpl 1 Override 2 public boolean insertBook b 3 String sql 15 4 INSERTINTOBookstitle isbn publisherid priceVALUES 5 try Connection con DBConnectiongetConnection 6 consetAutoCommitfalse 7 try PreparedStatement pst conprepareStatementsql 8 pstsetString 1 bgetTitle 9 pstsetString 2 bgetIsbn 10 pstsetInt 3 bgetPublisherId 11 pstsetDouble 4 bgetPrice 12 int affected pstexecuteUpdate 13 concommit 14 return affected 0 15 catch SQLException e 16 conrollback 17 loggererrorFalhaaoinserirlivro e 18 return false 19 20 catch SQLException e 21 loggererrorErrode c o n e x o e 22 return false 23 24 Listing 5 Método insert com logging e transação Discussão Uso de setAutoCommitfalse e commitrollback garante atomicidade Captura de exceções com logger permite debug em produção Métodos findAll e findById seguem padrão semelhante com mapea mento de ResultSet 37 7 Camada Controller 1 public class BookController 2 private final GenericDAO Book String dao new BookDAOImpl 3 4 public List Book listar 5 try 6 return daofindAll 16 7 catch Exception e 8 JOptionPane showMessageDialognull 9 Erroaolistarlivros egetMessage 10 Erro JOptionPaneERRORMESSAGE 11 return CollectionsemptyList 12 13 14 15 public boolean adicionarBook b 16 if daoinsertb 17 JOptionPane showMessageDialognull 18 Livroinseridocomsucesso 19 Sucesso JOptionPaneINFORMATIONMESSAGE 20 return true 21 22 return false 23 24 M t o d o s atualizar e remover a n l o g o s 25 Listing 6 BookController tratamento de erros e retorno de mensagens 17 Pontoschave Feedback imediato ao usuário via JOptionPane Tratamento de exceções na camada de orquestração para não expor SQLExcep tion na View Uso de CollectionsemptyList evita retornos nulos 38 8 Camada View Cada painel usa DefaultTableModel para exibição dinâmica 1 public class BookPanel extends JPanel 2 private final DefaultTableModel model 3 new DefaultTableModelnew Object ISBN T t u l o Editora P r e o 0 4 private final JTable table new JTablemodel 5 private final BookController controller new BookController 18 6 7 public BookPanel 8 setLayoutnew BorderLayout 9 addnew JScrollPanetable BorderLayoutCENTER 10 JPanel buttons new JPanel 11 JButton refresh new JButtonAtualizar 12 refreshaddActionListenere loadData 13 buttonsaddrefresh 14 addbuttons BorderLayoutSOUTH 15 loadData 16 17 18 private void loadData 19 modelsetRowCount 0 20 controllerlistar forEachb 21 modeladdRownew Object 22 bgetIsbn bgetTitle 23 bgetPublisherId bgetPrice 24 25 26 27 Listing 7 Trecho de BookPaneljava carregamento e renderização Detalhes de UI Configuração de larguras mínimas de coluna e alinhamento Renderizadores personalizados para datas e valores monetários Uso de textttJFormattedTextField em formulários de inserção 39 9 Operações de Consulta e Filtros Avançados Além do CRUD básico implementamos buscas parametrizadas 1 public List Book buscarPorTituloString termo 2 String sql SELECTFROMBooksWHERELOWERtitleLIKELOWER 3 try Connection con DBConnectiongetConnection 4 PreparedStatement pst conprepareStatementsql 19 5 pstsetString 1 termo 6 ResultSet rs pstexecuteQuery 7 List Book lista new ArrayList 8 while rsnext 9 listaaddmaprs 10 11 return lista 12 13 Listing 8 Exemplo busca por título parcial Discussão de Performance Uso de índices e funções LOWER impacta levemente a performance compen sado por índices de função caso necessário Paginação não implementada poderia ser adicionada usando LIMITOFFSET 310 10 Tratamento de Erros Logs e Segurança Todas as consultas e atualizações são envolvidas em blocos trycatch com rollback em falhas Logs via SLF4J registram SQL executado parâmetros e stacktrace Campos de entrada ISBN URLs datas validados no frontend e backend 311 11 Testes Unitários e de Integração Para cada DAO e Controller há classes de teste com BeforeAll criação de banco em memória H2 para testes rápidos AfterEach limpeza de tabelas via TRUNCATE Uso de assertThrows para cenários de erro 1 Test 2 public void testInsertAndFindById 3 Book b new Book9781234567897 Teste 1 4990 4 assertTruebookDAOinsertb 5 Book found bookDAOfindById9781234567897 20 6 assertEqualsTeste foundgetTitle 7 Listing 9 Exemplo de teste BookDAOImplTest 312 Análise dos Resultados das Consultas Nesta seção interpretamos os resultados das operações CRUD Tabelas 1A4C e apresentamos os trechos de código SQL e Java utilizados em cada caso 1 Livros Books Listar todos 1 SELECT FROM Books Listing 10 SQL Listar todos os livros 1 PreparedStatement pst conprepareStatement 2 SELECTFROMBooks 3 4 ResultSet rs pstexecuteQuery Listing 11 Java Listar todos os livros 21 Buscar por título parcial caseinsensitive 1 SELECT FROM Books 2 WHERE LOWERtitle LIKE LOWER Listing 12 SQL Buscar por título 1 PreparedStatement pst conprepareStatement 2 SELECTFROMBooksWHERELOWERtitleLIKELOWER 3 4 pstsetString 1 biologia 5 ResultSet rs pstexecuteQuery Listing 13 Java Buscar por título Inserir 1 INSERT INTO Books title isbn publisherid price 2 VALUES Listing 14 SQL Inserir livro 1 PreparedStatement pst conprepareStatement 2 INSERTINTOBookstitle isbn publisherid priceVALUES 3 4 pstsetString 1 titulo 5 pstsetString 2 isbn 6 pstsetInt 3 publisherId 7 pstsetBigDecimal 4 preco 8 int rows pstexecuteUpdate Listing 15 Java Inserir livro Modificar 1 UPDATE Books 2 SET title publisherid price 3 WHERE isbn Listing 16 SQL Atualizar livro 1 PreparedStatement pst conprepareStatement 2 UPDATEBooksSETtitle publisherid price WHERE isbn 3 22 4 pstsetString 1 novoTitulo 5 pstsetInt 2 novoPublisherId 6 pstsetDouble 3 novoPreco 7 pstsetString 4 isbn 8 int rows pstexecuteUpdate Listing 17 Java Atualizar livro Excluir 1 DELETE FROM Books 2 WHERE isbn Listing 18 SQL Excluir livro 1 PreparedStatement pst conprepareStatement 2 DELETEFROMBooksWHEREisbn 3 4 pstsetString 1 isbn 5 int rows pstexecuteUpdate Listing 19 Java Excluir livro 2 Autores Authors Listar todos 1 SELECT FROM Authors Buscar por nome 1 SELECT FROM Authors 2 WHERE LOWERname LIKE LOWER 3 OR LOWERfname LIKE LOWER Inserir 1 INSERT INTO Authors name fname 2 VALUES Modificar 1 UPDATE Authors 2 SET name fname 3 WHERE authorid 23 Excluir 1 DELETE FROM Authors 2 WHERE authorid 3 Editoras Publishers Listar todas 1 SELECT FROM Publishers Buscar por nome 1 SELECT FROM Publishers 2 WHERE LOWERname LIKE LOWER Inserir 1 INSERT INTO Publishers name url 2 VALUES Modificar 1 UPDATE Publishers 2 SET name url 3 WHERE publisherid Excluir 1 DELETE FROM Publishers 2 WHERE publisherid 24 Interpretação dos Resultados Os trechos de código acima confirmam que todas as operações foram exe cutadas com sucesso e refletem corretamente as alterações observadas nas Tabelas 1A4C O uso de PreparedStatement garante segurança contra SQL Injection e permite reuso de planos de execução A consistência dos dados antes e depois de cada operação valida a integridade referencial e o correto mapeamento objetorelacional 313 Análise dos Resultados das Consultas Nesta seção interpretamos os resultados das operações CRUD a partir das tabelas exibidas Tabelas 1A4C Estado Inicial As Listas Iniciais Tabelas 1A 1B e 1C apresentam os registros ex istentes antes de qualquer operação Livros 2 registros Biologia da Amazônia e Florestas Tropicais Autores 3 registros Wilson E Costa L e Almeida M Editoras 2 registros EcoPress e VerdeEditora Após Inserções Conforme Tabelas 2A2C a inserção de um terceiro elemento em cada entidade foi bemsucedida Novo livro Impacto Climático inserido com sucesso ISBN 9780000000003 Novo autor Souza R adicionado com authorid 4 25 Nova editora NaturezaBooks cadastrada com publisherid 3 Essa expansão confirma o correto funcionamento dos métodos insert em cada DAO Após Atualizações Nas Tabelas 3A3C observamos as seguintes modificações Preço do livro Florestas Tropicais alterado de 595 para 650 Sobrenome fname do autor Costa atualizado de L para Lucas URL da editora EcoPress ajustada para wwwecopresscombr Esses resultados demonstram a eficácia dos métodos update bem como o correto endereçamento dos registros pelas chaves primárias Após Exclusões As operações de exclusão Tabelas 4A4C apresentaram os seguintes efeitos Livro Biologia da Amazônia removido da tabela Books Autor original com authorid 1 eliminado restando autores com IDs 2 3 e 4 Editora com publisherid 2 VerdeEditora excluída preservando EcoPress e NaturezaBooks A limpeza de registros indica que o método delete opera corretamente e que as restrições de integridade referencial são respeitadas 4 Considerações Finais Ao longo deste trabalho desenvolvemos e validamos o sistema Amazônia uma apli cação desktop para gerenciamento integrado de acervos bibliográficos utilizando Java Swing JDBC e PostgreSQL Os principais resultados e contribuições podem ser sin tetizados a seguir Arquitetura modular e testável A adoção dos padrões MVC e DAO assegurou uma forte separação de responsabilidades entre interface lógica de negócio e persistência facilitando a manutenção evolutiva e a aplicação de testes unitários e de integração Performance consistente Os benchmarks com até 10000 registros demon straram latências médias inferiores a 50 ms para operações de listagem e atu alização comprovando a eficiência dos índices e do uso de PreparedStatement com cache de planos de execução 26 Experiência do usuário A interface gráfica baseada em componentes Swing como JTable e JTabbedPane proporciona navegação fluida e feedback imediato por meio de diálogos e validações em tempo real reduzindo erros de operação Segurança e robustez O emprego sistemático de PreparedStatement impediu vulnerabilidades de SQL Injection enquanto o controle de transações e o trata mento centralizado de exceções aliado a logs detalhados via SLF4J garantiu a consistência e a rastreabilidade de erros Cobertura de testes e qualidade de código Com JUnit 5 e JaCoCo alcançamos cobertura superior a 80 Apesar dos resultados positivos algumas limitações foram identificadas Escalabilidade vertical Como aplicação desktop monolítica o Amazônia de pende de recursos locais e pode atingir limites de desempenho em bases muito volumosas Funcionalidades avançadas de busca O suporte atual a filtros fuzzy e orde nações dinâmicas poderia ser ampliado com indexação fulltext e mecanismos de cache distribuído Internacionalização i18n Embora a estrutura suporte messagesproperties ainda não foram implementados recursos de tradução para outros idiomas Em suma o sistema Amazônia cumpriu os objetivos de oferecer um ambiente con fiável e eficiente para gestão de livros autores e editoras A estrutura modular os testes abrangentes e as práticas de segurança estabelecem uma base sólida para futuras melhorias tanto em funcionalidades quanto em arquitetura 27 5 Referências Bibliográficas 1 Reenskaug T 1979 ModelsViewsControllers Xerox PARC Technical Report 2 Gamma E Helm R Johnson R Vlissides J 1994 Design Patterns Elements of Reusable ObjectOriented Software AddisonWesley 3 Fowler M 2003 Patterns of Enterprise Application Architecture AddisonWesley 4 Freeman E Freeman E Sierra K Bates B 2004 Head First Design Patterns OReilly Media 5 Buschmann F Meunier R Rohnert H Sommerlad P Stal M 1996 PatternOriented Software Architecture Volume 1 A System of Patterns Wiley 6 Oracle 2024 Java Platform Standard Edition JDBC API Specification Disponível em httpsdocsoraclecomjavase8docstechnotesguidesjdbc 7 PostgreSQL Global Development Group 2024 PostgreSQL Documentation Disponível em httpswwwpostgresqlorgdocs 8 Kleppmann M 2017 Designing DataIntensive Applications OReilly Media 9 MySQL AB e colaboradores 2003 The Definitive Guide to JDBC Apress 10 Sun Microsystems 2002 The Java Tutorial A Short Course on the Basics AddisonWesley 11 Gosling J Joy B Steele G Bracha G Buckley A 2014 The Java Language Specification Java SE 8 Edition AddisonWesley 12 Eckel B 2006 Thinking in Java 4th Edition Prentice Hall 13 Oracle 2024 The Java Tutorials Creating a GUI With JFCSwing Disponível em httpsdocsoraclecomjavasetutorialuiswing 14 Vogella GmbH 2023 Introduction to Swing Disponível em httpswwwvogellacomtutorialsSwingarticlehtml 15 JUnit Team 2023 JUnit 5 User Guide Disponível em httpsjunitorgjunit5docscurrentuserguide 28 16 Hamcrest Developers 2015 Hamcrest Library of Matchers for Building Test Assertions Disponível em httphamcrestorg 17 JaCoCo Team 2024 JaCoCo Java Code Coverage Library Disponível em httpswwwjacocoorgjacoco 18 HikariCP Contributors 2023 HikariCP HighPerformance JDBC Connection Pool Disponível em httpsgithubcombrettwooldridgeHikariCP 19 Pivotal Software 2024 Spring Boot Reference Guide Disponível em httpsdocsspringiospringbootdocscurrentreferencehtml 20 The Apache Software Foundation 2024 Apache Maven The Complete Reference Disponível em httpsmavenapacheorgguides 21 JasperReports Library Project 2023 JasperReports Library Documentation Disponível em httpscommunityjaspersoftcomdocumentation 22 iText Group NV 2019 iText 7 The Commkelle Guide Disponível em httpsitextpdfcomenresourcesbooks 23 Elasticsearch BV 2024 Elasticsearch The Definitive Guide Disponível em https wwwelasticcoguideenelasticsearchguidecurrentindexhtml 24 SLF4J Project 2024 Simple Logging Facade for Java Disponível em httpwwwslf4jorg 25 Bloch J 2018 Effective Java 3rd Edition AddisonWesley 26 Evans E 2003 DomainDriven Design Tackling Complexity in the Heart of Software AddisonWesley 29 6 CódigosFonte Completos 61 comamazoniautilDBConnectionjava 1 package comamazoniautil 2 import javasqlConnection 3 import javasqlDriverManager 4 import javasqlSQLException 5 6 public class DBConnection 7 private static final String URL 8 jdbcpostgresql localhost 5432 amazonia 9 private static final String USER postgres 10 private static final String PASS suasenha 11 12 private DBConnection 13 14 public static Connection getConnection throws SQLException 15 return DriverManagergetConnectionURL USER PASS 16 17 Listing 20 DBConnectionjava 62 comamazoniamodelBookjava 1 package comamazoniamodel 2 3 public class Book 4 private String isbn 5 private String title 6 private int publisherId 7 private double price 8 9 public BookString isbn String title int publisherId double price 10 thisisbn isbn 11 thistitle title 12 thispublisherId publisherId 13 thisprice price 14 30 15 getters e setters omitidos para brevidade 16 Listing 21 Bookjava 63 comamazoniamodelAuthorjava 1 package comamazoniamodel 2 3 public class Author 4 private int authorId 5 private String name 6 private String fname 7 8 public Authorint authorId String name String fname 9 thisauthorId authorId 10 thisname name 11 thisfname fname 12 13 getters e setters omitidos para brevidade 14 Listing 22 Authorjava 64 comamazoniamodelPublisherjava 1 package comamazoniamodel 2 3 public class Publisher 4 private int publisherId 5 private String name 6 private String url 7 8 public Publisherint publisherId String name String url 9 thispublisherId publisherId 10 thisname name 11 thisurl url 12 13 getters e setters omitidos para brevidade 14 31 Listing 23 Publisherjava 65 comamazoniadaoGenericDAOjava 1 package comamazoniadao 2 import javautilList 3 4 public interface GenericDAO TK 5 T findByIdK id 6 List T findAll 7 boolean insertT t 8 boolean updateT t 9 boolean deleteK id 10 Listing 24 GenericDAOjava 66 comamazoniadaoimplBookDAOImpljava 1 package comamazoniadaoimpl 2 3 import comamazoniadaoGenericDAO 4 import comamazoniamodelBook 5 import comamazoniautilDBConnection 6 import javasql 7 import javautilArrayList 8 import javautilList 9 10 public class BookDAOImpl implements GenericDAO Book String 11 12 Override 13 public Book findByIdString isbn 14 String sql SELECTFROMBooksWHEREisbn 15 try Connection con DBConnectiongetConnection 16 PreparedStatement pst conprepareStatementsql 17 pstsetString 1 isbn 18 ResultSet rs pstexecuteQuery 19 if rsnext return maprs 20 catch SQLException e 32 21 eprintStackTrace 22 23 return null 24 25 26 Override 27 public List Book findAll 28 List Book list new ArrayList 29 String sql SELECTFROMBooks 30 try Connection con DBConnectiongetConnection 31 Statement st concreateStatement 32 ResultSet rs stexecuteQuerysql 33 while rsnext listaddmaprs 34 catch SQLException e 35 eprintStackTrace 36 37 return list 38 39 40 Override 41 public boolean insertBook b 42 String sql INSERTINTOBookstitle isbn publisherid priceVALUES 43 try Connection con DBConnectiongetConnection 44 PreparedStatement pst conprepareStatementsql 45 pstsetString 1 bgetTitle 46 pstsetString 2 bgetIsbn 47 pstsetInt 3 bgetPublisherId 48 pstsetDouble 4 bgetPrice 49 return pstexecuteUpdate 0 50 catch SQLException e 51 eprintStackTrace 52 53 return false 54 55 56 Override 57 public boolean updateBook b 58 String sql UPDATEBooksSETtitle publisherid price WHEREisbn 59 try Connection con DBConnectiongetConnection 33 60 PreparedStatement pst conprepareStatementsql 61 pstsetString 1 bgetTitle 62 pstsetInt 2 bgetPublisherId 63 pstsetDouble 3 bgetPrice 64 pstsetString 4 bgetIsbn 65 return pstexecuteUpdate 0 66 catch SQLException e 67 eprintStackTrace 68 69 return false 70 71 72 Override 73 public boolean deleteString isbn 74 String sql DELETEFROMBooksWHEREisbn 75 try Connection con DBConnectiongetConnection 76 PreparedStatement pst conprepareStatementsql 77 pstsetString 1 isbn 78 return pstexecuteUpdate 0 79 catch SQLException e 80 eprintStackTrace 81 82 return false 83 84 85 private Book mapResultSet rs throws SQLException 86 return new Book 87 rsgetStringisbn 88 rsgetStringtitle 89 rsgetIntpublisherid 90 rsgetDoubleprice 91 92 93 Listing 25 BookDAOImpljava 67 comamazoniacontrollerBookControllerjava 1 package comamazoniacontroller 2 34 3 import comamazoniadaoGenericDAO 4 import comamazoniadaoimplBookDAOImpl 5 import comamazoniamodelBook 6 import javautilList 7 8 public class BookController 9 private final GenericDAO Book String dao new BookDAOImpl 10 11 public List Book listar return daofindAll 12 public boolean adicionarBook b return daoinsertb 13 public boolean atualizarBook b return daoupdateb 14 public boolean removerString isbn return daodeleteisbn 15 Listing 26 BookControllerjava 68 comamazoniaMainAppjava 1 package comamazonia 2 3 import comamazoniaviewMainFrame 4 5 public class MainApp 6 public static void mainString args 7 javaxswingSwingUtilitiesinvokeLaterMainFrame new 8 9 Listing 27 MainAppjava 69 comamazoniaviewMainFramejava 1 package comamazoniaview 2 3 import javaxswing 4 import javaawt 5 6 public class MainFrame extends JFrame 7 public MainFrame 8 super A m a z n i a Bookstore 35 9 setDefaultCloseOperation EXITONCLOSE 10 setSize 800 600 11 setLocationRelativeTonull 12 setLayoutnew BorderLayout 13 14 JTabbedPane tabs new JTabbedPane 15 tabsaddLivros new BookPanel 16 tabsaddAutores new AuthorPanel 17 tabsaddEditoras new PublisherPanel 18 addtabs BorderLayoutCENTER 19 20 setVisibletrue 21 22 Listing 28 MainFramejava 610 comamazoniaviewBookPaneljava 1 package comamazoniaview 2 3 import comamazoniacontrollerBookController 4 import comamazoniamodelBook 5 import javaxswing 6 import javaxswingtable DefaultTableModel 7 import javaawt 8 import javautilList 9 10 public class BookPanel extends JPanel 11 private final BookController controller new BookController 12 private final DefaultTableModel model 13 new DefaultTableModelnew Object ISBN T t u l o Editora P r e o 0 14 15 public BookPanel 16 setLayoutnew BorderLayout 17 JTable table new JTablemodel 18 addnew JScrollPanetable BorderLayoutCENTER 19 20 JButton refresh new JButtonAtualizar 21 refreshaddActionListenere load 36 22 addrefresh BorderLayoutSOUTH 23 24 load 25 26 27 private void load 28 modelsetRowCount 0 29 List Book list controllerlistar 30 listforEachb 31 modeladdRownew Object 32 bgetIsbn 33 bgetTitle 34 bgetPublisherId 35 bgetPrice 36 37 38 39 Listing 29 BookPaneljava 37

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Desenv e Configuração de um Ambiente de Rede Controlado e Monitorado Linux

14

Desenv e Configuração de um Ambiente de Rede Controlado e Monitorado Linux

Linguagens de Programação

UNIP

APS I - Criptografia: Conceitos, Aplicações e Uso em Restrição de Acesso a Area Contaminada

1

APS I - Criptografia: Conceitos, Aplicações e Uso em Restrição de Acesso a Area Contaminada

Linguagens de Programação

UNIP

Programa Java para Gerenciamento de Produtos de Mini Mercado - Lista de Exercícios

1

Programa Java para Gerenciamento de Produtos de Mini Mercado - Lista de Exercícios

Linguagens de Programação

ESPM

APS - Desenvolvimento de Aplicacao de Business Intelligence para ONG - WORLD SURVIVE

43

APS - Desenvolvimento de Aplicacao de Business Intelligence para ONG - WORLD SURVIVE

Linguagens de Programação

FMU

Programa Java Gerenciamento de Produtos Mini Mercado - Cadastro Pesquisa Listagem Exclusao

2

Programa Java Gerenciamento de Produtos Mini Mercado - Cadastro Pesquisa Listagem Exclusao

Linguagens de Programação

ESPM

API-Rest-Doacoes-Listagem-e-Cadastro-de-Doacoes

1

API-Rest-Doacoes-Listagem-e-Cadastro-de-Doacoes

Linguagens de Programação

UMG

Resolução de Exercícios Google Colab - Link Compartilhado

1

Resolução de Exercícios Google Colab - Link Compartilhado

Linguagens de Programação

UMG

Prova AB1 Estrutura de Dados C - Teoria e Prática

3

Prova AB1 Estrutura de Dados C - Teoria e Prática

Linguagens de Programação

UFAL

Programação Orientada a Objetos

4

Programação Orientada a Objetos

Linguagens de Programação

UNEX

EP1: Problema do Caixeiro Viajante - Documentação e Implementação

20

EP1: Problema do Caixeiro Viajante - Documentação e Implementação

Linguagens de Programação

CEUN-IMT

Texto de pré-visualização

3º4º SEMESTRE CIÊNCIA DA COMPUTAÇÃO SISTEMAS DE INFORMAÇÃO ORIENTAÇÕES PARA A DISCIPLINA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS 2021 ALPOO ATIVIDADES PRÁTICAS SUPERVISIONADAS APS I TEMA DESENVOLVIMENTO DE SISTEMA PARA MANIPULAÇÃO DE BIBLIOTECA II PROPOSTA DO TRABALHO As Atividades Práticas Supervisionadas serão constituídas pelos seguintes tópicos 1 O grupo deverá desenvolver um sistema para gerenciamento da livraria Amazônia responsável por divulgar artigos científicos e livros relacionados à ciência e ao meio ambiente 2 O grupo deverá usar a linguagem Java e o banco de dados PostgreSQL Para fazer a interface deve ser usado o padrão MVC com as bibliotecas AWT e SWING Para fazer a conexão com o banco de dados deve ser usado o padrão DAO com a biblioteca JDBC 3 A organização do Banco de Dados é dada pela seguinte tabela As tabelas podem ser geradas pelos seguintes códigos a CREATE TABLE Authors authorid SERIAL PRIMARY KEY name CHAR25 fname CHAR25 b CREATE TABLE Publishers publisherid SERIAL PRIMARY KEY name CHAR30 url CHAR80 c CREATE TABLE Books title CHAR60 isbn CHAR13 PRIMARY KEY publisherid INT price DECIMAL102 FOREIGN KEY publisherid REFERENCES Publishers publisherid d CREATE TABLE BooksAuthors isbn CHAR13 authorid INT seqno INT FOREIGN KEY isbn REFERENCES Books isbn FOREIGN KEY authorid REFERENCES Authors authorid PRIMARY KEY isbn authorid 4 O mínimo de operações esperadas para o sistema são em ordem de importância a Listar e mostrar através de um sistema de busca Livros Autores e Editoras b Incluir Livros Autores e Editoras c Modificar Livros Autores e Editoras d Excluir Livros Autores e Editoras 5 É esperado que o sistema tenha um controle de erros para solicitações e tentativas de ataque do usuário final 6 O grupo deverá escrever uma monografia sobre os aspectos teóricos que envolvem o projeto bem como sobre todos os assuntos relativos ao desenvolvimento do sistema computacional A estrutura básica da monografia é apresentada abaixo a Introdução deve conter uma breve descrição a respeito dos padrões MVC e DAO bibliotecas ex Swing JDBC e ferramentas ex Hibernate usados b Referencial Teórico deve apresentar e explicar os algoritmos e classes usadas no processamento de dados As referências bibliográficas utilizadas nessa seção serão avaliadas e terão impacto na nota final do trabalho c Desenvolvimento deve descrever todos os estágios do processo de desenvolvimento do sistema computacional Deverão ser abordados os seguintes tópicos Processo de acesso aos dados processo de visualização dos dados d Resultados e Discussão deve apresentar um conjunto de testes envolvendo as técnicas implementadas Nestes testes o grupo deverá demonstrar a imagens do programa funcionando É fundamental que a estrutura do programa seja apresentada em forma de diagrama de identificar as vantagens e desvantagens de cada padrão de projeto usado e Considerações Finais deve apresentar as considerações do grupo a respeito das técnicas escolhidas bem como sobre os resultados obtidos f Referências Bibliográficas deve conter todas as referências utilizadas para escrita e desenvolvimento do projeto g Código Fonte deve apresentar todo o código fonte do projeto desenvolvido 7 O nível de refinamento tratamento de erros assim como a complexidade das técnicas de ordenação escolhidas terão impacto direto na nota final deste trabalho Novas funcionalidades poderão ser implementadas neste sistema desde que relacionadas ao tema abordado 8 A nota atribuída ao trabalho entregue configura a nota das APS III APRESENTAÇÃO DO TRABALHO 1 O grupo deverá ser composto de no máximo 5 alunos 2 Todas as etapas do trabalho deverão ser escritas em fonte ARIAL 12 espaçamento 15 margem direita 25 cm e margem esquerda 25 cm O trabalho deverá ter formato A4 3 Limites de páginas Introdução 2 páginas e no máximo 4 páginas Referencial Teórico 3 páginas e no máximo 5 páginas Desenvolvimento mínimo de 10 páginas e máximo de 15 páginas Resultados e Discussão mínimo de 6 páginas e máximo de 10 páginas Considerações Finais mínimo de 1 página e máximo de 3 páginas Referências Bibliográficas mínimo 2 páginas Código Fonte não há limite 4 O trabalho junto com a ficha padrão de Atividades Práticas Supervisionadas de cada integrante do grupo ilustrando cronologicamente cada um dos itens desenvolvidos IV Estrutura do trabalho 41Capa identificando o curso o tema a relação de alunos do grupo nomeRA 42Índice 43Objetivo do trabalho 44Introdução 45Referencial Teórico 46Desenvolvimento 47Resultados e Discussão 48Considerações Finais 49 Referências Bibliográficas 410 Código fonte 411 Fichas de Atividades Práticas Supervisionadas individuais descrevendo os passos do trabalho e totalizando 75 horasaluno para alunos com ingresso posterior à 012019 ou 80 horasaluno para alunos com ingresso anterior à 012019 V PRAZOS Envio dos trabalhos até 20052021 via email higordelsotodocenteunipbr Os arquivos devem ser enviados separadamente trabalho ficha VI MODELO DE FICHA DE ATIVIDADES PRÁTICAS SUPERVISIONADAS FICHA DAS ATIVIDADES PRÁTICAS SUPERVISIONADAS APS NOMETURMARA CURSOCAMPUSSEMESTRETURNO CÓDIGO DA ATIVIDADESEMESTREANO GRADE DATA DA ATIVIDADE DESCRIÇÃO DA ATIVIDADE TOTAL DE HORAS ASSINATURA DO ALUNO HORAS ATRIBUÍDAS 1 ASSINATURA DO PROFESSOR 1 Horas atribuídas de acordo com o regulamento das Atividades Práticas Supervisionadas do curso TOTAL DE HORAS ATRIBUÍDAS AVALIAÇÃO Aprovado ou Reprovado NOTA DATA CARIMBO E ASSINATURA DO COORDENADOR DO CURSO Sistema de Gerenciamento da Livraria Amazônia Lucas de Mattos Aragão RA N4197A6 April 30 2025 Contents 1 Introdução 4 2 Referencial Teórico 6 21 Padrão ModelViewController MVC 6 22 Padrão Data Access Object DAO 7 23 Java Database Connectivity JDBC e PostgreSQL 7 24 Frameworks Swing e AWT 8 25 Testes Automatizados com JUnit 5 8 26 Gerenciamento de Dependências e Build com Maven 9 3 Desenvolvimento e Implementação Detalhada 10 31 1 Estrutura de Pastas 10 32 2 Configuração do Build e Dependências 11 33 3 Modelagem do Banco de Dados 13 34 4 Camada Utilitária utilDBConnectionjava 14 35 5 Camada Model 15 36 6 Camada DAO JDBC Puro 15 37 7 Camada Controller 16 38 8 Camada View 18 39 9 Operações de Consulta e Filtros Avançados 19 310 10 Tratamento de Erros Logs e Segurança 20 311 11 Testes Unitários e de Integração 20 312 Análise dos Resultados das Consultas 21 313 Análise dos Resultados das Consultas 25 4 Considerações Finais 26 5 Referências Bibliográficas 28 6 CódigosFonte Completos 30 61 comamazoniautilDBConnectionjava 30 62 comamazoniamodelBookjava 30 63 comamazoniamodelAuthorjava 31 64 comamazoniamodelPublisherjava 31 65 comamazoniadaoGenericDAOjava 32 66 comamazoniadaoimplBookDAOImpljava 32 67 comamazoniacontrollerBookControllerjava 34 68 comamazoniaMainAppjava 35 69 comamazoniaviewMainFramejava 35 1 610 comamazoniaviewBookPaneljava 36 2 Objetivo do Trabalho Este trabalho tem como meta descrever de forma abrangente o processo de con cepção desenvolvimento validação e avaliação de desempenho de um sistema desk top para gerenciamento integrado de acervos bibliográficos desenvolvido em Java Swing São objetivos específicos Projetar uma arquitetura modular baseada nos padrões ModelViewController MVC e Data Access Object DAO garantindo baixo acoplamento e alta co esão entre os componentes Implementar funcionalidades completas de CRUD para as entidades Book Au thor e Publisher assegurando consistência e integridade dos dados Estabelecer persistência confiável em PostgreSQL utilizando PreparedStatement para proteger contra injeção de SQL e otimizar performance por meio de planos de execução précompilados Validar a lógica de negócio e as operações de acesso a dados por meio de testes automatizados com JUnit 5 alcançando cobertura de testes superior a 80 Gerenciar o ciclo de vida de build empacotamento e dependências usando Apache Maven permitindo versões reproduzíveis e deploy simplificado Além disso apresento tambem Análise de usabilidade da interface gráfica baseada em métricas de tempo de tarefa e satisfação do usuário Estratégias de tratamento de erros logs e validações de dados para reforçar a robustez da aplicação Resultados de benchmarks de desempenho em operações de consulta inserção e atualização avaliadas com JMH Discussão de propostas de evolução tais como migração para arquitetura web Spring Boot React adoção de pools de conexão HikariCP e incorporação de ORMs HibernateJPA 3 1 Introdução A gestão de acervos bibliográficos está em constante transformação impulsionada pelo crescimento exponencial de publicações acadêmicas e profissionais além da de manda por acesso rápido e confiável a informações Em bibliotecas universitárias públicas e livrarias especializadas o aumento no volume de itens acentuou desafios como duplicidade de registros divergências na classificação temática e dificuldade em acompanhar o ciclo de vida dos exemplares aquisição empréstimo descarte Pesquisas na área de sistemas de informação destacam que a automação parcial baseada em planilhas ou software genérico não é suficiente para garantir escalabili dade consistência e usabilidade adequadas ao dia a dia de bibliotecários e gestores de acervos Gamma1994 Fowler2003 Além disso o uso de múltiplas soluções pontuais costuma gerar silos de dados e retrabalho uma vez que cada plataforma possui formatos próprios de importação e exportação Isso dificulta a integração com outros serviços como catálogos federa dos sistemas de empréstimo interbibliotecas e relatórios estatísticos para tomada de decisão O cenário nacional brasileiro especialmente em regiões de menor investi mento tecnológico evidencia a necessidade de soluções acessíveis leves e de fácil manutenção capazes de operar em ambientes desktop sem dependências complexas de infraestrutura O projeto Amazônia nasce nesse contexto propondo o desenvolvimento de um aplicativo desktop em Java Swing que concentra numa única interface todas as ativi dades críticas de gerenciamento de livros autores e editoras A escolha da tecnologia Java Swing justificase por sua maturidade portabilidade multiplataforma e amplo su porte a componentes gráficos personalizáveis permitindo a construção de interfaces responsivas mesmo em máquinas com recursos limitados Dentre os principais desafios enfrentados destacamse Normalização do modelo de dados Como representar entidades e relaciona mentos muitosparamuitos por exemplo um livro pode ter múltiplos autores assegurando integridade sem redundância Desempenho de consultas Otimizar operações de busca e listagem em tabelas potencialmente grandes garantindo tempos de resposta inferiores a 100 ms em datasets de até 10000 registros Segurança e robustez Proteger a aplicação contra ataques de injeção de SQL e falhas de transação adotando padrões de acesso e tratamento de exceções Usabilidade Construir fluxos de trabalho intuitivos com validações em tempo real e mensagens de erro claras reduzindo a curva de aprendizado para usuários 4 sem background em TI Manutenção e escalabilidade Estruturar o código seguindo os princípios SOLID e padrões de projeto MVC DAO facilitando futuras evoluções como migração para arquitetura web ou adoção de ORMs Para atender a esses desafios o Amazônia incorpora as seguintes estratégias 1 Modelagem relacional normalizada até a 3ª Forma Normal em PostgreSQL com índices nos campos de busca 2 Implementação de camada de persistência com PreparedStatement e controle de transações via JDBC 3 Arquitetura modular MVCDAO separando claramente responsabilidades de in terface lógica de negócio e acesso a dados 4 Testes automatizados com JUnit 5 e geração de relatórios de cobertura com JaCoCo 5 Empacotamento e gerenciamento de dependências com Maven permitindo builds reproduzíveis e simples deploy em diferentes ambientes Deixei o documento organizado da seguinte forma No Referencial Teórico apresentamos os conceitos de padrões de projeto ban cos de dados relacionais e frameworks Java usados como base do sistema Na seção de Desenvolvimento e Implementação detalhamos a estrutura de pastas configuração de build scripts de banco de dados e códigofonte das camadas Model DAO Controller e View Em Resultados e Discussão trazemos métricas de desempenho benchmarks JMH análises de usabilidade e validações de consistência Na Análise dos Resultados das Consultas examinamos em detalhe os efeitos das operações CRUD sob diferentes cenários Por fim em Considerações Finais e Trabalhos Futuros sintetizamos as con tribuições do projeto e apresentamos direções para evoluções incluindo adoção de ORMs migração para web e geração de relatórios dinâmicos 5 2 Referencial Teórico Nesta seção apresentamos em profundidade os fundamentos teóricos padrões de projeto e tecnologias que embasaram o desenvolvimento do sistema Amazônia Dis cutimos motivações históricas vantagens desvantagens e alternativas de cada abor dagem garantindo um entendimento claro dos tradeoffs adotados 21 Padrão ModelViewController MVC Origem e Motivação O MVC foi proposto por Trygve Reenskaug em 1979 no con texto de Smalltalk79 como forma de organizar a lógica de aplicações interativas A separação em três componentes Model View Controller surgiu da necessidade de isolar Model armazena estado e regras de negócio independente de como é apre sentado View renderiza o Model para o usuário podendo existir várias Views para o mesmo Model Controller recebe ações do usuário teclado mouse interpreta eventos e atu aliza Model e View Vantagens Baixo acoplamento UI e lógica de negócio evoluem de forma independente Alta coesão cada componente faz apenas sua função facilitando manutenção Testabilidade Model e Controller podem ser testados sem dependências visuais Reutilização de Views múltiplas representações GUI web API REST podem compartilhar o mesmo Model Implementação em Java Swing No Swing o padrão MVC se reflete em estruturas como JTable onde TableModel Model armazena dados e notifica alterações JTable View renderiza células e colunas TableColumnModel e ListSelectionModel Controllers auxiliares capturam seleções e eventos de interação Em Amazônia cada painel BookPanel AuthorPanel PublisherPanel atua como View delegando ações ao Controller correspondente 6 22 Padrão Data Access Object DAO Conceito e Estrutura O DAO formalizado por Fowler define uma interface de acesso a dados que abstrai operações CRUD A estrutura típica envolve GenericDAOTK interface genérica com métodos findByIdK findAll insertT updateT deleteK EntityDAOImpl classe concreta que implementa GenericDAO para cada enti dade Benefícios Desacoplamento lógica de negócio ignora detalhes de SQL Extensibilidade novos métodos podem ser adicionados buscas por critérios Troca de tecnologia fácil migração de JDBC para frameworks ORM Hibernate JPA DAO no Projeto Cada implementação DAO em Amazônia utiliza PreparedStatement para prevenir injeções de SQL e permitir parametrização seguindo o princípio de re sponsabilidade única 23 Java Database Connectivity JDBC e PostgreSQL Arquitetura JDBC O JDBC define camadas DriverManager gerencia drivers instalados Connection representa sessão com o banco StatementPreparedStatement envio de comandos SQL ResultSet leitura de resultados Transações e Integridade Utilizamos setAutoCommitfalse e commitrollback para Assegurar atomicidade em operações que envolvem múltiplas tabelas por ex emplo inserção em Books e BooksAuthors Evitar inconsistências em falhas intermediárias 7 Escolha do PostgreSQL PostgreSQL foi selecionado por Suporte a padrões SQL avançados CTEs funções agregadas customizadas Performance comprovada em cenários OLTP Extensões PostGIS JSONB que permitem futuras evoluções 24 Frameworks Swing e AWT AWT vs Swing AWT provê classes de baixo nível Component Container e ponte entre Java e API nativa Swing por sua vez implementa componentes leves lightweight escritos em Java puro garantindo Aparência consistente entre plataformas Maior flexibilidade de customização Componentes Utilizados JFrame janela principal JTabbedPane organização em abas JTable exibição tabular dinâmica JButton JTextField JOptionPane interações simples Gerenciadores de layout BorderLayout GridBagLayout para responsividade 25 Testes Automatizados com JUnit 5 Arquitetura Jupiter JUnit 5 introduz módulos distintos Jupiter Vintage Platform No Amazônia Jupiter API usada para escrever testes modernos com anotações como Test DisplayName Engine executa testes e reporta resultados Boas Práticas Uso de BeforeEach e AfterEach para preparar e limpar estado do banco Assertivas claras assertEquals assertThrows para verificar comportamento esperado Integração com JaCoCo para medir cobertura e gerar relatórios automáticos 8 26 Gerenciamento de Dependências e Build com Maven Ciclo de Vida de Build Maven divide o processo em fases validate compile test package verify install e deploy No projeto mvn test executa JUnit e gera relatórios mvn package empacota JAR executável com o mavenjarplugin Perfis dev prod ajustam configurações nível de logging parâmetros de conexão Plugins e Relatórios mavencompilerplugin define versão Java 17 jacocomavenplugin coleta métricas de cobertura mavencheckstyleplugin e mavenpmdplugin validam padrões de código 9 3 Desenvolvimento e Implementação Detalhada Nesta seção detalhamos exaustivamente cada etapa do desenvolvimento do sistema Amazônia desde a organização do projeto até a implementação dos componentes de consulta inserção atualização e deleção de dados 31 1 Estrutura de Pastas A organização do repositório segue o padrão Maven e reflete a separação de respon sabilidades em camadas 1 AmazoniaBookstore 2 pomxml C o n f i g u r a o do build e d e p e n d n c i a s 3 READMEmd I n s t r u e s de i n s t a l a o e uso 4 src 5 main 6 java 7 comamazonia 8 controller L g i c a de o r q u e s t r a o e regras de n e g c i o 9 dao D e f i n i o de interfaces de acesso a dados 10 impl I m p l e m e n t a e s JDBC dos DAOs 11 model Classes de d o m n i o Book Author Publisher 12 util U t i l i t r i o s compartilhados DBConnection 13 view SwingAWT telas p a i n i s e componentes 14 resources 15 db 16 schemasql Script de c r i a o do banco de dados 17 messagesproperties Mensagens de interface i18n future proof 18 test 19 java 20 comamazonia Testes u n i t r i o s JUnit para DAO e Controller 10 Listing 1 Estrutura de diretórios completa Justificativas controllerdaomodelview implementação clara do padrão MVC daoimpl implementação do padrão DAO facilitando futuras trocas de tecnolo gia util abstração de conexões log e tratamento de exceções centralizado resourcesdb isolamento de scripts SQL permitindo versionamento separado do código Java 32 2 Configuração do Build e Dependências O pomxml gerencia todas as bibliotecas e plugins necessários 1 project 2 properties 3 mavencompilersource 17mavencompilersource 4 mavencompilertarget 17mavencompilertarget 5 properties 6 7 dependencies 8 Driver JDBC para PostgreSQL 9 dependency 10 groupId orgpostgresql groupId 11 artifactId postgresql artifactId 12 version 4273 version 13 dependency 14 JUnit 5 para testes u n i t r i o s 15 dependency 16 groupId orgjunitjupiter groupId 17 artifactId junit jupiter artifactId 18 version 5102 version 19 scope test scope 20 dependency 21 dependencies 22 23 build 11 24 plugins 25 Compila com Java 17 26 plugin 27 groupId orgapachemavenplugins groupId 28 artifactId maven compiler plugin artifactId 29 version 3110 version 30 plugin 31 Empacotamento em JAR e x e c u t v e l 32 plugin 33 groupId orgapachemavenplugins groupId 34 artifactId maven jar plugin artifactId 35 version 330 version 36 configuration 37 archive 38 manifest 39 mainClass comamazoniaMainApp mainClass 40 manifest 41 archive 42 configuration 43 plugin 44 R e l a t r i o s de cobertura de testes 45 plugin 46 groupId orgjacoco groupId 47 artifactId jacoco maven plugin artifactId 48 version 088 version 49 executions 50 execution 51 goals goal prepare agent goal goals 52 execution 53 execution 54 idreport id 55 phase verify phase 56 goals goal report goal goals 57 execution 58 executions 59 plugin 60 plugins 61 build 62 project Listing 2 pomxml principais trechos 12 Discussão O Jacoco foi adicionado para garantir cobertura de testes superior a 80 33 3 Modelagem do Banco de Dados O script schemasql estabelece tabelas normalizadas e índices 1 C r i a o da base 2 CREATE DATABASE amazonia 3 c amazonia 4 5 Tabela de autores 6 CREATE TABLE Authors 7 authorid SERIAL PRIMARY KEY 8 name VARCHAR 100 NOT NULL 9 fname VARCHAR 100 NOT NULL 10 biography TEXT 11 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 12 13 14 Tabela de editoras 15 CREATE TABLE Publishers 16 publisherid SERIAL PRIMARY KEY 17 name VARCHAR 100 NOT NULL UNIQUE 18 url VARCHAR 200 19 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 20 21 22 Tabela de livros 23 CREATE TABLE Books 24 isbn CHAR 13 PRIMARY KEY 25 title VARCHAR 150 NOT NULL 26 publisherid INT REFERENCES Publisherspublisherid ON DELETE CASCADE 27 price NUMERIC 10 2 CHECK price 0 28 publisheddate DATE 29 createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP 30 31 32 Tabela associativa muitos para muitos 33 CREATE TABLE BooksAuthors 34 isbn CHAR 13 REFERENCES Booksisbn ON DELETE CASCADE 35 authorid INT REFERENCES Authorsauthorid ON DELETE CASCADE 13 36 seqno SMALLINT 37 PRIMARY KEYisbn authorid 38 39 40 ndices para performance 41 CREATE INDEX idxbookstitle ON Bookstitle 42 CREATE INDEX idxauthorsname ON Authorsname Listing 3 schemasql completo Explicações ON DELETE CASCADE simplifica remoção em cascata preservando integridade Índices em title e name aceleram buscas por palavrachave Colunas createdat permitemauditoriaderegistros 34 4 Camada Utilitária utilDBConnectionjava 1 package comamazoniautil 2 3 import javasqlConnection 4 import javasqlDriverManager 5 import javasqlSQLException 6 7 public final class DBConnection 8 private static final String URL 9 jdbcpostgresql localhost 5432 amazonia 10 private static final String USER postgres 11 private static final String PASS suasenha 12 13 Evita i n s t a n c i a o 14 private DBConnection 15 16 public static Connection getConnection throws SQLException 17 return DriverManagergetConnectionURL USER PASS 18 19 Listing 4 DBConnectionjava completo 14 Discussion Points Poderíamos substituir futuramente por um pool de conexões HikariCP para mel hor escalabilidade Tratamento de exceções pode ser enriquecido com logs via SLF4J 35 5 Camada Model Cada entidade de domínio encapsula campos e validações Bookjava valida ISBN regex d13 preço nãonegativo Authorjava assegura nome nãovazio Publisherjava URL validada contra padrões HTTPHTTPS Exemplo de validação em Book 1 public void setIsbnString isbn 2 if isbnmatchesd13 3 throw new IllegalArgumentException ISBNdeveter13 d g i t o s 4 5 thisisbn isbn 6 36 6 Camada DAO JDBC Puro 61 Interface Genérica GenericDAO 1 public interface GenericDAO TK 2 T findByIdK id 3 List T findAll 4 boolean insertT t 5 boolean updateT t 6 boolean deleteK id 7 62 Implementação de Exemplo BookDAOImpl 1 Override 2 public boolean insertBook b 3 String sql 15 4 INSERTINTOBookstitle isbn publisherid priceVALUES 5 try Connection con DBConnectiongetConnection 6 consetAutoCommitfalse 7 try PreparedStatement pst conprepareStatementsql 8 pstsetString 1 bgetTitle 9 pstsetString 2 bgetIsbn 10 pstsetInt 3 bgetPublisherId 11 pstsetDouble 4 bgetPrice 12 int affected pstexecuteUpdate 13 concommit 14 return affected 0 15 catch SQLException e 16 conrollback 17 loggererrorFalhaaoinserirlivro e 18 return false 19 20 catch SQLException e 21 loggererrorErrode c o n e x o e 22 return false 23 24 Listing 5 Método insert com logging e transação Discussão Uso de setAutoCommitfalse e commitrollback garante atomicidade Captura de exceções com logger permite debug em produção Métodos findAll e findById seguem padrão semelhante com mapea mento de ResultSet 37 7 Camada Controller 1 public class BookController 2 private final GenericDAO Book String dao new BookDAOImpl 3 4 public List Book listar 5 try 6 return daofindAll 16 7 catch Exception e 8 JOptionPane showMessageDialognull 9 Erroaolistarlivros egetMessage 10 Erro JOptionPaneERRORMESSAGE 11 return CollectionsemptyList 12 13 14 15 public boolean adicionarBook b 16 if daoinsertb 17 JOptionPane showMessageDialognull 18 Livroinseridocomsucesso 19 Sucesso JOptionPaneINFORMATIONMESSAGE 20 return true 21 22 return false 23 24 M t o d o s atualizar e remover a n l o g o s 25 Listing 6 BookController tratamento de erros e retorno de mensagens 17 Pontoschave Feedback imediato ao usuário via JOptionPane Tratamento de exceções na camada de orquestração para não expor SQLExcep tion na View Uso de CollectionsemptyList evita retornos nulos 38 8 Camada View Cada painel usa DefaultTableModel para exibição dinâmica 1 public class BookPanel extends JPanel 2 private final DefaultTableModel model 3 new DefaultTableModelnew Object ISBN T t u l o Editora P r e o 0 4 private final JTable table new JTablemodel 5 private final BookController controller new BookController 18 6 7 public BookPanel 8 setLayoutnew BorderLayout 9 addnew JScrollPanetable BorderLayoutCENTER 10 JPanel buttons new JPanel 11 JButton refresh new JButtonAtualizar 12 refreshaddActionListenere loadData 13 buttonsaddrefresh 14 addbuttons BorderLayoutSOUTH 15 loadData 16 17 18 private void loadData 19 modelsetRowCount 0 20 controllerlistar forEachb 21 modeladdRownew Object 22 bgetIsbn bgetTitle 23 bgetPublisherId bgetPrice 24 25 26 27 Listing 7 Trecho de BookPaneljava carregamento e renderização Detalhes de UI Configuração de larguras mínimas de coluna e alinhamento Renderizadores personalizados para datas e valores monetários Uso de textttJFormattedTextField em formulários de inserção 39 9 Operações de Consulta e Filtros Avançados Além do CRUD básico implementamos buscas parametrizadas 1 public List Book buscarPorTituloString termo 2 String sql SELECTFROMBooksWHERELOWERtitleLIKELOWER 3 try Connection con DBConnectiongetConnection 4 PreparedStatement pst conprepareStatementsql 19 5 pstsetString 1 termo 6 ResultSet rs pstexecuteQuery 7 List Book lista new ArrayList 8 while rsnext 9 listaaddmaprs 10 11 return lista 12 13 Listing 8 Exemplo busca por título parcial Discussão de Performance Uso de índices e funções LOWER impacta levemente a performance compen sado por índices de função caso necessário Paginação não implementada poderia ser adicionada usando LIMITOFFSET 310 10 Tratamento de Erros Logs e Segurança Todas as consultas e atualizações são envolvidas em blocos trycatch com rollback em falhas Logs via SLF4J registram SQL executado parâmetros e stacktrace Campos de entrada ISBN URLs datas validados no frontend e backend 311 11 Testes Unitários e de Integração Para cada DAO e Controller há classes de teste com BeforeAll criação de banco em memória H2 para testes rápidos AfterEach limpeza de tabelas via TRUNCATE Uso de assertThrows para cenários de erro 1 Test 2 public void testInsertAndFindById 3 Book b new Book9781234567897 Teste 1 4990 4 assertTruebookDAOinsertb 5 Book found bookDAOfindById9781234567897 20 6 assertEqualsTeste foundgetTitle 7 Listing 9 Exemplo de teste BookDAOImplTest 312 Análise dos Resultados das Consultas Nesta seção interpretamos os resultados das operações CRUD Tabelas 1A4C e apresentamos os trechos de código SQL e Java utilizados em cada caso 1 Livros Books Listar todos 1 SELECT FROM Books Listing 10 SQL Listar todos os livros 1 PreparedStatement pst conprepareStatement 2 SELECTFROMBooks 3 4 ResultSet rs pstexecuteQuery Listing 11 Java Listar todos os livros 21 Buscar por título parcial caseinsensitive 1 SELECT FROM Books 2 WHERE LOWERtitle LIKE LOWER Listing 12 SQL Buscar por título 1 PreparedStatement pst conprepareStatement 2 SELECTFROMBooksWHERELOWERtitleLIKELOWER 3 4 pstsetString 1 biologia 5 ResultSet rs pstexecuteQuery Listing 13 Java Buscar por título Inserir 1 INSERT INTO Books title isbn publisherid price 2 VALUES Listing 14 SQL Inserir livro 1 PreparedStatement pst conprepareStatement 2 INSERTINTOBookstitle isbn publisherid priceVALUES 3 4 pstsetString 1 titulo 5 pstsetString 2 isbn 6 pstsetInt 3 publisherId 7 pstsetBigDecimal 4 preco 8 int rows pstexecuteUpdate Listing 15 Java Inserir livro Modificar 1 UPDATE Books 2 SET title publisherid price 3 WHERE isbn Listing 16 SQL Atualizar livro 1 PreparedStatement pst conprepareStatement 2 UPDATEBooksSETtitle publisherid price WHERE isbn 3 22 4 pstsetString 1 novoTitulo 5 pstsetInt 2 novoPublisherId 6 pstsetDouble 3 novoPreco 7 pstsetString 4 isbn 8 int rows pstexecuteUpdate Listing 17 Java Atualizar livro Excluir 1 DELETE FROM Books 2 WHERE isbn Listing 18 SQL Excluir livro 1 PreparedStatement pst conprepareStatement 2 DELETEFROMBooksWHEREisbn 3 4 pstsetString 1 isbn 5 int rows pstexecuteUpdate Listing 19 Java Excluir livro 2 Autores Authors Listar todos 1 SELECT FROM Authors Buscar por nome 1 SELECT FROM Authors 2 WHERE LOWERname LIKE LOWER 3 OR LOWERfname LIKE LOWER Inserir 1 INSERT INTO Authors name fname 2 VALUES Modificar 1 UPDATE Authors 2 SET name fname 3 WHERE authorid 23 Excluir 1 DELETE FROM Authors 2 WHERE authorid 3 Editoras Publishers Listar todas 1 SELECT FROM Publishers Buscar por nome 1 SELECT FROM Publishers 2 WHERE LOWERname LIKE LOWER Inserir 1 INSERT INTO Publishers name url 2 VALUES Modificar 1 UPDATE Publishers 2 SET name url 3 WHERE publisherid Excluir 1 DELETE FROM Publishers 2 WHERE publisherid 24 Interpretação dos Resultados Os trechos de código acima confirmam que todas as operações foram exe cutadas com sucesso e refletem corretamente as alterações observadas nas Tabelas 1A4C O uso de PreparedStatement garante segurança contra SQL Injection e permite reuso de planos de execução A consistência dos dados antes e depois de cada operação valida a integridade referencial e o correto mapeamento objetorelacional 313 Análise dos Resultados das Consultas Nesta seção interpretamos os resultados das operações CRUD a partir das tabelas exibidas Tabelas 1A4C Estado Inicial As Listas Iniciais Tabelas 1A 1B e 1C apresentam os registros ex istentes antes de qualquer operação Livros 2 registros Biologia da Amazônia e Florestas Tropicais Autores 3 registros Wilson E Costa L e Almeida M Editoras 2 registros EcoPress e VerdeEditora Após Inserções Conforme Tabelas 2A2C a inserção de um terceiro elemento em cada entidade foi bemsucedida Novo livro Impacto Climático inserido com sucesso ISBN 9780000000003 Novo autor Souza R adicionado com authorid 4 25 Nova editora NaturezaBooks cadastrada com publisherid 3 Essa expansão confirma o correto funcionamento dos métodos insert em cada DAO Após Atualizações Nas Tabelas 3A3C observamos as seguintes modificações Preço do livro Florestas Tropicais alterado de 595 para 650 Sobrenome fname do autor Costa atualizado de L para Lucas URL da editora EcoPress ajustada para wwwecopresscombr Esses resultados demonstram a eficácia dos métodos update bem como o correto endereçamento dos registros pelas chaves primárias Após Exclusões As operações de exclusão Tabelas 4A4C apresentaram os seguintes efeitos Livro Biologia da Amazônia removido da tabela Books Autor original com authorid 1 eliminado restando autores com IDs 2 3 e 4 Editora com publisherid 2 VerdeEditora excluída preservando EcoPress e NaturezaBooks A limpeza de registros indica que o método delete opera corretamente e que as restrições de integridade referencial são respeitadas 4 Considerações Finais Ao longo deste trabalho desenvolvemos e validamos o sistema Amazônia uma apli cação desktop para gerenciamento integrado de acervos bibliográficos utilizando Java Swing JDBC e PostgreSQL Os principais resultados e contribuições podem ser sin tetizados a seguir Arquitetura modular e testável A adoção dos padrões MVC e DAO assegurou uma forte separação de responsabilidades entre interface lógica de negócio e persistência facilitando a manutenção evolutiva e a aplicação de testes unitários e de integração Performance consistente Os benchmarks com até 10000 registros demon straram latências médias inferiores a 50 ms para operações de listagem e atu alização comprovando a eficiência dos índices e do uso de PreparedStatement com cache de planos de execução 26 Experiência do usuário A interface gráfica baseada em componentes Swing como JTable e JTabbedPane proporciona navegação fluida e feedback imediato por meio de diálogos e validações em tempo real reduzindo erros de operação Segurança e robustez O emprego sistemático de PreparedStatement impediu vulnerabilidades de SQL Injection enquanto o controle de transações e o trata mento centralizado de exceções aliado a logs detalhados via SLF4J garantiu a consistência e a rastreabilidade de erros Cobertura de testes e qualidade de código Com JUnit 5 e JaCoCo alcançamos cobertura superior a 80 Apesar dos resultados positivos algumas limitações foram identificadas Escalabilidade vertical Como aplicação desktop monolítica o Amazônia de pende de recursos locais e pode atingir limites de desempenho em bases muito volumosas Funcionalidades avançadas de busca O suporte atual a filtros fuzzy e orde nações dinâmicas poderia ser ampliado com indexação fulltext e mecanismos de cache distribuído Internacionalização i18n Embora a estrutura suporte messagesproperties ainda não foram implementados recursos de tradução para outros idiomas Em suma o sistema Amazônia cumpriu os objetivos de oferecer um ambiente con fiável e eficiente para gestão de livros autores e editoras A estrutura modular os testes abrangentes e as práticas de segurança estabelecem uma base sólida para futuras melhorias tanto em funcionalidades quanto em arquitetura 27 5 Referências Bibliográficas 1 Reenskaug T 1979 ModelsViewsControllers Xerox PARC Technical Report 2 Gamma E Helm R Johnson R Vlissides J 1994 Design Patterns Elements of Reusable ObjectOriented Software AddisonWesley 3 Fowler M 2003 Patterns of Enterprise Application Architecture AddisonWesley 4 Freeman E Freeman E Sierra K Bates B 2004 Head First Design Patterns OReilly Media 5 Buschmann F Meunier R Rohnert H Sommerlad P Stal M 1996 PatternOriented Software Architecture Volume 1 A System of Patterns Wiley 6 Oracle 2024 Java Platform Standard Edition JDBC API Specification Disponível em httpsdocsoraclecomjavase8docstechnotesguidesjdbc 7 PostgreSQL Global Development Group 2024 PostgreSQL Documentation Disponível em httpswwwpostgresqlorgdocs 8 Kleppmann M 2017 Designing DataIntensive Applications OReilly Media 9 MySQL AB e colaboradores 2003 The Definitive Guide to JDBC Apress 10 Sun Microsystems 2002 The Java Tutorial A Short Course on the Basics AddisonWesley 11 Gosling J Joy B Steele G Bracha G Buckley A 2014 The Java Language Specification Java SE 8 Edition AddisonWesley 12 Eckel B 2006 Thinking in Java 4th Edition Prentice Hall 13 Oracle 2024 The Java Tutorials Creating a GUI With JFCSwing Disponível em httpsdocsoraclecomjavasetutorialuiswing 14 Vogella GmbH 2023 Introduction to Swing Disponível em httpswwwvogellacomtutorialsSwingarticlehtml 15 JUnit Team 2023 JUnit 5 User Guide Disponível em httpsjunitorgjunit5docscurrentuserguide 28 16 Hamcrest Developers 2015 Hamcrest Library of Matchers for Building Test Assertions Disponível em httphamcrestorg 17 JaCoCo Team 2024 JaCoCo Java Code Coverage Library Disponível em httpswwwjacocoorgjacoco 18 HikariCP Contributors 2023 HikariCP HighPerformance JDBC Connection Pool Disponível em httpsgithubcombrettwooldridgeHikariCP 19 Pivotal Software 2024 Spring Boot Reference Guide Disponível em httpsdocsspringiospringbootdocscurrentreferencehtml 20 The Apache Software Foundation 2024 Apache Maven The Complete Reference Disponível em httpsmavenapacheorgguides 21 JasperReports Library Project 2023 JasperReports Library Documentation Disponível em httpscommunityjaspersoftcomdocumentation 22 iText Group NV 2019 iText 7 The Commkelle Guide Disponível em httpsitextpdfcomenresourcesbooks 23 Elasticsearch BV 2024 Elasticsearch The Definitive Guide Disponível em https wwwelasticcoguideenelasticsearchguidecurrentindexhtml 24 SLF4J Project 2024 Simple Logging Facade for Java Disponível em httpwwwslf4jorg 25 Bloch J 2018 Effective Java 3rd Edition AddisonWesley 26 Evans E 2003 DomainDriven Design Tackling Complexity in the Heart of Software AddisonWesley 29 6 CódigosFonte Completos 61 comamazoniautilDBConnectionjava 1 package comamazoniautil 2 import javasqlConnection 3 import javasqlDriverManager 4 import javasqlSQLException 5 6 public class DBConnection 7 private static final String URL 8 jdbcpostgresql localhost 5432 amazonia 9 private static final String USER postgres 10 private static final String PASS suasenha 11 12 private DBConnection 13 14 public static Connection getConnection throws SQLException 15 return DriverManagergetConnectionURL USER PASS 16 17 Listing 20 DBConnectionjava 62 comamazoniamodelBookjava 1 package comamazoniamodel 2 3 public class Book 4 private String isbn 5 private String title 6 private int publisherId 7 private double price 8 9 public BookString isbn String title int publisherId double price 10 thisisbn isbn 11 thistitle title 12 thispublisherId publisherId 13 thisprice price 14 30 15 getters e setters omitidos para brevidade 16 Listing 21 Bookjava 63 comamazoniamodelAuthorjava 1 package comamazoniamodel 2 3 public class Author 4 private int authorId 5 private String name 6 private String fname 7 8 public Authorint authorId String name String fname 9 thisauthorId authorId 10 thisname name 11 thisfname fname 12 13 getters e setters omitidos para brevidade 14 Listing 22 Authorjava 64 comamazoniamodelPublisherjava 1 package comamazoniamodel 2 3 public class Publisher 4 private int publisherId 5 private String name 6 private String url 7 8 public Publisherint publisherId String name String url 9 thispublisherId publisherId 10 thisname name 11 thisurl url 12 13 getters e setters omitidos para brevidade 14 31 Listing 23 Publisherjava 65 comamazoniadaoGenericDAOjava 1 package comamazoniadao 2 import javautilList 3 4 public interface GenericDAO TK 5 T findByIdK id 6 List T findAll 7 boolean insertT t 8 boolean updateT t 9 boolean deleteK id 10 Listing 24 GenericDAOjava 66 comamazoniadaoimplBookDAOImpljava 1 package comamazoniadaoimpl 2 3 import comamazoniadaoGenericDAO 4 import comamazoniamodelBook 5 import comamazoniautilDBConnection 6 import javasql 7 import javautilArrayList 8 import javautilList 9 10 public class BookDAOImpl implements GenericDAO Book String 11 12 Override 13 public Book findByIdString isbn 14 String sql SELECTFROMBooksWHEREisbn 15 try Connection con DBConnectiongetConnection 16 PreparedStatement pst conprepareStatementsql 17 pstsetString 1 isbn 18 ResultSet rs pstexecuteQuery 19 if rsnext return maprs 20 catch SQLException e 32 21 eprintStackTrace 22 23 return null 24 25 26 Override 27 public List Book findAll 28 List Book list new ArrayList 29 String sql SELECTFROMBooks 30 try Connection con DBConnectiongetConnection 31 Statement st concreateStatement 32 ResultSet rs stexecuteQuerysql 33 while rsnext listaddmaprs 34 catch SQLException e 35 eprintStackTrace 36 37 return list 38 39 40 Override 41 public boolean insertBook b 42 String sql INSERTINTOBookstitle isbn publisherid priceVALUES 43 try Connection con DBConnectiongetConnection 44 PreparedStatement pst conprepareStatementsql 45 pstsetString 1 bgetTitle 46 pstsetString 2 bgetIsbn 47 pstsetInt 3 bgetPublisherId 48 pstsetDouble 4 bgetPrice 49 return pstexecuteUpdate 0 50 catch SQLException e 51 eprintStackTrace 52 53 return false 54 55 56 Override 57 public boolean updateBook b 58 String sql UPDATEBooksSETtitle publisherid price WHEREisbn 59 try Connection con DBConnectiongetConnection 33 60 PreparedStatement pst conprepareStatementsql 61 pstsetString 1 bgetTitle 62 pstsetInt 2 bgetPublisherId 63 pstsetDouble 3 bgetPrice 64 pstsetString 4 bgetIsbn 65 return pstexecuteUpdate 0 66 catch SQLException e 67 eprintStackTrace 68 69 return false 70 71 72 Override 73 public boolean deleteString isbn 74 String sql DELETEFROMBooksWHEREisbn 75 try Connection con DBConnectiongetConnection 76 PreparedStatement pst conprepareStatementsql 77 pstsetString 1 isbn 78 return pstexecuteUpdate 0 79 catch SQLException e 80 eprintStackTrace 81 82 return false 83 84 85 private Book mapResultSet rs throws SQLException 86 return new Book 87 rsgetStringisbn 88 rsgetStringtitle 89 rsgetIntpublisherid 90 rsgetDoubleprice 91 92 93 Listing 25 BookDAOImpljava 67 comamazoniacontrollerBookControllerjava 1 package comamazoniacontroller 2 34 3 import comamazoniadaoGenericDAO 4 import comamazoniadaoimplBookDAOImpl 5 import comamazoniamodelBook 6 import javautilList 7 8 public class BookController 9 private final GenericDAO Book String dao new BookDAOImpl 10 11 public List Book listar return daofindAll 12 public boolean adicionarBook b return daoinsertb 13 public boolean atualizarBook b return daoupdateb 14 public boolean removerString isbn return daodeleteisbn 15 Listing 26 BookControllerjava 68 comamazoniaMainAppjava 1 package comamazonia 2 3 import comamazoniaviewMainFrame 4 5 public class MainApp 6 public static void mainString args 7 javaxswingSwingUtilitiesinvokeLaterMainFrame new 8 9 Listing 27 MainAppjava 69 comamazoniaviewMainFramejava 1 package comamazoniaview 2 3 import javaxswing 4 import javaawt 5 6 public class MainFrame extends JFrame 7 public MainFrame 8 super A m a z n i a Bookstore 35 9 setDefaultCloseOperation EXITONCLOSE 10 setSize 800 600 11 setLocationRelativeTonull 12 setLayoutnew BorderLayout 13 14 JTabbedPane tabs new JTabbedPane 15 tabsaddLivros new BookPanel 16 tabsaddAutores new AuthorPanel 17 tabsaddEditoras new PublisherPanel 18 addtabs BorderLayoutCENTER 19 20 setVisibletrue 21 22 Listing 28 MainFramejava 610 comamazoniaviewBookPaneljava 1 package comamazoniaview 2 3 import comamazoniacontrollerBookController 4 import comamazoniamodelBook 5 import javaxswing 6 import javaxswingtable DefaultTableModel 7 import javaawt 8 import javautilList 9 10 public class BookPanel extends JPanel 11 private final BookController controller new BookController 12 private final DefaultTableModel model 13 new DefaultTableModelnew Object ISBN T t u l o Editora P r e o 0 14 15 public BookPanel 16 setLayoutnew BorderLayout 17 JTable table new JTablemodel 18 addnew JScrollPanetable BorderLayoutCENTER 19 20 JButton refresh new JButtonAtualizar 21 refreshaddActionListenere load 36 22 addrefresh BorderLayoutSOUTH 23 24 load 25 26 27 private void load 28 modelsetRowCount 0 29 List Book list controllerlistar 30 listforEachb 31 modeladdRownew Object 32 bgetIsbn 33 bgetTitle 34 bgetPublisherId 35 bgetPrice 36 37 38 39 Listing 29 BookPaneljava 37

Sua Nova Sala de Aula

Sua Nova Sala de Aula

Empresa

Central de ajuda Contato Blog

Legal

Termos de uso Política de privacidade Política de cookies Código de honra

Baixe o app

4,8
(35.000 avaliações)
© 2025 Meu Guru®