Notação Básica dos Diagramas de Comunicaçãoines/cursos/proj-si/materiais/aula0… · Garantia...

Post on 07-Jul-2020

0 views 0 download

Transcript of Notação Básica dos Diagramas de Comunicaçãoines/cursos/proj-si/materiais/aula0… · Garantia...

Notação Básica dos Diagramas de Comunicação

UNIVERSIDADE ESTADUAL PAULISTAINSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATASDEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

Diagramas de Comunicação

Projeto e Desenvolvimento de Sistemas de Informação

RefinarPlano

Sincronizarartefatos

Analisar Projetar Construir Testar

1. Refinar a arquitetura do sistema

2. Definir diagramasde interação

3. Definir Diagramas deClasses de Projeto

4. Definir o EsquemaDo Banco de Dados

Conclusão da Fase de Análise

� A fase de análise enfatiza uma compreensão dos requisitos do sistema.

� Conjunto mínimo de artefatos:

Artefato da Análise

Casos de Uso

Modelo Conceitual

Diagramas de Sequência do Sistema

Contratos

Questões respondidas

Quais são os processos do domínio?

Quais são os conceitos, os termos?

Quais são os eventos e operações?

O que fazem as operações do sistema?

O começo da fase projetar� Nesta fase é desenvolvida uma solução

lógica baseada no paradigma orientado a objetos.

� Os dois artefatos principais a serem � Os dois artefatos principais a serem desenvolvidos são:� Diagramas de Interação

� Princípios para atribuição de responsabilidades aos objetos envolvidos em uma operação

� Uso de Padrões.� Diagramas de Classe de Projeto

O que já foi visto até agoraCasos de Uso Completo Abstrato

Caso de Uso: Emprestar Livro

Ator Principal: Atendente

Interessados e Interesses:

- Atendente: deseja registrar que um ou mais livros estão em posse de um leitor, para

controlar se a devolução será feita no tempo determinado.

- Leitor: deseja emprestar um ou mais livros, de forma rápida e segura.

- Bibliotecário: deseja controlar o uso dos livros, para que não se percam e para que

sempre se saiba com que leitor estão no momento.

Pré-Condições: O Atendente é identificado e autenticado. Emprestar Livro

Diagrama de Casos de Uso

Pré-Condições: O Atendente é identificado e autenticado.

Garantia de Sucesso (Pós-Condições): Os dados do novo empréstimo estão armazenados

no Sistema. Os livros emprestados possuem status “emprestado”

Cenário de Sucesso Principal:

1. O Leitor chega ao balcão de atendimento da biblioteca e diz ao atendente que deseja

emprestar um ou mais livros da biblioteca.

2. O Atendente seleciona a opção para realizar um novo empréstimo.

3. O Atendente solicita ao leitor sua carteira de identificação, seja de estudante ou

professor.

4. O Atendente informa ao sistema a identificação do leitor.

5. O Sistema exibe o nome do leitor e sua situação.

6. O Atendente solicita os livros a serem emprestados.

7. Para cada um deles, informa ao sistema o código de identificação do livro.

8. O Sistema informa a data de devolução de cada livro.

9. Se necessário, o Atendente desbloqueia os livros para que possam sair da biblioteca.

10. O Leitor sai com os livros.

Fluxos Alternativos: (1-8). A qualquer momento o Leitor informa ao Atendente que desistiu do empréstimo.

3. O Leitor informa ao Atendente que esqueceu a carteira de identificação.

1. O Atendente faz uma busca pelo cadastro do Leitor e pede a ele alguma

informação pessoal para garantir que ele é mesmo quem diz ser.

4. O Leitor está impedido de fazer empréstimo, por ter não estar apto.

1.Cancelar a operação.

7a. O Livro não pode ser emprestado, pois está reservado para outro leitor.

1. O Atendente informa ao Leitor que não poderá emprestar o livro e pergunta se

deseja reservá-lo.

2. Cancelar a operação (se for o único livro)

7b. O Livro não pode ser emprestado, pois é um livro reservado somente para consulta.

1. Cancelar a operação (se for o único livro)

Consultar Livro

Devolver Livro

Atendente

Incluir LivroBibliotecária

Comprar Livro

Leitor

O que já foi visto até agoraCasos de uso com

substantivos e verbos sublinhados

Caso de Uso 1

Modelo Conceitual

Atendente Leitor0..n1 0..n1

Reserva

períodosituacao : char0..n0..n

1

^

faz

0..1

0..1

0..1

0..1

corresponde a

