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

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

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

Aula 5 Diagramas de Seqüência do Sistema e Contratos de Operações

Aula 7 Visibilidade entre objetos e Diagramas de Classes

Modelagem de Software

Análise do Sistema Casos de Uso

Diagramas de Sequência do Sistema e Contratos de Operações. SSC-121 Engenharia de Software I Profa. Dra. Elisa Yumi Nakagawa 2º semestre de 2012

Diagramas de Classes. SSC-526 Análise e Projeto Orientados a Objeto Profa. Dra. Elisa Yumi Nakagawa 2º semestre de 2013

Modelo Conceitual. Prof. Seiji Isotani Slides baseados no material da Profa Dra Rosana T. V. Braga

DIAGRAMA DE COMUNICAÇÃO. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Diagramas de Colaboração e Padrões GRASP

DIAGRAMA DE CLASSES DE PROJETO

Do Projeto à Codificação. SSC-526 Análise e Projeto Orientados a Objeto Profa. Dra. Elisa Yumi Nakagawa 2º semestre de 2013

Descrição de Casos de Uso (Casos de Uso Textuais) SSC 124: Análise e Projeto Orientados a Objetos Profa. Dra. Elisa Yumi Nakagawa

DIAGRAMA DE COMUNICAÇÃO

Diagramas de Sequência do Sistema. SSC 124: Análise e Projeto Orientados a Objetos Profa. Dra. Elisa Yumi Nakagawa

Diagrama de Classes Aula 11 (parte 1)

Projeto da Camada de Domínio. Diagramas de Colaboração/Comunicação Diagrama de Classes de Projeto (DCP)

Universidade de São Paulo, Instituto de Ciências Matemáticas e de Computação

Casos de Uso. SSC-121 Engenharia de Software I. Profa. Dra. Elisa Yumi Nakagawa 2º semestre de 2012

Casos de Uso. Análise e Projeto Orientados a Objetos. Profa Dra Rosana T. V. Braga

Projeto Orientado a Objetos

Diagrama de Comunicação. SSC 526 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Framework Hibernate/JPA

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

Modelo Conceitual. SSC 526: Análise e Projeto Orientados a Objetos Profa. Dra. Elisa Yumi Nakagawa

Contratos O diagrama de sequência não menciona a funcionalidade das operações. Isto é, o comportamento do sistema Contrato é um documento que

Frameworks O Problema da Persistência

Diagramas de Sequência e Contrato das Operações

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

Documento de Especificação de Requisitos

Modelagem de Casos de Uso (Parte 1)

27/02/2016 UML. Prof. Esp. Fabiano Taguchi DIAGRAMAS DE SEQUÊNCIA

Fase de Concepção. Levantamento e Organização de Requisitos

MODELAGEM DE SISTEMAS Unidade 4 Modelo de Classes de Projeto. Luiz Leão

Orientação a Objetos e Java

Análise e Projeto Orientados a Objetos

Modelagem Dinâmica. Toda a ação é designada em termos do fim que procura atingir. Niccolo Maquiavel. O pensamento é o ensaio da ação.

Aula 4 Estruturas Condicionais

Desenvolvimento de Aplicações Desktop

Estruturas Condicionais

Análise e Projeto de Software Parte II. Marcos Dósea

Unidade IV. Compreende uma conexão bidirecional entre classes que indica a existência de um relacionamento entre os objetos dessas classes.

PCS3413 Engenharia de Software e Banco de Dados

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

4 Conceito de Herança

Análise e Projeto Orientados a Objetos

Estruturas de seleção. Prof.: Jesus

ARCHITECTURAL DESIGN. Ian Sommerville, 8º edição Capítulo 11 Aula de Luiz Eduardo Guarino de Vasconcelos

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO SSC DEPARTAMENTO DE SISTEMAS DE COMPUTAÇÃO

Modelo conceitual Aula 08

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Revisão Diagrama de Caso de Uso. Rodolfo Adamshuk Silva 30/08/2013

Metodologias de Desenvolvimento (I)

15/04/2013. Pensar Orientado a Objetos. Projeto Orientado a Objetos. Características de Objetos. Classe de Objetos. Comunicação entre Objetos

Especificação de Requisitos

Estruturas de seleção. Prof.: Jesus

Diagramas de Sequência de Sistema e Contratos de Operação

Pontifícia Universidade Católica

Análise e Projeto Orientados a Objetos: Visibilidade Diagrama de Classe de Projeto

Modelagem de Casos de Uso (Parte 2)

