coisas de criança - relatório 4 período
TRANSCRIPT
FACULDADE PITÁGORAS DE UBERLÂNDIA Autorizada pela Portaria no 577/2000 – MEC, de 03/05/2000 BACHARELADO EM SISTEMAS DE INFORMAÇÃO
LOJA COISAS DE CRIANÇA LTDA
ANDRÉ BORSATTI
BRUNO ALVARES DEFENSOR
GABRIEL ARAÚJO GARCIA
MARCOS GUIMARÃES DE MEDEIROS
PAULO HENRIQUE TAVARES
VICTOR HUGO DE OLIVEIRA E SILVA
Uberlândia
2010/1
ANDRÉ BORSATTI
BRUNO ALVARES DEFENSOR
GABRIEL ARAÚJO GARCIA
MARCOS GUIMARÃES DE MEDEIROS
PAULO HENRIQUE TAVARES
VICTOR HUGO DE OLIVEIRA E SILVA
LOJA COISAS DE CRIANÇA LTDA
Relatório Parcial submetido ao curso de
Sistemas de Informação da PITÁGORAS,
como parte dos requisitos para avaliação
do Projeto Interdisciplinar Horizontal
relativo ao 1º semestre de 2010.
Orientador: Prof. Dr. Edson Angoti Júnior
Uberlândia
2010/1
ANDRÉ BORSATTI
BRUNO ALVARES DEFENSOR
GABRIEL ARAÚJO GARCIA
MARCOS GUIMARÃES DE MEDEIROS
PAULO HENRIQUE TAVARES
VICTOR HUGO DE OLIVEIRA E SILVA
LOJA COISAS DE CRIANÇA LTDA
Relatório Parcial submetido ao curso de
Sistemas de Informação da PITÁGORAS,
como parte dos requisitos para avaliação
do Projeto Interdisciplinar Horizontal
relativo ao 1º semestre de 2010.
Orientador: Prof. Msc. Edson Angoti Júnior
Banca Examinadora:
Uberlândia Junho de 2010.
Prof. Msc. Francisco Muller
Profa. Dra. Kátia L. Silva
Uberlândia
2010/1
DEDICATÓRIA
Dedicamos este trabalho primeiramente a
Deus, pois sem ele nada seria possível.
Aos nossos pais, professores e colegas pelo
esforço, dedicação e, compreensão em todos
os momentos.
A todos àqueles que acreditam que a ousadia
e o erro são caminhos para as grandes
realizações.
RESUMO
O objetivo deste documento é a modelagem do sistema para gerência de vendas,
devoluções e emissão de relatórios para a loja Coisas de Criança LTDA, nossa
parceira que proporcionou a estrutura de negócio necessária para o
desenvolvimento do projeto. A partir de reuniões do grupo com a representante da
empresa, foi possível identificar as reais necessidades da loja e dar inicio a
modelagem do aplicativo a ser desenvolvido, que será aqui apresentada.
Utilizando dos padrões da linguagem UML (Unified Modeling Language) para
desenvolvimento de sistemas, foi possível criar os diagramas propostos e
necessários relacionados ao projeto (o qual será desenvolvido em etapas) e, a cada
etapa, um novo fragmento do software será implementado, testado, revisado e
apresentado à banca de avaliação.
Usando como guia este documento utilizará o padrão de arquitetura de software
MVC (Model View Controller) que visa separar a lógica da aplicação (Model), da
interface do usuário (View) e do fluxo da aplicação (Controller). O Model será
desenvolvido em linguagem de programação Java enquanto a View esta sendo
desenvolvido em JSP e o Controller será feito por um HttpServlet, implementado
com o uso do Eclipse e dos frameworks Struts e Hibernate. O mapeamento objeto
relacional foi realizado pelo JDBC juntamente com a utilização do framewok
Hibernate. Para o acesso ao banco de dados foi empregado o padrão de projeto
DAO, configurado para se conectar ao MySQL, o SGBD escolhido para a
persistência dos dados. O servidor web selecionado foi o TomCat, que implementa
as especificações servlet e JSP.
Com o bom uso deste documento, é possível desenvolver o aplicativo que possa
suprir todas as exigências do cliente e, como resultado, o produto final capaz de
agilizar e personalizar o processo de vendas de mercadorias da empresa além de
auxiliar na gerência das despesas da loja a partir da emissão de relatórios.
Palavras chave: Unified Modeling Language, Model View Controller, HttpServlet,
Data Access Object.
Lista de Figuras
Página
Figura 1 – Diagrama de casos de uso....................................................................................19
Figura 2 – Diagrama de classes de negócio...........................................................................33
Figura 3– Diagrama de sequência – Realizar Login..............................................................36
Figura 4 – Diagrama de sequência – Cadastrar Cliente........................................................37
Figura 5– Diagrama de sequência – Cadastrar Funcionário................................................38
Figura 6 – Diagrama de sequência – Cadastrar Fornecedor................................................39
Figura 7 – Diagrama de sequência – Cadastrar Mercadoria................................................40
Figura 8 – Diagrama de sequência – Cadastrar Valor da Comissão....................................41
Figura 9 – Diagrama de entidade e relacionamento – DER..................................................43
Figura 10 – Arquivo "hibernate.cfg.xml" ..............................................................................45
Figura 11 – Classe de entidade Produto................................................................................46
Figura 12 – Diagrama de estado de navegação.....................................................................49
Figura 13 – Arquitetura MVC.................................................................................................51
Figura 14– Arquitetura Framework Struts 2..........................................................................53
Figura 15– Diagrama de classe..............................................................................................57
Figura 16 – Diagrama de classe de projeto por caso de uso implementado.........................58
Figura 17– Diagrama de Pacotes...........................................................................................59
Lista de Quadros
Página
Quadro 1 – Tabela de documentação da regra de negócio RN-01........................................17
Quadro 2 – Tabela de documentação da regra de negócio RN-02.......................................17
Quadro 3 - Tabela de documentação da regra de negócio RN-03........................................17
Quadro 4 – Tabela de documentação da regra de negócio RN-04.......................................17
Quadro 5 – Tabela de documentação da regra de negócio RN-05.......................................18
Quadro 6 – Tabela de documentação do caso de uso – Cadastrar Cliente............................20
Quadro 7 – Tabela de documentação do caso de uso – Cadastrar Funcionário...................21
Quadro 8 – Tabela de documentação do caso de uso – Cadastrar Fornecedor....................22
Quadro 9 – Tabela de documentação do caso de uso – Cadastrar Mercadoria....................23
Quadro 10 – Tabela de documentação do caso de uso – Cadastrar Valor da comissão.......24
Quadro 11 – Tabela de documentação do caso de uso – Efetuar venda................................25
Quadro 12 – Tabela de documentação do caso de uso – Efetuar venda condicional............26
Quadro 13 – Tabela de documentação do caso de uso – Realizar devolução de mercadoria28
Quadro 14 – Tabela de documentação do caso de uso – Realizar login................................29
Quadro 15 – Tabela de documentação do caso de uso – Emitir relatórios............................30
Quadro 16 – Tabela de documentação do caso de uso – Atualizar estoque..........................31
LISTA DE ABREVIATURAS
UML (Unified Modeling Language): é uma linguagem de modelagem que permite
aos desenvolvedores visualizem os produtos de seus trabalhos em diagramas
padronizados.não proprietária de terceira geração. A UML não é uma metodologia de
desenvolvimento, o que significa que ela não diz a você o que fazer primeiro e em
seguida ou como projetar seu sistema, mas sim auxilia a visualizar seu desenho e a
comunicação entre objetos.
JSP (JavaServer Pages): é uma tecnologia utilizada no desenvolvimento de
aplicações para Web. Por ser baseada na linguagem de programação Java, tem a
vantagem da portabilidade de plataforma, que permite a sua execução em diversos
sistemas operacionais. Esta tecnologia permite ao desenvolvedor de páginas para
Internet produzir aplicações que acessem o banco de dados, manipulem arquivos no
formato texto, capturem informações a partir de formulários e captem informações
sobre o visitante e sobre o servidor. Uma página criada com a tecnologia JSP,
depois de instalada em um servidor de aplicação compatível com a tecnologia Java EE,
é transformada em um Servlet.
CSS (Cascading Style Sheets): é uma linguagem de estilo utilizada para definir a
apresentação de documentos escritos em uma linguagem de marcação, como
HTML ou XML. Seu principal benefício é prover a separação entre o formato e o
conteúdo de um documento. Ao invés de colocar a formatação dentro do
documento, o desenvolvedor cria um link para uma página que contém os estilos,
procedendo de forma idêntica para todas as páginas de um portal. Quando quiser
alterar a aparência do portal basta portanto modificar apenas um arquivo.
HTML: é um acrônimo para a expressão inglesa HyperText Markup Language, que no
português pode ser entendido como Linguagem de Marcação de Hipertexto. O
HTML é uma linguagem de marcação utilizada para produzir páginas na Web.
Documentos HTML podem ser interpretados por navegadores.
XML (Extensible Markup Language): subtipo de SGML (acrônimo de Standard
Generalized Markup Language, ou Linguagem Padronizada de Marcação Genérica)
capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade
de compartilhamento de informações através da Internet.
MVC (Model-view-controller): é um padrão de arquitetura de software responsável
pela separação das tarefas de acesso aos dados e lógica de negócio, lógica de
apresentação e de interação com o usuário, introduzindo um componente entre os
dois, que é o Controller. Com o aumento da complexidade das aplicações
desenvolvidas torna-se fundamental a separação entre os dados (Model) e o layout
(View). Desta forma, alterações feitas no layout não afetam a manipulação de dados,
e estes poderão ser reorganizados sem alterar o layout.
EJB ( Enterprise JavaBeans): é um dos principais componentes da plataforma
J2EE (Java 2 Enterprise Edition). É um componente do tipo servidor que executa no
container do servidor de aplicação. O principal objetivo da tecnologia EJB são fornecer
um rápido e simplificado desenvolvimento de aplicações Java baseado em
componentes distribuídas, transacionais, seguras e portáveis.
SGBD (Sistema Gerenciador de Banco de Dados): conjunto de programas de
computador (softwares) responsáveis pelo gerenciamento de uma base de dados. O
principal objetivo é retirar da aplicação cliente a responsabilidade de gerenciar o
acesso, manipulação e organização dos dados. O SGBD disponibiliza uma interface
para que os seus clientes possam incluir, alterar ou consultar dados. Em bancos de
dados relacionais a interface é constituída pelas APIs ou drivers do SGBD, que
executam comandos na linguagem SQL.
JDBC (Java Database Connectivity): conjunto de classes e interfaces (API)
escritas em Java que fazem o envio de instruções SQL para qualquer banco de dados
relacional
API (Application Programming Interface): conjunto de rotinas e padrões
estabelecidos por um software para a utilização das suas funcionalidades por
programas aplicativos que não querem envolver-se em detalhes da implementação do
software, mas apenas usar seus serviços. De modo geral, a API é composta por
uma série de funções acessíveis somente por programação, e que permitem utilizar
características do software menos evidentes ao utilizador tradicional.
WEB (World Wide Web): é um sistema de documentos em hipermídia que são
interligados e executados na Internet.
LTDA: abreviatura de limitada.
CEP (Código de Endereçamento Postal): é um código desenvolvido pelas
administrações postais e criado no sentido de facilitar o encaminhamento e a
entrega das correspondências. Cada administração postal é livre de criar o código
que melhor se adapte à realidade postal e administrativa do seu país.
UF: abreviatura de Unidade da Federação.
CNPJ (Cadastro Nacional da Pessoa Jurídica): é um número único que identifica
uma pessoa jurídica junto à Receita Federal brasileira (órgão do Ministério da
Fazenda), necessário para que a pessoa jurídica tenha capacidade de fazer contratos e
processar ou ser processada. O CNPJ veio substituir o CGC, Cadastro Geral de
Contribuintes e por vezes também é grafado como CNPJ-MF.
IE (Inscrição Estadual): é o registro do contribuinte no cadastro do ICMS mantido
pela Receita Estadual. Com a inscrição, o contribuinte do ICMS passa a ter o registro
formal do seu negócio, junto à Receita Estadual do estado onde está estabelecido.
SUMÁRIO
1 INTRODUÇÃO.................................................................................................................................. 11
1.1 FINALIDADE.................................................................................................................................. 111.2 ESCOPO...................................................................................................................................... 11
2 ESPECIFICAÇÃO DO PROBLEMA.................................................................................................12
2.1 DESCRIÇÃO DO NEGÓCIO E DA EMPRESA.......................................................................................122.2 ESPECIFICAÇÃO DE REQUISITOS....................................................................................................13
2.2.1 Requisitos não funcionais...................................................................................................162.3 REGRAS DE NEGÓCIO................................................................................................................... 17
3 ANÁLISE DO SISTEMA.................................................................................................................... 18
3.1 INTRODUÇÃO................................................................................................................................ 183.2 FERRAMENTA DE MODELAGEM......................................................................................................183.3 DIAGRAMA DE CASOS DE USO......................................................................................................193.4 DESCRIÇÃO DOS CASOS DE USO E ATORES..................................................................................20
3.4.1 Descrição dos Casos de Uso..............................................................................................203.4.2 Descrição dos Atores..........................................................................................................32
3.5 CLASSES DE ANÁLISE................................................................................................................... 333.6 DIAGRAMA DE CLASSES DE NEGÓCIO............................................................................................33
3.6.1 Classes de Fronteira...........................................................................................................333.6.2 Classe Controladora...........................................................................................................343.6.3 Classe de Entidade.............................................................................................................34
3.7 DIAGRAMA DE SEQUÊNCIA............................................................................................................36
4 PERSISTÊNCIA DE DADOS............................................................................................................42
4.1 INTRODUÇÃO................................................................................................................................ 424.2 PADRÃO DE PROJETO DAO..........................................................................................................424.3 DIAGRAMA DE ENTIDADE E RELACIONAMENTO...............................................................................434.4 MAPEAMENTO OBJETO RELACIONAL..............................................................................................43
4.4.1 Acesso a banco de dados com JDBC.................................................................................434.4.2 Mapeamento Objeto Relacional usando o Hibernate..........................................................44
5 PROJETO DE INTERFACE..............................................................................................................47
5.1 INTRODUÇÃO................................................................................................................................ 475.2 TECNOLOGIAS UTILIZADAS.............................................................................................................475.3 DIAGRAMA DE ESTADOS DE NAVEGAÇÃO........................................................................................49
6 ARQUITETURA E CÓDIGO..............................................................................................................50
6.1 INTRODUÇÃO................................................................................................................................ 506.2 APLICAÇÃO EM CAMADAS.............................................................................................................506.3 MODELO MVC............................................................................................................................. 51
6.3.1 Arquitetura MVC................................................................................................................. 516.3.2 Arquitetura Struts................................................................................................................53
6.4 PADRÕES DE PROJETO DA CAMADA DE APRESENTAÇÃO................................................................556.5 PADRÕES DE PROJETO DA CAMADA DE NEGÓCIO..........................................................................556.6 PADRÕES DE PROJETO DA CAMADA DE INTERFACE........................................................................556.7-DIAGRAMA DE CLASSES DE PROJETO............................................................................................57
6.7.1-Diagrama de Classes de Projeto por Caso de Uso Implementado....................................586.7.2-Diagrama de Pacotes.........................................................................................................59
REFERÊNCIAS BIBLIOGRÁFICAS....................................................................................................60
APÊNDICE........................................................................................................................................... 61
12
1 INTRODUÇÃO
1.1 Finalidade
Este documento foi criado com o intuito de modelar às necessidades
da empresa: Loja Coisas de Criança Ltda., para dar suporte à criação dos processos
gerenciais e operacionais do aplicativo.
O público alvo desta documentação está voltado aos alunos envolvidos
com o desenvolvimento do software em questão e avaliadores do projeto.
1.2 Escopo
A documentação aqui produzida é e continuará sendo utilizada como
guia do software a ser implementado, já que nela se encontra a modelagem das
necessidades de informatização do negócio da empresa por meio dos principais
diagramas da UML (Unified Modeling Language).
Este documento pode ser atualizado no decorrer do processo de
construção do software de acordo com as necessidades do projeto com a orientação
do tutor do grupo e professores do curso de Sistemas de Informação ou caso haja
alguma nova especificação do cliente.
Todo o processo de implementação é afetado por esta documentação
afim de se manter a fidelidade do projeto com produto final desejado pelo cliente.
13
2 ESPECIFICAÇÃO DO PROBLEMA
2.1 Descrição do negócio e da empresa
Coisas de Criança é uma empresa do setor de varejo especializada na
venda de artigos infantis. Com mais de 26 anos de mercado em Uberlândia, tornou-
se referência no mercado infantil da cidade, atendendo exclusivamente este público,
com ênfase à idade de 0 a 12 anos, contando também com uma grande
diversificação.
Há quatro anos sob nova direção a loja passou por um processo de
modernização, tanto visual quando em qualidade de artigos vendidos, passando a
vender apenas roupas de alta qualidade e de marcas com referências neste
mercado, trabalhando então com coleções inteiras destas marca.
Atualmente fecha negócio para as suas coleções apenas em feiras de
modas especializadas no setor infantil.
A visão da loja Coisas de Criança é buscar um crescimento relevante e
ser referência para todo o triângulo no setor de moda infantil, buscando sempre
melhorias nos processos e se diferenciando pela qualidade dos produtos vendidos e
pela satisfação dos seus clientes. A empresa pretende, até 2015, atingir estas
conquista.
A missão da empresa e garantir a satisfação total de seus clientes, pais
e filhos de modo que percebam não apenas a qualidade dos produtos mas também
a do atendimento, fazendo com que sejam cultivados vínculos fortes e saudáveis
com a empresa.
O negócio da Coisas de Criança Ltda. é bem definido e transparente.
Trabalhar exclusivamente com o público infantil com artigos de qualidade no setor
de varejo.
Hoje com a nova direção, a loja está em busca de constante
modernização e inovação no setor, pretendendo até o início de 2010 informatizar
toda a loja, permitindo assim um melhor aproveitamento do cadastro de seus cliente,
podendo enxergar suas preferências e estreitando ainda mais o vínculo com estes.
Busca também com esta informatização um cadastro de todos os seus
fornecedores, para um melhor controle dos mesmos e com mais opções de
14
negociações , cruzando informações de preferência de seus clientes com o que os
fornecedores tem a oferecer, garantindo a loja produtos personalizados de acordo
com cada cliente.
A empresa tem orgulho de suas origens e sua história, orgulho de ser
mineira e brasileira, orgulho de há mais de 26 anos trabalhar para um público
especifico e de se destacar neste mercado, hoje é uma loja sólida e madura no
mercado infantil e busca com a nova administração a inovação e melhoria constante
em seus processo, podendo dizer com certeza que cumpre com as obrigações com
seus clientes garantindo aos mesmo satisfação e confiança na prestação de
serviços.
Devido a isso que a Coisas de Criança Ltda. é hoje em Uberlândia
referência no setor de vestuário infantil.
2.2 Especificação de requisitos
Cadastro de clientes: O sistema deve permitir ao funcionário
cadastrar um cliente. Será apresentado um formulário para os dados dos clientes
(inserção do nome do pai ou responsável, contato, endereço, número, CEP,
complemento, bairro, cidade e UF) e também um módulo para cadastrar as crianças
dependentes deste adulto (através do nome da criança, aniversário, sexo, idade e
numeração de vestimenta). Depois de preenchidos os campos obrigatórios e
confirmado o cadastro, o cliente é registrado na base do banco de dados e o sistema
redireciona para a página principal.
Cadastro de fornecedores: O sistema deve permitir ao funcionário
cadastrar um fornecedor. Será apresentado um formulário para os dados dos
fornecedores (CNPJ, IE, nome fantasia, endereço, número, CEP, complemento,
bairro, cidade, UF, contato e marcas da empresa). Depois de preenchidos os
campos obrigatórios e confirmado o cadastro, o fornecedor é registrado na base do
banco de dados e o sistema redireciona para a página principal.
Cadastro de funcionários: O sistema deve permitir ao funcionário
cadastrar um funcionário. Será apresentado um formulário para os dados dos
15
fornecedores (CPF, CTPS, telefone, endereço, número, CEP, complemento, bairro,
cidade, UF e data da admissão). Depois de preenchidos os campos obrigatórios e
confirmado o cadastro o fornecedor é registrado na base do banco de dados e o
sistema redireciona para a página principal.
Cadastro de mercadorias: O sistema deve permitir ao funcionário
cadastrar produtos. Será apresentado um formulário para os atributos do produto
(código, tamanho, sexo, e quantidade). Depois de preenchidos os campos
obrigatórios e confirmado o cadastro, a mercadoria é registrada na base do banco
de dados e o sistema redireciona para a página principal.
Identificação do usuário: O sistema deve permitir a identificação do
usuário. Será apresentada a interface de login com os requisitos de usuário e
senha. O usuário pode ser administrador e funcionário, sendo que, o administrador
possui alguns privilégios em relação ao funcionário. Com o usuário logado, o
sistema apresenta a interface principal de vendas.
Registro da transação de venda: O sistema deve permitir ao
funcionário realizar o registro de venda da mercadoria e deverá manter um registro
de todas as vendas pela loja. Este registro terá o código da mercadoria, valor de
venda, tipo de pagamento e o cliente que efetuou a compra. O funcionário conclui a
venda e é atualizada a base do banco de dados.
Registro de compra condicional: O sistema deve permitir ao
funcionário realizar o registro de mercadoria em condicional para os clientes que
possuem direito a tal, gerando um documento de responsabilidade para o cliente
assinar e ao final do período estipulado efetivar a venda ou devolução da mercadoria
a loja.
16
Devolução de mercadorias: O sistema deve permitir ao funcionário
realizar devolução das mercadorias desejadas. O funcionário informa ao sistema a
mercadoria que será devolvida e a base do banco de dados é atualizada.
Controle de comissões de vendas: Define a comissão de venda
referente ao funcionário durante o período estipulado. Para cada funcionário será
previamente cadastrado um percentual padrão de comissão como também a meta
do período. Esse percentual poderá ser alterado de acordo com as definições do
gestor da loja, o qual terá permissões para tal. A cada venda realizada pelo
funcionário é armazenada a comissão do mesmo.
Controle financeiro: O sistema deve permitir ao funcionário realizar o
controle financeiro da loja. Será gerado um formulário para o cadastro de despesas
fixas (água, energia, salários de empregados, etc.), mensais (funcionários, contador,
investimentos, etc.) e contas a receber.
São cadastradas as despesas e o sistema gerará todo controle destas.
Geração de relatórios: O sistema deve possibilitar a geração de
relatórios de todas as transações da empresa.
Comissões: Por funcionário;
Vendas: Por funcionário;
Por tipo de roupa;
Por roupa mais vendida;
Por clientes;
Por clientes que mais compraram.
Financeiro: Contas a receber ou a pagar por período;
Despesas fixas;
Despesas mensais;
Balanço mensal ou por período (relação de contas
pagas e recebidas).
17
Funcionário: Dados cadastrais dos funcionários;
Funcionário por tipo.
O Administrador seleciona o tipo de relatório a ser gerado, o sistema emite o
relatório com as informações do determinado tipo de relatório e retorna para a
pagina principal.
2.2.1 Requisitos não funcionais
O sistema deverá ser desenvolvido em Linguagem JAVA: O sistema
será implementado utilizando linguagem de programação Java por ser uma
linguagem moderna e orientada a objetos e pela facilidade de se encontrar material
de apoio.
O sistema deverá utilizar o SGBD My SQL: O sistema deverá contem
o SGBD MySQL para guardar as informações que serão armazenadas do sistema e
deverá operar em ambiente WEB.
O sistema deverá permitir o uso de leitor de código de barras. Deve
conter um leitor de código de barras para facilitar o cadastro de mercadorias e
realizar vendas.
O sistema deverá ter controle de acesso com níveis de restrição aos
usuários: O aplicativo terá acesso para administrador e para funcionários, no qual
o acesso para o administrador contém algumas funcionalidades extras.
18
2.3 Regras de negócio
As regras de negócio dizem respeito às operações, definições e
restrições de uma organização para alcançar seus objetivos. São usadas para
alcançar os objetivos de uma empresa, a comunicação entre ela e terceiros e,
também, demonstrar as obrigações legais. A regra de negócio se aplica diretamente
ao desenvolvimento de determinada plataforma de software voltada para um sistema
de informação.
Nome Pagamento com cheque RN- 01
Descrição
Um cliente só poderá efetuar pagamento com cheque, caso não possua
restrições de credito no SPC.
Quadro 1-Tabela de documentação de regra de negócio RN-01
Nome Compra condicional RN- 02
Descrição
Um cliente só poderá efetuar compra em condicional, com aprovação previa da
gerente da loja.
Quadro 2 - Tabela de documentação de regra de negócio RN-02
Nome Compra de mercadoria RN- 03
Descrição
Fornecedores serão cadastrados no sistema se possuírem marcas conhecida e
de qualidade.
Quadro 3- Tabela de documentação de regra de negócio RN-03
Nome Devoluções de Mercadoria RN- 04
Descrição
Devoluções para serem aceitas devem atender os seguintes requisitos:
Estar dentro do prazo de seis dias decorridos da data de compra;
Apresentação do cupom de venda;
A roupa deve apresentar a etiqueta da loja;
Quadro 4- Tabela de documentação de regra de negócio RN -04
19
Nome Cheque Devolvido RN- 05
DescriçãoCliente que tiver algum cheque devolvido só poderá comprar a vista ou no
cartão.
Quadro 5- Tabela de documentação de regra de negócio RN-05
3 ANÁLISE DO SISTEMA
3.1 Introdução
A coleção de notações, metodologias e ferramentas usadas para reunir
detalhes, analisar um problema prévio para o projeto e a implementação do sistema
de informação é conhecida como Análise de Sistemas de Informação.
A análise de sistemas deve garantir que o sistema de informação
proposto atenda às necessidades do usuário, seja entregue no tempo e possa ser
atualizado sem muitas despesas. Enfatiza a investigação do problema e a proposta
de solução que atenda os requisitos de análise.
O uso de modelos é importante para padronizar o desenvolvimento dos
sistemas. Estes devem ser utilizados como base na implementação do programa a
fim de proporcionar a melhor conduta em desenvolvimento de sistemas e atingir o
objetivo final que é o produto desenvolvido de acordo com as especificações do
cliente e o mesmo satisfeito com os resultados.
3.2 Ferramenta de modelagem
As ferramentas de modelagem são um importante recurso na criação
dos modelos para a implementação do projeto e interferem diretamente na
qualidade do produto final.
Para softwares desenvolvidos a partir do paradigma da programação
orientada a objeto, a linguagem gráfica mais utilizada é a UML(Linguagem de
Modelagem Unificada), que por meio dos seus diagramas é possível representar
20
sistemas de software sob diversas perspectivas de visualização, facilitando assim a
comunicação de todas as pessoas e objetos envolvidos no processo de
desenvolvimento de um sistema.
3.3 Diagrama de Casos de Uso
uc PGI
Coisas de Criança
Funcionario
Realizar Login
Administrador
Cadastrar Clientes
Cadastrar Fornecedor
Cadastrar Funcionario
Cadastrar Mercadoria
Registrar Venda Condicional
Realizar Dev olução de Mercadoria
Cadastrar Valor da Comissão
Emitir Relatorios
Administrador
Efetuar Venda
Atualizar Estoque«include»
«include»
«include»
Figura 1: Diagrama de Caso de uso
21
3.4 Descrição dos Casos de Uso e Atores
3.4.1 Descrição dos Casos de Uso
Nome Cadastrar Cliente CSU-01
Sumário O caso de uso descreve as etapas para cadastro de cliente.
Ator primário: Funcionário
Pré-condição: O funcionário deve estar logado no sistema.
Pós-condição: O cadastro do cliente é efetuado com sucesso.
Fluxo Principal
1. O funcionário seleciona a opção “Cadastrar Cliente”.
2. O sistema apresenta as opções do tipo de cliente (Físico ou Jurídico).
3. O funcionário seleciona a opção desejada.
4. O sistema solicita os dados referentes ao cliente.
5. O funcionário informa os dados solicitados.
6. O sistema valida os dados informados e solicita confirmação.
7. O funcionário confirma os dados.
8. O sistema registra os dados e emite uma mensagem de cadastro concluído com
sucesso
9. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O usuário seleciona a opção para cancelar o cadastro.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [6]: Erro de Validação
6.1. O sistema acusa algum erro de validação nos dados informados.
6.2. O caso de uso retorna ao passo 5.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 6 - Tabela de documentação de caso de uso - Cadastrar Cliente
22
Nome Cadastrar Funcionário CSU-02
Sumário O caso de uso descreve as etapas para cadastro de funcionário.
Ator primário: Administrador.
Pré-condição: O administrador deve estar logado no sistema.
Pós-condição: O cadastro do funcionário é efetuado com sucesso.
Fluxo Principal
1. O administrador seleciona a opção “Cadastrar Funcionário”.
2. O sistema solicita os dados referentes ao funcionário.
3. O administrador informa os dados solicitados.
4. O sistema valida os dados informados e solicita confirmação.
5. O administrador confirma os dados.
6. O sistema registra os dados e emite uma mensagem de cadastro concluído com
sucesso.
7. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O administrador seleciona a opção para cancelar o cadastro.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 7- Tabela de documentação de caso de uso - Cadastrar Funcionário
23
Nome Cadastrar Fornecedor CSU-03
Sumário O caso de uso descreve as etapas para cadastro de fornecedor.
Ator primário: Administrador.
Pré-condição: O administrador deve estar logado no sistema.
Pós-condição: O cadastro do fornecedor é efetuado com sucesso.
Fluxo Principal
1. O administrador seleciona a opção “Cadastrar Fornecedor”.
2. O sistema solicita os dados referentes ao fornecedor.
3. O administrador informa os dados solicitados.
4. O sistema valida os dados informados e solicita confirmação.
5. O administrador confirma os dados.
6. O sistema registra os dados e emite uma mensagem de cadastro concluído com
sucesso.
7. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O administrador seleciona a opção para cancelar o cadastro.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 8- Tabela de documentação de caso de uso - Cadastrar fornecedor
24
Nome Cadastrar Mercadoria CSU-04
Sumário O caso de uso descreve as etapas para cadastro de fornecedor.
Ator primário: Administrador.
Pré-condição: O administrador deve estar logado no sistema.
Pós-condição: O cadastro da mercadoria é efetuado com sucesso.
Fluxo Principal
1. O administrador seleciona a opção “Cadastrar Mercadoria”.
2. O sistema solicita os dados referentes à mercadoria.
3. O administrador informa os dados solicitados.
4. O sistema valida os dados informados e solicita confirmação.
5. O administrador confirma os dados.
6. O sistema registra os dados e emite uma mensagem de cadastro concluído com
sucesso.
7. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O administrador seleciona a opção para cancelar o cadastro.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 9- Tabela de documentação de caso de uso - Cadastrar mercadoria
25
Nome Cadastrar Valor da Comissão CSU-05
Sumário O caso de uso descreve as etapas para cadastro do valor de comissão.
Ator primário: Administrador.
Pré-condição: O administrador deve estar logado no sistema.
Pós-condição: O cadastro do valor da comissão é efetuado com sucesso.
Fluxo Principal
1. O administrador seleciona a opção “Cadastrar Valor da Comissão”.
2. O sistema solicita os dados referentes ao valor da comissão.
3. O administrador informa os dados solicitados.
4. O sistema valida os dados informados e solicita confirmação.
5. O administrador confirma os dados.
6. O sistema registra os dados e emite uma mensagem de cadastro concluído com
sucesso.
7. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O administrador seleciona a opção para cancelar o cadastro.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 10- Tabela de documentação de caso de uso - Cadastrar valor da comissão
26
Nome Efetuar Venda CSU-06
Sumário O caso de uso descreve o processo de registro da transação de venda.
Ator primário: Funcionário
Pré-condição: O funcionário deve estar logado no sistema.
Pós-condição: O registro de venda é efetuado com sucesso.
Fluxo Principal
1. O funcionário seleciona a opção “Registrar Transação de Venda”.
2. O sistema solicita os dados referentes ao produto.
3. O funcionário informa os dados solicitados.
4. O sistema apresenta os dados do produto e solicita confirmação.
5. O funcionário confirma os dados.
6. O sistema solicita os dados referentes ao cliente.
7. O funcionário informa os dados solicitados.
8. O sistema apresenta os dados do cliente e solicita confirmação.
9. O funcionário confirma os dados
10. O sistema solicita os dados referentes à transação de venda.
11. O funcionário informa os dados solicitados.
12. O sistema valida os dados informados e solicita confirmação.
13. O funcionário confirma os dados.
14. O sistema armazena as informações e exibe uma mensagem de transação
concluída com sucesso.
15. O caso de uso é encerrado.
Fluxo Alternativo [13]: Cancelamento
13.1. O funcionário seleciona a opção para cancelar a confirmação de dados da
transação de venda.
13.2. O caso de uso retorna ao passo 2.
Fluxo de Exceção [12]: Erro de validação
27
12.1. O sistema acusa algum erro de validação nos dados informados.
12.2. O caso de uso retorna ao passo 2.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 11- Tabela de documentação de caso de uso - Efetuar venda
Nome Efetuar Venda Condicional CSU-07
Sumário O caso de uso descreve o processo para efetuar venda condicional.
Ator primário: Funcionário
Pré-condição: O funcionário deve estar logado no sistema.
Pós-condição: O registro de venda condicional é efetuado com sucesso.
Fluxo Principal
1. O funcionário seleciona a opção “Registrar Venda Condicional”.
2. O sistema solicita os dados referentes ao produto.
3. O funcionário informa os dados solicitados.
4. O sistema apresenta os dados do produto e solicita confirmação.
5. O funcionário confirma os dados.
6. O sistema solicita os dados referentes ao cliente.
7. O funcionário informa os dados solicitados.
8. O sistema apresenta os dados do cliente e solicita confirmação.
9. O funcionário confirma os dados
10. O sistema valida os dados informados, os apresenta e solicita confirmação.
11. O funcionário confirma os dados.
12. O sistema armazena as informações e exibe uma mensagem de transação
concluída com sucesso.
13. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
28
3.1. O funcionário seleciona a opção para cancelar a confirmação de dados do produto.
3.2. O caso de uso é encerrado.
9.1. O funcionário seleciona a opção para cancelar a confirmação de dados do cliente.
9.2. O caso de uso retorna ao passo 6.
11.1. O funcionário seleciona a opção para cancelar a confirmação de dados
informados.
11.2. O caso de uso retorna ao passo 2.
Fluxo de Exceção [10]: Erro de validação
10.1. O sistema acusa algum erro de validação nos dados informados.
10.2. O caso de uso retorna ao passo referente ao formulário que foi preenchido de
forma incorreta (passo 3 ou passo 6).
Regras de Negócio Associadas
RN-02
Quadro 12- Tabela de documentação de caso de uso - Efetuar venda condicional
Nome Realizar Devolução de Mercadoria CSU-08
Sumário O caso de uso descreve o processo de devolução de mercadoria
Ator primário: Funcionário
Pré-condição: O funcionário deve estar logado no sistema.
Pós-condição: A devolução da mercadoria é efetuada com sucesso.
Fluxo Principal
1. O funcionário seleciona a opção “Realizar Devolução de Mercadoria”.
2. O sistema solicita os dados referentes à mercadoria.
3. O funcionário informa os dados solicitados.
4. O sistema valida os dados informados e solicita confirmação.
5. O funcionário confirma os dados.
6. O sistema armazena as informações e exibe uma mensagem de sucesso
7. O caso de uso é encerrado.
29
Fluxo Alternativo [3]: Cancelamento
3.1. O funcionário seleciona a opção para cancelar a confirmação de dados do
produto.
3.2. O caso de uso é encerrado.
5.1. O funcionário seleciona a opção para cancelar confirmação de dados
5.2. O caso de uso retorna ao passo 3.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
RN-04
Quadro 13- Tabela de documentação de caso de uso - Realizar devolução de mercadoria
Nome Realizar Login CSU-09
Sumário O caso de uso descreve o processo de login no sistema.
Ator primário: Administrador
Ator secundário: Funcionário
Pré-condição: O usuário deve estar cadastrado no sistema.
Pós-condição: Usuário logado no sistema
Fluxo Principal
1. O usuário seleciona a opção para login.
2. O sistema apresenta a interface para login e solicita usuário e senha.
3. O usuário informa os dados solicitados.
4. O sistema valida o nome de usuário e a senha.
5. O sistema apresenta a interface principal do programa.
6. O caso de uso é encerrado.
30
Fluxo Alternativo [3]: Cancelamento
3.1. O usuário seleciona a opção para cancelar login.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [4]: Erro de validação
4.1. O sistema acusa algum erro de validação nos dados informados.
4.2. O caso de uso retorna ao passo 3.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 14- Tabela de documentação de caso de uso - Realizar Login
31
Nome Emitir Relatórios CSU-10
Sumário O caso de uso descreve o processo de emissão de relatórios.
Ator primário: Administrador
Pré-condição: O usuário deve estar logado no sistema.
Pós-condição: O relatório escolhido deve ser emitido.
Fluxo Principal
1. O administrador seleciona a opção para emissão de relatórios.
2. O sistema apresenta as opções de relatórios possíveis a serem emitidos.
3. O administrador seleciona a opção que deseja.
4. O sistema apresenta uma janela solicitando nome de usuário e senha.
5. O administrador informa os dados solicitados.
6. O sistema valida os dados informados.
7. O sistema emite o relatório desejado.
8. O caso de uso é encerrado.
Fluxo Alternativo [3]: Cancelamento
3.1. O administrador seleciona a opção para cancelar emissão de relatórios.
3.2. O caso de uso é encerrado.
Fluxo de Exceção [ ]: Erro de validação
6.1. O sistema acusa algum erro de validação nos dados informados.
6.2. O caso de uso retorna ao passo 4.
Regras de Negócio Associadas
Não há regras de negócio
Quadro 15- Tabela de documentação de caso de uso - Emitir relatórios
32
Nome Atualizar estoque CSU-11
Sumário O caso de uso descreve o processo de atualização de estoque.
Ator primário: Administrador
Ator secundário: Funcionário
Pré-condição: O usuário deve estar cadastrado no sistema.
Pós-condição: Usuário logado no sistema
Fluxo Principal
1. O usuário seleciona a opção para efetuar venda.
2. O sistema apresenta o caso de uso efetuar venda.
3. O usuário confirma a venda.
4. È registrado a atualização do estoque.
Fluxo Alternativo [3]: Cancelamento
2.1. O usuário cancela a realização da venda
2.2. O caso de uso é encerrado.
Fluxo de Exceção [ ]:
Não há fluxo de Exceção
Regras de Negócio Associadas
Não há regras de negócio
Quadro 16- Tabela de documentação de caso de uso - Atualizar estoque
33
3.4.2 Descrição dos Atores
Funcionário: um funcionário tem como responsabilidade realizar vendas a
clientes assim como cadastrá-los e realizar devoluções de mercadorias ou vendas
condicionais. Ele deve logar no sistema para poder ter acesso a essas
funcionalidades.
Administrador: é uma especialização de funcionário. Além de poder realizar
as mesmas tarefas que um funcionário comum, ele possui privilégios especiais que
são cedidos apenas a este tipo de usuário. Funções que somente um administrador
pode executar: cadastrar funcionário, cadastrar fornecedor, cadastrar mercadoria,
cadastrar valor da comissão e emitir relatórios.
34
3.5 Classes de análise
3.6 Diagrama de Classes de Negócio
Figura 2- Diagrama de Classes de Negócio
3.6.1 Classes de Fronteira (o bruno já fez)
class Business Process Model
Cliente
- endereco: String- estado: String- nome: String- obs: String
+ criaDependente() : void+ realizaCompra() : void+ realizarDevolucao() : void
Produto
- cod: String- descricao: String- grupo: String- preco: float- qde: int- tamanho: String
Item
- codProduto: String- descricaoProduto: String- itemCod: int- quantidadeProduto: int
Venda
- cpf: String- item: ArrayList<Item>- itemCod: int- pedNumero: int
+ atualizaCodigoItens() : void+ quantidadeDoProduto(String) : int+ realizaVenda() : void+ removeArray(int) : void
Estoque
- quantidadeItens: int
+ atualizarEstoque() : void
Funcionario
- id: String- nome: String
+ cadastrarCliente(Cliente) : void
Fornecedor
- cnpj: String- nome: String
Administrador
+ cadastrarFonecedor(String) : void+ emitirRelatorios() : Relatorio
Relatorios
- relatorio1: String- relatorio2: String
+ imprimeRelatorio() : void
Devolucao
- codProduto: String
Dependente
- cpfTitular: String- nome: String- numeracao: int- numero: int
Pagamento
- forma: String- valor: int
+ alterar() : void+ gravar() : void
0..*
emite
1
1
cadastra
0..*
1é atualizado
1..*
1..
cadastra
1..*
1
realiza
0..*
0..*
contém
1
1
é pago por
1
1..*
atualiza
1
1
realiza
1..*
1
pode ter
1..*
1..*
possui
1
1
possui
1..*
1
é um*
35
Interface de Menu: Contém todos os links para todas as
funcionalidades do sistema, algumas acessíveis a todos, outras somente a um grupo
de administradores.
Interface Vendas: É a pagina inicial do sistema, é também a pagina que
mais será utilizada, por meio dela serão efetuadas todas as transações de venda da
empresa.
Interface Cadastrar Cliente: Formulário para cadastro de cliente e seus
dependentes, para assim manter uma base de cliente para gerar relatórios e
disseminar promoções futuramente.
Interface Cadastrar Produtos: Formulário para cadastro de produtos da
empresa. É ai que ocorre a entrada em estoque de todos os produtos da empresa e
é onde são cadastradas as características de cada produto com seus respectivos
códigos.
Interface Atualiza Estoque: Formulário para se fazer a atualização do
estoque dos produtos da loja, colocando o código do produto se pode colocar a
atualização da quantidades dos produtos para se dar entrada em estoque.
3.6.2 Classe Controladora
Figura (xx) Esteriotipo da classe de controladora
As classes controladoras coordenam o fluxo de um caso de uso
complexo, encapsulando lógica que não se enquadra naturalmente nas
responsabilidades das entidades. São tipicamente dependentes de aplicação.
(isso já mudou)Controlador de Frente (FrontController) –
Responsável por fazer o gerenciamento de todas as requisições WEB. Esta classe
contém o mapa de todas as classes “command” que implementam os métodos das
classes entidades.
Controlador de Comandos(Command)– É uma interface de Command
36
que responsável por recebe as requisições da classe FrontController e implementar
os métodos das classes entidades. Cada funcionalidade do sistema possui um
caminho no mapa do FrontController e uma classe Command associada para
implementar os métodos.
3.6.3 Classe de Entidade
Figura (xx)Esteriotipo da classe de Entidade
As Classes de Entidade modelam informação persistente, sendo
tipicamente independentes da aplicação. Geralmente são necessárias para cumprir
alguma responsabilidade do produto, e freqüentemente correspondem a tabelas de
bancos de dados.
Entidade Cliente – Contém todos os atributos referentes ao cliente,
bem como os métodos associados, e o seu respectivo construtor. Esta classe é
responsável por criar os objetos Cliente para manipulação dentro do programa. A
classe command implementa estes métodos que estão implícitos dentro desta
classe.
Entidade Item – Contém todas as características referentes ao Item,
contém os métodos associados, e o seu respectivo construtor. A command
implementa estes métodos que estão implícitos dentro desta classe.
Entidade Produto – Esta classe possui todos os atributos da classe
produto, com seus respectivos construtores. Ela é responsável por criar o objeto
produto para a persistência em banco de dados. A classe command associada
37
implementa os métodos desta classe.
Entidade Venda – Contém todas as características referentes a Venda
com seus respectivos atributos, contém também os métodos associados, e o seu
construtor. A command desta classe implementa estes métodos que estão implícitos
dentro desta classe.
Entidades DAO - São responsáveis por fazer a persistência em banco
de dados dos objetos criados nas outras entidades, nas entidades DAO são feitas as
conexões com o banco de dados e são feitas as persistências em banco de dados.
Entidade ConectionFactory - Classe responsável por criar a conexão
com o banco de dados, nesta classe estão inclusos informações como usuário e
senha do banco de dados.
3.7 Diagrama de Sequência
Os diagramas de seqüência enfatizam o ordenamento temporal das
ações. Os diagramas de seqüência são orientados para exprimir, de preferência, o
desenrolar temporal de seqüências de ações. É mais difícil representar lógicas de
seleção e repetição sem prejudicar a inteligibilidade do diagrama. Os roteiros
representam desdobramentos da lógica do caso de uso. É preferível usar diagramas
separados para representar roteiros resultantes de diferentes caminhos lógicos.
38
sd Realizar Login
Usuário JSP Struts Login Interceptor
Preenche dados
login.action
intercept(ActionInvocationinvocation)
return Ok
Página Principal
Página Principal
Figura 3: Diagrama de Sequência – Realizar Login
O diagrama da Figura 3 mostra a sequência de ações para efetuar a realização de login
sd cadastrarFuncionario
funcionario JSP struts FornecedorAction FornecedorBO FornecedorDAO
alt
[Novo funcionário]
[Atualiza funcionário]
alt
[Resposta novo funcionário]
[Resposta atualiza funcionário]
solicita cadastro de funcionario
funcionarioForm.jsp
fornece dados
insertFuncionarioUpdate.action
insertFuncionarioUpdate()
gravaFuncionario(funcionario)
grava(fun)
editar(funcionario)
editar(funcionario)
buscaTodosFuncionario()
buscaTodosFuncionarios()
buscaTodosFuncionarios()
return listaFuncionarios
return listaFuncionarios;
return "ok"
listarFuncionarios.jsp
inserido com sucesso
atualizado com sucesso
39
sd Cadastrar Clientes
Usuário JSP Struts ClienteAction ClienteBO DAO
alt
[Novo cliente]
[Editar cliente]
alt
[Resposta editar cliente]
[Resposta novo cliente]
Solicita Cadastro de Cliente
clienteForm.jsp
Usuário fornece dados
insereClienteUpdate.action
insereClienteUpdate()
insereCliente(cliente)
grava(cliente)
atualizaCliente(cliente)
atualiza(cliente)
return "ok"
clienteForm.jsp
Inserido com sucesso
Editado com sucesso
Figura 4: Diagrama de Sequência – Cadastrar Clientes
O diagrama da figura 4 mostra a sequencia de ações para a realização do cadastro de um cliente, note que no diagrama existe a possibilidade tanto de cadastrar um novo cliente como a opção de editar um cliente já existente, pois o fluxo de ações é o mesmo para ambos.
40
Figura 5: Diagrama de Sequência – Cadastrar Funcionário
O diagrama da Figura 5 mostra a sequência de ações para efetuar o cadastramento de um funcionário, note que no diagrama existe a possibilidade tanto de cadastrar um novo funcionário como também editar um funcionário já existente no sistema.
sd fornecedor
Funcionário JSP StrutsFornecedorAction FornecedorBO FuncionarioDAO
alt
[Novo Fornecedor]
[Atualizar Fornecedor]
alt
[Resposta novo fornecedor]
[Resposta atualiza fornecedor]
solicita cadastro de fornecedor
cadastroFornecdedorForm.jsp
fornece dados
insereFornecedorUpdate.action
insereFornecedorUpdate()
insereFornecedor(fornecedor)
cadastrar(fornecedor)
atualizaFornecedor(fornecedor)
atualiza(fornecedor)
buscaTodosFornecedores()
l istarTodos()
l istar()
return listaFornecedor
return lista
return "ok"
listaFornecedor.jsp
Cadastrado com sucesso!
Editado com sucesso!
sd cadastrarMercadoria
Funcionario JSP Struts ProdutoAction ProdutorBO ProdutoDAO
alt
[Novo produto]
[Atualizar produto]
alt
[Resposta novo produto]
[Resposta atualizar produto]
solicita aba produto
produtoForm.jsp
fornece dados
insereProduto.action
insereProduto()
insereProduto(produto)
grava(produto)
editaProduto(produto)
atualiza(produto)
buscaTodosProduto()
produtoService.buscaTodos()
todos()
listaProdutos
todos
listarProdutos.jsp
listarProdutos.jsp
Produto gravado com sucesso
Produto alterado com sucesso
41
Figura 6: Diagrama de Sequência – Cadastrar Fornecedor
O diagrama da Figura 6 descreve os passos para realizar-se o cadastramento de um novo fornecedor, é possível tanto o cadastramento de um novo fornecedor como também a edição de dados de um já cadastrado anteriormente.
sd cadastrarComissao
funcionario JSP struts FuncionarioAction FuncionarioBO FuncionarioDAO
solicita lista de fornecedores
buscaTodosfuncionarios.action
buscaTodosfuncionarios()
buscaTodosFuncionarios()
buscaTodosFuncionarios()
return listaFuncionarios
return listaFuncionarios
return "ok"
listarFuncionarios.jsp
listarFuncionarios.jsp
seleciona editar comissão
editaComissao.action
buscaFuncionario()
buscaFuncionario(id)
buscaFuncionario(id)
return (Funcionario) q.uniqueResult()
return (Funcionario) q.uniqueResult()
return "ok"
editarComissao.jsp
formulário para editar comissão
preenche formulário
alteraComissaoFuncionario.action
alteraComissaoFuncionario()
editar(funcionario)
editar(funcionario)
return buscaTodosFuncionario()
buscaTodosFuncionario()
buscaTodosFuncionarios()
buscaTodosFuncionarios()
return listaFuncionarios
return listaFuncionarios
return "ok"
listarFuncionarios.jsp
listarFuncionarios.jsp
42
Figura 7: Diagrama de Sequência – Cadastrar Mercadoria
O diagrama da Figura 7 descreve os passos para se realizar o cadastramento de uma nova mercadoria (Produto de Venda), é possível tanto o cadastramento de uma nova mercadoria como também a edição de dados de uma mercadoria já cadastrado anteriormente.
43
Figura 8: Diagrama de Sequência – Cadastrar Valor da Comissão
4 PERSISTÊNCIA DE DADOS
44
4.1.1 Introdução
A persistência de dados, na computação, refere-se ao armazenamento
não-volátil de dados, por exemplo, o armazenamento em um dispositivo físico como
um disco rígido. Quando se grava um arquivo no disco, por exemplo, o dado está
sendo "eternizado", ou seja, deixa de ficar volátil na memória RAM e passa a ser
escrito num dispositivo que armazena a informação de modo que ela não
desapareça facilmente.
Verificar isso No desenvolvimento deste sistema, os dados
relacionados aos formulários preenchidos pelos funcionários da loja serão
persistidos no banco de dados MySQL e serão usados na gestão das atividades da
empresa, como por exemplo o controle de estoque, controle de venda, controle
financeiro, emissão de relatórios e cruzamento de pedidos e preferências para a
personalização do atendimento e clientes mais satisfeitos.
4.2 Padrão de Projeto DAO
O padrão de projeto DAO é responsável pela manutenção dos dados
como inserir, apagar e atualizar dados no banco de dados assim como prover
métodos de busca de dados persistidos e listar dados de várias formas.
No caso deste projeto, classe DAO também é a responsável pela
chamada da classe Connection Factory, que cria uma conexão com o banco de
dados e retorna essa conexão a classe DAO.
4.3 Diagrama de Entidade e Relacionamento
45
Cliente
CLI_CODIGO: INTEGER
CLI_CPF: CHAR(15)CLI_NOME: CHAR(40)CLI_DATANASC: DATECLI_TELEFONE: CHAR(50)CLI_CELULAR: CHAR(50)CLI_ENDERECO: CHAR(40)CLI_ENDNUMERO: INTEGERCLI_CEP: CHAR(10)CLI_COMPLEMENTO: CHAR(15)CLI_BAIRRO: CHAR(40)CLI_CIDADE: CHAR(40)CLI_UF: CHAR(40)
Dependente
CLI_CODIGO: INTEGER (FK)DEP_CODIGO: INTEGER
DEP_NOME: CHAR(40)DEP_DATANASC: DATEDEP_SEXO: CHAR(15)DEP_NUMERACAO: INTEGER
Fornecedor
FOR_CODIGO: INTEGER
FOR_CNPJ: CHAR(50)FOR_IE: CHAR(30)FOR_NOMEFANTASIA: CHAR(60)FOR_ENDERECO: CHAR(40)FOR_ENDNUMERO: INTEGERFOR_CEP: CHAR(15)FOR_COMPLEMENTO: CHAR(50)FOR_BAIRRO: CHAR(30)FOR_CIDADE: CHAR(40)FOR_CONTATO: CHAR(60)FOR_UF: CHAR(40)FOR_MARCAS: TEXTFOR_NOME: CHAR(50)
Funcionario
FUN_CODIGO: INTEGER
FUN_CPF: CHAR(15)FUN_CTPS: CHAR(50)FUN_NOME: CHAR(40)FUN_TELEFONE: INTEGERFUN_CELULAR: INTEGERFUN_ENDERECO: CHAR(40)FUN_CEP: CHAR(10)FUN_ENDNUMERO: INTEGERFUN_COMPLEMENTO: CHAR(15)FUN_BAIRRO: CHAR(40)FUN_CIDADE: CHAR(40)FUN_UF: CHAR(40)FUN_ADMISSAODATA: DATEFUN_COMISSAO: INTEGER
Item
ITE_CODIGO: INTEGER
PRO_CODIGO: BIGINT(15) (FK)PED_CODIGO: CHAR(11) (FK)ITE_QUANTIDADE: INTEGERITE_PRECOUNITARIO: FLOATITE_NUMERO: INTEGER
Login
FUN_CODIGO: INTEGER (FK)
LOG_USUARIO: CHAR(30)LOG_SENHA: CHAR(15)LOG_GRUPO: CHAR(1)
Pedido
PED_CODIGO: INTEGER
FUN_CODIGO: INTEGER (FK)CLI_CODIGO: INTEGER (FK)PED_VALORTOTAL: FLOATPED_DATA: DATETIMEPED_FORMPAGAMENTO: CHAR(15)PED_TIPO: CHAR(15)PED_STATUS: CHAR(15)PED_OBSERVACAO: TEXT
Produto
PRO_CODIGO: BIGINT(15)
FOR_CODIGO: INTEGER (FK)PRO_QUANTIDADE: INTEGERPRO_TAMANHO: CHAR(2)PRO_SEXO: CHAR(1)PRO_PRECO: FLOATPRO_DESCRICAO: CHAR(40)PRO_CODIGOBARRAS: CHAR(100)
Figura 9: Diagrama de entidade e relacionamento
O diagrama da Figura 9 descreve o modelo de dados de um sistema com alto nível de abstração. Ele é a principal representação do Modelo de Entidades e Relacionamentos. É usado para representar o modelo conceitual do negócio.
4.4 Mapeamento Objeto Relacional
O Mapeamento objeto relacional é uma técnica de desenvolvimento
utilizada para reduzir a impedância da programação orientada aos objetos utilizando
bancos de dados relacionais. As tabelas do banco de dados são representadas
através de classes e os registros de cada tabela são representados como instâncias
das classes correspondentes.
Com esta técnica, o programador não precisa se preocupar com os
comandos em linguagem SQL; ele irá usar uma interface de programação simples
que faz todo o trabalho de persistência.
Não é necessária uma correspondência direta entre as tabelas de
dados e as classes do programa. A relação entre as tabelas onde originam os dados
e o objecto que os disponibiliza é configurada pelo programador, isolando o código
do programa das alterações à organização dos dados nas tabelas do banco de
46
dados.
A forma como este mapeamento é configurado depende da ferramenta
que estamos a usar, em nosso projeto usaremos o Hibernate.
4.4.1 Acesso a banco de dados com JDBC
A JDBC(Java Data Base Connectivity) é um conjunto de interfaces e
classes em Java com objetivo de padronizar o modo com que um aplicativo se
conecta com banco de dados, implementando a funcionalidade definida pelo padrão
SQL Call Level Interface ou SQLCLI.
A maioria dos fornecedores de bancos de dados oferece uma
implementação particular de SQLCLI.
A vantagem de JDBC é a portabilidade da aplicação cliente, inerente
da linguagem Java. A JDBC compreende uma especificação para ambos: os
desenvolvedores de drivers JDBC, que A API JDBC permite utilizar caminhos
distintos para acessar a base de dados, e os desenvolvedores de aplicações clientes
que precisem acessar bancos de dados em Java.
4.4.2 Mapeamento Objeto Relacional usando o Hibernate
O Hibernate é um framework de mapeamento objeto/relacional para
Java. Possui um conjunto de classes e interfaces e tem como objetivo
disponibilizar objetos para a função de armazenar, persistir os dados.
Ele permite o mapeamento de objetos relacionais para classes Java
através de annotations para determinar como deverá ser feita a transformação dos
dados entre classes e tabelas e também auxilia no controle das pesquisas e
retorno de dados, podendo reduzir significativamente o tempo de desenvolvimento
antes investido em controlar o relacionamento objeto-relacional.
Uma das funcionalidades do Hibernate é a geração de código através
da engenharia reversa, que possibilita a implementação das classes Java de
entidade a partir da estrutura das tabelas criadas no Banco de Dados. Tendo sido
essa a maneira utilizada para iniciar-se a codificação do sistema em questão.
47
As bibliotecas de Mapeamento Objeto Relacional fazem o mapeamento
de tabelas para classes. Como exemplo o banco de dados desenvolvido para o
sistema possui uma tabela chamada Historico, a aplicação possuirá, uma classe
denominada Historico. Essa classe definirá atributos, que serão usados para receber
e alterar os dados dos campos das tabelas, além de métodos para realizar as
operações.
A figura 10 abaixo apresenta o arquivo onde os pacotes e as classes
anotadas são declaradas em um arquivo XML regular, geralmente o
"hibernate.cfg.xml".
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/pgi</property>
<property name="connection.username">root</property><property name="connection.password"></property><!-- JDBC connection pool (use the built-in) --><property name="connection.pool_size">1</property>
<!-- SQL dialect --><property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management --><property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache --><property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property>
<property name="connection.useUnicode">true</property><property name="connection.characterEncoding">UTF-8</property>
<!-- Está tag cria as tabelas no banco de dados, manter comentado -->
<!--<property name="hibernate.hbm2ddl.auto">create-drop</property>--><property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.autocommit">true</property>
<mapping class="coisasdecrianca.com.entidade.Cliente" /><mapping class="coisasdecrianca.com.entidade.Dependente" /><mapping class="coisasdecrianca.com.entidade.Fornecedor" /><mapping class="coisasdecrianca.com.entidade.Funcionario" />
<mapping class="coisasdecrianca.com.entidade.Item" /><mapping class="coisasdecrianca.com.entidade.Produto" /><mapping class="coisasdecrianca.com.entidade.User" /><mapping class="coisasdecrianca.com.entidade.Venda" />
</session-factory></hibernate-configuration>
48
Figura 10 - Arquivo "hibernate.cfg.xml"
Para uma melhor compreensão, o quandro abaixo, da classe produto,
demonstra as anotações utilizadas nos mecanismos de persistência.
Figura xx Classe de entidade produto
Figura 11 – Classe de entidade Produto.
Quanto à aplicabilidade das anotações implementadas:
...@Entity@Table(name = "produto", catalog = "pgi")public class Produto implements java.io.Serializable{
@Id@GeneratedValue(strategy = GenerationType.AUTO)@Column(name = "pro_codigo", unique = true, nullable = false)private Integer id;
@Column(name = "pro_codigobarras", unique = true)private String codigo;
@Column(name = "for_codigo")private Integer fornecedorCodigo;
@Column(name = "pro_quantidade")private int quantidade;
@Column(name = "pro_tamanho")private String tamanho;
@Column(name = "pro_sexo")private String sexo;
@Column(name = "pro_preco")private float preco;
@Column(name = "pro_descricao")private String descricao;
…
49
@Entity: declara a classe como uma classe de entidade (ou uma classe
persistente). Id, todas as classes de entidade (entity classes) persistentes
precisarão de tal atributo se quisermos utilizar todos os recursos do Hibernate.
@Table: usada para definir qual tabela será usada para persistir os objetos dessa
classe. Se essa anotação não for usada, o Hibernate irá procurar por uma tabela
com o mesmo nome da classe.
@Id: declara qual campo, atributo da classe será usado como identificador. Neste
caso, foi definido o atributo "id".
@Column: usada para definir as propriedades dos atributos.
5 PROJETO DE INTERFACE
5.1 Introdução
O projeto de interfaces visa à melhor interação possível entre o usuário
e o sistema, tendo em vista as premissas de desing e funcionalidades que o sistema
necessita, uma interface apresentável e funcional são requisitos indispensáveis para
um sistema limpo e que não canse a pessoa que interage diariamente com ele, a
interface é importante, pois é ela a porta de entrada e o cartão de visita do sistema.
5.2 Tecnologias utilizadas
Java Server Pages (JSP): é uma tecnologia utilizada no
desenvolvimento de aplicações para Web. Por ser baseada na linguagem de
programação Java, tem a vantagem da portabilidade de plataforma, que permite a
sua execução em diversos sistemas operacionais. Esta tecnologia permite ao
desenvolvedor de páginas para Internet produzir aplicações que acessem o banco
de dados, manipulem arquivos no formato texto, capturem informações a partir de
formulários e captem informações sobre o visitante e sobre o servidor.
50
Uma página criada com a tecnologia JSP, depois de instalada em um
servidor de aplicação compatível com a tecnologia Java EE, é transformada em um
Servlet.
São exemplos de servidor compatível com a tecnologia JSP o Tomcat,
que será utilizado no projeto de desenvolvimento do aplicativo web da empresa
Coisas de Criança LTDA e o Glassfish.
Outra tecnologia utilizada foi o Cascading Style Sheets(CSS), que é
uma linguagem de estilo utilizada para definir a apresentação de documentos
escritos em uma linguagem de marcação, como HTML ou XML. Seu principal
benefício é prover a separação entre o formato e o conteúdo de um documento.
Em vez de colocar a formatação dentro do documento, o
desenvolvedor cria um link (ligação) para uma página que contém os estilos,
procedendo de forma idêntica para todas as páginas de um portal. Quando se quiser
alterar a aparência do portal basta, portanto modificar apenas um arquivo.
Utilizamos também da tecnologia JavaScript, que trata de uma
linguagem de programação criada pela Netscape em 1995 para atender,
principalmente, as necessidades de validação de formulários no lado do cliente e
interação com a página.
Javascript tem sintaxe semelhante à do Java, mas é totalmente
diferente no conceito e no uso. Esta linguagem possui tipagem mutável e variáveis
dinâmicas que podem assumir vários tipos diferentes durante a execução já que as
variáveis não são tipadas, é interpretado ao invés de compilado, possui ótimas
ferramentas padrão para listagens e oferece bom suporte a expressões regulares.
Usando o Javascript, é possível modificar dinamicamente os estilos dos
elementos da página em HTML, apesar de que, nesta etapa do projeto o foco do uso
deste script está na validação de formulários e não na dinâmica dos estilos.
Para arquitetura o grupo optou pelo uso do MVC, que se trata de um
padrão de arquitetura de software responsável pela separação das tarefas de
acesso aos dados e lógica de negócio, lógica de apresentação e de interação com o
51
usuário, introduzindo um componente entre os dois, que é o Controller. Com o
aumento da complexidade das aplicações desenvolvidas torna-se fundamental a
separação entre os dados (Model) e o layout (View). Desta forma, alterações feitas
no layout não afetam a manipulação de dados, e estes poderão ser reorganizados
sem alterar o layout.
E na implementação do programa foi utilizado a linguagem de
programação JAVA que é uma linguagem de programação orientada a objetos e que
fornece uma vasta API e recursos além das facilidades de encontrar material de
apoio.
Utilizamos também os frameworks hibernate, struts e tiles, cada um
com suas particularidades. Com o struts foi possível fazer um melhor controle das
ações que o sistema deverá realizar. Já o uso do hibernate facilitou a forma com que
os objetos relacionais serão manipulados e persistência e gerenciamento de
sessões para transações do aplicativo. E com o tiles o reuso de código e todas as
vantagens deste conceito muito importante e utilizado por desenvolvedores, que
entre suas diversas vantagens podemos citar o grande ganho de tempo e
produtividade, característica relevante para o desenvolvimento deste projeto.
5.3 Diagrama de estados de navegação
52
ui Business Process Model
Inicio
Login principal
Final
Cadastrar Cliente Cadastrar ProdutoAtualiza Estoque
Cadastrar Produto
Identificação OK
Cadastrar ClienteCadastrarProduto
Efetuar Venda
Cadastrar Cliente
Atualizar Estoque
EfetuarVenda
CadastrarCliente
Atualizar Estoque
Efetuar Venda
Cadastrar Produto
Atualizar Estoque
Figura 12: Diagrama de estado de navegação
6 ARQUITETURA E CÓDIGO
6.1 Introdução
O processo de planejamento do software é fundamental para um
desenvolvimento de um projeto de alta qualidade, pois um planejamento bem feito
reduz a complexidade, o tempo e facilita futuras alterações necessárias no
programa, alem de nortear sobre a responsabilidade de cada área no projeto,
visando sempre atender as necessidades do usuário.
6.2 Aplicação em Camadas
53
Uma das premissas para um desenvolvimento de sistema que tenha
código limpo, seja funcional e tenha a distinção entre tipos de códigos com funções
diferentes é a aplicação em camadas, em que cada camada é responsável por um
tipo de código diferente, fazendo assim que o código se torne mais claro de se
entender. A aplicação em camadas distingue os códigos em Apresentação, Controle
e Persistência em banco de dados, cada camada tem a suas funções definida, com
isso não é valido colocar componentes de uma camada em outra.
6.3 Modelo MVC
6.3.1 Arquitetura MVC
54
Figura 13: Arquitetura MVC
O modelo de três camadas físicas, divide um aplicativo de modo que a lógica de
negócio reside no meio das três camadas físicas. Isto é chamado de camada física
intermediária ou camada física de negócios. A maior parte do código escrito reside
na camada de apresentação e de negócio.
A arquitetura MVC - (Modelo Visualização Controle) fornece uma maneira de dividir
a funcionalidade envolvida na manutenção e apresentação dos dados de uma
aplicação. A arquitetura MVC não é nova e foi originalmente desenvolvida para
mapear as tarefas tradicionais de entrada , processamento e saída para o modelo de
interação com o usuário. Usando o padrão MVC fica fácil mapear esses conceitos no
domínio de aplicações Web multicamadas.
Na arquitetura MVC o modelo representa os dados da aplicação e as regras do
negócio que governam o acesso e a modificação dos dados. O modelo mantém o
estado persistente do negócio e fornece ao controlador a capacidade de acessar as
funcionalidades da aplicação encapsuladas pelo próprio modelo.
Um componente de visualização renderiza o conteúdo de uma parte particular do
modelo e encaminha para o controlador as ações do usuário. Acessa também os
dados do modelo via controlador e define como esses dados devem ser
apresentados.
55
Um controlador define o comportamento da aplicação. É ele que interpreta as ações
do usuário e as mapeia para chamadas do modelo. Em um cliente de aplicações
Web essas ações do usuário poderiam ser cliques de botões ou seleções de menus.
As ações realizadas pelo modelo incluem ativar processos de negócio ou alterar o
estado do modelo. Com base na ação do usuário e no resultado do processamento
do modelo, o controlador seleciona uma visualização a ser exibida como parte da
resposta a solicitação do usuário. Há normalmente um controlador para cada
conjunto de funcionalidades relacionadas.
A arquitetura de 3 camadas que esta representada abaixo é uma implementação do
modelo MVC . O modelo MVC esta preocupado em separar a informação de sua
apresentação.
Camada de apresentação ou visualização - Não esta preocupada em como a
informação foi obtida ou onde ela foi obtida apenas exibe a informação.
Inclui os elementos de exibição no cliente : HTML , XML , ASP , Applets.
É a camada de interface com o usuário.
É usada para receber a entrada de dados e apresentar o resultado.
Camada de lógica da Aplicação - É o coração da aplicação. Responsável por tudo
que a aplicação vai fazer.
Modela os dados e o comportamento por atrás do processo de negócios;
Se preocupa apenas com o armazenamento, manipulação e geração de
dados;
É um encapsulamento de dados e de comportamento independente da
apresentação.
Camada de Controle - determina o fluxo da apresentação servindo como uma
camada intermediária entre a camada de apresentação e a lógica.
Controla e mapeia as ações.
Vantagens do modelo MVC:
56
1. Como o modelo MVC gerencia múltiplos visualizadores usando o mesmo
modelo é fácil manter, testar e atualizar sistemas múltiplos;
2. É muito simples incluir novos clientes apenas incluindo seus visualizadores e
controles;
3. Torna a aplicação escalável;
4. É possível ter desenvolvimento em paralelo para o modelo , visualizador e
controle pois são independentes;
Desvantagens do modelo MVC:
1. Requer uma quantidade maior de tempo para analisar e modelar o sistema;
2. Requer pessoal especializado;
3. Não é aconselhável para pequenas aplicações;
6.3.2 Arquitetura Struts
Figura 14: Arquitetura Framework Struts 2
Struts é um framework de desenvolvimento da camada controladora, numa
estrutura seguindo o padrão Model 2 (uma variante do MVC oficializada pela Sun),
de aplicações web (principalmente) construído em Java para ser utilizado em um
57
container web em um servidor J2EE. Utilizado parafacilitar a implementação da
arquitetura MVC em aplicações JSP.
Ciclo de vida:
O usuário envia requisição e então os Interceptors configurados são
acionados para aplicar funcionalidades comuns tais como: validação, upload de
arquivos etc.
Após isso, o FilterDispatcher analisa a requisição e determina a ação a
ser executada através do método relativo a ação invocada. O método que executa a
ação devolve uma resposta ao struts que então retorna a requisição exibindo o
resultado para o usuário.
Por que utilizar o Framework Struts 2?
Padrão de mercado
Aumento de produtividade
Foco nas regras do negócio
Criação de componentes/aplicações reutilizáveis
Integração com as principais ferramentas
Separa a lógica do negócio da camada de apresentação
Facilita a população de beans;
Simplifica o uso de servlets, necessitando apenas a criação de classes
Action;
Com suas tags dispensa o uso de scriptlets em 98% dos casos.
6.4 Padrões de Projeto da Camada de Apresentação
58
A camada de apresentação encapsula toda a lógica relacionada com a
visualização e comunicação com a interface do usuário. Ela não esta preocupada
em como a informação foi obtida ou onde ela foi obtida, apenas exibe as
informações. É usada para receber a entrada de dados e apresentar os resultados.
É nela que são feitas as requisições e respostas HTTP, o
gerenciamento de sessão http e geração de HTML, JavaScript e recursos no lado-
cliente
Em nosso projeto, a camada de apresentação é feita pela JSP, que,
junto com o CSS são os responsáveis pela apresentação e formatação da interface
do usuário, sendo assim, todos os formulários, objetos e imagens do lado do cliente
são organizados através da Java Server Pages que possui div’s CSS embutidas no
corpo do código JSP.
6.5 Padrões de Projeto da Camada de Negócio
A camada de negócio é a responsável por desacoplar as camadas de
apresentação e de serviço. Nela é feito o encapsulamento da lógica de consulta e
criação de objetos de serviços e é responsável por hospedar toda a lógica de
negócios e provê o acoplamento entre o acesso aos dados e a interface do usuário.
Neste projeto foi utilizado o modelo de componentes Enterprise
JavaBeans (EJB) para a construção de componentes
6.6 Padrões de Projeto da Camada de Interface
A camada de interface com o usuário é projetada para atender as
seguintes considerações:
Gerenciamento do fluxo de controle, que está diretamente relacionado
com o estado de navegação do usuário com a aplicação;
Gerenciamento de estado, que trata da disposição das informações a
outra parte do aplicativo;
Separação da lógica que controla o fluxo e o estado da lógica que
59
exibe a informação para o usuário e a lógica de captura de dados;
Encapsulamento do controle de fluxo e do estado para um caso de uso
especifico, que resulta na possibilidade do re-uso da interface com o usuário do nível
do caso de uso.
Sendo assim, a implementação da camada de interface com o usuário
tem como funcionalidade tornar fácil o desenvolvimento de fluxos de processos e
interfaces de navegação complexos que tenham o potencial de serem re-utilizados
em múltiplos cenários, permitindo a evolução da aplicação.
Especificamente temos:
Separação do código de controle de fluxo (navegação) das páginas,
formulários e controles com os quais os usuários interagem.
Abstração do gerenciamento de estado do caso de uso isolando formulários e
controles que atuam com os dados.
Utilização do mesmo modelo de programação - e até do mesmo código - para
o módulo que gerencia o controle de fluxo e o estado em diferentes tipos de
aplicações, incluindo-se: aplicações Windows, WEB, e para dispositivos
móveis.
Desenvolvimento de aplicações que gerenciem a navegação do usuário em
cenários complexos; por exemplo: re-atribuição de atividades já iniciadas para
diferentes usuários ou tornar possível interromper uma atividade e reiniciá-la
posteriormente. O trabalho em uma central de atendimento telefônico é um
bom exemplo para as necessidades descritas.
Portanto, a camada de interface foi criada com o intuito de atender as
necessidades comumente encontradas quando do desenvolvimento de aplicações
com um grau de complexidade médio ou maior onde as interações do usuário com a
aplicação envolve fluxos de processos elaborados.
class Business Process Model
Cliente
- endereco: String- estado: String- nome: String- obs: String
+ criaDependente() : void+ realizaCompra() : void+ realizarDevolucao() : void
Produto
- cod: String- descricao: String- grupo: String- preco: float- qde: int- tamanho: String
Item
- codProduto: String- descricaoProduto: String- itemCod: int- quantidadeProduto: int
Venda
- cpf: String- item: ArrayList<Item>- itemCod: int- pedNumero: int
+ atualizaCodigoItens() : void+ quantidadeDoProduto(String) : int+ realizaVenda() : void+ removeArray(int) : void
Estoque
- quantidadeItens: int
+ atualizarEstoque() : void
Funcionario
- id: String- nome: String
+ cadastrarCliente(Cliente) : void
Fornecedor
- cnpj: String- nome: String
Administrador
+ cadastrarFonecedor(String) : void+ emitirRelatorios() : Relatorio
Relatorios
- relatorio1: String- relatorio2: String
+ imprimeRelatorio() : void
Devolucao
- codProduto: String
Dependente
- cpfTitular: String- nome: String- numeracao: int- numero: int
Pagamento
- forma: String- valor: int
+ alterar() : void+ gravar() : void
0..*
emite
1
1
cadastra
0..*
1é atualizado
1..*
1..
cadastra
1..*
1
realiza
0..*
0..*
contém
1
1
é pago por
1
1..*
atualiza
1
1
realiza
1..*
1
pode ter
1..*
1..*
possui
1
1
possui
1..*
1
é um*
60
6.7-Diagrama de Classes de Projeto
61
Figura 15: Diagrama de classe
62
6.7.1-Diagrama de Classes de Projeto por Caso de Uso Implementado
pkg Business Process Model
command
+ CadastraClienteCommand
+ CadastraMercadoriaCommand
+ CancelaProdutosCommand
+ CancelaVendaCommand
+ Command
+ ConfirmaCancelaProdutoCommand
+ ConfirmaDadosClienteCommand
+ ConfirmaVendaCommand
+ EfetuaVendaCommand
+ FormCadastraClienteCommand
+ FormCadastraMercadoriaCommand
+ FormCancelaProdutoCommand
+ FormConfirmaVendaCommand
+ InitCommand
+ NovoLoginCommand
controlador
+ FrontController
DAO
+ ClienteDAO
+ MercadoriaDAO
+ VendaDAO
jdbc
+ ConnectionFactory
modelo
+ Administrador
+ Cliente
+ Dependente
+ Devolucao
+ Estoque
+ Fornecedor
+ Funcionario
+ Item
+ Produto
+ Relatorio
+ Venda
Figura 16: Diagrama de Classes de projeto por Caso de Uso implementado
63
6.7.2-Diagrama de Pacotes
O diagrama de pacotes do sistema foi criado pelo Eclipse UML que é
um plugin que auxilia a geração de diagramas UML.
O diagrama de pacote exibe a estrutura de classes e pacotes de como
o sistema foi desenvolvido. A figura 17 mostra todos os pacotes que foram criados
no sistema.
Figura 17: Diagrama de Pacotes
64
REFERÊNCIAS BIBLIOGRÁFICAS
http://www.msdnbrasil.com.br/Tecnologias/arquitetura/nova/blocos_disp/imp_interface
http://www.slideshare.net/brenovit/modelo-de-camadas
http://www.argonavis.com.br/cursos/java/j931/J931_01.pdf
http://pt.wikipedia.org/wiki/P%C3%A1gina_principal
http://pt.wikipedia.org/wiki/Regras_de_neg%C3%B3cio
http://pt.wikipedia.org/wiki/Hibernate
http://pt.wikipedia.org/wiki/Struts
http://www.ucb.br/prg/professores/fgoulart/STRUTS_fgoulart.pdf
APÊNDICE
Código do arquivo struts.xml
65
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default" namespace="/">
<result-types><result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" /></result-types>
<interceptors>
<interceptor name="login"class="coisasdecrianca.com.interceptor.LoginInterceptor" />
<interceptor-stack name="loginStack"><interceptor-ref name="servlet-config" /><interceptor-ref name="params" /><interceptor-ref name="login" /><interceptor-ref name="prepare" /><interceptor-ref name="chain" /><interceptor-ref name="model-driven" /><interceptor-ref name="fileUpload" /><interceptor-ref name="static-params" /><interceptor-ref name="params" /><interceptor-ref name="conversionError" /><interceptor-ref name="validation" /><interceptor-ref name="workflow" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack" />
<global-results><result type="tiles" name="login">tiles.login</result>
</global-results>
<!-- Ações Venda --><action name="vender" method="verificaVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.vender</result><result type="tiles" name="erro">tiles.vender</result>
</action><action name="cancelarVenda" method="cancelarVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.vender</result><result type="tiles" name="erro">tiles.vender</result>
</action><action name="insereItem" method="insereItem"
class="coisasdecrianca.com.action.VendaAction">
66
<result type="tiles" name="ok">tiles.vender</result><result type="tiles" name="erro">tiles.vender</result>
</action><action name="deleteItemVenda" method="deleteItemVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.vender</result><result type="tiles" name="erro">tiles.vender</result>
</action><action name="concluirVenda" method="concluirVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.concluirVenda</result><result type="tiles" name="erro">tiles.concluirVenda</result>
</action><action name="insereClienteVenda" method="insereClienteVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.insereClienteVenda</result><result type="tiles" name="erro">tiles.insereClienteVenda</result>
</action><action name="insereClienteVendaFinal" method="insereClienteVendaFinal"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.concluirVenda</result><result type="tiles" name="erro">tiles.concluirVenda</result>
</action><action name="finalizarVenda" method="finalizarVenda"
class="coisasdecrianca.com.action.VendaAction"><result type="tiles" name="ok">tiles.concluirVenda</result><result type="tiles" name="erro">tiles.concluirVenda</result>
</action>
<!-- Ações Cliente --><action name="cadastrarCliente" method="cadastrarCliente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrar</result>
</action><action name="insereClienteUpdate" method="insereClienteUpdate"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="input">tiles.cadastrar</result><result type="tiles" name="ok">tiles.cadastrar</result><result type="tiles" name="erro">tiles.cadastrar</result>
</action><action name="cadastrarDependente" method="cadastrarDependente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrarDependente</result>
</action><action name="insereDependente" method="insereDependente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrar</result><result type="tiles" name="erro">tiles.cadastrar</result>
</action><action name="editarDependente" method="editarDependente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrarDependente</result><result type="tiles" name="erro">tiles.cadastrarDependente</result>
</action><action name="deleteDependente" method="deleteDependente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrar</result>
67
<result type="tiles" name="erro">tiles.cadastrar</result></action><action name="buscaTodosClientes" method="buscaTodosClientes"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.listarClientes</result>
</action><action name="editarCliente" method="editarCliente"
class="coisasdecrianca.com.action.ClienteAction"><result type="tiles" name="ok">tiles.cadastrar</result><result type="tiles" name="erro">tiles.cadastrar</result>
</action>
<!-- Ações Produto --><action name="cadastrarProduto" method="cadastrarProduto"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.cadastrarProduto</result>
</action><action name="insereProduto" method="insereProduto"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="input">tiles.cadastrarProduto</result> <result name="ok" type="redirect-action">buscaTodosProduto</result><result type="tiles" name="erro">tiles.cadastrarProduto</result>
</action><action name="buscaTodosProduto" method="buscaTodosProduto"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.listarProduto</result><result type="tiles" name="erro">tiles.listarProduto</result>
</action><action name="editarProduto" method="editarProduto"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.cadastrarProduto</result><result type="tiles" name="erro">tiles.listarProduto</result>
</action><action name="atualizarEstoque" method="atualizarEstoque"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.atualizarEstoque</result><result type="tiles" name="erro">tiles.listarProduto</result>
</action><action name="atualizaQuantEstoque" method="atualizaQuantEstoque"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.atualizarEstoque</result><result type="tiles" name="erro">tiles.atualizarEstoque</result>
</action><action name="insereFornecedorProduto" method="insereFornecedorProduto"
class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.insereFornecedorProduto</result><result type="tiles" name="erro">tiles.cadastrarProduto</result>
</action><action name="insereFornecedorProdutoFinal"
method="insereFornecedorProdutoFinal"class="coisasdecrianca.com.action.ProdutoAction"><result type="tiles" name="ok">tiles.cadastrarProduto</result><result type="tiles" name="erro">tiles.insereFornecedorProduto</result>
</action>
68
<!-- Funcionario -->
<action name="buscaTodosfuncionarios" method="buscaTodosFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.listarFuncionarios</result><result type="tiles" name="erro">tiles.listarFuncionarios</result>
</action>
<action name="cadastrarFuncionario" method="cadastrarFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.cadastrarFuncionario</result>
</action>
<action name="insertFuncionarioUpdate" method="insertFuncionarioUpdate"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="input">tiles.cadastrarFuncionario</result><result type="tiles" name="ok">tiles.listarFuncionarios</result><result type="tiles" name="erro">tiles.cadastrarFuncionario</result>
</action>
<action name="excluiFuncionario" method="excluiFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.listarFuncionarios</result>
</action>
<action name="buscaFuncionarioEditar" method="buscaFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.editarFuncionario</result><result type="tiles" name="erro">tiles.editarFuncionario</result>
</action>
<action name="editaFuncionario" method="insertFuncionarioUpdate"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.listarFuncionarios</result><result type="tiles" name="erro">tiles.listarFuncionarios</result>
</action>
<!-- comissão -->
<action name="editaComissao" method="buscaFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.editarComissao</result><result type="tiles" name="erro">tiles.listarFuncionarios</result>
</action>
<action name="alteraComissaoFuncionario" method="alteraComissaoFuncionario"class="coisasdecrianca.com.action.FuncionarioAction"><result type="tiles" name="ok">tiles.listarFuncionarios</result><result type="tiles" name="erro">tiles.listarFuncionarios</result>
</action>
<!-- Ações Fornecedor --><action name="buscaTodosFornecedores" method="buscaTodosFornecedores"
69
class="coisasdecrianca.com.action.FornecedorAction"><result type="tiles" name="ok">tiles.listaFornecedor</result><result type="tiles" name="erro">tiles.listaFornecedor</result>
</action><action name="insereFornecedorUpdate" method="insereFornecedorUpdate"
class="coisasdecrianca.com.action.FornecedorAction"><result type="tiles" name="input">tiles.cadastrarFornecedor</result><result type="tiles" name="ok">tiles.listaFornecedor</result><result type="tiles" name="erro">tiles.cadastrarFornecedor</result>
</action><action name="novoFornecedor" method="novoFornecedor"
class="coisasdecrianca.com.action.FornecedorAction"><result type="tiles" name="ok">tiles.cadastrarFornecedor</result>
</action><action name="editarFornecedor" method="editarFornecedor"
class="coisasdecrianca.com.action.FornecedorAction"><result type="tiles" name="ok">tiles.cadastrarFornecedor</result><result type="tiles" name="erro">tiles.cadastrarFornecedor</result>
</action>
<!-- Ações Login --><action name="login" method="login"
class="coisasdecrianca.com.action.LoginAction"><result name="ok" type="redirect-action">vender</result><result type="tiles" name="erro">tiles.login</result>
</action>
<action name="logout" method="logout"class="coisasdecrianca.com.action.LoginAction"><result type="tiles" name="ok">tiles.login</result>
</action>
</package></struts>