29/01/2012 19:22

Caso Prático - Modelando uma Máquina de Estados para a Academia de Ginastica Boa Forma

Introdução

Continuando a modelagem do sistema da academia Boa Forma, vamos mostrar a modelagem da dimensão de controle com o uso do diagrama de máquina de estados. Existem situações em que temos um classe de negócio, isto é uma classe do diagrama de classes, que possui estados pelos quais o objeto daquela classe irá passar ao longo do seu ciclo de vida. Nem todo sistema possui objeto de negócio com estas características, logo nem sempre precisamos modelar um diagrama de máquina de estados. Em outros casos, o sistema pode possuir até mais de uma classe de negocio que passar por estados que precisam ser observados. Nestas situações o diagrama de máquina de estados se apresenta como uma ferramenta útil para mapear os estados e definir as operações que devem ser realizadas em cada estado, ou seja, o que o objeto precisa fazer quando passa por um estado. Nenhum estado é definido por simples capricho do negócio, se existe um estado ele retrata uma situaçao especial do negócio, ou a ocorrencia de um fato que precisa de atenção. Em outras palavras, ocorre simplesmente é que os estados precisam ser tratados e este é o momento em que o diagrama de máquina de estados nos ajuda a identificar os estados e definir as operações que devem ser executadas pelo sistema em cada estado.

 

Identificando o Objeto da Maquina de Estados

Identificar o objeto que objeto possui transições de estados é o primeiro passo para a modelagem do diagrama de maquina de estados. Cada diagrama de maquina de estados possui um e somente um objeto de negocio. No caso da Academia de Ginastica Boa Forma temos um objeto que passa por vários estados. Vamos ver um trecho da descrição do mini-mundo que pode nos ajudar a identificar tal objeto.

" ...As mensalidades vencem sempre no dia 20. Todo dias 10 devem ser emitidos avisos de cobrança para os alunos, os quais são remetidos pelo correio. As mensalidades são pagas na secretaria da própria filial...

Alunos com mensalidade em atraso ficam impedidos de participar da atividade, até a regularização do débito. O valor de uma mensalidade em atraso é calculado com base no valor da mensalidade vigente no dia do pagamento, acrescido de multa de 10%.

...Alunos com 15 dias de atraso no pagamento de uma mensalidade devem receber uma solicitação de regularização de débito... 

...Com 30 dias de atraso, o aluno tem sua matrícula cancelada, sendo notificado do fato..."

 

Com base na leitura do texto acima, vemos que existem vários objetos de negócio envolvidos, temos aluno, mensalidade, pagamento e matricula. Mas qual deles passa por estados que devem ser tratados? A principio podemos achar que seria o objeto aluno, pois o aluno com 15 dias em atraso deve receber uma solicitacao de regularizacao de debito, com 30 dias deve ter sua matricula cancelada e receber outra notificacao. Mas será mesmo a classe aluno que deve passar por estes estados? Será que existe alguma informação na classe aluno que tem relação com estes estados?

Na verdade é o objeto mensalidade que passa pelos estados ppis as informações que caracterizam que o objeto está em atraso, pertencem à classe mensalidade pois é nesta classe que temos os atributos dataVencimento e dataPagamento, sendo estes os atributos que informam que a mensalidade está com 15 dias de atraso, com 30 dias de atraso, quitada ou a vencer.

Desta forma podemos eleger a classe mensalidade como sendo a candidata a ter um diagrama de maquina de estados.

 

Identificando os Estados do Objeto

Ainda com base no texto acima podemos ver que uma mensalidade passa por alguns estados.

Todo dia 20 do mes deve ser gerado boleto da mensalidade, o boleto é enviado para o aluno efetuar pagamento e a mensalidade fica neste momento no estado A Vencer.

Caso o aluno nao efetue o pagamento em até 15 dias a mensalidade entre em atraso de 15 dias.

Da mesma forma, caso o aluno nao efetue o pagamento em até 30 dias da data de vencimento, a mensalidade entra em atraso de 30 dias.

A qualquer momento o aluno pode efetuar o pagamento da mensalidade e então a mensalidade passa para o estado Quitada. Uma exceção é quando a mensalidade está em atraso de 30 dias pois ao entrar neste estado, a matricula do aluno é cancelada e a mensalidade nao pode mais mudar para o estado Quitada.

Assim, temos identificados os estados abaixo para a classe Mensalidade:

  • A Vencer
  • Atraso de 15 dias
  • Atraso de 30 dias
  • Quitada

 