Sistema de Reparo de Buracos

FUNDAÇÃO UNIVERSIDADE ESTADUAL DE MARINGÁ

ANÁLISE DE SISTEMAS UML. por. Antônio Maurício Pitangueira

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

04/11/2016 UML. Prof. Esp. Fabiano Taguchi DIAGRAMAS DE CLASSE

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

MÓDULO. Diagramas de Seqüência

Capítulo 6: Linguagens de Programação

Programação Orientada a Objetos

Aula 1 Apresentação do Curso

Análise e Projeto Orientados a Objetos

Casos de Uso. SSC 526: Análise e Projeto Orientados a Objetos. Profa. Dra. Elisa Yumi Nakagawa

GRASP: PADRÕES PARA ATRIBUIÇÃO DE RESPONSABILIDADES. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Aula 16 Estruturas de Controle. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Diagramas de Classes. ESII Profª. Andressa Falcade URI Santiago

Departamento de Engenharia Industrial. ENG Sistemas de Informação Gerenciais Caso de Uso - Exercícios

Aula 8 Projeto de Interface

Linguagem C estruturas de repetição

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Estudo de Caso TPV: do Projeto para a Codificação

Conceito de Caso de Uso, Diagramas e Documentação.

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

DOCUMENTAÇÃO SISTEMA DE ADMINISTRAÇÃO DE CONSULTÓRIO MÉDICO

PROJETO INTEGRADO I OFICINA MECÂNICA

Algoritmos - 3. Alexandre Diehl. Departamento de Física - UFPel

Laboratório de Programação II

Aula 2 Comandos de Decisão

Projeto de Linguagem. Linguagens de Programação

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

UML & Padrões Aula 6. UML & Padrões - Profª Kelly C C Silva

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Engenharia de Software. Caso de Uso - Continuação

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

ANÁLISE E PROJETO ORIENTADO A OBJETO

Linguagem UML. Linguagem de Modelagem Unificada UML. Diagramas de Comportamento Parte 2. Rosemary Silveira Filgueiras Melo

Transcrição:

Departamento de Sistemas de Computação Universidade de São Paulo SSC 124 Análise e Projeto Orientados a Objetos Aula 6 Notação Básica dos Diagramas de Comunicação Responsável Prof. Seiji Isotani (sisotani@icmc.usp.br)

O que já foi visto até agora Casos de Uso Completo Abstrato Diagrama de Casos de Uso Emprestar Livro Ator Principal: Atendente Interessados e Interesses: Caso de Uso: Emprestar Livro - 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. Atendente Devolver Livro Leitor 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: Bibliotecária Incluir Livro Comprar Livro Consultar Livro 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) 2

O que já foi visto até agora Casos de Uso com substantivos e verbos sublinhados Caso de Uso 1 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 adicionar um novo empréstimo. 3. O Atendente solicita ao leitor sua carteirinha, 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. O Atendente desbloqueia os livros para que possam sair da biblioteca. 10. O Leitor sai com os livros. Caso de Uso n 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 adicionar um novo empréstimo. 3. O Atendente solicita ao leitor sua carteirinha, 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. O Atendente desbloqueia os livros para que possam sair da biblioteca. 10. O Leitor sai com os livros. Atendente nome Bibliotecaria nome registra refere-se a > Modelo Conceitual Leitor nome tipo : char registra ^ faz faz Reserva período situacao : char 0..1 Empréstimo/Devolução data do empréstimo situação : Char Livro titulo : String[30] autor : String[30] ano : int ISBN : string[20] editora : int tipo : char possui 0..1 corresponde a corresponde a CopiaDoLivro 0..1 nro sequencial situacao : char liberadoparaemprestimo : char possui 1..n 0..1 LinhaDoEmpréstimo data_prevista_devolução data_entrega_real < refere-se a 3

O que já foi visto até agora Modelo Conceitual + Casos de Uso Diagrama de Seqüência do Sistema (para cada caso de uso) :Atendente Sistema 1: iniciarempréstimo(id_leitor) 2: emprestarlivro(id_livro) * mais livros a emprestar 3: encerrarempréstimo() 4