0..10..1 corresponde a0..n0..n

Caso de Uso 2

Caso de Uso n

.

.

.

Atendente

nome

Leitor

nometipo : char

0..n1 0..n1

registra

Empréstimo/Devolução

data do empréstimosituação : Char0..n1 0..n1

faz

LinhaDoEmpréstimo

data_prevista_devoluçãodata_entrega_real

1..n

1

1..n

1 possui

Bibliotecaria

nome

0..10..1

CopiaDoLivro

nro sequencialsituacao : charliberadoParaEmprestimo : char

1

0..n

1

0..n

< refere-se a

Livro

titulo : String[30]autor : String[30]ano : intISBN : string[20]editora : inttipo : char

0..n1 0..n

registra

11refere-se a >

0..n0..n

1possui

O que já foi visto até agora

Modelo Conceitual

+

Casos de Uso

O que foi visto até agora

Projeto Orientado a Objetos

� Finalizada a análise, parte-se para o Projetodo sistema.

� Artefatos de projeto contém detalhes de como o sistema poderá ser implementado como o sistema poderá ser implementado utilizando um computador.� Comportamento esperado de cada objeto e a

colaboração entre os objetos -> diagramas de interação.

� Detalhar as informações sobre as classes que irão compor o sistema -> diagrama de classes.

Diagramas de Interação

� A UML oferece dois tipos de diagrama para mostrar a interação entre os objetos do sistema, por meio de troca objetos do sistema, por meio de troca de mensagens:� Diagrama de sequência e� Diagrama de Comunicação (obs: era

chamado de Diagrama de Colaboração nas versões anteriores à UML 2.0)

Diagrama de Sequência

mensagem1()

:instância da

Classe A

:instância da

Classe B

1:mensagem2()

:instância da

Classe C

SISTEMA

mensagem1()1:mensagem2()

2:mensagem3()3:mensagem4()

Observar que o diagrama de sequência na fase de projeto

“abre” o sistema em objetos que interagem entre si.

Objetos

Diagramas de Comunicação

mensagem1():Instância da

Classe A

:Instância da

Classe B

1:mensagem2()

2:mensagem3()

3:mensagem4()

� Os diagramas de comunicação têm melhor capacidade de expressar informações contextuais e exceções e podem ser mais econômicos em termos de espaço.

:Instância da

Classe C

3:mensagem4()

Diagramas de Comunicação

� São um dos artefatos mais importantes criados na análise e projeto OO

� O tempo gasto na sua criação deve absorver um percentual de tempo

� O tempo gasto na sua criação deve absorver um percentual de tempo significativo do tempo gasto no projeto

� Os padrões estabelecidos, os princípios e idiomas podem ser aplicados para melhorar a qualidade do projeto.

Contribuições dos Diagramas de Comunicação

� Adição dos métodos� Adição da direção das associações� Possível detalhamento dos atributos e � Possível detalhamento dos atributos e

associações.� Possível alteração na estrutura das

classes e associações.� Possível criação de atributos privados

ou protegidos.

Notação básica para diagramas de comunicação

Mensagem entre dois objetos

obj1:Classe1 obj2:Classe21:mensagem1(parâmetro1, parâmetro2)

• obj1 é uma instância da classe Classe1

• obj2 é uma instância da classe Classe2

• A mensagem1 está sendo enviada pelo objeto obj1 ao objeto obj2

• A mensagem1 passa dois parâmetros para o objeto obj2.

Classes X Instâncias

Livro :Livro livro1:Livro

Classeinstância

Instância

nomeada

ligações

obj1:Classe1 obj2:Classe21:mensagem1(parâmetro1, parâmetro2)

Linha de ligação

• Uma ligação é uma conexão entre duas instâncias

• Indicam que existe (ou é possível) alguma forma de navegação e de visibilidade entre as instâncias

• Uma ligação é uma instância de uma associação

Mensagens

� Se existe uma ligação, podem fluir mensagens

� As mensagens podem ser escritas em diferentes sintaxes. Ex. UML, Java e

� As mensagens podem ser escritas em diferentes sintaxes. Ex. UML, Java e Smalltalk, etc.

� Sintaxe UML:

Return := message(parameter : parameterType) : returnType

Ordem das mensagens, condicionais e atribuição às

variáveis

:CópiaTítulo :Empréstimo

1: [novo] criar(id_leitor, id_livro)

Criar só é executada se apto for true

:linhaDoEmpréstimo:Leitor

3: [apto] criar(t)

2: t=obterTipoLeitor()

obterTipoLeitor retorna um resultado que é armazenado na

