INF1404 – MODELAGEM DE SISTEMAS
Bacharelado em Sistemas de Informação
Ivan Mathias Filho [email protected]
Programa – Capítulo 9
• A Modelagem Dinâmica
• Diagramas de Interação
• Diagrama de Seqüência
Programa – Capítulo 9
• 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;
Dinâmica de um sistema
Estímulo Externo
© LES/PUC-Rio
Resposta
Interações entre objetos
Objeto B Objeto A
Objeto C
Objeto D
Envio de mensagem
void UmMetodoA(int p) {
Ti C C Ti C()
TipoC C = new TipoC();
String S= C.UmMetodoC(p);
}
© LES/PUC-Rio
Objeto A Objeto C
String
Programa – Capítulo 9
• A Modelagem Dinâmica
• Diagramas de Interação
• Diagrama de Seqüência
• A UML provê dois tipos de diagrama – genericamente chamados de diagramas de interação – para representar a troca de mensagens entre objetos:
Diagramas de interação
– Diagrama de Seqüência;
– Diagrama de Comunicação.
© LES/PUC-Rio
Diagrama de seqüência
public class A public class A {
private B myB=new B();
public void doOne() {
myB.doTwo();
myB.doThree();
} // ...
}
Diagrama de comunicação
public class A public class A {
private B myB=new B();
public void doOne() {
myB.doTwo();
myB.doThree();
}
© LES/PUC-Rio
// ...
}
Quadro comparativo
Programa – Capítulo 9
• 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 , , p ,
participantes quase sempre serão interpretados como tal.
Instância anônima
© LES/PUC-Rio
Instância nomeada
Coleções
© LES/PUC-Rio
Metaclasse
Interface
© 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.
Expressão de mensagem
<retorno> = <nomeMensagem> (<parâmetro> : <tipoParâmetro>) :
<tipoRetorno>
• Exemplos:
– inicializa( ) – inicializa(codigo)
d tE ifi P d(id)
© LES/PUC-Rio
– d=getEspecificacaoProd(id) – d=getEspecificacaoProd(id:int) – d=getEspecificacaoProd(id:int):String
Tipos de mensagem
• Call – invoca uma operação sobre um objeto;
• Return – retorna um valor para quem enviou a mensagem;p q g ;
• Send – Envia um sinal para um objeto (comunicação assíncrona);
• Create – Cria um objeto;
• Destroy – Destrói um objeto.
Notação
© LES/PUC-Rio
Mensagens - Exemplo
Execução sobreposta
© LES/PUC-Rio
• Existem duas maneiras de representar o resultado retornado por uma mensagem:
– Usando a sintaxe <retorno>=<nomeMensagem> ;
Mensagem de retorno
Usando a sintaxe <retorno> <nomeMensagem> ; – Usando uma mensagem de retorno no final de uma barra
de execução;
– Neste caso, 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
Mensagem de retorno - Exemplo
© LES/PUC-Rio
Mensagem para “this”
Podemos representar o envio de uma mensagem de um objeto para ele mesmo:
Criação de um objeto
© LES/PUC-Rio
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.
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
Uma cláusula condicional, chamada de condição de guarda.
Frames (2)
Tipos de frames
A tabela a seguir sumariza os principais tipos de frame:
© LES/PUC-Rio
Loop
Opt
© LES/PUC-Rio
Alt
Iteração sobre uma coleção
© LES/PUC-Rio
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();
subtotal=item.getSubtotal();
total+=subtotal;
}
Frames aninhados
© LES/PUC-Rio
Relacionando diagramas (1)
• Uma ocorrência de interação é uma referência para um diagrama de interação a partir de outro diagrama de interação;
• Esta ferramenta deve ser usada quando:
– Se quer simplificar um diagrama;
– Se quer reutilizar uma certa interação, fatorando um troca de mensagens em um diagrama reutilizável.
Relacionando diagramas (2)
Criar um frame rotulado com sd em torno de um diagrama de seqüência, e atribuir um nome ao frame, tal como Figura 22 ou Figura 23 (próxima transparência):
© LES/PUC-Rio
Relacionando diagramas (3)
Relacionando diagramas (4)
Criar um frame rotulado com ref (reference) em um diagrama de seqüência qualquer, e estabelecer uma referência com o diagrama desejado.
© LES/PUC-Rio
Chamada de método estático
public class B {
public static void op1() {
}
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
© LES/PUC-Rio
c a ada po ead sta t(), ep ese ta u a c a ada assíncrona, uma vez que ela inicia a execução de uma thread.
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.
Código Java
public class ClockStarter {
public void startClock() {
Thread t=new Thread(new Clock());
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() {
© LES/PUC-Rio
while(true) {
...
} } }
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.