Definindo as operações de cada Estado

Uma vez identificados os estados pelos quais um objeto da classe Mensalidade poderá passar, chegou a vez de definir as operações que devem ser executadas em cada estado. Isto porque, como já vimos, os estados precisam ser tratados e isto é feito pelas operações, métodos, que devem ser definidos na classe Mensalidade para atender ao negócio. Imagine por exemplo que precisamos notificar o aluno que está com mensalidade com 15 dias de atraso e precisamos também emitir Aviso de Cobrança todo dia 20 e enviar para o aluno efetuar o pagamento. Estes são 2 exemplos de operações que devem ser executadas pelo sistema, ou seja, pela classe Mensalidade no momento, estado, apropriado.

Com base no texto acima podemos identificar que quando chega o dia 20 do mes, ou seja, quando a mensalidade está no estado A Vencer, deve ser gerado o Aviso de Cobrança e enviado para o aluno efetuar o pagamento;

Quando a mensalidade fica com 15 dias de atraso, o sistema deve enviar uma solicitacao de regularizacao de divida;

Quando a mensalidade fica com 30 dias de atraso, o sistema deve cancelar a matricula do aluno.

Perceba que foram identificadas várias operações que devem ser executadas pelo sistema. Veja que operações importantes foram identificadas atraves do Diagrama de Maquina de Estados, assim como os estados que devem ser tratados por estas operações. Nao precisamos nos preocupar agora em que classe iremos colocar cada operação, apenas precisamos obter uma lista com as operações:

  • EnviarAvisoCobrança
  • EnviarSolicitacaoRegularizacaoDebito
  • CancelarMatricula
  • EnviarNotificacaoCancelamentoMatricula
  • QuitarMensalidade

Devemos nos lembrar que quando a mensalidade está em atraso deve ser cobrada multa de 10% entao temos pelo menos mais uma operação:

  • CalcularMulta

É interessante ter uma operação adicional para o cálculo da multa que hoje é 10% mas pode mudar com o tempo, se tornar mais complexo e assim teremos todo o tratamento do calculo da multa em uma operação específica.

O diagrama de máquina de estados para a classe mensalidade ficaria como mostrado na figura abaixo:

Outro ponto a lembrar é que as operações identificadas devem ser definidas nas classes mas não necessáriamente na classe Mensalidade. As operações identificadas devem ser definidas de acordo com o principio de responsabilidade de cada classe. No caso as operações EnviarAvisoCobranca, EnviarSolicitacaoRegularizacaoDebito e QuitarMenslaidade devem ser criadas na classe Mensalidade pois faz parte da responsabilidade da classe Mensalidade tratar da cobrança, regularizacao e quitacao da mensalidade. Por outro lado, as operações CancelarMatricula e EnviarNotificacaoCancelamentoMatricula devem ser definidas na classe Matricula que deve tratar de cancelamento de matricula e de notificar o aluno sobre o cancelamento. Esta é uma possivel forma de distribuir as operações identificadas, mas não é a única forma. Sempre existe mais de uma forma de se resolver um problema, procurei mostrar uma forma simples de distribuir as operações segundo o principio de responsabilidade das classes. Podemos até ter uma classe de serviço que trate destas operações de cobrança, quitação de mensalidade, etc. Uma classe de serviço é um outro tipo de classe que ainda nao abordamos nos artigos até agora. Em geral classes de serviço implementam operações que o sistema deve efetuar e que devem estar disponiveis para o usuario e para outros sistemas ou serviços. Nao vamos abordar este assunto neste artigo. 

 

Conclusão

Vimos como o diagrama de maquina de estados pode nos ajudar a identificar estados que devem ser tratados pelo sistema e quais as operações que devem ser executadas pelo sistema em cada estado de acordo com os objetivos do negócio. Todo sistema possui a dimensao de dados, a dimensao de processos de negocio e a dimensao de controle. A dimensão de controle é aquela que permite que voce possa acompanhar as mudanças que ocorrem no negócio em função de eventos que ocorrem nas operações de negócio.  O diagrama de máquina de estados é uma ferramenta ideal para a modelagem da dimensão de controle do sistema. No proximo artigo onde iremos modelar um outro sistema com um modelo de negócio diferente e ver outros tipos de diagrama da UML.  Um grande abraço e até a próxima.

—————

Voltar


Contato

Fernando De Siqueira