Escolar Documentos
Profissional Documentos
Cultura Documentos
Software
Alexandre Monteiro
Roteiro
Contexto
Projeto
Refinando o modelo de análise
Classes
Arquitetura
Pacotes
2
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
3
Contexto
4
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
5
Atividades - Projeto
Refinar o modelo de classes
Projetar arquitetura
Camadas
Separação em pacotes
Projetar Banco de Dados
6
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
7
Exemplo – Análise login
<<control>>
<<boundary>>
ControladorLogin
TelaLogin
* 1 efetuarLogin(login, senha)
efetuarLogin(login, senha)
registrarSessao()
8
Exemplo – Análise adicionar
aluno
<<entity>>
Aluno
<<entity>> <<boundary>> nome
Email TelaAdicionarAluno em ail
login
Email() adicionarAluno() senha
1..*
Aluno()
1
<<boundary>> <<control>> <<entity collection>>
ComunicacaoServidorEmail ControladorAdicionarAluno CadastroAlunos
1 1 1 1
enviarEmail() adicionarAluno() adicionarAluno()
9
Exemplo – diagrama único
Aluno
nome : String
email : String TelaAdicionarAluno TelaLogin
login : String
senha : String adicionarAluno() efetuarLogin()
1..*
Aluno()
*
1 1
ComunicacaoServidorEmail ControladorAdicionarAluno ControladorLogin Usuario
login : String
enviarEmail() 1 1 adicionarAluno() efetuarLogin() senha : String
1 registrarSessao()
1
Email 1 1
assunto : Email
String CadastroAlunos
remetente : String
CadastroUsuarios
destinatario : String
Email()
corpo : String adicionarAluno() checar()
Email()
10
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
11
Exemplo – diagrama
melhorado
Usuario Aluno
TelaAdicionarAluno TelaLogin
login : String nome : String
senha : String email : String
adicionarAluno() efetuarLogin()
TelaAdicionarAluno() TelaLogin()
Usuario() Aluno()
1..* *
1
1
ComunicacaoServidorEmail ControladorAdicionarAluno ControladorLogin
Email
1 1
assunto : String CadastroAlunos CadastroUsuarios
remetente : String
destinatario : String
adicionarAluno() checar()
corpo : String
CadastroAlunos() CadastroUsuarios()
Email()
12
Refinar o modelo de classes
Identificar padrões de projeto
Fachada
Revisar as classes
13
Padrões
Usuario Aluno TelaLogin
TelaAdicionarAluno
login : String nome : String
senha : String email : String efetuarLogin()
adicionarAluno()
TelaAdicionarAluno() TelaLogin()
Usuario() Aluno()
1..* 1..*
1 1
<<singleton>>
ComunicacaoServidorEmail
Fachada
Fachada
enviarEmail()
adicionarAluno() Singleton
ComunicacaoServidorEmail()
efetuarLogin()
1
1 1
Email 1 1
1
assunto : String ControladorAdicionarAluno ControladorLogin
remetente : String
destinatario : String efetuarLogin()
adicionarAluno()
corpo : String registrarSessao()
ControladorAdicionarAluno()
1 ControladorLogin()
Email() 1
1 1
CadastroAlunos CadastroUsuarios
adicionarAluno() checar()
CadastroAlunos() CadastroUsuarios()
14
Projetar arquitetura
Dividir o sistema em camadas
Arquitetura bem comum:
15
Projetar Arquitetura
Por que dividir em camadas?
Aumentar modularidade
Diminuir dependências
Facilitar possível troca de camadas
16
Apresentação
Camadas
TelaLogin TelaAdicionarAluno
efetuarLogin() adicionarAluno()
TelaLogin() TelaAdicionarAluno()
1..* 1..*
1
Negócio 1
1 1
ControladorLogin Usuario
ComunicacaoServidorEmail ControladorAdicionarAluno
1 1 login : String
efetuarLogin() senha : String
enviarEmail() adicionarAluno()
registrarSessao()
ComunicacaoServidorEmail() ControladorAdicionarAluno()
ControladorLogin() Usuario()
1
1
1 1
CadastroAlunos CadastroUsuarios
adicionarAluno() checar()
Dados
CadastroAlunos() CadastroUsuarios()
17
Visão Geral da Arquitetura
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
19
TelaLogin TelaAdicionarAluno
(from gui) (from gui)
Pacotes efetuarLogin()
TelaLogin()
1..*
adicionarAluno()
TelaAdicionarAluno()
1..*
1 1
1 1
CadastroAlunos CadastroUsuarios
(from dados) (from dados)
adicionarAluno() checar()
CadastroAlunos() CadastroUsuarios()
20
Pacotes
gui
21
Referências
The Unified Software Development
Process - Jacobson, Rumbaugh, Booch
The UML Reference Manual -
Rumbaugh, Jacobson, Booch
22