projeto rafael duarte alexandre mota [rmd, acm]@cin.ufpe.br
TRANSCRIPT
Projeto
Rafael DuarteAlexandre Mota
[rmd, acm]@cin.ufpe.br
09/12/2004 2
Roteiro Contexto Projeto Refinando o modelo de análise
Classes Arquitetura Pacotes
09/12/2004 3
Contexto Após a etapa de análise temos um
primeiro modelo do sistema Queremos agora melhorar esse
modelo, a ponto de gerarmos facilmente a implementação do sistema
Este modelo é chamado de modelo de Projeto
09/12/2004 4
Contexto
Requisitos Análise Projeto
09/12/2004 5
Análise X Projeto Abstrato X Concreto Independente X dependente da
tecnologia de implementação Simples X detalhado Modelos por caso de uso X unificação
em um único modelo
09/12/2004 6
Atividades - Projeto Refinar o modelo de classes Projetar arquitetura
Camadas Separação em pacotes
Projetar Banco de Dados
09/12/2004 7
Refinar o modelo de classes Juntar todas as classes em um só
diagrama Analisar se é necessário criar novas
classes ou remover classes existentes Eliminar os estereótipos de análise Adicionar modificadores de
visibilidade aos métodos e atributos Definir os tipos dos atributos
09/12/2004 8
Exemplo – Análise login
Usuariologinsenha
<<entity>>
TelaLogin
efetuarLogin(login, senha)
<<boundary>>
CadastroUsuarios
checar(login, senha)
<<entity collection>>
ControladorLogin
efetuarLogin(login, senha)registrarSessao()
<<control>>
1* 1*
1
1
1
1
09/12/2004 9
Exemplo – Análise adicionar aluno
Alunonomeemailloginsenha
Aluno()
<<entity>>
Email()
<<entity>>TelaAdicionarAluno
adicionarAluno()
<<boundary>>
CadastroAlunos
adicionarAluno()
<<entity collection>>ControladorAdicionarAluno
adicionarAluno()
<<control>>1
1..*
11
ComunicacaoServidorEmail
enviarEmail()
<<boundary>>
1 1
1..*
1
1 1 11
09/12/2004 10
Exemplo – diagrama único
TelaLogin
efetuarLogin()
TelaAdicionarAluno
adicionarAluno()
CadastroUsuarios
checar()
ControladorLogin
efetuarLogin()registrarSessao()
*
1
*
1
1
1
1
1CadastroAlunos
adicionarAluno()
ComunicacaoServidorEmail
enviarEmail()
ControladorAdicionarAluno
adicionarAluno()
1..*
1
1..*
1
1
1
1
1
11 11
Email()
Alunonome : Stringemail : Stringlogin : Stringsenha : String
Aluno()
Usuariologin : Stringsenha : String
Emailassunto : Stringremetente : Stringdestinatario : Stringcorpo : String
Email()
09/12/2004 11
Refinar o modelo de classes Detalhar assinatura dos métodos
definir todos os parâmetros dos métodos, seu tipos e o tipo de retorno dos métodos
Mapear associações em atributos* Analisar a possibilidade de utilizar
herança
09/12/2004 12
Exemplo – diagrama melhoradoTelaLogin
efetuarLogin()TelaLogin()
ControladorLogin
efetuarLogin()registrarSessao()ControladorLogin()
*
1
*
1
CadastroUsuarios
checar()CadastroUsuarios()
1
1
1
1
TelaAdicionarAluno
adicionarAluno()TelaAdicionarAluno()
CadastroAlunos
adicionarAluno()CadastroAlunos()
ControladorAdicionarAluno
adicionarAluno()ControladorAdicionarAluno()
1..*
1
1..*
1
1
1
1
1
ComunicacaoServidorEmail
enviarEmail()ComunicacaoServidorEmail() 11 11
Emailassunto : Stringremetente : Stringdestinatario : Stringcorpo : String
Email()
Alunonome : Stringemail : String
Aluno()
Usuariologin : Stringsenha : String
Usuario()
09/12/2004 13
Refinar o modelo de classes Identificar padrões de projeto
Fachada Revisar as classes
09/12/2004 14
Padrões
CadastroUsuarios
checar()CadastroUsuarios()
CadastroAlunos
adicionarAluno()CadastroAlunos()
ComunicacaoServidorEmail
enviarEmail()ComunicacaoServidorEmail()
Emailassunto : Stringremetente : Stringdestinatario : Stringcorpo : String
Email()
Alunonome : Stringemail : String
Aluno()
Usuariologin : Stringsenha : String
Usuario()
TelaAdicionarAluno
adicionarAluno()TelaAdicionarAluno()
TelaLogin
efetuarLogin()TelaLogin()
ControladorAdicionarAluno
adicionarAluno()ControladorAdicionarAluno()
1
1
1
1
1
1
1
1
Fachada
adicionarAluno()efetuarLogin()
<<singleton>>
1
1..*
1
1..*
1
1
ControladorLogin
efetuarLogin()registrarSessao()ControladorLogin()
1
1
1
1
1
1
1 1
1..* 1..*
1 1
1 1
FachadaSingleton
09/12/2004 15
Projetar arquitetura Dividir o sistema em camadas Arquitetura bem comum:
Apresentação
Negócio
Dados
Interface com o usuário
Regras de negócio inerentesà aplicação
Código relacionado ao mecanismode persistência utilizado
ComunicaçãoComunicação entre
apresentação e negócio e com outros sistemas
09/12/2004 16
Projetar Arquitetura Por que dividir em camadas?
Aumentar modularidade Diminuir dependências Facilitar possível troca de camadas
09/12/2004 17
Camadas
CadastroUsuarios
checar()CadastroUsuarios()
CadastroAlunos
adicionarAluno()CadastroAlunos()
ComunicacaoServidorEmail
enviarEmail()ComunicacaoServidorEmail()
Emailassunto : Stringremetente : Stringdestinatario : Stringcorpo : String
Email()
Alunonome : Stringemail : String
Aluno()
Usuariologin : Stringsenha : String
Usuario()
TelaAdicionarAluno
adicionarAluno()TelaAdicionarAluno()
TelaLogin
efetuarLogin()TelaLogin()
ControladorAdicionarAluno
adicionarAluno()ControladorAdicionarAluno()
1
1
1
1
11 11
Fachada
adicionarAluno()efetuarLogin()
<<singleton>>
1
1..*
1
1..*
1
1
ControladorLogin
efetuarLogin()registrarSessao()ControladorLogin()
1
1
1
1
1
1
11
1..*1..*
1 1
11Comunicação
Dados
Apresentação
Negócio
09/12/2004 18
Divisão do sistema em pacotes Agrupar classes em pacotes Possíveis critérios:
Camadas Lógica do sistema
Critérios escolhidos devem minimizar a dependência entre os pacotes
Criar um diagrama de pacotes indicando as dependências entre os pacotes
09/12/2004 19
Pacotes
CadastroUsuarios
checar()CadastroUsuarios()
(from dados)CadastroAlunos
adicionarAluno()CadastroAlunos()
(from dados)
ComunicacaoServidorEmail
enviarEmail()ComunicacaoServidorEmail()
(from comunicacao)
assunto : Stringremetente : Stringdestinatario : Stringcorpo : String
Email()
(from negocio)Aluno
nome : Stringemail : String
Aluno()
(from negocio)
Usuario
login : Stringsenha : String
Usuario()
(from negocio)
TelaAdicionarAluno
adicionarAluno()TelaAdicionarAluno()
(from gui)TelaLogin
efetuarLogin()TelaLogin()
(from gui)
ControladorAdicionarAluno
adicionarAluno()ControladorAdicionarAluno()
(from negocio)
1
1
1
1
11 11
Fachada
adicionarAluno()efetuarLogin()
(from negocio)
<<singleton>>
1
1..*
1
1..*
1
1
ControladorLogin
efetuarLogin()registrarSessao()ControladorLogin()
(from negocio)
1
1
1
1
1
1
11
1..*1..*
1 1
11
Indicação do pacoteda classe
09/12/2004 20
Pacotes
gui
negocio dadoscomunicacao
09/12/2004 21
Referências The Unified Software Development
Process - Jacobson, Rumbaugh, Booch The UML Reference Manual -
Rumbaugh, Jacobson, Booch