Você está na página 1de 22

Projeto de Arquitetura de

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

Requisitos Análise Projeto

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

<<entity collection>> 1 <<entity>>


CadastroUsuarios Usuario
login
checar(login, senha) senha

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

enviarEmail() adicionarAluno() efetuarLogin()


1 1 registrarSessao()
ComunicacaoServidorEmail() ControladorAdicionarAluno()
1 ControladorLogin()
1

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:

Apresentação Interface com o usuário

Comunicação Comunicação entre apresentação e negócio e com


outros sistemas

Negócio Regras de negócio inerentes


à aplicação

Dados Código relacionado ao mecanismo


de persistência utilizado

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

Email <<singleton>> Aluno


assunto : String Fachada nome : String
remetente : String email : String
destinatario : String adicionarAluno()
corpo : String efetuarLogin() Aluno()
1
Email()
Comunicação 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

Email <<singleton>> Aluno


Indicação do pacote (from negocio)
Fachada (from negocio)
da classe assunto : String (from negocio) nome : String
remetente : String email : String
destinatario : String adicionarAluno()
corpo : String efetuarLogin() Aluno()
1
Email() 1
1 1
ControladorLogin Usuario
ComunicacaoServidorEmail ControladorAdicionarAluno
(from negocio) (from negocio)
(from comunicacao) 1 1 (from negocio)
login : String
efetuarLogin() senha : String
enviarEmail() adicionarAluno()
registrarSessao()
ComunicacaoServidorEmail() ControladorAdicionarAluno()
ControladorLogin() Usuario()
1
1

1 1
CadastroAlunos CadastroUsuarios
(from dados) (from dados)

adicionarAluno() checar()
CadastroAlunos() CadastroUsuarios()

20
Pacotes

gui

comunicacao negocio dados

21
Referências
 The Unified Software Development
Process - Jacobson, Rumbaugh, Booch
 The UML Reference Manual -
Rumbaugh, Jacobson, Booch

22

Você também pode gostar