O que já foi visto até agora Diagrama de Seqüência do Sistema (para cada caso de uso) Contrato da Operação (para cada operação) Operação: encerrarempréstimo() :Atendente Sistema Referências Cruzadas: Caso de uso: Emprestar Livro 1: iniciarempréstimo(id_leitor) Pré-Condições: Um leitor apto a emprestar livros já foi identificado; pelo menos um livro já foi identificado e está disponível para ser emprestado. 2: emprestarlivro(id_livro) * mais livros a emprestar Pós-Condições: um novo empréstimo foi registrado; o novo empréstimo foi relacionado ao leitor já identificado na operação iniciar o empréstimo ; a situação dos livros emprestados foi alterada para emprestado. 3: encerrarempréstimo() 5

Projeto Orientado a Objetos Finalizada a análise, inicia-se o Projeto do sistema Artefatos de projeto contém detalhes de como o sistema poderá ser implementado utilizando um computador. detalhar as informações sobre as classes que comporão o sistema diagrama de classes comportamento esperado de cada objeto e a colaboração entre os objetos diagramas de interação 6

Atendente nome registra Leitor nome tipo : char ^ faz faz Reserva período situacao : char 0..1 Empréstimo/Devolução data do empréstimo situação : Char 0..1 corresponde a corresponde a 0..1 possui Bibliotecaria nome refere-se a > registra Livro titulo : String[30] autor : String[30] ano : int ISBN : string[20] editora : int tipo : char possui 1..n 0..1 LinhaDoEmpréstimo data_prevista_devolução data_entrega_real < refere-se a CopiaDoLivro nro sequencial situacao : char liberadoparaemprestimo : char Modelo Conceitual produzido na análise

Atendente nome registra Leitor nome tipo : char ^ faz faz Reserva período situacao : char 0..1 Empréstimo/Devolução data do empréstimo situação : Char 0..1 corresponde a corresponde a 0..1 possui Bibliotecaria nome refere-se a > registra Livro titulo : String[30] autor : String[30] ano : int ISBN : string[20] editora : int tipo : char possui 1..n 0..1 LinhaDoEmpréstimo data_prevista_devolução data_entrega_real < refere-se a Objetivo ao final da fase de projeto: refinar este modelo e incluir métodos (interface) CopiaDoLivro nro sequencial situacao : char liberadoparaemprestimo : char

nome tipo Leitor calculardatadevolucao( ) 0..* faz possui Emprestimo data_do_emprestimo situacao : char adicionarcopia( ) devolvercopia( ) LinhaDoEmprestimo data_prevista_devolução data_entrega_real 1..* refere-se a CopiaDoLivro nro_sequencial situacao : char liberadoparaemprestimo : cha codcopia( ) atualizardatadev( ) 0..* mudarsituacao( ) codcopia( ) sinalizardevolucao( ) 9

Como projetar as responsabilidades de cada objeto? Sabemos que os objetos precisam se comunicar Os Diagramas de comunicação mostram escolhas de atribuição de responsabilidade a objetos Mas quem é o melhor candidato para realizar/implementar/materializar cada uma das operações e dos métodos do sistema? 10

Como projetar as responsabilidades de cada objeto? Responsabilidade: um contrato ou obrigação de um tipo ou classe serviços fornecidos por um elemento (classe ou subsistema) Dois tipos de responsabilidades básicas: Fazer fazer algo (criar um objeto, executar uma operação, ) iniciar ações em outros objetos (delegação) coordenar e controlar atividades em outros objetos Saber conhecer dados privados encapsulados conhecer objetos relacionados conhecer dados/atributos que podem ser derivados ou calculados 11

Diagramas de Interação A UML oferece dois tipos de diagramas para mostrar a interação entre os objetos do sistema, por meio de troca de mensagens: diagrama de seqüência e diagrama de comunicação (anteriormente à UML 2.0 chamado de diagrama de colaboração) Atenção: algumas ferramentas CASE ainda usam o termo diagrama de colaboração 12

Diagrama de Sequência :instância de Classe A :instância de Classe B :instância de Classe C mensagem1() 1:mensagem2() 2:mensagem3() 3:mensagem4() 13

Diagrama de Comunicação mensagem1() :Instância da Classe A 1:mensagem2() 2:mensagem3() :Instância da Classe B 3:mensagem4() :Instância da Classe C Os diagramas de comunicação têm melhor capacidade de expressar informações contextuais e podem ser mais econômicos em termos de espaço 14

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 associações Possível alteração na estrutura das classes e associações Possível criação de atributos privados ou protegidos 15

Mensagem entre dois objetos no diagrama de comunicação 1: mensagem1(parâmetro1, parâmetro2) obj1: Classe1 obj2: Classe2 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 16

Classes X Instâncias Classe Instância Instância nomeada Livro :Livro livro1: Livro 17

