Diagrama de Seqüência
Características Básicas É um diagrama de interação e considera aspectos dinâmicos; Define como os objetos colaboram; Ênfase na ordenação temporal; Captura o comportamento de um cenário único; Mostra objetos e as mensagens trocadas entre eles, em um caso de uso; São usados durante a análise do problema (alto nível, com mensagens de negócio) e/ou durante o desenho da solução (foco na implementação, com mensagens descritas na forma de métodos que são implementados pelas classes. 2
Categorias de Objetos Objetos participantes (atores); Objetos de interface com os atores (telas, etc); Objetos de controle e eventos (controladores); Objetos de entidades e de domínio (negócio e integração). 3
Objetos Participantes (Atores) Pessoa ou outro sistema que interage com o sistema enviando e recebendo dados e controles; Demostram os contratos com o sistema; As interações são capturadas nos Casos de Uso; 4
Objetos de Interface Objetos que fazem a comunicação entre o sistema e os objetos participantes (atores), para exibição ou coleta de dados; Em um sistema típico, é a interface gráfica com o usuário GUI; Para aplicações Web baseadas em JEE, podem ser páginas JSP (usando ou não um framework) ; Para aplicações desktop em Java, podem ser instâncias de classes que usam Swing; São classes com estereotipo <<boundary>>. 5
Objetos de Controle Coordenam as solicitações dos usuários, vindas da camada de apresentação, e as operações de responsabilidade dos objetos de entidade e de domínio; São classes com estereótipo <<control>>. 6
Objetos de Entidades e de Domínio 7 Armazenam e manipulam dados dos objetos do negócio e simulam o seu comportamento; São as classes de negócio da aplicação, levantadas de acordo com o domínio e vocabulário do problema; Definem os valores que um atributo pode assumir e as operações válidas para estes valores; Classes da arquitetura de persistência em banco de dados; Integram as bibliotecas das linguagens ou frameworks de persistência; Podem ser tipos de atributos ou classes de comunicação com o mecanismo de persistência (em uma aplicação Java típica, podem ser os Data Access Object DAO). Classes com estereótipo <<entity>>
Visão das categorias Objetos participantes Objetos de Interface Objetos de Controle Objetos de Entidade Objetos de Domínio BD 8
Grau de reutilização Objetos de Interface Baixa reutilização Objetos de Eventos (Controle) Objetos de Entidade Objetos de Domínio Alta reutilização 9
Representação dos Objetos Usuario frmx X numero : String executax 10
Realização de Casos de Uso Os Casos de Uso capturam o que deve ser feito, as realizações agrupam o como será feito; São instâncias do caso de uso que podem ser representadas por diagramas que mostram a realização; Os diagramas usados para representar a realização de um caso de uso são os diagramas de interação. 11
Diagrama de Seqüência Descreve o que ocorre nos objetos participantes, em termos de chamadas, e como os objetos se comunicam através de mensagens; As mensagens representam as interações entre as instâncias de objetos e entre estas e os atores; Normalmente utilizado para modelar a realização dos casos de uso; Contém atores, objetos e mensagens; As notas oferecem uma extensão semântica. 12
Diagrama de Seqüência - Semântica atrícula do Objetos dio do as vagas urso; os gas nscrição do se o aluno que são S e q u ê n c i a m atérias do : Funcionario da S ecretaria : frm Inscricao : ctrlinscric aoa luno 1: inform a m atrícula e código 2: getcurs o(s tring) 3: curso : Curso 4: rec uperap orid(int) o aluno no im inuindo nc errado 13 6: Dados do curso Foco de Controle Mensagens
Diagrama de Seqüência e Realização de Casos de Uso Organização: Um diagrama para o fluxo básico; Um diagrama para cada fluxo alternativo. Para os analistas e usuários, provê uma visão de alto nível sobre como se dará a interação dentro de um cenário de caso de uso; Para os projetista, provê as entradas básicas que auxiliarão na determinação das classes (e nestas quais os métodos), responsabilidade e interfaces. 14
Diagrama de Seqüência - Tipos de Diagrama O diagrama de seqüência poderá ser feito em vários momentos do sistema, onde o formalismo dos objetos e mensagens poderá variar. Momentos: Análise; Projeto. 15
Diagrama de Seqüência - Análise Captura a visão do analista sobre como o caso de uso vai ser realizado; Direciona a solução do projetista. Contém: boundary, controler, entity; Mensagens informais. 16
Diagrama de Seqüência - Análise : F u n c io n a rio d a S e c re ta ria : frm In s c ric a o : c tr li ns c ric a o Alu n o : C u rs o : Alu n o 1 : in f orm a m a trícu la e c ó d ig o 2 : o b te m d a d o s d o c u rs o 3 : c ria e re c u pe ra la d o 4 : D a d o s d o c u rs o o c u rs o ; g a s 5 : ve rific a va g a s (c o d ig o ) 6 : o b te m a s va g a s d is p o n ive is ; 7 : c o n firm a in s c riç ã o 17 8 : In s c re ve a lu n o (M a tric u la, C o d ig o ) 9 : C ria e re c u p e ra
Diagrama de Seqüência - Projeto É a visão final da realização do caso de uso; Incorpora elementos da linguagem e da arquitetura; É o roteiro para a escrita do programa. Contém: Atores, estereótipos de camadas (interface, servlet), objetos de domínio (além dos demais); Nomes e mensagens formais (métodos existentes nas classes). 18
Diagrama de Seqüência - Projeto a a m atrícula do a o códio do rifica as vagas ); os tra: o do curso; s com os de vagas a a inscriçã o do rifica se o aluno térias que são ra as m atérias do screve o aluno no do, dim inuindo nível; o é encerrado : Fu ncion ario d a Secretaria 1: inform a m atrícula e código 5: Dados do curso 6: c onfirma ins crição : frm Inscricao : ctrlinscricaoaluno 2: getc urso (Strin g) 7: inscrevealuno(string, String) 3: Curso( ) 4: recuperap orid(int) 8: Curso( ) 9: rec uperap orid(int) curso : Curso aluno : Aluno 10: Aluno( ) 11: rec uperap orid(int) com para os pre-requisitos com o histórico 19 12: inscreveraluno(curso.aluno)
Tipos de mensagem Chamada: Um objeto invoca uma operação em outro objeto. Auto-chamada: Um objeto invoca uma operação nele mesmo. Envio: Um objeto envia um sinal a outro. Retorno: Retorna um valor para o objeto solicitante. Criação: Cria um objeto. Destruição: Destrói um objeto. 20
Tipos de mensagem atrícula do dio do as vagas urso; os gas Envio : Funcionario da S ecretaria : frm Inscricao : ctrlinscric aoa luno 1: inform a m atrícula e código 2: getcurs o(s tring) 3: Criação curso : Curso nscrição do Chamada se o aluno que são m atérias do 4: rec uperap orid(int) o aluno no im inuindo nc errado Retorno 6: Dados do curso Destruição 21
Representando os objetos Nos diagramas de seqüência, geralmente os objetos representados são instâncias reais da classe; Os nomes serão os mesmos a serem escritos nos programas. cu rso : C urs o 22
Mensagens de Chamada Mensagens normais que invocam métodos em outros objetos; Os parâmetros devem ser representados pelos nomes e os tipos reais. r inform a a m atrícula do r inform a o códio do em a verifica as vagas is (A -1); em a m ostra: escriç ão do c urso; m atérias com os res; úm ero de vagas is; r c onfirm a a ins crição do : Funcionario da S ecretaria : frm Inscricao : ctrlinscricaoa luno 1: inform a m atríc ula e código 2: getcurs o(s tring) 3: curso : Curso 4: rec uperap orid(int) 23 em a verifica se o aluno as m atérias que são
Mensagens de Retorno 24 Mensagens de retorno devem ser representadas aluno; apenas quando curso; não forem óbvias para não poluir o dis poníveis (A -1); diagrama. 4. O s istem a m os tra: 1. O ator inform a a m atrícula do 2. O ator inform a o códio do 3. O s istem a verifica as vagas 4.1 a descrição do curso; 4.2.as m atérias com os professores; 4.3.O núm ero de vagas dis poníveis; 5. O ator confirm a a inscrição do aluno; 6. O s istem a verifica se o aluno já cursou as m atérias que são pré-requis ito para as m atérias do curso (A -2); 7. O s istem a inscreve o aluno no curso selecionado, dim inuindo um a vaga disponível; 8. O c aso de uso é encerrado : Funcionario da S ecretaria : frm Inscricao : ctrlin 1: inform a m atrícula e código 6: Dados do curso
Mensagem self Mensagens de que o objeto aluno envia : Aluno para ele próprio. 11: recuperaporid(int) retorna True se cum prir os pré-requisitos 12: i nsc rev eral uno (cu rso.al uno ) 13: getpr er equisitos( ) 14: avaliaprer equisitos(m ateria[]) 16: geth istorico( ) 17: inserem at eria(m ateria) Fazer para cada m atéria do curso 25
Mensagens de Criação Representam o momento em que o objeto será criado; Se o construtor default for utilizado, não é preciso representá-lo. atrícula do dio do as vagas : Funcionario da S ecretaria : frm Inscricao : ctrlinscric aoa luno urso; 1: inform a m atrícula e código os 2: getcurs o(s tring) 3: curso : Curso gas nscrição do 4: rec uperap orid(int) se o aluno 26 que são
Mensagens de Destruição atrícula do dio do Indica a mensagem de destruição do objeto. Não é necessária a representação para a maioria das linguagens de programação. as vagas : Funcionario da S ecretaria : frm Inscricao : ctrlinscric aoa luno urso; os gas 1: inform a m atrícula e código 2: getcurs o(s tring) 3: curso : Curso nscrição do 4: rec uperap orid(int) se o aluno que são m atérias do o aluno no im inuindo 6: Dados do curso 27 nc errado
28 Exemplos
Exemplos 29 public class Pedido { } private ItemDoPedido[] itensdopedido; private Cliente cliente; public double calculaprecofinalitem() { int qtd = ItemDoPedido[0].retornaQuantidade(); Produto produto = ItemDoPedido[0].retornaProduto(); double precoproduto = produto.retornaprecounitario(); double precobaseitem = this.calculapreco(precoproduto, qtd); double taxadesconto = Cliente.recuperaTaxaDesconto(); double precofinalitem = this.calculaprecofinal(precobaseitem, taxadesconto); return precofinalitem; } public double calculapreco(double precoproduto, int qtd) { return precoproduto * qtd; } public double calculaprecofinal(double precobaseitem, double taxadesconto) { return precobaseitem * (1 - taxadesconto); }
30 Exemplos
Exemplos public class Pedido { } private ItemDoPedido[] itensdopedido; private Cliente cliente; public double calculaprecofinalitem() { } double precobaseitem = ItemDoPedido[0].obtemPreco(); double precofinalitem = Cliente.obtemValorComDesconto(precoBaseItem); return precofinalitem; 31