inf1404 – modelagem de sistemasivan/prominp/notasaula/ms-cap-09.pdf · 2009. 9. 23. · inf1404...
TRANSCRIPT
1
INF1404 – MODELAGEM DE SISTEMAS
Bacharelado em Sistemas de Informação
Ivan Mathias Filho
Programa – Capítulo 9
• A Modelagem Dinâmica
• Diagramas de Interação
• Diagrama de Seqüência
© LES/PUC-Rio
2
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;
© LES/PUC-Rio
• 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.
3
Dinâmica de um sistema
Estímulo Externo
© LES/PUC-Rio
Resposta
Interações entre objetos
Objeto B
Objeto AObjeto C
© LES/PUC-Rio
Objeto D
4
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 CString
Programa – Capítulo 9
• A Modelagem Dinâmica
• Diagramas de Interação
• Diagrama de Seqüência
© LES/PUC-Rio
5
• 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 Apublic class A{private B myB=new B();
public void doOne(){
myB.doTwo();myB.doThree();
}
© LES/PUC-Rio
// ...}
6
Diagrama de comunicação
public class Apublic class A{private B myB=new B();
public void doOne(){
myB.doTwo();myB.doThree();
}
© LES/PUC-Rio
// ...}
Quadro comparativo
© LES/PUC-Rio
7
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
© LES/PUC-Rio
, , p ,participantes quase sempre serão interpretados como tal.
8
Instância anônima
© LES/PUC-Rio
Instância nomeada
© LES/PUC-Rio
9
Coleções
© LES/PUC-Rio
Metaclasse
© LES/PUC-Rio
10
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.
© LES/PUC-Rio
11
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;
© LES/PUC-Rio
• Destroy – Destrói um objeto.
12
Notação
© LES/PUC-Rio
Mensagens - Exemplo
© LES/PUC-Rio
13
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.
© LES/PUC-Rio
A primeira opção nos permite uma especificação maissucinta, enquanto a segunda nos permite especificarcoisas mais gerais, como a criação de uma formulário(tela) de comunicação com o usuário.
14
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
15
Criação de um objeto
© LES/PUC-Rio
Destruição de um objeto
Em algumas circunstâncias é desejável mostrarexplicitamente a destruição de um objeto. Por exemplo,quando se usa a linguagem C++, que não possui coletaautomática de lixo.
© LES/PUC-Rio
16
Frames (1)
• Para representar estruturas condicionais e de repetição, aUML 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)
© LES/PUC-Rio
17
Tipos de frames
A tabela a seguir sumariza os principais tipos de frame:
© LES/PUC-Rio
Loop
© LES/PUC-Rio
18
Opt
© LES/PUC-Rio
Alt
© LES/PUC-Rio
19
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();
© LES/PUC-Rio
subtotal=item.getSubtotal();total+=subtotal;
}
return total;}
}
20
Frames aninhados
© LES/PUC-Rio
Relacionando diagramas (1)
• Uma ocorrência de interação é uma referência paraum diagrama de interação a partir de outro diagrama deinteração;
• Esta ferramenta deve ser usada quando:
– Se quer simplificar um diagrama;
– Se quer reutilizar uma certa interação, fatorando um trocade mensagens em um diagrama reutilizável.
• Deve-se proceder da seguinte maneira:
© LES/PUC-Rio
• Deve-se proceder da seguinte maneira:
21
Relacionando diagramas (2)
Criar um frame rotulado com sd em torno de umdiagrama de seqüência, e atribuir um nome ao frame, talcomo Figura 22 ou Figura 23 (próxima transparência):
© LES/PUC-Rio
Relacionando diagramas (3)
© LES/PUC-Rio
22
Relacionando diagramas (4)
Criar um frame rotulado com ref (reference) em umdiagrama de seqüência qualquer, e estabelecer umareferência com o diagrama desejado.
© LES/PUC-Rio
Chamada de método estático
public class B{
public static void op1(){}
}
© LES/PUC-Rio
23
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 envioda 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 adaassíncrona, uma vez que ela inicia a execução de umathread.
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
24
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.
© LES/PUC-Rio