variável t

A variável t é passada como parâmetro pelo

método criar

Objeto como retorno de método

e1: Emprestimo

2: mudarSituacao("emprestada")

Agora e1 conhece c1 e pode enviar-lhe a mensagem

mudarSituacao()

l1: LinhaDoEmprestimo c1: CopiaDoLivro

1: c1: copia()

c1 é um objeto que retornou como resultado da

invocação de copia()

Criação de instância

C++: aloc. automática ou

new + cham. construtor

Java: operador new

Smalltalk: new + initiatilize

:Obj1 <<new>>:Obj2

1:criar()

msg1()

Condicionais e operadores lógicos e relacionais

e1: Emprestimo

1: [naoEstaEmAtraso] and [nroLivros < maximoPermitido] criar()

:linhaDoEmprestimo

c1: Classe1

c2: Classe2

c3: Classe3

1: [condicao1] mensagem1()

2: [not condicao1] mensagem2()

Caminhos condicionais Mutuamente exclusivos

Apenas uma das mensagens é enviada, dependendo da condição ser verdadeira ou falsa

---

---

if (condicao = true)

:ClasseB.msg2()

msg1()

:ClasseA :ClasseB

:ClasseC

msg1()

1a: [condição] msg2()

1b:[not condição] msg3()

falsa :ClasseB.msg2()

else :ClasseC.msg3()

---

---

Caminhos condicionais Mutuamente exclusivos

:ClasseE

2:msg6()

1a.1:msg3()

:ClasseA :ClasseB

:ClasseC

msg1() 1a: [condição] msg2()

1b:[not condição] msg4()

:ClasseD1b.1:msg5()

Repetição de mensagem

c1: Classe1 c2: Classe2

1: [repita para i de 1 a 100] mensagem1(i)

Em ambos os casos, a mensagem é enviada várias vezes, sempre para o mesmo objeto.

c2: Classe2c1: Classe1

1: [para cada registro] mensagem1()

Múltiplas mensagens na mesma iteração

msg1()

msg1() {

for i=1 to 10 {

meuB.msg2()

meuC.msg3()}

}

1*:[i:=1..10]msg2()

2*:[i:=1..10]msg3()

:A meuB:B

meuC:C

}

Cláusulas de

iteração iguais

Coleções de objetos

� Em um DC pode ser necessário a representação de vários objetos de uma mesma classe (multi-objeto)

� Um multi-objeto ou conjunto de instâncias é representado por um ícone de objeto com repetições.

� Um multi-objeto normalmente é implementado como um grupo de instâncias armazenado em um contêiner ou em um objeto coleção (lista, vector, etc.)

� Uma mensagem enviada a um ícone de multi-objeto indica que ela é enviada ao objeto-coleção.

Mensagens para coleções

:Emprestimo

1: s:=size() : int

msg1()

:LinhaDoEmpres-

timo

msg1()

2: imprimir()

1:le:=obtenha(ID):Emprestimo :LinhaDoEmprestimo

le:LinhaDoEmprestimo

Mensagem para cada elemento da coleção

:Emprestimo :LinhaDoEmprestimo1: * [para cada] obterTituloDoLivro()

A mensagem é enviada uma vez para cada objeto da coleção

Criação de uma coleção, percurso de uma coleção

: Emprestimo

:LinhaDoEmprestimo2: * [para cada linha de emprestimo] linh:=proximo()

3: tit:=obterTituloDoLivro()

A coleção é criada (1) para depois ser preenchida com títulos (4). O método próximo() é utilizado para percorrer a coleção.

titulosEmprestados: String

linh: LinhaDoEmprestimo1: criar()

4: adicionar(tit)

Auto-mensagem

1: cons :=ehDeConsulta()

c1: CopiaDoLivrol1: Livro

2: [not cons] mudarSituacao("emprestada")

Exemplo de um Diagrama de Comunicação – Sistema VideoLocadora

emprestar(fCodigo)

Sistema Biblioteca - Elaborar o DC para cada uma dasoperações do Caso de Uso Emprestar Livro

Atendente

nomeLeitor

nometipo

0..n1 0..n1

registra

Reserva

períodosituacao

0..n

1

0..n

1

^faz

0..n0..n

Empréstimo/Devoluçãodata do empréstimosituação0..n0..n1

faz

0..1

0..1

0..1

0..1

corresponde a

0..10..1

corresponde a

Modelo Conceitual Biblioteca

Bibliotecarianome

CopiaDoLivronro sequencialsituacaoliberadoParaEmprestimo

