INF1013 – MODELAGEM DE SOFTWARE Departamento de Informática – PUC-Rio Ivan Mathias Filho [email protected] Programa – Capítulo 2 • A Modelagem Dinâmica • Diagramas de Interação • Diagrama de Seqüência © LES/PUC-Rio 1 Programa – Capítulo 2 • A Modelagem Dinâmica • Diagramas de Interação • Diagrama de Seqüência © LES/PUC-Rio Modelagem Dinâmica • Todo sistema pode ser decomposto segundo aspectos estáticos e dinâmicos; • Os modelos dinâmicos capturam os detalhes da troca de mensagens entre os objetos de uma aplicação; • Uma mensagem é simplesmente um operação que um objeto aplica sobre outro; • As interações definem colaborações entre os objetos, e têm por objetivo fornecer os serviços que os usuários de um sistema necessitam. © LES/PUC-Rio 2 Dinâmica de um Sistema Estímulo Externo Resposta © LES/PUC-Rio Interações entre Objetos Objeto B Objeto C Objeto A Objeto D © LES/PUC-Rio 3 Envio de Mensagem void UmMetodoA(int p) { TipoC c = new TipoC(); String s = c.umMetodoC(p); } Objeto A Objeto C String © LES/PUC-Rio Programa – Capítulo 2 • A Modelagem Dinâmica • Diagramas de Interação • Diagrama de Seqüência © LES/PUC-Rio 4 Diagramas de Interação • A UML provê dois tipos de diagrama – genericamente chamados de diagramas de interação – para representar a troca de mensagens entre objetos: – Diagrama de Seqüência; – Diagrama de Comunicação. © LES/PUC-Rio Diagrama de Seqüência public class A { private B b=new B(); public void ma1() { b.mb1(); b.mb2(); } // ... } © LES/PUC-Rio 5 Diagrama de Comunicação public class A { private B b=new B(); public void ma1() { b.mb1(); b.mb2(); } // ... } © LES/PUC-Rio Quadro Comparativo © LES/PUC-Rio 6 Programa – Capítulo 2 • A Modelagem Dinâmica • Diagramas de Interação • Diagrama de Seqüência © LES/PUC-Rio Linha de Vida • O diagrama de seqüência é organizado em torno do conceito de linhas de vida; • Uma linha de vida é um termo pouco preciso da UML, mas, informalmente, ela corresponde a um participante da interação; • Não é correto afirmar que uma linha de vida corresponda a uma instância de uma classe, mas, na prática, os participantes quase sempre serão interpretados como tal. © LES/PUC-Rio 7 Instância Anônima © LES/PUC-Rio Instância Nomeada © LES/PUC-Rio 8 Coleções © LES/PUC-Rio Mensagem • Uma mensagem é a especificação de uma comunicação entre objetos; • O recebimento de uma mensagem dispara uma ação no objeto receptor – em geral, a execução de uma operação; • Uma ação poderá resultar na mudança de estado do objeto receptor ou nos objetos acessíveis a partir dele. © LES/PUC-Rio 9 Expressão de Mensagem <retorno> = <nomeMensagem> (<parâmetro> : <tipoParâmetro>) : <tipoRetorno> • Exemplos: – inicializa( ) – inicializa(codigo) – d=getEspecificacaoProd(id) – d=getEspecificacaoProd(id:int) – d=getEspecificacaoProd(id:int):String © LES/PUC-Rio Tipos de Mensagem • Call – invoca uma operação sobre um objeto; • Return – retorna um valor para quem enviou a mensagem; • Send – Envia um sinal para um objeto (comunicação assíncrona); • Create – Cria um objeto; • Destroy – Destrói um objeto. © LES/PUC-Rio 10 Notação © LES/PUC-Rio Mensagens – Exemplo © LES/PUC-Rio 11 Execução Sobreposta © LES/PUC-Rio Mensagem de Retorno • Existem duas maneiras de representar o resultado retornado por uma mensagem: – Usando a sintaxe <retorno>=<nomeMensagem> ; – Usando uma mensagem de retorno no final de uma barra de execução; – Neste caso, a mensagem deve ser rotulada com o valor retornado. A primeira opção nos permite uma especificação mais sucinta, enquanto a segunda nos permite especificar coisas mais gerais, como a criação de uma formulário (tela) de comunicação com o usuário. © LES/PUC-Rio 12 Mensagem de Retorno – Exemplo © LES/PUC-Rio Mensagem para “this” Podemos representar o envio de uma mensagem de um objeto para ele mesmo: © LES/PUC-Rio 13 Criação de um Objeto (1) © LES/PUC-Rio Criação de um Objeto (2) © LES/PUC-Rio 14 Destruição de um Objeto Em algumas circunstâncias é desejável mostrar explicitamente a destruição de um objeto. Por exemplo, quando se usa a linguagem C++, que não possui coleta automática de lixo. © LES/PUC-Rio Frames (1) • Para representar estruturas condicionais e de repetição, a UML 2.0 introduziu o conceito de frame; • Um frame é uma região, ou fragmento, de um diagrama, que contém o seguinte: – Um label (por exemplo, loop); – Uma cláusula condicional, chamada de condição de guarda. © LES/PUC-Rio 15 Frames (2) © LES/PUC-Rio Tipos de frames A tabela a seguir sumariza os principais tipos de frame: © LES/PUC-Rio 16 Loop © LES/PUC-Rio Opt © LES/PUC-Rio 17 Alt © LES/PUC-Rio Iteração sobre uma coleção © LES/PUC-Rio 18 Código Java import java.util.Vector; public class Venda { private Vector<ItemVenda> itens = new Vector<ItemVenda>(); public double getTotal() { double total=0.0,subtotal; for(ItemVenda item : itens) { subtotal=item.getSubtotal(); total+=subtotal; } return total; } } © LES/PUC-Rio Frames aninhados © LES/PUC-Rio 19 Mensagens assíncronas • Mensagens assíncronas não esperam por resposta, pois elas não ficam bloqueadas; • Elas são usadas em ambientes multi-threaded, como o .NET e o Java; • Em Java, por exemplo, podemos considerar que o envio da mensagem Thread.start() ou Runnable.run(), chamada por Thread.start(), representa uma chamada assíncrona, uma vez que ela inicia a execução de uma thread. © LES/PUC-Rio Mensagens assíncronas - Exemplo Mensagens assíncronas são enviadas para objetos ativos, que são assim chamados por controlarem suas próprias threads de execução. © LES/PUC-Rio 20 Código Java public class ClockStarter { public void startClock() { Thread t=new Thread(new Clock()); t.start(); // chamada assíncrona do método run() System.runFinalization(); } } public class Clock implements Runnable { public void run() { while(true) { ... } } } © LES/PUC-Rio Bibliografia • Bezerra, E. Princípios de Análise e Projeto de Sistemas com UML. 1ª edição, Campus, 2006. • Larman, C. Utilizando UML e Padrões. 3ª edição, Bookman, 2007. © LES/PUC-Rio 21