Ordem das mensagens, condicionais e atribuição a variáveis emprestarlivro :CópiaTítulo 1: [novo] criar(id_leitor, id_livro) Criar só é executada se apto for true :Empréstimo 2: t=obtertipoleitor() :Leitor obtertipoleitor retorna um resultado que é armazenado na variável t 3: [apto] criar(t) :linhadoempréstimo A variável t é passada como parâmetro pelo método criar 18

Objeto como retorno de método e1: Emprestimo Agora e1 conhece c1 e pode enviar-lhe a mensagem mudarsituacao() 2: mudarsituacao("emprestada") 1: c1:= copia() c1 é um objeto que retornou como resultado da invocação de copia() l1: LinhaDoEmprestimo c1: CopiaDoLivro 19

Condicionais e Operadores lógicos e relacionais e1: Emprestimo 1: [naoestaematraso] and [nrolivros < maximopermitido] c :linhadoemprestimo 1: [condicao1] mensagem1() c2: Classe2 c1: Classe1 2: [not condicao1] mensagem2() c3: Classe3 20

Caminhos Condicionais Mutuamente Exclusivos Apenas uma das mensagens é enviada, dependendo da condição ser verdadeira ou falsa msg1() :ClasseA 1a: [condição] msg2() msg1() --- --- if (condicao = true) :ClasseB.msg2() else :ClasseC.msg3() --- --- :ClasseB 1b:[not condição] msg3() :ClasseC 21

Caminhos Condicionais Mutuamente Exclusivos :ClasseE 2:msg6() msg1() :ClasseA 1a: [condição] msg2() :ClasseB 1b:[not condição] msg4() 1a.1:msg3() :ClasseD 1b.1:msg5() :ClasseC 22

Repetição de mensagem 1: [repita para i de 1 a 100] mensagem1(i) c1: Classe1 c2: Classe2 1: [para cada registro] mensagem1() c1: Classe1 c2: Classe2 Em ambos os casos, a mensagem é enviada várias vezes, sempre para o mesmo objeto!! 23

Mensagem para coleção :Emprestimo 1: * [para cada] obtertitulodolivro() :LinhaDoEmprestimo A mensagem é enviada uma vez para cada objeto da coleção!! 24

Criação de uma coleção, percurso de uma coleção 2: * [para cada linha de emprestimo] linh:=proximo() :LinhaDoEmprestimo : Emprestimo 3: tit:=obtertitulodolivro() 1: criar() linh: LinhaDoEmprestimo 4: adicionar(tit) titulosemprestados: String A coleção é criada (1) para depois ser preenchida com títulos (4) O método proximo() é utilizado para percorrer a coleção 25

Auto-mensagem 1: cons :=ehdeconsulta() l1: Livro cl1: CopiaDoLivro 2: [not cons] mudarsituacao("emprestada") 26

Exemplo Implementação inchada ou concentradora, Versus Implementação leve, distribuída 27

28

Comunicação entre os objetos 2: emprestimocorrente := getemprestimocorrente emprestafita(fcodigo)----> :Videolocadora clientecorrente: Cliente 3: criar() 1: fita:=get(fcodigo) 5: associaitem(item) 4: associafita(fita) fitas: Fita emprestimocorrente: Emprestimo item: ItemDeEmprestimo 29

Classe VideoLocadora fitas : Conjunto; clientecorrente : Cliente; Pseudocódigo concentrador Método emprestafita(fcodigo: String) fita : Fita; emprestimocorrente : Emprestimo; item : ItemDeEmprestimo; fita := fitas.get(fcodigo); emprestimocorrente := clientecorrente.getemprestimocorrente(); item := ItemDeEmprestimo.new(); item.associafita(fita); emprestimocorrente.associaitem(item); Fim Método; (by Raul Wazlawick) 30 Fim Classe.

Diagrama de Comunicação não concentrador emprestafita(fcodigo)----> :Videolocadora 5: associaitem() 1: fita:=get(fcodigo) 2: empresta(fita) emprestimocorrente: Emprestimo 4: criar() fitas: Fita 3: adiciona(fita) 6: associafita(fita) clientecorrente: Cliente item: ItemDeEmprestimo 31

Exemplo de um DC 32

