Академический Документы
Профессиональный Документы
Культура Документы
JUNHO
GOIÂNIA, 2007
i
______________________________ ________________________________________
Professor Vicente Paulo de Camargo Coordenador de Trabalho de Conclusão de Curso
Orientador
iii
AGRADECIMENTOS
RESUMO
ABSTRACT
A study based on the software engineering is presented where if objective the practical
application of the academic knowledge. Techniques consecrated in the half academic and for
the market for the development of a software are used. To if considering to develop a software
for a customer the team tries the reality of the software development, searching the agreement
and solution of the presented problem, using themselves of the modeling with UML and
opting to the paradigm of orientation objects and to the process unified for the development
of software. The development of a Web application is foreseen still with the use of techniques
as MVC and Framework.
Key-words: UML, unified process, Web application, MVC, Framework.
vi
SUMÁRIO
LISTA DE FIGURAS...............................................................................................................09
LISTA DE ABREVIATURAS.................................................................................................11
1. INTRODUÇÃO............................................................................................................12
2. FUNDAMENTAÇÃO TEÓRICA................................................................................14
2.1. A modelagem....................................................................................................14
2.1.1. A importância da modelagem..................................................................14
2.1.2. Os princípios da modelagem...................................................................15
2.2. Desenvolvimento orientado a objetos............................................................16
2.2.1. Encapsulamento.....................................................................................16
2.2.2. Mensagem..............................................................................................17
2.2.3. Classe.....................................................................................................18
2.2.4. Herança..................................................................................................18
2.2.5. Polimorfismo.........................................................................................19
2.2.6. Vantagens da Orientação a objetos........................................................20
2.3. UML..................................................................................................................21
2.4. O processo de desenvolvimento de software.................................................23
2.4.1. Ciclo de desenvolvimento.......................................................................24
2.4.2. Modelo iterativo e incremental................................................................24
2.4.3. O processo unificado...............................................................................24
2.4.3.1. Fases do processo unificado.....................................................25
2.4.3.2. Fluxo de trabalho do processo unificado..................................26
2.5. Aplicativos Web...............................................................................................27
2.5.1. Páginas estáticas e Dinâmicas.................................................................27
2.5.2. Folha de estilo (CSS)...............................................................................28
2.5.2.1. Vantagens da construção com CSS..........................................28
2.5.2.2. Desvantagens da construção com CSS.....................................29
2.6. Padrão Modelo-Visão-Controle (MVC)........................................................29
vii
3.4.2.3.2. Relacionamentos........................................................69
3.4.2.4. Diagrama de Navegação do SEP..............................................71
3.4.2.5. Projeto Gráfico das janelas e associação de controles..............72
3.4.3. Considerações Técnicas...........................................................................86
3.4.3.1. Diretório do SEP.......................................................................86
3.4.3.2. Arquitetura do SEP...................................................................86
4. CONCLUSÃO..............................................................................................................87
5. REFERÊNCIAS BIBLIOGRÁFICAS..........................................................................89
6. GLOSÁRIO...................................................................................................................90
7. ANEXOS.......................................................................................................................91
ix
LISTA DE FIGURAS
Figura 1 – Encapsulamento.
Figura 2 – Troca de mensagens entre objetos.
Figura 3 – Classes e objetos.
Figura 4 – Herança.
Figura 5 – Polimorfismo.
Figura 6 – Diagrama de Casos de uso.
Figura 7 – Diagrama de Classes.
Figura 8 – Diagrama de Seqüência.
Figura 9 – O ciclo de vida de desenvolvimento de um software.
Figura 10 – Diferença entre aplicações utilizando reuso de classes e reuso de framework.
Figura 11 – Árvore de diretórios clássica de uma aplicação Prado.
Figura 12 – Diagrama de Casos de Uso do SEP.
Figura 13 – Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Novo Local.
Figura 14 – Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Alterar Local.
Figura 15 – Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Excluir Local.
Figura 16 – Diagrama de Seqüência do Caso de Uso Manter Usuários – Opção Novo Usuário.
Figura 17 – Diagrama de Seqüência do Caso de Uso Manter Usuários – Opção Alterar
Usuário.
Figura 18 – Diagrama de Seqüência do Caso de Uso Manter Usuários –Opção Excluir
Usuário.
Figura 19 – Diagrama de Seqüência do Caso de Uso Manter Categorias –Opção Nova
Categoria.
Figura 20 – Diagrama de Seqüência do Caso de Uso Manter Categorias –Opção Alterar
Categoria.
Figura 21 – Diagrama de Seqüência do Caso de Uso Manter Categorias – Opção Excluir
Categoria.
Figura 22 – Diagrama de Seqüência do Caso de Uso Manter Documentos –Opção Novo
Documento.
x
CAPÍTULO I
INTRODUÇÃO
Diante do exposto surge a motivação para a realização deste estudo que tem como
objetivo a aplicação prática do conhecimento acadêmico ministrado sobre desenvolvimento
de software. Basicamente serão empregadas as técnicas consagradas no meio acadêmico e
pelo mercado para o desenvolvimento de um software. A importância do estudo encontra-se
na experimentação prática da teoria, sendo que a equipe será submetida à situação típica da
profissão, onde se relacionará com os clientes, buscando as informações necessárias para o
entendimento e solução do problema apresentado, tomando as decisões inerentes ao processo
de desenvolvimento, seja na escolha do modelo a ser seguido, seja nas tecnologias mais
adequadas à aplicação, podendo assim verificar quais os principais desafios do
desenvolvimento de software.
2.1. A modelagem
Um quarto ponto a ser mencionado é que nenhum modelo é suficiente por si só, sendo
que muitas vezes é necessário recorrer a outras formas de representação que complementem
um determinado modelo.
Para desenvolver um software é necessário criar primeiro uma visão do problema, esta
visão é representada em um modelo que orienta o processo de desenvolvimento a obtenção
desta visão é feita a partir de um paradigma que defina uma unidade de decomposição do
sistema destacando-se alguns aspectos do sistema [2].
2.2.1. Encapsulamento
Figura 1: Encapsulamento.
2.2.2. Mensagens
2.2.3. Classes
2.2.4. Herança
A herança permite ainda que as características herdadas da classe mãe possam ser
alteradas e expandidas pela classe filha. Essa capacidade dos modelos orientados a objetos
permite que a modelagem seja feita em camadas de classes, criando uma árvore para cada
classe com um nível decrescente de abstração. O uso de herança permite a criação de classes
genéricas, com funcionalidades gerais e que podem ser herdadas por várias classes em
diferentes situações simplificando a modelagem e implementação aumentando a capacidade
de reutilização das classes, no exemplo da figura 4 a herança é utilizada para distribuir os
equipamentos em categorias, pode-se observar que num primeiro momento todos os
elementos são equipamentos, porém existem elementos que podem pertencer a mais de uma
categoria, gerando a necessidade de novas categorias que englobem essa característica.
Figura 4: Herança.
2.2.5. Polimorfismo
2.3. UML
O diagrama de casos de uso é útil por possibilitar a associação de outros artefatos que
representam a interação entre os atores e o sistema. A Figura 6 apresenta um diagrama casos
de uso onde, a elipse representa o caso de uso, o boneco representa o usuário, e o retângulo
representa a fronteira do sistema.
Diagrama de Classes
Diagrama de Seqüência
Os objetivos da UML:
dos componentes é realizada a fase de integração que coloca todas as partes juntas para a
obtenção do produto final [2].
O processo unificado é composto por nove fluxos de trabalho [1], são eles:
Os serviços Web, são aplicações que utilizam a internet como meio de comunicação,
utilizando o paradigma cliente-servidor, onde o cliente faz requisições ao servidor Web que as
processa e em seguida as envia ao cliente que por sua vez exibe os resultados.
No navegador a página web é exibida como uma única entidade, porém esta é
composta por vários arquivos cada um deles com um determinado tipo de informação ou
função que compõe a página. O navegador interpreta o código das páginas escrito na
linguagem HTML, que é uma linguagem de formatação e divulgação, não oferecendo muitas
funcionalidades [6].
funções e efeitos dignos de uma aplicação mais complexa. As primeiras são páginas mais
simples, construídas em código HTML e podem apresentar desde textos e imagens até áudio e
vídeo. O segundo tipo possibilita a inclusão de efeitos e funcionalidades que necessitam de
outras linguagens de programação além do HTML, oferecendo mais complexidade e
versatilidade [6].
A Cascading Style Sheets (CSS), ou folha de estilo em cascata, é uma tecnologia que
permite a criação de páginas Web mais estruturadas onde se separa a parte de formatação da
página da parte de controle, facilitando a manutenção. As folhas de estilo em cascata ajudam a
separar o conteúdo da forma, ou seja, os elementos que compõem uma página da forma com a
qual se mostram. CSS auxilia na definição de estilos na página, já que permite ajustar de uma
forma muito mais precisa qualquer aspecto de qualquer elemento da página [6].
modelo se houvesse uma alteração, todas as máquinas deveriam ser atualizadas uma a uma
[4].
A utilização da linguagem PHP no projeto se justifica por ser uma linguagem com
funcionalidades voltadas ao desenvolvimento Web, sendo uma das mais populares no mundo,
operando em mais de um terço dos servidores Web existente. O crescimento do PHP além de
quantitativo é também qualitativo, sendo cada vez mais utilizado em aplicações empresariais
indispensáveis.
2.8. Framework
também é outra vantagem obtida devido ao uso em várias aplicações sendo que problemas de
compatibilidade são minimizados. Os artefatos de software podem ser reutilizados tanto em
nível de código quanto em relação à análise e projeto. A reutilização dos produtos das etapas
de análise e projeto significa mais do que a simples reutilização de trechos de código. A
utilização destes componentes pode ser dificultada pela deficiência na documentação
necessária para a avaliação da sua adequação a uma determinada situação [5].
Figura 10: Diferença entre aplicações utilizando reuso de classes e reuso de framework [5].
• Servidores Web: Apache http Server 2, Apache http Server 1 e Windows IIS;
• Navegadores: Internet Explorer 5.0 ou superior, Firefox 1.0 ou superior;
• Sistemas Operacionais: Windows Server 2003, Windows XP, Windows 2000,
Mac OS X, FreeBSD, RedHat Linux, Fedora Linux, Slackware Linux.
33
2.8.1.1. Arquitetura
O foco do framework Prado é a programação web, que lida na maior parte do tempo
com interações com os usuários, sendo baseado em componentes e orientado a eventos,
permitindo aos desenvolvedores serem mais produtivos [7].
2.8.1.2. Componentes
2.8.1.3. Controles
2.8.1.4. Páginas
2.8.1.5. Módulos
Há três módulos do núcleo que são carregados como padrão sempre que uma
aplicação é executada. São eles, o módulo request, o módulo response e o módulo error
handler. Além deles, o módulo session é carregado quando utilizado em uma aplicação. O
Prado prove implementações padrões para todos estes módulos. Módulos customizados
35
2.8.1.6. Serviços
Um Serviço é uma instância de uma classe que implementa a interface IService. Cada
tipo de serviço processa um tipo específico de requisição vinda dos usuários. Por exemplo, o
serviço Page (página) responde as requisições de páginas Prado, vindas dos usuários da
aplicação. Um serviço é identificado unicamente por sua propriedade ID. Por padrão, quando
36
THttpRequest é usado como módulo de requisição, nomes de variáveis GET são usados para
identificar qual serviço um usuário está solicitando. Se um nome de variável GET for igual ao
ID de algum serviço, a requisição é considerada um serviço e o valor da variável é passado
como um parâmetro do serviço. Para o serviço page o nome da variável GET deve ser page.
Prado implementa o TPageService para processar requisições de páginas de usuários. As
Páginas são armazenadas sob um diretório expecificado pela propriedade BasePath do serviço
page. O valor padrão desta propriedade é o diretório pages. Esse valor pode ser modificado na
configuração da aplicação [7].
2.8.1.7. Aplicações
Uma Aplicação é uma instância de Tapplication ou de suas classes filhas. Ela gerencia
módulos que fornecem diferentes funcionalidades e que são carregados quando necessários.
Fornece serviços aos usuários. É o lugar central para armazenar vários parâmetros utilizados
numa aplicação [7].
Uma aplicação Prado deve estar organizada em diretórios com a seguinte estrutura:
3.1. O projeto
O volume de documentos que circulam dentro das empresas nos dias atuais demanda
alguma forma de controle para que não venha a afetar os processos aos quais estão
vinculados. O fluxo de informação dentro da empresa deve ser tratado com seriedade para
evitar prejuízos gerados por falta de clareza na comunicação. Uma vez que esta documentação
representa os processos desenvolvidos pela empresa, desde requisições de clientes até
decisões executivas, os diretores e gerentes percebem ser fundamental a certeza acerca da
origem, destino, entendimento e execução da informação que cada documento transporta.
A partir dessa visão nos colocamos diante da necessidade de soluções que tornem
seguro e democrático o acesso e manuseio da documentação bem como o acompanhamento
do seu percurso dentro da empresa, evitando que fique tal função a cargo de um único
indivíduo ou mesmo de vários sem uma padronização da forma como é tratada a informação
dentro da empresa.
A opção por desenvolver uma aplicação Web segue a tendência que domina o mercado
atual com as empresas migrando suas aplicações para o ambiente Web.
40
3.3. Concepção
Uma segunda reunião serviu para que as informações, obtidas na primeira, fossem
desenvolvidas resultando em mais requisitos. Como resultado dessas reuniões obteve-se a
ratificação destas informações e a base para a obtenção do escopo do projeto que gerou o
termo de abertura do projeto (Anexo C) que após a elaboração foi encaminhado para
conhecimento e aprovação do patrocinador do projeto. Com a aprovação da documentação da
abertura passou-se a elaboração do Documento de Requisitos e Análise do Sistema (Anexo
D).
3.4. Elaboração
3.4.1. Análise
Uma das primeiras tarefas da análise é a expansão dos casos de uso definidos na fase
anterior de concepção. É na expansão que os principais requisitos funcionais são associados a
eventos de sistema [3]. Para o caso do SEP segue os casos de uso expandidos:
41
Manter Locais
Caso de uso: Manter locais.
ID: RF001
Ator: Funcionário.
Interessados: Todos os departamentos da empresa.
Pré-condições: O usuário deve estar logado no sistema e com permissão específica.
Pós-condições: A manutenção é efetuada.
Fluxo principal:
1. [EV] O funcionário entra no sistema.
2. [EV] O funcionário escolhe a opção desejada.
3. O funcionário escolhe novo:
3.1 [EV] O funcionário informa o nome do local e, finaliza o cadastro.
4. O funcionário escolhe alterar:
4.1 [EV] O funcionário informa o nome do local a ser alterado.
4.2 [EV] O funcionário registra a alteração do local e, finaliza o processo.
5. O funcionário escolhe excluir:
5.1 [EV] O funcionário informa o nome do local a ser excluído.
5.2 [EV] O funcionário registra a exclusão do local e, finaliza o processo.
Tratamento de exceções:
3a. Local inválido.
3a.1 [RS] É mostrada uma mensagem que o local é inexistente ou já existe.
3a.2 O caso de uso retorna ao passo 3.
4a. Local já existente.
4a.1 [RS] É mostrada uma mensagem que o local já existe.
4a.2 O caso de uso retorna ao passo 4.
Manter Usuários
Caso de uso: Manter usuários.
ID: RF002
Ator: Funcionário.
Interessados: Funcionários da empresa.
Pré-condições: O usuário deve estar logado no sistema e com permissão específica.
Pós-condições: A manutenção é efetuada.
Requisitos correlacionados: RF001
Fluxo principal:
1. [EV] O funcionário entra no sistema.
2. [EV] O funcionário escolhe a opção desejada.
3. O funcionário escolhe novo:
3.1 [EV] O funcionário registra os dados de outro funcionário e finaliza o
cadastro.
4. O funcionário escolhe alterar.
4.1 [EV] O funcionário informa um usuário que deseja efetuar alterações.
4.2 [EV] O funcionário registra as devidas alterações e, finaliza o processo.
42
Dados:
1 – Nome do usuário
2 – Matrícula
3 – Cargo
4 – Local
5 – Login do usuário
6 – Senha.
Manter Categorias
Caso de uso: Manter categorias.
ID: RF003
Ator: Funcionário.
Interessados: Todos os departamentos da empresa.
Pré-condições: O usuário deve estar logado no sistema e com permissão específica.
Pós-condições: A manutenção é efetuada.
Fluxo principal:
1. [EV] O funcionário entra no sistema.
2. [EV] O funcionário escolhe a opção desejada.
3. O funcionário escolhe novo:
3.1 [EV] O funcionário informa o nome da categoria e, finaliza o cadastro.
4. O funcionário escolhe alterar:
a. [EV] O funcionário informa o nome da categoria a ser alterada.
b. [EV] O funcionário registra a alteração da categoria e, finaliza o
processo.
5. O funcionário escolhe excluir:
a. [EV] O funcionário informa o nome da categoria a ser excluído.
b. [EV] O funcionário registra a exclusão da categoria e, finaliza o
processo.
Tratamento de exceções:
3a. Categoria inválida.
3a.1 [RS] É mostrada uma mensagem que a categoria é inexistente ou já existe.
3a.2 O caso de uso retorna ao passo 3.
4a. Categoria já existente.
4a.1 [RS] É mostrada uma mensagem que a categoria já existe.
43
Manter Documentos
Caso de uso: Manter documentos.
ID: RF004
Ator: Funcionário.
Interessados: Todos os departamentos da empresa.
Pré-condições: O usuário deve estar logado no sistema.
Pós-condições: A manutenção é efetuada.
Requisitos correlacionados: RF003
Fluxo principal:
1. [EV] O funcionário entra no sistema.
2. [EV] O funcionário escolhe a opção desejada.
3. O funcionário escolhe novo:
3.1 [EV] O funcionário registra os dados do novo documento.
3.2 [RS] O funcionário escreve o número de identificação gerado pelo sistema
no documento e, finaliza o cadastro.
4. O funcionário escolhe alterar:
4.1 [EV] O funcionário informa o número de identificação do documento.
4.2 [EV] O funcionário registra os dados que foram alterados e, finaliza
a alteração.
5. O funcionário escolhe excluir:
5.1 [EV] O funcionário informa o número de identificação do documento.
5.2 [EV] O funcionário confirma a exclusão e, finaliza o processo.
Tratamento de exceções:
3a. O funcionário não possui permissão para cadastrar.
3a.1 [RS] É mostrada uma mensagem que usuário não tem permissão para
cadastrar documentos, e tem que procurar o administrador do sistema.
3a.2 O caso de uso é encerrado.
4a. O número de identificação do documento é invalido.
4a.1 [EV] É mostrada uma mensagem que o número de identificação do
documento é inválido.
4a.2 O caso de uso retorna ao passo 4.
4b. Assunto do documento já existente.
4b.1 [EV] É mostrada uma mensagem que assunto já existe.
4b.2 O caso de uso retorna ao passo 4.
5a. O número de identificação do documento é invalido.
5a.1 [EV] É mostrada uma mensagem que o número de identificação do
documento é inválido.
5a.2 O caso de uso retorna ao passo 5.
Efetuar Despacho
Caso de uso: Efetuar despacho.
ID: RF005
Ator: Funcionários.
44
Figura 13: Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Novo Local.
Figura 14: Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Alterar Local.
46
Figura 15: Diagrama de Seqüência do Caso de Uso Manter Locais – Opção Excluir Local.
Figura 16: Diagrama de Seqüência do Caso de Uso Manter Usuários – Opção Novo Usuário.
47
Figura 17: Diagrama de Seqüência do Caso de Uso Manter Usuários – Opção Alterar Usuário.
Figura 18: Diagrama de Seqüência do Caso de Uso Manter Usuários –Opção Excluir Usuário.
48
Figura 19: Diagrama de Seqüência do Caso de Uso Manter Categorias –Opção Nova
Categoria.
Figura 20: Diagrama de Seqüência do Caso de Uso Manter Categorias –Opção Alterar
Categoria.
49
Figura 21: Diagrama de Seqüência do Caso de Uso Manter Categorias – Opção Excluir
Categoria.
Figura 22: Diagrama de Seqüência do Caso de Uso Manter Documentos –Opção Novo
Documento.
50
Figura 23: Diagrama de Seqüência do Caso de Uso Manter Documentos – Opção Alterar
Documento.
Figura 24: Diagrama de Seqüência do Caso de Uso Manter Documentos – Opção Excluir
Documento.
51
Figura 25: Diagrama de Seqüência do Caso de Uso Efetuar Despacho –Opção Enviar
Documento.
Figura 26: Diagrama de Seqüência do Caso de Uso Efetuar Despacho –Opção Receber
Documento.
52
• Classe Home
1. onLoad(sender).
2. validacao(sender, param).
3. documentoClicked(sender).
4. categoriaClicked(sender).
5. localClicked(sender).
6. usuarioClicked(sender).
7. despachoClicked(sender).
8. pesquisarClicked(sender).
9. relatorioClicked(sender).
10. sairClicked(sender).
11. selecao(sender,param).
12. enviaClicked(sender,param).
13. recebeClicked(sender,param).
14. atualizaRecebe(sender,param).
15. voltarClicked_des(sender,param).
16. mudandoPagina(sender,param).
17. criandoPagina(sender,param).
18. okClicked_pes(sender,param).
19. habilitar(tela).
20. desabilitar(tela).
21. exibirClicked_doc(sender,param).
22. novoClicked_doc(sender,param).
23. alterarClicked_doc(sender,param).
24. excluirClicked_doc(sender,param).
25. confirmarClicked_doc(sender,param).
26. novoClicked_cat(sender,param).
27. alterarClicked_cat(sender,param).
28. excluirClicked_cat(sender,param).
29. confirmarClicked_cat(sender,param).
30. novoClicked_loc(sender,param).
31. alterarClicked_loc(sender,param).
32. excluirClicked_loc(sender,param).
33. confirmarClicked_loc(sender,param).
34. exibirClicked_usu(sender,param).
35. novoClicked_usu(sender,param).
36. alterarClicked_usu(sender,param).
37. excluirClicked_usu(sender,param).
38. confirmarClicked_usu(sender,param).
39. confirmarClicked_des_env(sender,param).
40. confirmarClicked_des_rec(sender,param).
41. okClicked_rel(sender,param).
42. limparClicked(sender,param).
43. imprimeRel(inicio,fim,dados).
54
• Classe Local
1. preparaConsultaGeral(campo:String).
2. preparaConsultaPorCodigoDoLocal(código:Int).
3. preparaConsultaPorNomeDoLocal(local:Sting).
4. preparaInclusaoDoLocal(local:String).
5. preparaAlteracaoDoLocal(localAlterado:String, local:String).
6. preparaExclusaoDoLocal(local:String).
7. efetuaAtualizacao(umStringSql:String, umaOpcao:String).
8. efetuaConsulta(umStringSql:String).
• Classe Usuário
1. preparaConsultaGeral(campo:String).
2. preparaConsultaPeloCodigoDoLocal(codgloc:Int).
3. preparaConsultaPelaMatricula(matricula:Int).
4. preparaConsultaPorNomeDoUsuario(usuario:String).
5. preparaConsultaPeloLogin(login:String).
6. preparaInclusaoDoUsuario(Matricula:Int, Nome:String,Cargo:String,
Codigo_loc:Int,Acesso:String,Usuário:String,Senha:String).
7. preparaAlteracaoDoUsuarioCompleto(matriculaAnt:Int,matricula:Int,
nome:String,cargo:String,local:Int,acesso:String,usuário:String,senha:String).
8. preparaAlteracaoDoUsuarioIncompleto(matriculaAnt:Int,matricula:Int,
nome:String,cargo:String,local:Int,acesso:String).
9. preparaExclusaoDoUsuario(matricula:Int).
10. efetuaAtualizacao(umStringSql:String, umaOpcao:String).
11. efetuaConsulta(umStringSql:String).
• Classe Categoria
1. preparaConsultaGeral(campo:String).
2. preparaConsultaPorCodigoDaCategoria(codigo:Int).
3. preparaConsultaPorNomeDaCategoria(categoria:String).
4. preparaInclusaoDaCategoria(categoria:String).
5. preparaAlteracaoDaCategoria(categoriaAlterada:String,categoria:String).
6. preparaExclusaoDaCategoria(categoria:String).
7. efetuaAtualizacao(umStringSql:String, umaOpcao:String).
8. efetuaConsulta(umStringSql:String).
• Classe Documento
1. preparaConsultaGeral(campo:String).
2. preparaConsultaPeloCodigoDaCategoria(codgcateg:Int).
3. preparaConsultaPeloCodigoDoLocal(codgloc:Int).
4. preparaConsultaPorCodigoDoDocumento(codigo:Int).
5. preparaConsultaPorTituloDoDocumento(titulo:String).
6. preparaConsultaPorDataDoDocumento(data:String).
7. preparaInclusaoDoDocumento(Codigo_loc:Int,Codigo_Categ:Int,Assunto:
String,Informação:String, Mat_usu:Int,Data:String).
8. preparaAlteracaoDoDocumento(codgcateg:Int,assunto:String,informacao:
String,data:String,codgdoc:Int).
55
9. preparaExclusaoDoDocumento(codigo:Int).
10. efetuaAtualizacao(umStringSql:String, umaOpcao:String).
11. efetuaConsulta(umStringSql:String).
• Classe Despacho
1. preparaConsultaPeloCodigoDoDocumento(codgdoc:Int).
2. preparaConsultaDoDespachoEnvia(local:Int).
3. preparaConsultaDoDespachoRecebe(local:Int).
4. preparaConsultaDoDespachoAtualiza(documento:Int,local:Int).
5. preparaInclusaoDoDespachoParcial(Codigo_doc:Int,Local_ant:Int,
Local_atual:Int).
6. preparaAlteracaoDoDespachoEnvia(codgdoc:Int,destino:Int,data:String,
hora:String).
7. preparaAlteracaoDoDespachoRecebe(codgdoc:Int, data:String,
hora:String).
8. efetuaAtualizacao(umStringSql:String, umaOpcao:String).
9. efetuaConsulta(umStringSql:String).
Classe: Home.
Operação: onLoad().
Pré-Condição: Quando o método de controle é invocado.
Pós-Condição: Habilita a janela Login.
Classe: Home.
Operação: validacao().
Pré-Condição: Apertar o botão “entrar”.
Pós-Condição: Habilita a janela Principal.
Exceções: Login ou senha do usuário invalido.
Classe: Home.
Operação: documentoClicked().
Pré-Condição: Apertar o botão “documentos”.
Pós-Condição: Habilita a janela Documentos.
Classe: Home.
Operação: categoriaClicked().
Pré-Condição: Apertar o botão “categorias”.
Pós-Condição: Habilita a janela Categoria.
Exceções: Usuário sem permissão para acessar está tela
Classe: Home.
Operação: localClicked().
56
Classe: Home.
Operação: usuarioClicked().
Pré-Condição: Apertar o botão “usuarios”.
Pós-Condição: Habilita a janela Usuários.
Exceções: Usuário sem permissão para acessar está tela
Classe: Home.
Operação: despachoClicked().
Pré-Condição: Apertar o botão “despachos”.
Pós-Condição: Habilita a janela Despachos.
Classe: Home.
Operação: pesquisarClicked().
Pré-Condição: Apertar o botão “pesquisar”.
Pós-Condição: Habilita a janela Pesquisar Documentos.
Classe: Home.
Operação: relatorioClicked().
Pré-Condição: Apertar o botão “relatórios”.
Pós-Condição: Habilita a janela Relatórios.
Classe: Home.
Operação: sairClicked().
Pré-Condição: Apertar o botão “sair”.
Pós-Condição: Habilita a janela Login.
Classe: Home.
Operação: selecao().
Pré-Condição: Selecionar uma das opções de pesquisar documentos.
Pós-Condição: Modifica a tela Pesquisar Documentos de acordo com opção a
escolhida.
Classe: Home.
Operação: enviaClicked().
Pré-Condição: Apertar o botão “envia” da tela Despachos.
Pós-Condição: Habilita a janela Despachos - Enviar.
Classe: Home.
Operação: recebeClicked().
Pré-Condição: Apertar o botão “recebe” da tela Despachos.
Pós-Condição: Habilita a janela Despachos - Receber.
57
Classe: Home.
Operação: atualizaRecebe().
Pré-Condição: Selecionar um documento para receber no menu Documentos da tela
Despachos - Receber.
Pós-Condição: Mostra na tela os dados do envio do documento.
Classe: Home.
Operação: voltarClicked_des().
Pré-Condição: Apertar o botão “voltar” da tela Despachos – Enviar ou
Despecaho - Receber.
Pós-Condição: Habilita a tela Despachos.
Classe: Home.
Operação: mudandoPagina().
Pré-Condição: Escolher qual pagina da pesquisa de documentos quer visualizar.
Pós-Condição: Mudar a pagina da pesquisa de documentos.
Classe: Home.
Operação: criandoPagina().
Pré-Condição: Existir no resultado da pesquisa de documentos um número maior do
que três documentos.
Pós-Condição: As paginas da pesquisa de documentos foram criadas.
Classe: Home.
Operação: okClicked_pes().
Pré-Condição: Apertar o botão “Ok” da tela pesquisa documentos.
Pós-Condição: A pesquisa foi efetuada.
Classe: Home.
Operação: habilitar().
Pré-Condição: Os campos estarem desabilitados.
Pós-Condição: Foi habilitado os campos.
Classe: Home.
Operação: desabilitar().
Pré-Condição: Os campos estarem habilitados.
Pós-Condição: Foi desabilitado os campos.
Classe: Home.
Operação: exibirClicked_doc().
Pré-Condição: Digitar o código do documento.
Pós-Condição: Os dados do documento foram mostrados na tela.
Exceções: O campo código está vazio.
Classe: Home.
Operação: novoClicked_doc().
Pré-Condição:
Pós-Condição: Os campos da tela documentos vazios.
58
Classe: Home.
Operação: alterarClicked_doc().
Pré-Condição: Digitar o código do documento que deseja alterar.
Pós-Condição: Os dados do documento foram mostrados na tela.
Exceções: O campo código está vazio.
Classe: Home.
Operação: excluirClicked_doc().
Pré-Condição: Digitar o código do documento que deseja excluir.
Pós-Condição: Os dados do documento foram mostrados na tela.
Exceções: O campo código está vazio.
Classe: Home.
Operação: confirmarClicked_doc().
Pré-Condição: O botão confirmar estar habilitado e possuir dados válidos.
Pós-Condição: Banco de dados foi atualizado.
Exceções: Campos inválidos.
Classe: Home.
Operação: novoClicked_cat().
Pré-Condição:
Pós-Condição: Os campos da tela categorias vazios.
Classe: Home.
Operação: alterarClicked_cat().
Pré-Condição: Escolher uma categoria no menu.
Pós-Condição: A categoria escolhida foi mostrada na tela.
Classe: Home.
Operação: excluirClicked_cat().
Pré-Condição: Escolher uma categoria no menu.
Pós-Condição: A categoria escolhida foi mostrada na tela.
Classe: Home.
Operação: confirmarClicked_cat().
Pré-Condição: O botão confirmar estar habilitado e possuir categoria.
Pós-Condição: Banco de dados foi atualizado.
Classe: Home.
Operação: novoClicked_loc().
Pré-Condição:
Pós-Condição: Os campos da tela locais vazios.
Classe: Home.
Operação: alterarClicked_loc().
Pré-Condição: Escolher um local no menu.
59
Classe: Home.
Operação: excluirClicked_loc().
Pré-Condição: Escolher um local no menu.
Pós-Condição: O local escolhido foi mostrado na tela.
Classe: Home.
Operação: confirmarClicked_loc().
Pré-Condição: O botão confirmar estar habilitado e possuir local.
Pós-Condição: Banco de dados foi atualizado.
Classe: Home.
Operação: exibirClicked_usu().
Pré-Condição: Escolher um usuário no menu.
Pós-Condição: Os dados do usuário foram mostrados na tela.
Classe: Home.
Operação: novoClicked_usu().
Pré-Condição:
Pós-Condição: Os campos da tela usuarios vazios.
Classe: Home.
Operação: alterarClicked_usu().
Pré-Condição: Escolher o usuário do menu que deseja alterar.
Pós-Condição: Os dados do usuário foram mostrados na tela.
Classe: Home.
Operação: excluirClicked_usu().
Pré-Condição: Escolher o usuário do menu que deseja excluir.
Pós-Condição: Os dados do usuário foram mostrados na tela.
Classe: Home.
Operação: confirmarClicked_usu().
Pré-Condição: O botão confirmar estar habilitado e possuir dados válidos.
Pós-Condição: Banco de dados foi atualizado.
Exceções: Campos inválidos.
Classe: Home.
Operação: confirmarClicked_des_env().
Pré-Condição: Escolher o documento que deseja enviar e o local de destino.
Pós-Condição: Banco de dados foi atualizado.
Classe: Home.
Operação: confirmarClicked_des_rec().
Pré-Condição: Escolher o documento que deseja receber.
Pós-Condição: Banco de dados foi atualizado.
60
Classe: Home.
Operação: okClicked_rel()
Pré-Condição: Data inicial tem que ser menor ou igual a data final.
Pós-Condição: Mostrar Relatório.
Exeções: Data inicial maior que a data final.
Classe: Home.
Operação: limparClicked().
Pré-Condição: O botão limpar estar habilitado.
Pós-Condição: Limpar campos da tela atual.
Classe: Home.
Operação: imprimeRel().
Pré-Condição: Possuírem os intervalos informados no banco de dados.
Pós-Condição: O relatório foi mostrado na tela.
Classe: Local.
Consulta: preparaConsultaGeral(campo:String).
Pré-Condição: Existe um campo com o nome igual a ‘campo’.
Retorno: Retorna uma string com um comando sql.
Classe: Local.
Consulta: preparaConsultaPorCodigoDoLocal(codigo:Int).
Pré-Condição: Existe um local com o código igual a ‘codigo’.
Retorno: Retorna uma string com um comando sql.
Classe: Local.
Consulta: preparaConsultaPorNomeDoLocal(local:Sting).
Pré-Condição: Existe um local com o nome igual a ‘local’.
Retorno: Retorna uma string com um comando sql.
Classe: Local.
Consulta: preparaInclusaoDoLocal(local:String).
Pré-Condição: Não existe um local com o nome igual a ‘local’.
Retorno: Retorna uma string com um comando sql.
Classe: Local.
Consulta: preparaAlteracaoDoLocal(localAlterado:String, local:String).
Pré-Condição: Existe um local com o nome igual a ‘localAlterado’.
Retorno: Retorna uma string com um comando sql.
Classe: Local.
Consulta: preparaExclusaoDoLocal(local:String).
Pré-Condição: Existe um local com o nome igual a ‘local’.
Retorno: Retorna uma string com um comando sql.
61
Classe: Local.
Operação: efetuaAtualizacao(umStringSql:String, umaOpcao:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Existe uma opção igual a ‘umaOpcao’.
Pós-Condição: O banco de dados foi atualizado.
Classe: Local.
Consulta: efetuaConsulta(umStringSql:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Usuário.
Consulta: preparaConsultaGeral(campo:String).
Pré-Condição: Existe um campo com o nome igual a ‘campo’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaConsultaPeloCodigoDoLocal(codgloc:Int).
Pré-Condição: Existe o código do local do usuário igual a ‘codgloc’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaConsultaPelaMatricula(matricula:Int).
Pré-Condição: Existe um usuário com a matricula igual a ‘matricula’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaConsultaPorNomeDoUsuario(usuario:String).
Pré-Condição: Existe um usuário com a nome igual a ‘usuario’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaConsultaPeloLogin(login:String).
Pré-Condição: Existe um usuário com a login igual a ‘login’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaInclusaoDoUsuario(Matricula:Int, Nome:String,Cargo:String,
Codigo_loc:Int,Acesso:String, Usuário:String,Senha:String).
Pré-Condição: Não existe um usuário com os dados informados.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaAlteracaoDoUsuarioCompleto(matriculaAnt:Int,matricula:Int,
nome:String,cargo:String, local:Int,acesso:String,
usuário:String,senha:String).
Pré-Condição: Existe um usuário com a matricula igual a ‘matriculaAnt’.
62
Classe: Usuário.
Consulta: preparaAlteracaoDoUsuarioIncompleto(matriculaAnt:Int,
matricula:Int, nome:String, cargo:String, local:Int,acesso:String).
Pré-Condição: Existe um usuário com a matricula igual a ‘matriculaAnt’.
Login e senha do usuário não foram informados.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Consulta: preparaExclusaoDoUsuario(matricula:Int).
Pré-Condição: Existe um usuário com a matricula igual a ‘matricula’.
Retorno: Retorna uma string com um comando sql.
Classe: Usuário.
Operação: efetuaAtualizacao(umStringSql:String, umaOpcao:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Existe uma opção igual a ‘umaOpcao’.
Pós-Condição: O banco de dados foi atualizado.
Classe: Usuário.
Consulta: efetuaConsulta(umStringSql:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Categoria.
Consulta: preparaConsultaGeral(campo:String).
Pré-Condição: Existe um campo com o nome igual a ‘campo’.
Retorno: Retorna uma string com um comando sql.
Classe: Categoria.
Consulta: preparaConsultaPorCodigoDaCategoria(codigo:Int).
Pré-Condição: Existe uma categoria com o código igual a ‘codigo’.
Retorno: Retorna uma string com um comando sql.
Classe: Categoria.
Consulta: preparaConsultaPorNomeDaCategoria(categoria:String).
Pré-Condição: Existe uma categoria com um nome igual a ‘categoria’.
Retorno: Retorna uma string com um comando sql.
Classe: Categoria.
Consulta: preparaInclusaoDaCategoria(categoria:String).
Pré-Condição: Não existe uma categoria com um nome igual a ‘categoria’.
Retorno: Retorna uma string com um comando sql.
Classe: Categoria.
Consulta: preparaAlteracaoDaCategoria(categoriaAlterada:String,
categoria:String).
63
Classe: Categoria.
Consulta: preparaExclusaoDaCategoria(categoria:String)
Pré-Condição: Existe uma categoria com um nome igual a ‘categoria’.
Retorno: Retorna uma string com um comando sql.
Classe: Categoria.
Operação: efetuaAtualizacao(umStringSql:String, umaOpcao:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Existe uma opção igual a ‘umaOpcao’.
Pós-Condição: O banco de dados foi atualizado.
Classe: Categoria.
Consulta: efetuaConsulta(umStringSql:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Documento.
Consulta: preparaConsultaGeral(campo:String).
Pré-Condição: Existe um campo com o nome igual a ‘campo’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaConsultaPeloCodigoDaCategoria(codgcateg:Int).
Pré-Condição: Existe o código da categoria do documento igual a ‘codgcateg’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaConsultaPeloCodigoDoLocal(codgloc:Int).
Pré-Condição: Existe o código do local do documento igual a ‘codglog’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaConsultaPorCodigoDoDocumento(codigo:Int).
Pré-Condição: Existe um documento com o código igual a ‘codigo’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaConsultaPorTituloDoDocumento(titulo:String).
Pré-Condição: Existe um documento com o titulo igual a ‘titulo’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaConsultaPorDataDoDocumento(data:String).
Pré-Condição: Existe um documento com a data igual a ‘data’.
64
Classe: Documento.
Consulta: preparaInclusaoDoDocumento(Codigo_loc:Int,Codigo_Categ:Int,
Assunto:Sting,Informação:String,
Mat_usu:Int,Data:String).
Pré-Condição: Não existe um assunto do documento igual a “Assunto”.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaAlteracaoDoDocumento(codgcateg:Int,assunto:String,
informacao:String,data:String,
codgdoc:Int).
Pré-Condição: Existe um assunto do documento igual a “Assunto”.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Consulta: preparaExclusaoDoDocumento(codigo:Int).
Pré-Condição: Existe um documento com a data igual a ‘data’.
Retorno: Retorna uma string com um comando sql.
Classe: Documento.
Operação: efetuaAtualizacao(umStringSql:String, umaOpcao:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Existe uma opção igual a ‘umaOpcao’.
Pós-Condição: O banco de dados foi atualizado.
Classe: Documento.
Consulta: efetuaConsulta(umStringSql:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaConsultaPeloCodigoDoDocumento(codgdoc:Int).
Pré-Condição: Existe um código de documento igual a ‘codgdoc’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaConsultaDoDespachoEnvia(local:Int).
Pré-Condição: Existe um código do local atual igual a ‘local’ e a data do envio nula.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaConsultaDoDespachoRecebe(local:Int).
Pré-Condição: Existe um código do local de destino igual a ‘local’ e a data de
recebimento nula.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
65
Consulta: preparaConsultaDoDespachoAtualiza(documento:Int,local:Int).
Pré-Condição: Existe um código do documento igual a ‘documento’, o código do
local de destino igual a ‘local’ e a data de recebimento nula.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaInclusaoDoDespachoParcial(Codigo_doc:Int,Local_ant:Int,
Local_atual:Int).
Pré-Condição: Um novo documento foi cadastrado ou um documento foi recebido.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaAlteracaoDoDespachoEnvia(codgdoc:Int,destino:Int,
data:String, hora:String).
Pré-Condição: Um documento foi enviado para um local de destino igual a ‘destino’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Consulta: preparaAlteracaoDoDespachoRecebe(codgdoc:Int, data:String,
hora:String)
Pré-Condição: Um documento foi recebido.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
Classe: Despacho.
Operação: efetuaAtualizacao(umStringSql:String, umaOpcao:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Existe uma opção igual a ‘umaOpcao’.
Pós-Condição: O banco de dados foi atualizado.
Classe: Despacho.
Consulta: efetuaConsulta(umStringSql:String).
Pré-Condição: Existe um comando sql com a sintaxe igual a ‘umStringSql’.
Retorno: Retorna um array com os dados requisitados pelo comando sql.
66
3.4.2. Projeto
3.4.2.1. Diagrama de Classes do SEP
3.4.2.3.1. Entidades
Categoria
Primary Foreign
Nome Tipo Tamanho Precisao Not Null Unique Comentário
Key Key
codigo_categ INTEGER 3 OK OK OK
desc_categ VARCHAR 30
Usuário
Primary Not
Nome Tipo Tamanho Precisao Foreign Key Unique Comentário
Key Null
Matricula INTEGER 6 OK OK OK
nome_usu VARCHAR 31
Cargo VARCHAR 30
codigo_loc INTEGER 3 FK_usuário_codigo_loc OK
info_acesso CHAR 1
Login VARCHAR 10
Senha VARCHAR 6
Documentos
Primary Not Comen
Nome Tipo Tamanho Precisao Foreign Key Unique
Key Null tário
codigo_doc INTEGER 6 OK OK OK
codigo_loc INTEGER 3 FK_documento_codigo_loc OK
codigo_categ INTEGER 3 FK_documento_codigo_categ OK
Titulo VARCHAR 31
Descricao VARCHAR 300
Matricula INTEGER 6 FK_documento_matricula OK
data_cadastro VARCHAR 10
Local
Primary Foreign
Nome Tipo Tamanho Precisao Not Null Unique Comentário
Key Key
codigo_loc INTEGER 3 OK OK OK
nome_loc VARCHAR 30
Despacho
Primary Not
Nome Tipo Tamanho Precisao Foreign Key Unique Comentário
Key Null
codigo_desp INTEGER 3 OK OK OK
codigo_doc INTEGER 6 FK_despacho_codigo_doc OK
local_ant INTEGER 3 FK_despacho_local_ant OK
local_atual INTEGER 3 FK_despacho_local_atual
local_dest INTEGER 3 FK_despacho_local_dest OK
data_envio VARCHAR 10
hora_envio VARCHAR 5
data_recebe VARCHAR 10
hora_recebe VARCHAR 5
69
3.4.2.3.2. Relacionamentos
FK_documento_matricula
Tipo 1 -|----o< N
Tabela usuário
RF
Atributo matricula
Tabela documentos
FK
Atributo matricula
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
FK_documento_codigo_loc
Tipo 1 -|----o< N
Tabela local
RF
Atributo codigo_loc
Tabela documentos
FK
Atributo codigo_loc
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
FK_documento_codigo_categ
Tipo 1 -|----o< N
Tabela categoria
RF
Atributo codigo_categ
Tabela documentos
FK
Atributo codigo_categ
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
FK_usuário_codigo_loc
Tipo 1 -|----o-- 1
Tabela local
RF
Atributo codigo_loc
Tabela usuário
FK
Atributo codigo_loc
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira
FK_despacho_codigo_doc
Tipo 1 -|----o< N
Tabela documentos
RF
Atributo codigo_doc
Tabela despachos
FK
Atributo codigo_doc
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
FK_despacho_local_atual
Tipo 0..1 -o----o< N
Tabela local
RF
Atributo codigo_loc
Tabela despachos
FK
Atributo local_atual
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
70
FK_despacho_local_dest
Tipo 1 -|----o< N
Tabela local
RF
Atributo codigo_loc
Tabela despachos
FK
Atributo local_dest
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
FK_despacho_local_ant
Tipo 1 -|----o< N
Tabela local
RF
Atributo codigo_loc
Tabela despachos
FK
Atributo local_ant
RF = Tabela e atributo referenciado.
FK = Tabela e atributo da chave estrangeira.
71
Login
Campo “Usuário”:
Campo alfanumérico com 10 posições.
Efetua consulta do usuário executando Usuário.preparaConsultaPeloLogin(login).
Campo “Senha”:
Campo alfanumérico com 6 posições.
Botão “Entrar”:
Ativa a operação Home.validacao().
Ativa a consulta Usuário.preparaConsultaPeloLogin(login).
Navegação para “Principal”.
73
Principal
Botão “Documentos”:
Navegação para “Manter Documentos”.
Botão “Despachos”:
Navegação para “Efetuar Despachos”.
Botão “Pesquisar”:
Navegação para “Pesquisar Documentos”.
Botão “Relatórios”:
Navegação para “Emitir Relatórios”.
Botão “Categorias”:
Navegação para “Manter Categorias”.
Botão “Locais”:
Navegação para “Manter Locais”.
Botão “Usuários”:
Navegação para “Manter Usuários”.
Botão “Sair”:
Navegação para “Login”.
74
Manter Documentos
Inicialização:
Habilita o campo “Código”.
Nível 1: Habilita os botões “Exibir” e “Novo”
Desabilita os botões “Alterar” e “Excluir”.
Nível 2: Habilita os botões “Exibir”, “Novo”, “Alterar” e “Excluir”.
Desabilita:
Os botões “confirmar” e “limpar”.
Os campos “Data”, “Assunto” e “Informações”.
O menu “Categoria”.
Campo “Código”:
Campo numérico com 06 posições.
Efetua consulta do documento executando:
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Botão “Exibir”:
Ativa a operação Home.habilitar(documentos).
Desabilita o botão “Confirmar”.
Ativa a consulta:
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Ativa a consulta Documento.efetuaConsulta().
Preenche todos os campos com seus dados.
Botão “Novo”:
Ativa a operação Home.habilitar(documentos).
Habilita o botão “Confirmar”.
Limpa todos os campos.
75
Botão “Alterar”:
Ativa a operação Home.habilitar(documentos).
Habilita o botão “Confirmar”.
Ativa a consulta:
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Ativa a consulta Documento.efetuaConsulta().
Preenche todos os campos com seus dados.
Botão “Excluir”:
Ativa a operação Home.habilitar(documentos).
Habilita o botão “Confirmar”.
Ativa a consulta:
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Ativa a consulta Documento.efetuaConsulta().
Preenche todos os campos com seus dados.
Menu “Categoria”:
CombList com todas as categorias cadastradas.
Campo “Data”:
Campo tipo DatePicker para escolha da data.
Campo “Assunto”:
Campo alfanumérico com 60 posições.
Efetua consulta do assunto do documento executando:
Documento.preparaConsultaPorTituloDoDocumento(assunto).
Campo “Informações”:
Campo alfanumérico com 300 posições.
Botão “Confirmar”:
Se sessão “confirma” igual a novo:
Ativa a consulta Usuário.preparaConsultaPeloLogin(login).
Ativa a consulta Usuário.efetuaConsulta().
Ativa a operação:
Documento.preparaInclusaoDoDocumento(codgloc, codgcateg,
assunto, informacao,
mat_usu, data).
Ativa a operação Documento.efetuaAtualizacao().
Se sessão “confirma” igual a alterar:
Ativa a consulta:
Documento.preparaAlteracaoDoDocumento(codgcateg, assunto,
informacao, data,
codgdoc).
Ativa a operação Documento.efetuaAtualizacao().
Se sessão “confirma” igual a excluir:
Ativa a consulta Documento.preparaExclusaoDoDocumento(codgdoc).
Ativa a operação Documento.efetuaAtualizacao().
Ativa a operação Home.desabilitar(documentos).
Botão “Limpar”:
Limpa todos os campos.
Ativa a operação Home.desabilitar(documentos).
76
Manter Usuários
Inicialização:
Ativa a consulta Usuário.preparaConsultaGeral().
Ativa a consulta Usuário.efetuaConsulta().
Habilita o ComboList.
Nível 1: Habilita os botões “Exibir” e “Novo”.
Desabilita os botões “Alterar” e “Excluir”.
Nível 2: Habilita os botões “Exibir”, “Novo”, “Alterar” e “Excluir”.
Desabilita:
Os botões “confirmar” e “limpar”.
Os campos “Nome”, “Matricula”, “Cargo”, “Usuário” e “Senha”.
Os botões RadioButtonList de permissão.
O menu “Local”.
ComboList:
Resultado da consulta Usuário.preparaConsultaGeral().
Botão “Exibir”:
Ativa a operação Home.habilitar(usuario).
Desabilita o botão “Confirmar”.
Ativa a consulta Usuário.preparaConsultaPorNomeDoUsuario(usuário).
Ativa a consulta Usuário.efetuaConsulta().
Preenche todos os campos com seus dados.
Botão “Novo”:
Ativa a operação Home.habilitar(usuarios).
Habilita o botão “Confirmar”.
Limpa todos os campos.
Botão “Alterar”:
77
Manter Locais
Inicialização:
Ativa a consulta Local.preparaConsultaGeral().
Ativa a consulta Local.efetuaConsulta().
Habilita ComboList.
Nível 1: Habilita o botão “Novo”
Desabilita os botões “Alterar” e “Excluir”.
Nível 2: Habilita os botões “Novo”, “Alterar” e “Excluir”.
Desabilita o campo “Local” e os botões “confirmar” e “limpar”.
ComboList:
Resultado da consulta Local.preparaConsultaGeral().
Botão “Novo”:
Ativa a operação Home.habilitar(locais).
Limpa o campo “Local”.
Botão “Alterar”:
Ativa a operação Home.habilitar(locais).
O item selecionado no menu preenche o campo “Local”.
Botão “Excluir”:
Ativa a operação Home.habilitar(locais).
O item selecionado no ComboList preenche o campo “Local”.
Campo “Local”:
Campo alfanumérico com 30 posições.
79
Manter Categorias
Inicialização:
Ativa a consulta Categoria.preparaConsultaGeral().
Ativa a consulta Categoria.efetuaConsulta().
Habilita ComboList.
Nível 1: Habilita o botão “Novo”
80
Pesquisar Documentos
Inicialização:
Habilita os botões RadioButtonList dos tipos de pesquisas.
Habilita o campo “Código”.
Habilita os botões “OK” e “LIMPAR”.
Botão RadioButtonList “Codigo”:
Habilita o campo “Codigo”.
Desabilita os outros campos.
Botão RadioButtonList “Categoria”:
Habilita o ComboList.
Desabilita os outros campos.
Botão RadioButtonList “Local”:
Habilita o ComboList.
Desabilita os outros campos.
Botão RadioButtonList “Data”:
Habilita o campo “Data”.
Desabilita os outros campos.
Botão RadioButtonList “Todos”:
Desabilita todos os campos.
Campo “Codigo”:
Campo numérico com 06 posições.
Efetua consulta do documento executando:
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Menu “Categorias”:
ComboList com todas as categorias cadastradas.
Menu “Locais”:
ComboList com todos os locais cadastrados.
82
Campo “Data”:
Campo tipo DatePicker para escolha da data.
Botão “Ok”:
Ativa as consulta:
Categoria.preparaConsultaPorCodigoDaCategoria(categoria).
Local.preparaConsultaPorCodigoDoLocal(local).
Ativa a consulta Documento.efetuaConsulta().
Ativa a consulta Categoria.efetuaConsulta().
Ativa a consulta Local.efetuaConsulta().
Botão “Limpar”:
Limpa todos os campos.
Despachos
Inicialização:
Habilita os botões “Envia” e “Recebe”.
Botão “Envia”:
Navegação para “Despachos-Enviar”.
Botão “Recebe”:
Navegação para “Despachos-Receber”.
83
Despachos – Enviar
Inicialização:
Ativa as consultas do sistema:
Usuário.preparaConsultaPeloLogin(login).
Despacho.preparaConsultaDoDespachoEnvia(local).
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Local.preparaConsultaGeral(local).
Ativa a consulta Usuário.efetuaConsulta().
Ativa a consulta Despacho.efetuaConsulta().
Ativa a consulta Documento.efetuaConsulta().
Ativa a consulta Local.efetuaConsulta().
Habilita menu “Documento”.
Habilita menu “Destino” e os botões “Confirmar” e “Voltar”.
Menu “Documento”:
ComboList com todos os documentos a serem enviados no local do usuário.
Menu “Destino”:
ComboList com todos os locais cadastrados.
Botão “Confirmar”:
Ativa as consultas do sistema:
Documento.preparaConsultaPorTituloDoDocumento(assunto).
Local.preparaConsultaGeral(nome do local).
Documento.preparaConsultaPeloCodigoDoDocumento(codgdoc).
Despacho.preparaAlteracaoDoDespachoEnvia(codgdoc, local, data,hora).
Ativa a operação Documento.efetuaAtualizacao().
Ativa a consulta Local.efetuaConsulta().
Ativa a consulta Despacho.efetuaConsulta().
Botão “Limpar”:
84
Despachos – Receber
Inicialização:
Ativa as consultas do sistema:
Usuário.preparaConsultaPeloLogin(login).
Despacho.preparaConsultaDoDespachoRecebe (local).
Documento.preparaConsultaPorCodigoDoDocumento(codgdoc).
Ativa a consulta Usuário.efetuaConsulta().
Ativa a consulta Despacho.efetuaConsulta().
Ativa a consulta Documento.efetuaConsulta().
Habilita menu “Documento” e os botões “Confirmar” e “Voltar”.
Menu “Documento”:
ComboList com todos os documentos a serem recebidos no local do usuário
Botão “Confirmar”:
Ativa as consultas do sistema:
Documento.preparaConsultaPorTituloDoDocumento(assunto).
Usuário.preparaConsultaPeloLogin(login).
Despacho.preparaConsultaDoDespachoAtualiza(codgdoc,codgloc).
Despacho.preparaAlteracaoDoDespachoRecebe(codgdoc,data, hora).
Despacho.preparaInclusaoDoDespachoParcial(codgdoc,codglocAnt,codgloc).
Ativa a operação Documento.efetuaAtualizacao().
Ativa a consulta Usuário.efetuaConsulta().
Ativa a consulta Despacho.efetuaConsulta().
Botão “Limpar”:
85
Emitir Relatórios
Inicialização:
Habilita o campo data inicial, o campo data final, o campo “Código do
Documento” e o botão “Ok”.
Campo “Data Inicial”:
Campo tipo DatePicker para escolha da data inicial.
Campo “Data Final”:
Campo tipo DatePicker para escolha da data final.
Campo “Código do Documento”:
Campos numérico com 06 posições.
Efetua consulta do documento executando:
Despacho.preparaConsultaPeloCodigoDoDocumento(codigo).
Botão “Ok”:
Ativa a consulta Despacho.efetuaConsulta().
Ativa a operação Home.imprimeRel(dataini,datafim,dados).
86
CAPÍTULO IV
CONCLUSÃO
O produto final do trabalho pode ser divido em dois, o primeiro diz respeito ao
Sistema Eletrônico de Protocolo, que ao ser implantado na Fundação Aroeira certamente
garantirá o gerenciamento pretendido pelos clientes no início do projeto, podendo inclusive
evoluir para um Sistema Gerenciador de Documentos onde não apenas as informações a cerca
da documentação é gerenciada, mas também a própria informação é mantida em repositórios
específicos na forma de arquivos eletrônicos.
REFERÊNCIAS BIBLIOGRÁFICAS
[1]. Booch, Grady. Rumbaugh, James. Jacobson, Ivar. UML guia do usuário.
Rio de Janeiro: Campos, 2000.
[2]. Deboni, José Eduardo Zindel. Modelagem orientada a objetos com a UML.
São Paulo: Futura, 2003.
[4]. Gamma, Erich. Helm, Richard. Johnson, Ralph. Vlissides, John. Padrões de projeto:
soluções reutilizáveis de software orientado a objetos.
Porto Alegre: Bookman, 2000.
GLOSSÁRIO
Browser: Programa que permite a interação com documentos hospedados num servidor web.
Javascript: Linguagem de programação de computadores.
Servidor Web: Computador responsável por atender as requisições http de uma aplicação.
Stakeholder: Todos os envolvidos num processo.
91
ANEXO A
PAUTA DA 1º REUNIÃO
I.Informações Gerais
II.Desenvolvimento da Reunião
A reunião teve inicio com a definição de que a funcionária Suellen Ribeiro será nosso
contato com a Fundação para toda informação que se faça necessária sobre o projeto,
assumindo a responsabilidade por repassar as decisões de competência superior e comunicá-
las aos Analistas.
A funcionária explicou como é realizado o controle da documentação da Fundação
atualmente, a atividade de controle da documentação é feita através de cadernos para
anotações e formulários de autuação da documentação tendo seu preenchimento à mão.
Quando um documento chega à Fundação a funcionária o registra no documento de autuação
e em seguida o encaminha ao devido local, o controle de quem recebeu o documento é feito
anotando-se informações como o nome e data do recebimento pelo responsável em um
caderno de anotações.
Ao se questionar os objetivos desejados com a implantação do Sistema Eletrônico de
Protocolo, definiu-se em consenso entre os participantes o seguinte:
IV.Observações
V.Participantes
Nome do participante Função Assinatura
Suellen Ribeiro Usuário
Jandilson de Morais Oliveira Analista
93
ANEXO B
PAUTA DA 2º REUNIÃO
I.Informações Gerais
II.Desenvolvimento da Reunião
IV.Observações
V.Participantes
Nome do participante Função Assinatura
Suellen Ribeiro Usuário
Jandilson de Morais Oliveira Analista de Sistemas
João Luis da Costa Leandro Analista de Sistemas
94
ANEXO C
I.Informações Gerais
II.Objetivo do Projeto
Ao enviar um documento para outro local será feita a ação de “despachar” no Sistema
que consistirá em atribuir ao documento um local de destino, sendo o local atual do
documento alterado quando o usuário do destino conceder o “recebido” no Sistema.
IV.Requisitos
V.Justificativa
VI.Funções e Responsabilidades
VII. Assinaturas
Goiânia, 27/10/2006
Desenvolvedores,
_______________________________ _____________________________
Jandilson de Morais Oliveira João Luiz da Costa Leandro
_______________________________ _____________________________
Suellen Riberio. Eugênio de Britto Jardim
97
ANEXO D
I. Informações Gerais
Tipo do requisito:
UC = caso de uso; CC = conceito; CS = consulta; RE = relatório;
RN = Regra de negócio; OR = outros requisitos;
Nome Descrição Tipo
Manter usuários. O sistema deve suportar alteração de usuários. UC
Manter documentos. O sistema deve suportar a alteração dos documentos. UC
Manter locais. O sistema deve suportar a alteração de locais. UC
Efetuar despacho. O sistema permitirá que o usuário possa enviar e receber UC
um documento alterando o local atual do documento.
Gerar relatório. O sistema suportará a geração de relatórios com RE
diferentes parâmetros.
Funcionamento em rede. O sistema funcionará em rede permitindo o acesso de OR
qualquer terminal por um usuário apto.
Controle de acesso. Somente usuários previamente cadastrados terão acesso OR
ao sistema.
98
2. Cadastro de requisitos
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
Requisitos relacionados:
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
Observações: Responsável:
101
Requisitos relacionados:
Observações: Responsável:
Jandilson de Morais Oliveira;
João Luiz da Costa Leandro;
III. Assinaturas
Goiânia, 24/11/2006.
Desenvolvedores,
_______________________________ _____________________________
Jandilson de Morais Oliveira João Luiz da Costa Leandro
_______________________________ _____________________________
Suellen Riberio. Eugênio de Britto Jardim