coisas de criança - relatório 4 período

86
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

Upload: aborsatt

Post on 27-Jun-2015

359 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Coisas de Criança - Relatório 4 Período

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

Page 2: Coisas de Criança - Relatório 4 Período

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

Page 3: Coisas de Criança - Relatório 4 Período

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

Page 4: Coisas de Criança - Relatório 4 Período

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.

Page 5: Coisas de Criança - Relatório 4 Período

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.

Page 6: Coisas de Criança - Relatório 4 Período

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

Page 7: Coisas de Criança - Relatório 4 Período

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

Page 8: Coisas de Criança - Relatório 4 Período

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.

Page 9: Coisas de Criança - Relatório 4 Período

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

Page 10: Coisas de Criança - Relatório 4 Período

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.

Page 11: Coisas de Criança - Relatório 4 Período

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

Page 12: Coisas de Criança - Relatório 4 Período
Page 13: Coisas de Criança - Relatório 4 Período

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.

Page 14: Coisas de Criança - Relatório 4 Período

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

Page 15: Coisas de Criança - Relatório 4 Período

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

Page 16: Coisas de Criança - Relatório 4 Período

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.

Page 17: Coisas de Criança - Relatório 4 Período

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).

Page 18: Coisas de Criança - Relatório 4 Período

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.

Page 19: Coisas de Criança - Relatório 4 Período

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

Page 20: Coisas de Criança - Relatório 4 Período

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

Page 21: Coisas de Criança - Relatório 4 Período

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

Page 22: Coisas de Criança - Relatório 4 Período

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

Page 23: Coisas de Criança - Relatório 4 Período

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

Page 24: Coisas de Criança - Relatório 4 Período

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

Page 25: Coisas de Criança - Relatório 4 Período

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

Page 26: Coisas de Criança - Relatório 4 Período

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

Page 27: Coisas de Criança - Relatório 4 Período

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

Page 28: Coisas de Criança - Relatório 4 Período

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

Page 29: Coisas de Criança - Relatório 4 Período

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.

Page 30: Coisas de Criança - Relatório 4 Período

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.

Page 31: Coisas de Criança - Relatório 4 Período

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

Page 32: Coisas de Criança - Relatório 4 Período

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

Page 33: Coisas de Criança - Relatório 4 Período

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

Page 34: Coisas de Criança - Relatório 4 Período

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.

Page 35: Coisas de Criança - Relatório 4 Período

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*

Page 36: Coisas de Criança - Relatório 4 Período

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

Page 37: Coisas de Criança - Relatório 4 Período

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

Page 38: Coisas de Criança - Relatório 4 Período

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.

Page 39: Coisas de Criança - Relatório 4 Período

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

Page 40: Coisas de Criança - Relatório 4 Período

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.

Page 41: Coisas de Criança - Relatório 4 Período

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.

Page 42: Coisas de Criança - Relatório 4 Período

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.

Page 43: Coisas de Criança - Relatório 4 Período

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.

Page 44: Coisas de Criança - Relatório 4 Período

43

Figura 8: Diagrama de Sequência – Cadastrar Valor da Comissão

4 PERSISTÊNCIA DE DADOS

Page 45: Coisas de Criança - Relatório 4 Período

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

Page 46: Coisas de Criança - Relatório 4 Período

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

Page 47: Coisas de Criança - Relatório 4 Período

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.

Page 48: Coisas de Criança - Relatório 4 Período

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>

Page 49: Coisas de Criança - Relatório 4 Período

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;

Page 50: Coisas de Criança - Relatório 4 Período

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.

Page 51: Coisas de Criança - Relatório 4 Período

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

Page 52: Coisas de Criança - Relatório 4 Período

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

Page 53: Coisas de Criança - Relatório 4 Período

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

Page 54: Coisas de Criança - Relatório 4 Período

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

Page 55: Coisas de Criança - Relatório 4 Período

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.

Page 56: Coisas de Criança - Relatório 4 Período

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:

Page 57: Coisas de Criança - Relatório 4 Período

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

Page 58: Coisas de Criança - Relatório 4 Período

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

Page 59: Coisas de Criança - Relatório 4 Período

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

Page 60: Coisas de Criança - Relatório 4 Período

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.

Page 61: Coisas de Criança - Relatório 4 Período

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

Page 62: Coisas de Criança - Relatório 4 Período

61

Figura 15: Diagrama de classe

Page 63: Coisas de Criança - Relatório 4 Período

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

Page 64: Coisas de Criança - Relatório 4 Período

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

Page 65: Coisas de Criança - Relatório 4 Período

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

Page 66: Coisas de Criança - Relatório 4 Período

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">

Page 67: Coisas de Criança - Relatório 4 Período

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>

Page 68: Coisas de Criança - Relatório 4 Período

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>

Page 69: Coisas de Criança - Relatório 4 Período

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"

Page 70: Coisas de Criança - Relatório 4 Período

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>