Código com Responsabilidades Distribuídas Classe VideoLocadora fitas : Conjunto ; clientecorrente : Cliente; Metodo emprestafita(fcodigo : String); fita : Fita; fita := fitas.get(fcodigo); clientecorrente.empresta(fita) Fim Metodo; Fim Classe. Classe Emprestimo itens : Conjunto; Metodo adiciona(fita : Fita); item : ItemDeEmprestimo; item := ItemDeEmprestimo.new(); self.associaitem(item); item.associafita(fita); Fim Metodo; Fim Classe. Classe Cliente emprestimocorrente : Emprestimo; Metodo empresta(fita : Fita); emprestimocorrente.adiciona(fita); Fim Metodo; Fim Classe. (de Raul Wazlawick) 33

Discussão Qual dos códigos é mais fácil de entender e manter? Em qual dos códigos as responsabilidades das classes parecem mais intuitivas? Qual código é mais rápido? Para desenvolver um bom projeto, precisamos de princípios que nos guiem na atribuição de responsabilidades 34

:Atendente Sistema 1. iniciarempréstimo(id_leitor) 1.1. nome e situação do leitor loop [mais livros a emprestar] 2. emprestarlivro(id_livro) 2.1. datadedevolução 3. encerrarempréstimo()

Exemplo: Fazer um DC para a operação iniciaremprestimo() Operação: iniciaremprestimo() 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 36

Exemplo: Fazer um DC para a operação iniciaremprestimo() Por onde começar? Analisar as pós-condições: elas dizem qual é o estado do sistema após a invocação da operação. Veja que parâmetros tem em mãos, eles podem dar uma indicação de como começar Olhar os requisitos do sistema para entender a lógica da operação Olhar as operações que vieram antes e as que virão depois, para saber o que tem em mãos no contexto do DSS Olhar o modelo conceitual do sistema 37

Exemplo : Fazer um DC para a operação iniciaremprestimo() Atendente nome registra Leitor nome tipo : char ^ faz faz Reserva período situacao : char 0..1 Empréstimo/Devolução data do empréstimo situação : Char 0..1 corresponde a corresponde a 0..1 possui refere-se a > Bibliotecaria nome registra Livro titulo : String[30] autor : String[30] ano : int ISBN : string[20] editora : int tipo : char possui 1..n 0..1 LinhaDoEmpréstimo data_prevista_devolução data_entrega_real < refere-se a CopiaDoLivro nro sequencial situacao : char liberadoparaemprestimo : char 38

Diagrama de Comunicação iniciaremprestimo (idleitor) ---> :Biblioteca 1. le:=busca(idleitor) Leitor 3. [not inadimp] criar() e : Empréstimo/Devolução 2. [le not null] inadimp:=verificainadimplencia() le: Leitor 39

Exemplo : Fazer um DC para a operação emprestarlivro() Operação: emprestarlivro(id_livro) Referências Cruzadas: Caso de uso: Emprestar Livro Pré-Condições: Um leitor apto a emprestar livros já foi identificado e um empréstimo já foi criado; 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. 40

Diagrama de Comunicação (solução 1 considerando idlivro passada como parâmetro) 1. liv:=busca(idlivro) : Livro emprestarlivro(idlivro) ---> :Biblioteca 3. [disponivel] dtdev:=calculardatadevolucao() 2. disponivel:=verificalivro() le: Leitor 4. [disponivel] criar(liv, dtdev) liv : Livro 2.1. nc:=qtcopiasdispon() 2.1.1. nr:=qtcopiasreserv() lemp: LinhaEmprest 4.1. mudasituacaocopia() :Reserva 4.1.1. cl:=buscacopiadispon() 4.1.2. tornaremprestado() : CopiaDoLivro cl : CopiaDoLivro E para verificar se leitor já tem o número máximo permitido de livros em seu poder?

Diagrama de Comunicação (solução 2 considerando idcopia passada como parâmetro) CopiaDoLivro 1. cl := buscar(idcopia) emprestarlivro(idlivro) ---> :Biblioteca 2. temres := temreserva() 6. mudarsituacao("emprestada") : Reserva 2.1.1. busca() 2.1. temreserva() cl : CopiaDoLivro : Livro 5. associarle(lemp) 4. [not temres] criar(cl,dtdev) 3. [not temres] dtdev := calculardatadevolucao() le : Leitor e:emprestimo lemp : LinhaDoEmpréstimo

Exemplo: Fazer um DC para a operação encerraremprestimo() Operação: encerrarempréstimo() Referências Cruzadas: Caso de uso: Emprestar Livro 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 43

Diagrama de Comunicação 1.1. alterarsituacao("vigente") 1. encerrar() encerraremprestimo() ---> :Biblioteca e : Empréstimo/Devolução