Cápsulas, Protocolos, portas e conexões em UML-RT Classes Ativas - Facilitar a introdução de conceitos de concorrência no projeto • Abordagens já existentes: ROOM, UML-RT, EDOC - Abstrair a implementação da comunicação • Troca de mensagens X chamada de procedimentos - Fluxo de execução independente do restante do sistema Notação utilizada no Curso - Cápsulas, Protocolos, Portas, Conexões Qualiti Software Processes Projetar cápsulas | 2 Copyright © 2005 Qualiti. Todos os direitos reservados. Motivação Identificando Cápsulas - Representa uma thread lógica do sistema - Fluxo de controle independente no sistema Qualiti Software Processes Projetar cápsulas | 3 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula Cápsulas Copyright © 2005 Qualiti. Todos os direitos reservados. Nome Atributos Métodos Portas Atributos e métodos: privados Portas: públicas ou protegidas Comportamento: diagrama de estados Qualiti Software Processes Análise e Projeto OO com UML para Sistemas RT| 4 Exemplo: Produtor-Consumidor produz(): Q #/ timer +/ porta Consumidor consome(q: Q) Comunicacao incoming +/ porta~ outgoing envia(Q ) Produtor transicão inicial Produzindo timeout/ produz(); porta.envia.send(q); Consumidor transicão inicial Esperando envia/ consome(q); Qualiti Software Processes Projetar cápsulas | 5 Copyright © 2005 Qualiti. Todos os direitos reservados. Produtor Comprar Ações (from transacoes) Cliente (from atores) Vender Ações (from transacoes) Operadora Mercado de Ações (from atores) Consultar Cotações (from consultas) Relógio (from atores) Atualizar Cotações (from transacoes) Qualiti Software Processes Projetar cápsulas | 6 Copyright © 2005 Qualiti. Todos os direitos reservados. Caso de uso – Atualizar Cotações Gráfico de interações entre cápsulas Caso de Uso: Atualizar Cotação interrupcao <<Capsule>> ControladorAtualizacaoCotacoes dadosCotacoes Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> InterfaceRelogio consultarCotacoes <<Capsule>> ComunicacaoOperadoraMercadoAcoes consultarCotacoesNasdaq consultarCotacoesBovespa dadosNasdaq dadosBovespa <<Capsule>> ComunicacaoNasdaq <<Capsule>> ComunicacaoBovespa Qualiti Software Processes Projetar cápsulas | 7 Identificando Protocolos das Cápsulas - Identificam o ‘contrato’ entre cápsulas, definindo um conjunto de sinais usados para comunicação entre diferentes threads, bem como a sequência válida de troca de sinais entre as cápsulas. Passos - Para cada interação entre cápsulas, criar um - protocolo Identificar similaridades entre protocolos e promover reuso Associar protocolos a cápsulas Qualiti Software Processes Projetar cápsulas | 8 Copyright © 2005 Qualiti. Todos os direitos reservados. Protocolos Identificando Protocolos Escolha uma das duas cápsulas como referência para definir os sinais de entrada e os de saída Insira os sinais de entrada e de saída da cápsula no protocolo criado Qualiti Software Processes Projetar cápsulas | 9 Copyright © 2005 Qualiti. Todos os direitos reservados. Criar os protocolos Identificando Protocolos Criar os protocolos interrupcao <<Capsule>> ControladorAtualizacaoCotacoes dadosCotacoes Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> InterfaceRelogio consultarCotacoes <<Protocol>> AtivacaoPeriodica interrupcao () <<Capsule>> ComunicacaoOperadoraMercadoAcoes consultarCotacoesNasdaq consultarCotacoesBovespa dadosNasdaq dadosBovespa <<Capsule>> ComunicacaoNasdaq <<Capsule>> ComunicacaoBovespa Qualiti Software Processes Projetar cápsulas | 10 Identificando Protocolos Criar os protocolos interrupcao <<Capsule>> ControladorAtualizacaoCotacoes dadosCotacoes <<Protocol>> ConsultaCotacoes consultarCotacoes dadosCotacoes () consultarCotacoes () <<Protocol>> AtivacaoPeriodica interrupcao () <<Capsule>> ComunicacaoOperadoraMercadoAcoes consultarCotacoesNasdaq consultarCotacoesBovespa dadosNasdaq dadosBovespa <<Capsule>> ComunicacaoNasdaq <<Capsule>> ComunicacaoBovespa Qualiti Software Processes Projetar cápsulas | 11 Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> InterfaceRelogio Identificando Protocolos Criar os protocolos interrupcao <<Capsule>> ControladorAtualizacaoCotacoes dadosCotacoes <<Protocol>> ConsultaCotacoes dadosCotacoes () consultarCotacoes consultarCotacoes () <<Protocol>> AtivacaoPeriodica interrupcao () <<Capsule>> ComunicacaoOperadoraMercadoAcoes <<Protocol>> InteracaoBovespa consultarCotacoesNasdaq consultarCotacoesBovespa consultarCotacoesBovespa (void) dadosCotacoesBovespa (void) dadosNasdaq <<Capsule>> ComunicacaoNasdaq <<Capsule>> ComunicacaoBovespa Qualiti Software Processes Projetar cápsulas | 12 Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> InterfaceRelogio Identificando Protocolos Criar os protocolos interrupcao <<Capsule>> ControladorAtualizacaoCotacoes dadosCotacoes <<Protocol>> ConsultaCotacoes dadosCotacoes () consultarCotacoes consultarCotacoes () <<Protocol>> AtivacaoPeriodica <<Capsule>> ComunicacaoOperadoraMercadoAcoes interrupcao () <<Protocol>> InteracaoBovespa <<Protocol>> InteracaoNasdaq consultarCotacoesNasdaq consultarCotacoesBovespa consultarCotacoesBovespa (void) ack consultarConexaoNasdaq (void) dadosCotacoesBovespa (void) dadosNasdaq dadosCotacoesNasdaq (void) <<Capsule>> ComunicacaoNasdaq <<Capsule>> ComunicacaoBovespa Qualiti Software Processes Projetar cápsulas | 13 Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> InterfaceRelogio Identificando Protocolos Identificar similaridades entre protocolos <<Protocol>> AtivacaoPeriodica <<Protocol>> InteracaoNasdaq consultarConexaoNasdaq (void) dadosCotacoesNasdaq (void) <<Protocol>> ConsultaCotacoes dadosCotacoes () <<Protocol>> InteracaoBovespa consultarCotacoes () consultarCotacoesBovespa (void) dadosCotacoesBovespa (void) Qualiti Software Processes Projetar cápsulas | 14 Copyright © 2005 Qualiti. Todos os direitos reservados. interrupcao () Identificando Protocolos Protocolos identificados <<Protocol>> AtivacaoPeriodica <<Protocol>> ConsultaCotacoes dadosCotacoes () interrupcao () consultarCotacoes () Qualiti Software Processes Projetar cápsulas | 15 Copyright © 2005 Qualiti. Todos os direitos reservados. Finalmente... Identificando Protocolos Associar protocolos a cápsulas <<Capsule>> InterfaceRelogio <<Capsule>> ControladorAtualizacaoCotacoes <<Protocol>> ConsultaCotacoes <<Protocol>> AtivacaoPeriodica interrupcao () <<Capsule>> ComunicacaoOperadoraMercadoAcoes <<Capsule>> ComuicacaoBOVESPA consultarCotacoes () dadosCotacoes () <<Capsule>> ComuncacaoNASDAQ Qualiti Software Processes Projetar cápsulas | 16 Copyright © 2005 Qualiti. Todos os direitos reservados. Associações entre protocolos e cápsulas Criar o conjunto inicial de portas, considerando as responsabilidades da cápsula Passo-a-passo: - - Criar uma porta para cada interação cápsula-protocolocápsula Nomear a porta com o nome do protocolo ou com o papel da cápsula na realização do protocolo Se as direções dos sinais no protocolo estiverem invertidos (entrada está como saída e vice-versa), a porta deve ser definida como conjugada (conjugated) O mesmo protocolo pode ser utilizado em diferentes portas Qualiti Software Processes Projetar cápsulas | 17 Copyright © 2005 Qualiti. Todos os direitos reservados. Criando portas e associando portas a protocolos Exemplo – Diagrama de classes de Atualizar Cotação <<Protocol>> ack (void) dadosCotacoes (void) <<Capsule>> ComunicacaoOperadoraCotacao + / consultaCotacoes~ <<Port>> iniciaConexao (void) consultaCotacoes (void) / consultaBovespa <<Protocol>> AtivacaoPeriodica + / interrupcao~ interrupcao (void) <<Port>> + / cosultaCotacoes <<Port>> + / interrupcao <<Capsule>> <<Port>> ControladorAtualizacaoCotacoes <<Capsule>> InterfaceRelogio + / interrupcao + / interrupcao~ + / cosultaCotacoes + / consultaCotacoes~ + / consultaMercados Copyright © 2005 Qualiti. Todos os direitos reservados. ConsultaCotacoes / consultaNasdaq <<Capsule>> <<Capsule>> ComunicacaoBovespa ComunicacaoNasdaq + / consultaBovespa~ 1 + / consultaNasdaq~ 1 1 1 ISubsistemaComunicacaoOperadoraMercadoAcoe FachadaComunicacaoOperadoraMercadoAcoes Qualiti Software Processes Projetar cápsulas | 18 Exemplo- Relacionamento entre cápsula e subcápsulas +/ ConsultarCotacoes ~ <<Capsule>> ComunicacaoOperadoraCotacao <<Protocol>> ConsultaCotacoes consultarCotacoes () + / consultarCotacoes~ + / consultarMercados dadosCotacoes () <<Capsule>> ComuicacaoNASDAQ +/ ConsultarCotacoes ~ Qualiti Software Processes Projetar cápsulas | 19 Copyright © 2005 Qualiti. Todos os direitos reservados. <<Capsule>> ComuicacaoBOVESPA Projeto Interno de Cápsulas Passos para Projetar Cápsulas • Definir diagrama de estados Definir diagrama de estrutura Copyright © 2005 Qualiti. Todos os direitos reservados. • Qualiti Software Processes Projetar cápsulas | 21 Máquina de Estados - Indicar qual será o comportamento dos objetos - de acordo com o seu estado Indicar seqüência de ações válidas construtor Máquina de estados ilustrando o ciclo de vida de um objeto Conta Saldo = 0 crédito debito Saldo > 0 crédito debito Qualiti Software Processes Projetar cápsulas | 22 Copyright © 2005 Qualiti. Todos os direitos reservados. Máquinas de estados são utilizadas para: Diagrama de Estados InterfaceRelogio Initial InterfaceRelogio AguardandoInterrupcao #/ timer +/ porta timeout / porta.gerarInterrupcao Qualiti Software Processes Projetar cápsulas | 23 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula: InterfaceRelogio Forma geral de uma transição Copyright © 2005 Qualiti. Todos os direitos reservados. e [g] / a e = evento g = guarda a = ação Qualiti Software Processes Projetar cápsulas | 24 Diagrama de Estados – ComunicacaoOperadora Initial EsperandoSolicitacao dadosCotacoes[count == 1] / controlador.dadosCotacoes.send(); consultarCotacoes/ dadoCotacao = rtGetMsgData(); mercados.consultarCotacoes.send(); buffer.add(dadoCotacao); Count = 0; count = count + 1; AguardandoDados Comunicacao dadosCotacoes[count < 1] OperadoraMA / dadoCotacao = rtGetMsgData(); - buffer : Buffer buffer.add(dadoCotacao); - count : int count = count + 1; +/ mercados +/ controlador Qualiti Software Processes Projetar cápsulas | 25 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula: ComunicacaoOperadoraMercadoAcoes Diagrama de Estados – ComunicacaoBovespa Initial AguardandoPeriodo Comunicacao Bovespa consultarCotacoes +/ dadosCotacoes~ dadosCotacoes / dadosCotacoes.send(); AguardandoDados Qualiti Software Processes Projetar cápsulas | 26 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula: ComunicacaoBovespa Exemplo: Produtor-Consumidor produz(): Q #/ timer +/ porta Consumidor consome(q: Q) Comunicacao incoming +/ porta~ outgoing envia(Q ) Produtor transicão inicial Produzindo timeout/ produz(); porta.envia.send(q); Consumidor transicão inicial Esperando envia/ consome(q); Qualiti Software Processes Projetar cápsulas | 27 Copyright © 2005 Qualiti. Todos os direitos reservados. Produtor Diagrama de Estados Estado é uma condição de um objeto no qual este realiza alguma atividade ou espera por determinado evento. É composto de: - Nome - Ação de entrada (Entry action) - Ação de saída (Exit action) - Máquina de estados interna (super estados) Qualiti Software Processes Projetar cápsulas | 28 Copyright © 2005 Qualiti. Todos os direitos reservados. Estados A B x/ execute(); y/ execute(); A x C A x/ execute(); B B y/ execute(); x C B y C EntryAction: Execute(); A ExitAction: Execute(); y C Qualiti Software Processes Projetar cápsulas | 29 Copyright © 2005 Qualiti. Todos os direitos reservados. Entry/Exit action Diagrama de Estados – ComunicacaoOperadora Initial EsperandoSolicitacao dadosCotacoes[count == 1] / controlador.dadosCotacoes.send(); consultarCotacoes/ dadoCotacao = rtGetMsgData(); mercados.consultarCotacoes.send(); buffer.add(dadoCotacao); Count = 0; count = count + 1; AguardandoDados dadosCotacoes[count < 1] / dadoCotacao = rtGetMsgData(); buffer.add(dadoCotacao); count = count + 1; Código em comum Qualiti Software Processes Projetar cápsulas | 30 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula: ComunicacaoOperadoraMercadoAcoes Diagrama de Estados – ComunicacaoOperadora Initial EsperandoSolicitacao consultarCotacoes/ mercados.consultarCotacoes.send(); Count = 0; Exit Action buffer.add(dadoCotacao); count = count + 1; dadosCotacoes[count == 1] / controlador.dadosCotacoes.send(); AguardandoDados dadosCotacoes[count < 1] dadoCotacao = rtGetMsgData(); Qualiti Software Processes Projetar cápsulas | 31 Copyright © 2005 Qualiti. Todos os direitos reservados. Cápsula: ComunicacaoOperadoraMercadoAcoes Usando Exit Action Diagrama de Estados Transição é um relacionamento direcionado entre dois estados (origem e destino) É composta de: - Nome - Estado origem - Evento de disparo - Condição de guarda - Ação - Estado destino Qualiti Software Processes Projetar cápsulas | 32 Copyright © 2005 Qualiti. Todos os direitos reservados. Transições Definir a conexão entre as instâncias das cápsulas É considerado também um diagrama de colaboração Quando utilizar? - Para representar a configuração de execução do - sistema Para indicar que portas de cada instância estão conectadas entre si. Qualiti Software Processes Projetar cápsulas | 33 Copyright © 2005 Qualiti. Todos os direitos reservados. Passo 2. Definir diagrama de estrutura Diagrama de Estrutura Notação Elementos Instancia_A Porta Porta Copyright © 2005 Qualiti. Todos os direitos reservados. - Instâncias de Cápsulas - Portas - Conexões Instancia_B conexão Qualiti Software Processes Projetar cápsulas | 34 Diagrama de Estrutura Produtor timer porta Consumidor porta~ timer Qualiti Software Processes Projetar cápsulas | 35 Copyright © 2005 Qualiti. Todos os direitos reservados. Exemplo: Produtor Consumidor Diagrama de Estrutura Exemplo: QIB Mercado de Ações OperadoraBovespa ComunicaçãoOperadora +/ dadosCotacoes~ #/ cotacaoBovespa #/ cotacaoNadasq OperadoraNasdaq +/ cotacaoNasdaq+ ControladorAtualizacao dadosCotacoes~ ComunicacaoOperadora Interrupcao~ dadosCotacoes OperadoraBovespa OperadoraNasdaq interrupcao Relogio timer Qualiti Software Processes Projetar cápsulas | 36 Copyright © 2005 Qualiti. Todos os direitos reservados. +/ cotacaoBovespa+ Cápsulas, Protocolos, portas e conexões em UML-RT