Projeto de Arquitetura de Software Alexandre Monteiro.

22
Projeto de Arquitetura de Software Alexandre Monteiro

Transcript of Projeto de Arquitetura de Software Alexandre Monteiro.

Page 1: Projeto de Arquitetura de Software Alexandre Monteiro.

Projeto de Arquitetura de Software

Alexandre Monteiro

Page 2: Projeto de Arquitetura de Software Alexandre Monteiro.

2

Roteiro Contexto Projeto Refinando o modelo de análise

Classes Arquitetura Pacotes

Page 3: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 4: Projeto de Arquitetura de Software Alexandre Monteiro.

4

Contexto

Requisitos Análise Projeto

Page 5: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 6: Projeto de Arquitetura de Software Alexandre Monteiro.

6

Atividades - Projeto Refinar o modelo de classes Projetar arquitetura

Camadas Separação em pacotes

Projetar Banco de Dados

Page 7: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 8: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 9: Projeto de Arquitetura de Software Alexandre Monteiro.

9

Exemplo – Análise adicionar aluno

Alunonomeemailloginsenha

Aluno()

<<entity>>

Email

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

Page 10: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Email()

Alunonome : Stringemail : Stringlogin : Stringsenha : String

Aluno()

Usuariologin : Stringsenha : String

Emailassunto : Stringremetente : Stringdestinatario : Stringcorpo : String

Email()

Page 11: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 12: Projeto de Arquitetura de Software Alexandre Monteiro.

12

Exemplo – diagrama melhorado

TelaLogin

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

Page 13: Projeto de Arquitetura de Software Alexandre Monteiro.

13

Refinar o modelo de classes Identificar padrões de projeto

Fachada Revisar as classes

Page 14: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 15: Projeto de Arquitetura de Software Alexandre Monteiro.

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ção Comunicação entre apresentação e negócio e com outros sistemas

Page 16: Projeto de Arquitetura de Software Alexandre Monteiro.

16

Projetar Arquitetura Por que dividir em camadas?

Aumentar modularidade Diminuir dependências Facilitar possível troca de camadas

Page 17: Projeto de Arquitetura de Software Alexandre Monteiro.

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

Page 18: Projeto de Arquitetura de Software Alexandre Monteiro.

18

Visão Geral da Arquitetura

Page 19: Projeto de Arquitetura de Software Alexandre Monteiro.

19

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

Page 20: Projeto de Arquitetura de Software Alexandre Monteiro.

20

Pacotes

CadastroUsuarios

checar()CadastroUsuarios()

(from dados)CadastroAlunos

adicionarAluno()CadastroAlunos()

(from dados)

ComunicacaoServidorEmail

enviarEmail()ComunicacaoServidorEmail()

(from comunicacao)

Email

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

Page 21: Projeto de Arquitetura de Software Alexandre Monteiro.

21

Pacotes

gui

negocio dadoscomunicacao

Page 22: Projeto de Arquitetura de Software Alexandre Monteiro.

22

Referências The Unified Software Development

Process - Jacobson, Rumbaugh, Booch

The UML Reference Manual - Rumbaugh, Jacobson, Booch