21
Projeto de Software e Arquitetura Alexandre Monteiro

Projeto de Software e Arquitetura Alexandre Monteiro

Embed Size (px)

Citation preview

Page 1: Projeto de Software e Arquitetura Alexandre Monteiro

Projeto de Software e Arquitetura

Alexandre Monteiro

Page 2: Projeto de Software e Arquitetura Alexandre Monteiro

2

Roteiro Contexto Projeto Refinando o modelo de análise

Classes Arquitetura Pacotes

Page 3: Projeto de Software e Arquitetura 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 Software e Arquitetura Alexandre Monteiro

4

Contexto

Requisitos Análise Projeto

Page 5: Projeto de Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura Alexandre Monteiro

13

Refinar o modelo de classes Identificar padrões de projeto

Fachada Revisar as classes

Page 14: Projeto de Software e Arquitetura 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 Software e Arquitetura 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çãoComunicação entre

apresentação e negócio e com outros sistemas

Page 16: Projeto de Software e Arquitetura 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 Software e Arquitetura 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 Software e Arquitetura Alexandre Monteiro

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

Page 19: Projeto de Software e Arquitetura Alexandre Monteiro

19

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 20: Projeto de Software e Arquitetura Alexandre Monteiro

20

Pacotes

gui

negocio dadoscomunicacao

Page 21: Projeto de Software e Arquitetura Alexandre Monteiro

21

Referências The Unified Software Development

Process - Jacobson, Rumbaugh, Booch

The UML Reference Manual - Rumbaugh, Jacobson, Booch