abr-17 Projetar Cápsulas Aula de Laboratório Projetar classes
abr-17 Diagrama de Estados Revisão Projetar classes
Maquina de Estados Maquinas de estados são utilizadas para: Indicar qual será o comportamento dos objetos de acordo com o seu estado. Indicar sequência de ações válidas. construtor Maquina de Estados De um Banco Saldo = 0 crédito debito Saldo > 0 crédito debito
Noções básicas Estado Eventos Transição Pode indicar a uma possível seqüência de eventos até o momento Variáveis são consideradas estados também Eventos Métodos ou mensagens solicitando serviços notificando uma informação Transição Ativado por um evento Evento[guarda] / ação
Transição Notação O nome da transição deverá ser significativo Explicar claramente o evento relacionado e a ação O nome não poderá possuir caracteres especiais Notação para explicar a transição Evento[guarda] / ação estado1 estado2 Sem evento associado à transição e sem ação estado1 estado2 Com evento associado à transição e sem ação estado1 estado2 Com evento associado à transição e com ação
Diagramas de Estados Notação Principais elementos transicão de origem externa Estado história H transicão inicial super-estado sub-estado estado sub-estado transicão auto-transicão estado transicão final
Diagrama de Estados Estados história abr-17 Permitem continuidade na execução de máquinas de estados internas a super-estados Exemplo: ... t1 estado1 t2 estado2 t3 estado3 t6 estado3.1 t4 t7 estado3.2 estado história H t5 t6 t1 estado1 estado3 estado3.1 t7 t2 t3 t4 estado2 Geralmente, quando uma transição entra em um super-estado, a máquina de estados recomeça sua execução no estado inicial especificado. Estados históricos permitem que a máquina de estados interna continue sua execução no estado que estava ativo antes da saída do super-estado. estado3.2 t8 Projetar classes
abr-17 Diagrama de Estrutura Revisão Projetar classes
Diagrama de Estrutura Notação Elementos Instâncias de Cápsulas Portas Conexões Instancia_A Porta Porta Instancia_B conexão
Diagrama de Estrutura Tipos de Portas Conjugada Porta em que a definição dos sinais de entrada e saída é trocada. End Port Porta que direciona os sinais que passam por ela diretamente para o statechart da cápsula Relay Port Porta que permite a comunicação de cápsulas externas diretamente com as subcápsulas. Obs.:Podem existir portas com serviços especiais (ex.: timer, log, frame). [Non-wired port]
Diagrama de Estrutura Portas Simboliza maq. estado Relay Port public End Port protected Porta conjugada Instancia_A Instancia_B Instancia_C
Exercício Produtor/Consumidor abr-17 Produzir: Criar Diagrama de Classes Cápsulas Produtor e Consumidor Protocolo de Comunicação Criar Diagrama de Estados De cada uma das cápsulas, com seus estados e transições Criar Diagrama de Estrutura Com a conexão entre as cápsulas Projetar classes
Exemplo: Produtor-Consumidor #/ timer +/ porta produz(): Q Consumidor +/ porta~ consome(q: Q) Comunicacao incoming outgoing envia(Q ) Produzindo transicão inicial interrupcao/ produz(); porta.envia.send(); Produtor Esperando transicão inicial envio/ consome(); Consumidor
Diagrama de Estrutura Exemplo: Produtor Consumidor timer porta porta~
Diagrama de Estrutura Crie uma cápsula Container com todo o seu projeto Todo sistema deverá ter uma cápsula principal, por onde começa seu fluxo de execução
Gerando código Configure o tipo de projeto Crie um novo componente na visão de componentes e abra sua especificação Na aba General mude o tipo de componente para RT Java Project Clique no botão Apply para aplicar a nova configuração Na aba References, adicione todos os pacotes necessários para compilação do projeto, no nosso caso, somente o pacote modem. Na aba RT Java Project: Selecione a opção Build Jar Modifique as opções GenerateCommand, CompileCommand e CleanAllCommand, substituindo $defaultMake por gmake Selecione Gnu_make na opção MakeType Finalize clicando no botão OK
Executando o projeto Crie um novo processador na visão de implantação e abra sua especificação Arraste o componente criado para o campo Component Instances na aba Detail Clique duas vezes na instancia criada para abrir sua especificação Na aba Detail, modifique o campo Parameters acrescentando os seguintes parâmetros no começo da linha: -java com.rational.rosert.DebugApplication Main Clique no botão Ok das janelas abertas para confirmar e fechar Clique com o botão direito na instancia do processo criado e selecione a opção Run Clique na seta de Play.
Gerando código criando dependências e compilando Clique duas vezes no componente Main para abrir seu diagrama Arraste o novo componente para o diagrama aberto Arraste o componente classes dentro do pacote rosert da visão de componentes Crie uma associação entre o novo componente e o componente classes Clique com o botão direito do mouse no componente criado e selecione a opção Build e Build novamente no submenu Clique no botão OK Retire eventuais erros de compilação do projeto