UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA Notação Básica dos Diagramas de Comunicação Projeto e Desenvolvimento de Sistemas de Informação
Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Refinar a arquitetura do sistema 2. Definir diagramas de interação 3. Definir Diagramas de Classes de Projeto 4. Definir o Esquema Do 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 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é agora Casos de Uso Completo Abstrato Diagrama de Casos de Uso Ator Principal: Atendente Caso de Uso: Emprestar Livro Interessados e Interesses: 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. Garantia de Sucesso (Pós-Condições): Os dados do novo empréstimo estão armazenados no Sistema. Os livros emprestados possuem status emprestado Atendente Bibliotecária Devolver Livro Incluir Livro Comprar Livro Leitor Consultar Livro 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)
O que já foi visto até agora Casos de uso com substantivos e verbos sublinhados Caso de Uso 1 Caso de Uso 2... Caso de Uso n Atendente nome Bibliotecaria nome 1 0..n registra refere-se a > 1 registra 1 Leitor nome tipo : char 1 ^ faz 0..n 1 Modelo Conceitual 0..n 0..n faz 1 0..n Livro titulo : String[30] autor : String[30] ano : int ISBN : string[20] editora : int tipo : char Reserva período situacao : char possui 0..n 0..1 corresponde a 0..1 Empréstimo/Devolução data do empréstimo situação : Char corresponde a CopiaDoLivro 0..1 nro sequencial situacao : char liberadoparaemprestimo : char 1 possui 1..n 0..1 LinhaDoEmpréstimo data_prevista_devolução data_entrega_real 1 0..n < refere-se a
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 Projeto do sistema. Artefatos de projeto contém detalhes de 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 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 SISTEMA :instância da Classe A :instância da Classe B :instância da Classe C mensagem1() 1:mensagem2() Objetos 2:mensagem3() 3:mensagem4() Observar que o diagrama de sequência na fase de projeto abre o sistema em objetos que interagem entre si.
Diagramas 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 exceções e podem ser mais econômicos em termos de espaço.
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 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 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 1:mensagem1(parâmetro1, parâmetro2) 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.
Classes X Instâncias Livro :Livro livro1:livro Classe instância Instância nomeada
ligações Linha de ligação obj1:classe1 1:mensagem1(parâmetro1, parâmetro2) obj2:classe2 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 Smalltalk, etc. Sintaxe UML: Return := message(parameter : parametertype) : returntype
Ordem das mensagens, condicionais e atribuição às variáveis 1: [novo] criar(id_leitor, id_livro) Criar só é executada se apto for true :CópiaTítulo :Empréstimo 3: [apto] criar(t) 2: t=obtertipoleitor() A variável t é passada como parâmetro pelo método criar :Leitor obtertipoleitor retorna um resultado que é armazenado na variável t :linhadoempréstimo
Objeto como retorno de método e1: Empresti mo Agora e1 conhece c1 e pode enviar-lhe a mensagem mudarsituacao() 2: mudarsituacao("emprestada") 1: c1: copia() c1 é um objeto que retornou como l1: LinhaDoEmprestim o resultado da invocação de copia() c1: CopiaDoLivro
Criação de instância C++: aloc. automática ou new + cham. construtor Java: operador new Smalltalk: new + initiatilize :Obj1 msg1() 1:criar() <<new>>:obj2
Condicionais e operadores lógicos e relacionais e1: Emprestimo 1: [naoestaematraso] and [nrolivros < maximopermitido] criar() :linhadoemprestimo 1: [condi cao1] mensagem1() c2: Classe2 c1: Classe1 2: [not condi cao1] mensagem 2() c3: Classe3
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
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
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.
Múltiplas mensagens na mesma iteração msg1() msg1() { for i=1 to 10 { meub.msg2() meuc.msg3()} } 1*:[i:=1..10]msg2() :A meub:b 2*:[i:=1..10]msg3() Cláusulas de iteração iguais meuc:c
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 msg1() :Emprestimo 1: s:=size() : int :LinhaDoEmprestimo :Emprestimo msg1() 1:le:=obtenha(ID) :LinhaDoEmprestimo 2: imprimir() le:linhadoemprestimo
Mensagem para cada elemento da coleção :Emp restimo 1: * [para cada] obtertitulodolivro() :Li nhad oemp restimo A mensagem é enviada uma vez para cada objeto da coleção
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 próximo() é utilizado para percorrer a coleção.
Auto-mensagem 1: cons :=ehdeconsulta() l1: Livro c1: CopiaDoLivro 2: [not cons] mudarsituacao("emprestada")
Exemplo de um Diagrama de Comunicação Sistema VideoLocadora emprestar(fcodigo)
Sistema Biblioteca - Elaborar o DC para cada uma das operações do Caso de Uso Emprestar Livro
Modelo Conceitual Biblioteca ^ faz 0..n 0..n Reserva período situacao 0..1 0..1 corresponde a Atendente nome 1 0..n registra 1 Leitor nome tipo 1 faz 0..n Empréstimo/Devolução data do empréstimo situação corresponde a 0..1 Bibliotecaria nome refere-se a > 1 0..n registra 1 Livro titulo autor ano ISBN editora tipo 1..n LinhaDoEmpréstimo data_prevista_devolução data_entrega_real 0..n 0..1 1 refere-se a possui 0..n CopiaDoLivro nro sequencial situacao liberadoparaemprestimo 1
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 sabese 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 iniciaremprestimo (idleitor) ---> :Biblioteca 1. le:=busca(idleitor) Leitor 3. [not inadimp] criar() 4. Associar_e(e) e : Empréstimo/Devolução 2. [le not null] inadimp:=verificarinadimplencia() le: Leitor
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: 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.
Modelo Conceitual Biblioteca ^ faz 0..n 0..n Reserva período situacao 0..1 0..1 corresponde a Atendente nome 1 0..n registra 1 Leitor nome tipo 1 faz 0..n Empréstimo/Devolução data do empréstimo situação corresponde a 0..1 Bibliotecaria nome refere-se a > 1 0..n registra 1 Livro titulo autor ano ISBN editora tipo 1..n LinhaDoEmpréstimo data_prevista_devolução data_entrega_real 0..n 0..1 1 refere-se a possui 0..n CopiaDoLivro nro sequencial situacao liberadoparaemprestimo 1
Diagrama de Comunicação emprestarlivro(idlivro) :Biblioteca 1. liv:=busca(idlivro) : Livro 3. [disponivel] dtdev:=calculardatadevolucao() 2. disponivel:=verificalivro() le: Leitor 5. associarle(lemp) 4. [disponivel] criar(liv, dtdev) liv : Livro 2.1. nc:=qtcopiasdispon() 2.1.1. nr:=qtcopiasreserv() lemp: LinhaEmprest 4.1. mudasituacaocopia() :Reserva e:emprestimo 4.1.1. cl:=buscacopiadispon() 4.1.2. tornaremprestado() : CopiaDoLivro cl :CopiaDoLivro
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 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: 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
Diagrama de Comunicação 1.1. alterarsi tuacao("vi gente") 1. encerrar() encerraremprestimo() ---> :Biblioteca e : Empréstimo/Devolução
Próxima aula Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar Padrões GRASP 1. Refinar a arquitetura do sistema 3. Definir Diagramas de Classes de Projeto 2. Definir diagramas de interação 4. Definir o Esquema Do Banco de Dados