LivrotituloautoranoISBNeditoratipo

0..n1 0..n1

registra

11refere-se a >

0..n0..n

1

possui

LinhaDoEmpréstimodata_prevista_devoluçãodata_entrega_real

0..10..1

1

0..n

1

0..n

refere-se a

1..n1..n

Fazer um DC para a operação iniciarEmprestimo()

� Operação: iniciarEmprestimo(id_leitor)� Referências Cruzadas: Caso de uso:

“Emprestar Livro”� Pré-Condições:

� O leitor é registrado na biblioteca e sabe-se seu ID.

� Pós-Condições:� Um leitor apto a emprestar livros foi

identificado.� Um objeto Empréstimo/Devolução foi

criado e associado ao leitor

Diagrama de Comunicação

:BibliotecaLeitoriniciarEmprestimo (idLeitor) --->

1. le:=busca(idLeitor)

le: Leitor

e : Empréstimo/Devolução

2. [le not null] inadimp:=verificarInadimplencia()

3. [not inadimp] criar() 4. Associar_e(e)

Diagrama de Comunicação para a operação EmprestarLivro

� Operação: emprestarLivro(id_Livro)

� Referências Cruzadas: Caso de uso: “Emprestar Livro”

� Pré-Condições: � Pré-Condições: � Um leitor apto a emprestar livros já foi identificado;

� Pós-Condições:� um objeto LinhaDoEmpréstimo foi criado;

� a LinhaDoEmpréstimo foi associada à cópia do livro e ao empréstimo criado para o leitor na operação anterior “iniciarEmprestimo”;

� O atributo “situação” da cópia do livro foi alterado para “emprestada”.

� a data de devolução foi calculada, armazenada na “LinhaDoEmprestimo” e informada ao leitor.

Atendente

nomeLeitor

nometipo

0..n1 0..n1

registra

Reserva

períodosituacao

0..n

1

0..n

1

^faz

0..n0..n

Empréstimo/Devoluçãodata do empréstimosituação0..n0..n1

faz

0..1

0..1

0..1

0..1

corresponde a

0..10..1

corresponde a

Modelo Conceitual Biblioteca

Bibliotecarianome

CopiaDoLivronro sequencialsituacaoliberadoParaEmprestimo

LivrotituloautoranoISBNeditoratipo

0..n1 0..n1

registra

11refere-se a >

0..n0..n

1

possui

LinhaDoEmpréstimodata_prevista_devoluçãodata_entrega_real

0..10..1

1

0..n

1

0..n

refere-se a

1..n1..n

:Biblioteca

: LivroemprestarLivro(idLivro)

le: Leitor

1. liv:=busca(idLivro)

2. disponivel:=verificaLivro()3. [disponivel] dtDev:=calcularDataDevolucao()

Diagrama de Comunicação

:Reserva

lemp: LinhaEmprest

: CopiaDoLivrocl :CopiaDoLivro

liv : Livro

2.1. nc:=qtCopiasDispon()

4.1. mudaSituacaoCopia()

4.1.1. cl:=buscaCopiaDispon()4.1.2. tornarEmprestado()

le: Leitor

4. [disponivel] criar(liv, dtDev)

2.1.1. nr:=qtCopiasReserv()

e:Emprestimo

5. associarLE(lemp)

Para o que serve o Diagrama de Comunicação?

� Isso será discutido nas próximas aulas(GRASP)

Exercício: Complementar a operação emprestarLivro(idLivro) -> verificar se leitor já não tem o número máximo leitor já não tem o número máximo permitido de livros em seu poder.

Fazer um DC para a operação encerrarEmprestimo()

� Operação: encerrarEmpréstimo()

� Referências Cruzadas: Caso de uso: “Emprestar Livro”

� Pré-Condições: � Pré-Condições: � Existe “emprestimo/devolução” e ao menos uma linha do empréstimo

� Pós-Condições: � O sistema foi informado que o empréstimo atual foi concluído.

� O atributo “situação” de “Emprestimo/Devolução” foi alterado para “vigente”

1.1. alterarSi tuacao("Vigente")

Diagrama de Comunicação

encerrarEmprestimo() --->:Biblioteca e :

Empréstimo/Devolução

1. encerrar()

Próxima aulaRefinarPlano

Sincronizarartefatos

Analisar Projetar Construir Testar

Padrões GRASP

1. Refinar a arquitetura do sistema

2. Definir diagramasde interação

3. Definir Diagramas deClasses de Projeto

4. Definir o EsquemaDo Banco de Dados