Aula 8 Contratos Atividades da Fase Analisar Refinar Plano Sincronizar artefatos 1. Definir Casos de Uso Essenciais Analisar Projetar 2. Refinar Diagramas de Casos de Uso 4. Definir Diagramas de Seqüência do Sistema 6. Definir Diagramas de Estado Construir Testar 3. Refinar o Modelo Conceitual 5. Definir Contratos de Operação O que foi visto até agora Casos de Uso Completo Abstrato (descrição textual) 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 Comportamento do Sistema (DSS) • É uma especificação do que o sistema faz sem explicar como ele o faz. • O comportamento é definido como uma “caixa preta”. • O diagrama de seqüência é utilizado para especificar parte do comportamento. • O comportamento é dependente dos casos de uso. Cenários ou Diagramas de Seqüência do Sistema (DSS) • Cenários ou DSS mostram um cenário global do funcionamento do sistema, dividindo o caso de uso em partes bem definidas denominadas operações, que são executadas em resposta aos eventos Cenários ou Diagramas de Seqüência do Sistema (DSS) • Processo Unificado: um DSS para cada caso de uso relevante. • Pode haver várias soluções para o mesmo problema O Diagrama de Seqüência do Sistema (DSS) • Mostra uma particular seqüência de eventos dentro de um caso de uso, os atores que interagem com o sistema, o sistema (como uma caixa preta) e os eventos de sistema que os atores geram. • Deve ser feito para uma seqüência típica eventos do caso de uso e, possivelmente, outros DSSs podem ser criados para as seqüências alternativas mais interessantes. O Diagrama de Seqüência do Sistema (cont.) • O tempo corre no sentido de cima para baixo. • A ordem dos eventos deve seguir a ordem no caso de uso. Exemplo DSS para o caso de uso Emprestar Livro Outro Exemplo DSS para o UC Emprestar Livro Eventos e Operações de Sistema • Um evento de sistema é um evento externo de entrada para o sistema, gerado por um ator. • Eventos de sistema podem incluir parâmetros. • Um evento inicia uma operação de resposta do sistema. • Uma operação de sistema é uma operação executada em resposta a um evento de sistema. • Os eventos e operações também podem ser de saída. Evento de Entrada X Evento de Saída Contratos das Operações Atividades da Fase Analisar Refinar Plano Sincronizar artefatos 1. Definir Casos de Uso Essenciais Analisar Projetar 2. Refinar Diagramas de Casos de Uso 4. Refinar Glossário 6. Definir Contratos de Operação Construir Testar 3. Refinar o Modelo Conceitual 5. Definir Diagramas de Seqüência do Sistema 7. Definir Diagramas de Estado Contratos das Operações • É importante que as tarefas atribuídas às operações sejam bem documentadas, para evitar redundâncias e inconsistências. • Um contrato especifica o comportamento esperado para cada operação correspondente a um evento do sistema. Contratos das Operações • Auxiliam a definir o comportamento do sistema. • Definem o efeito das operações sobre o sistema mudanças de estado que ocorrem quando uma operação é invocada • Depende do modelo conceitual, dos diagramas de seqüência e da identificação das operações do sistema. Contratos das Operações (cont.) • A especificação dos contratos segue um estilo declarativo, enfatizando o que deve ser feito, sem explicar como. • Pode ser escrito de maneira informal ou formal. • Normalmente é expresso em termos de pré-condições e pós-condições. • Deve ser especificado um contrato para cada operação do sistema (pelo menos para as mais importantes ou abrangentes) • Podem ser elaborados também para métodos importantes e/ou complexos do sistema. Contratos das Operações • Características típicas de um contrato: – Nome da operação e Parâmetros de entrada – Objetivos (ou responsabilidade) – Tipo (responsável pela operação) – Notas e Exceções – Referências cruzadas – Pré-condições – Pós-condições Pré-Condições • Representam o estado do sistema antes da invocação da operação. • Não serão verificadas pela operação, ou seja, assume-se que elas são verdadeiras ao invocar a operação Pós-Condições • Representam o estado do sistema após a invocação da operação, mostrando o que mudou como conseqüência da sua execução. • Para cada operação, analisar os conceitos identificados no Modelo Conceitual e definir, para cada possível objeto do sistema, o que muda quando a operação é invocada. • Observar o DSS, para ter uma melhor idéia do contexto em que a operação está inserida e o contexto resultante. Exemplo • Encerrar Empréstimo – Qual a responsabilidade desta operação? – Em quais casos de uso ela aparece? – O que ela considera como verdadeiro para ser executada? – O que muda no Modelo Conceitual após sua invocação? Exemplo Operação: encerrarEmpréstimo() Referências Cruzadas: Caso de Uso: “Emprestar Livro” Pré-Condições: um leitor apto ao emprestar livros já foi identificado; pelo menos um livro já foi identificado e está disponível para ser emprestado. 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”. Caso de Uso: Comprar Itens Como fazer um contrato: Relacionamento entre artefatos ... 1. Este caso de uso começa... Caixa Comprar Itens – versão 1 :Sistema entrarItem(CUP, quantidade) Casos de Uso terminarVenda() registrarPagamento(quantia) Diagrama de Seqüência do sistema Sistema entrarItem() terminarVenda() entrarPagamento() Operações de sistema Operação: entrarItem Operação: terminarVenda ... Pós-condições . . . Pós-condições: ... ... Contratos Como fazer um contrato • Identifique as operações do sistema a partir dos diagramas de seqüência do sistema. • Para cada operação do sistema, construa um contrato. • Comece escrevendo a seção Responsabilidade, descrevendo informalmente a finalidade (objetivo) da operação. Como fazer um contrato (cont.) • Então, complete a seção Pós-condições, descrevendo de forma declarativa as mudanças de estado que ocorrem nos objetos do modelo conceitual. • Para descrever as pós-condições, use as seguintes categorias: – Criação e exclusão/instâncias. – Modificação de atributos. – Associações formadas e desfeitas. Pós-condições • A UML não restringe como as póscondições devem ser expressas. • Deve ser declarativa e orientada a mudanças de estado e não orientada a ações. • Por isso, usar o verbo no passado. Ex. – Usar “uma Venda foi criada”, ao invés de – “criar uma Venda” • As cláusulas das p.c. estão associadas ao modelo conceitual. Ao escrevê-las você pode notar erros ou omissões no modelo conceitual. Pós-condições: quão completas devem ser ? • Não é provável, e mesmo necessário, criar um conjunto de pós-condições completo na fase de análise. • Alguns detalhes serão descobertos durante a fase de projeto. • Isto segue o espírito do desenvolvimento iterativo. Estudo de Caso: Sistema Terminal de Ponto de Vendas Criação dos contratos das operações: EntrarItem(codProd,quantidade) TerminarVenda() RegistrarPagamento(quantia) Modelo conceitual para o domínio do PDV Registra-venda-de Descritos-por 1..1 Catálogo de Produtos 0..1 * 1..1 LinhadeItemdeVenda quantidade 1..* Contido-em 1..1 Venda data tempo Usado-por Descreve 1..1 * Estoca Item 1..1 * 1..1 * Possui 1..* Capturada-em Iniciada-por Pagamento quantia Especificação de Produto descrição preço CUP 1..1 v 1..1 1..1 1..1 1..* 1..1 * Loja 1..1 endereço nome Registra-Dados-da 1..1 Paga-por Contém TPV 1..1 Iniciado por 1..* Gerente 1..1 1..1 1..1 Cliente < Registra-Vendas-do 1..1 Caixa Contrato Nome: Responsabilidade: entrarItem(codProd:número, quantidade:inteiro) Entrar(registrar) a venda de um item e acrescentá-lo à venda. Exibir a descrição e o preço do item. Tipo: Sistema Referências cruzadas:Caso de Uso: Comprar Itens Notas: Use acesso super-rápido ao banco de dados Exceções: Se o codProd não for válido, indique o erro.c.i. = criação de instância Saída: f.a = formada uma Pré-condições: O codProd existe (é conhecido do sistema) associação m.a = modificação Pós-condições: de atributo • Se for uma nova venda, uma Venda foi Criada (c.i.) • Se for uma nova venda, a nova Venda foi associada ao TPV (f.a) • Uma LinhadeItemdeVenda foi criada (c.i) • A LinhadeItemdeVenda foi associada à Venda (f.a) • LinhadeItemdeVenda.quantidade recebeu o valor de quantidade (m.a) •A LinhadeItemdeVenda foi associada a um(a) (Especificaçãode) Produto, com base no codProd (f.a) Contrato Nome: terminarVenda() Responsabilidades: Registrar que é o fim da entrada de itens de Venda e exibir o total da venda. Tipo: Sistema Refs cruzadas: Caso de Uso: Comprar Itens Exceções: Se uma venda não está em andamento, indicar o erro. Problemas: Saída: a. Exibir o total da Pré-condições: Uma venda deve ter sido iniciada venda Pós-condições: pré• Venda.estáCompleta recebeu o valor true (ma) b. Acondição c. No original traduzido, está escrito “recebe” na póscondição. Mudanças no modelo conceitual • Existe um atributo sugerido no contrato de terminarVenda que não aparece no modelo conceitual. Venda estáCompleta:Booleano data hora Contrato Nome: registrarPagamento(quantia:quantidade) Responsabilidades: Registrar o pagamento, calcular o troco e imprimir o recibo. Tipo: Sistema Refs cruzadas: Função do sistema: R2.1 Caso de Uso: Comprar Itens Notas: Exceções: Se a venda não está completa, indicar um erro. Se a quantia for menor que o total da venda, indicar um erro. c.i. = criação de instância Saída: / Pré-condições: f.a = formada uma associação m.a = modificação de atributo Pós-condições: • Um Pagamento foi criado (ci) • Pagamento.quantiaFornecida recebeu o valor de quantia (ma) • O Pagamento foi associado à Venda (fa) •A Venda foi associada à Loja, para acrescentá-la ao registro histórico de vendas completadas (fa)