Redes
de Petri na Modelagem de Sistemas Orientados a Objetos.
Autores: Dante Carlos
Antunes / Carlos Alberto Heuser
Introdução
O presente artigo
discute o uso de um tipo de rede de Petri de Alto Nível, as Redes
Compactas, como uma técnica alternativa a Statecharts para modelar
o comportamento dos objetos, no contexto da metodologia OMT.
A metodologia de desenvolvimento
de sistemas orientada a objetos OMT (Object Modeling Technique)
[RUM 91] propõe que a modelagem de um sistema contemple três visões:
a estática, a funcional e a dinâmica. A visão estática é atendida
pela modelagem de objetos através da representação das classes,
dos relacionamentos entre as classes e dos atributos e operações
internos às classes. A visão funcional é atendida pela modelagem
das funções e fluxos de dados que descreve as transformações que
os dados sofrem no interior do sistema. A visão dinâmica é atendida
pela modelagem das transições de estados dos objetos.
A modelagem dinâmica,
objeto de estudo deste trabalho, descreve os aspectos de controle
do sistema, especificando em que momento e em que condições as transições
de estado dos objetos podem ocorrer. A notação utilizada em OMT
é baseada no formalismo statecharts concebido por David Harel [HAR87a,
HAR87b] (ver Bate Byte n.36).
Na metodologia OMT para
cada classe, cujo comportamento dinâmico seja relevante, deve ser
modelado um diagrama de transição de estados, via statecharts, o
qual representará todos os objetos da classe em questão. O modelo
dinâmico do sistema consiste, portanto, em múltiplos diagramas statecharts
isolados, funcionando concorrentemente. Não existe uma visão dinâmica
global. A única forma de representar a interação entre duas ou mais
máquinas de estado é através do compartilhamento de eventos. Uma
das consequências de modelar o dinamismo de um sistema desta forma
é a dificuldade de tratar simultaneamente conjuntos variáveis de
objetos, pois cada diagrama modela tão somente um objeto individual.
Trabalho apresentado
no XXII Seminário Integrado de Software e Hardware da SBC, Canela
- RS.
O presente trabalho tem
como objetivo propor a aplicação das redes de Petri de alto nível
[JEN92, HEU93] (ver Bate Byte n. 39) na modelagem dinâmica da OMT,
de forma a permitir a visualização global e integrada dos aspectos
dinâmicos de um sistema e assim conseguir representar a interação
de objetos e conjuntos de objetos de uma ou mais classes do universo
da aplicação. Baseia-se em propostas anteriores que integram redes
de Petri de alto nível com a abordagem entidade-relacionamento [HEU93,
KAP91, KUN89]. Naqueles trabalhos, os lugares da rede de Petri são
as classes de entidades e os relacionamentos do modelo ER. Neste,
os lugares da rede de Petri representam estados de objetos.
Ao propor a integração
de redes de Petri ao modelo de objetos da OMT, nos moldes definidos
por este trabalho, introduz-se uma rígida disciplina na formação
dos lugares da rede, qual seja, todo e qualquer lugar da rede de
Petri deve corresponder a um dos possíveis estados de uma classe
de objetos do modelo estático. Em outras propostas de utilização
da rede de Petri, esta restrição não existe. Embora os lugares também
refiram-se a estados de objetos, não existe um compromisso em manter
a integração com um modelo de dados existente, portanto é possível
que se introduzam lugares que tornem o modelo de difícil implementação.
Disto pode se concluir que a modelagem da rede de Petri aqui proposta
está bem mais próxima do projeto do sistema que a rede de Petri
construída de forma independente.
Limitações
de statecharts em sistemas de informação
O formalismo statecharts [HAR 87a, HAR 87b] apresenta limitações,
quando na modelagem de um sistema surge a necessidade de referenciar
conjuntos de cardinalidade variável de objetos de uma mesma classe.
Um statechart descreve
as transições de estado de apenas um indivíduo. Quando a finalidade
é modelar sistemas reativos que tratam de objetos físicos isolados,
tais como um radar ou um relógio, o formalismo permite obter modelos
fiéis. No entanto, quando se lida com sistemas de informação baseados
em bancos de dados, que armazenam dados referentes a conjuntos de
objetos de uma mesma classe, para utilizar statecharts ou mesmo
a clássica máquina de estados, precisa-se fazer uma abstração, qual
seja, modelar um objeto representante dos demais objetos da classe.
Em grande parte das situações
esta abstração é suficiente para modelar os aspectos dinâmicos de
um sistema, entretanto mostra-se limitada naquelas transações onde
se precisa lidar, simultaneamente, com um número variável de indivíduos
de uma mesma classe.
A limitação no tratamento
de conjuntos de objetos de uma mesma classe pode ser ilustrada através
do seguinte exemplo: Uma empresa de produção de software possui
um setor de tratamento das reclamações oriundas dos seus clientes,
onde trabalha um grupo de técnicos treinados para dar atendimento.
Cada técnico, quando está disponível, recebe um lote de reclamações
para dar encaminhamento e solução. Cada lote é composto de um número
variável de reclamações. Um técnico só está liberado para atender
um novo lote de reclamações, quando solucionar aquele que estiver
atendendo. A figura 1 mostra o modelo de objetos, contendo as classes
Técnico, Lote e Reclamação, e os conjuntos de associações Atendimento
e Engloba. Logo abaixo, na mesma figura, são listados os possíveis
estados que os objetos de cada classe podem apresentar.
A modelagem, através
de statecharts, das transições de estado do sistema é mostrada na
figura 2. Na figura 2, para cada classe identificada no modelo de
objetos existe um diagrama independente. A interação entre eles
se dá através da coincidência dos nomes de eventos (por exemplo,
o evento alocarTécnico) ou através do disparo, a partir de algum
objeto, de uma ação vinculada a um evento, a qual vai se configurar
em evento para outro objeto (por exemplo a ação encerrarLote disparada
pelo evento registrarSolução, na classe Reclamação, que vai ser
considerada como evento nas classes Técnico e Lote).
Para formar um lote de
reclamações, o usuário que opera o sistema, pode agrupar um número
variável de reclamações (1 a n). Quando isto ocorre um lote passa do estado
vazio para o estado formado, e uma ou mais reclamações passam do
estado pendente para o estado selecionada. Estas duas transições
de estado estão representadas, respectivamente, pelo evento associarConjRecl
do diagrama da classe Lote e pelo evento selecionarReclamação do
diagrama da classe Reclamação. Embora exista uma associação entre
estes dois eventos, isto não fica formalmente explicitado nos diagramas
statecharts. Mesmo que se tentasse justapor ao evento associarConjRecl
o disparo de tantas ações selecionarReclamação quantas fossem as
reclamações do lote, isto esbarraria no problema de que para cada
lote que venha a existir na aplicação pode haver uma quantidade
diferente de reclamações, não conhecida a priori, tornando impraticável
a modelagem.
Uma outra questão, também
relativa à figura 2, diz respeito ao evento encerrarLote que para
ser efetivado necessita que a condição associada seja verdadeira,
isto é, que todas as reclamações referentes ao lote já tenham sido
solucionadas. Esta condição está escrita de maneira informal, pois
fica-se diante da impossibilidade de endereçar, ao nível do modelo,
todas as reclamações que pertencem ao lote.
Os problemas acima mencionados
não existiriam caso fosse definido que todos os lotes sempre teriam
uma quantidade fixa de reclamações, por exemplo: três reclamações.
Neste caso, como mostra a figura 3, a cada reclamação corresponderia
um diagrama statechart, ou seja R1, R2 e R3. Agora seria possível
associar explicitamente o evento associarConjRecl com os eventos
selecionarRecl1, selecionarRecl2 e selecionarRecl3.
Também ficaria formalizada
a condição associada ao evento encerrarLote, pois seria possível
citar explicitamente o estado resolvida de cada uma das reclamações
do lote. Entretanto a realidade tem mostrado que, na maior parte
das vezes que um sistema de informações lida com conjuntos de objetos
associados a outro objeto, a cardinalidade é variável.
Redes de
Petri na modelagem dinâmica de OMT
As limitações existentes
na modelagem dinâmica com statecharts, descritas na seção anterior,
podem ser superadas através da utilização de redes de Petri de alto
nível. Esta seção propõe utilizar como ferramenta de modelagem dos
aspectos dinâmicos de um sistema uma classe das redes de Petri de
alto nível: as redes compactas [HEU90, HEU93].
As redes de Petri compactas
de alto nível (vide figura 4) contêm os seguintes elementos básicos:
conexões (retângulos), lugares (círculos), ramos ligando conexões
a lugares e uma linguagem formal de anotação (LA).
As conexões, ao estarem
habilitadas, provocam uma modificação no conteúdo dos lugares a
ela ligados.
Os ramos podem ser alteradores,
pois modificam o conteúdo de um lugar, ou restauradores, quando
apenas "consultam" o conteúdo de um lugar sem provocar
qualquer alteração. Para que uma conexão esteja habilitada é necessário
que: as entidades definidas nos ramos de entrada da conexão, sejam
eles alteradores ou restauradores, estejam presentes nos respectivos
lugares; que as entidades definidas nos ramos de saída da conexão,
sejam eles alteradores ou restauradores, estejam ausentes dos respectivos
lugares; e que a fórmula que porventura houver dentro do retângulo
que representa a conexão resulte verdadeira, sob a valoração em
questão. Após cumpridas todas estas regras a alteração modelada
por uma conexão pode ocorrer, fazendo com que o conjunto de objetos
especificado em cada ramo alterador de entrada desapareça do respectivo
lugar e o conjunto de entidades especificado em cada ramo alterador
de saída seja incluído no respectivo lugar.
A metodologia OMT propõe
visualizar um sistema através de três pontos de vista: o estático,
o dinâmico e o funcional. Cada um destes pontos de vista, ou abordagem,
é influenciado e influencia os demais, como está representado na
figura 4. Em relação à visão dinâmica, que é o foco deste artigo,
os inputs para a construção da rede de Petri compacta, são: (i)
o conjunto das transações obtidas da visão funcional, as quais originarão
as conexões da rede, e (ii) as classes e associações obtidas da
visão estática, cujos possíveis estados formarão os lugares da rede.
À medida que se avance na modelagem da rede de Petri, é esperado
o surgimento de feedbacks para as duas outras visões da OMT, a estática
e a funcional.
Roteiro para
a construção de uma rede de Petri compacta
Para auxiliar na modelagem
da rede de Petri compacta de alto nível, sugere-se os seguintes
passos:
a) Identificação dos
estados dos objetos do sistema
Para cada classe existente
no modelo de objetos, devem ser identificados os possíveis estados
pelos quais cada objeto pode passar. O produto desta atividade será
uma lista inicial de estados para cada classe de objetos, incluindo
aqui as classes que surgirem de associações. O critério para identificar
estados é informal e depende muito da interpretação que o analista
dá ao problema. A princípio, qualquer modificação de valor dos atributos
de um objeto representa uma mudança de estado. O analista deve selecionar,
através de um processo de abstração, aquelas julgadas relevantes
à aplicação.
b) Identificação das
transações do sistema
Um sistema de informações
além dos dados que estão armazenados em bancos de dados, possui
um conjunto de transações que ao serem acionadas, ou provocam modificações
nos dados armazenados, ou apenas os consultam.
A lista de transações
para dar início à construção da rede de Petri compacta pode ser
de caráter preliminar, não havendo necessidade de um aprofundamento
na modelagem da visão funcional. É importante ressaltar que a própria
modelagem da rede de Petri fornecerá importantes subsídios para
o detalhamento e consolidação do modelo funcional, devido à visão
global que fornece do sistema. Em sistemas simples a lista de transações
é facilmente obtida a partir da descrição informal do problema.
Em sistemas mais complexos, no entanto, pode ser necessário adotar
alguma ferramenta de modelagem para identificar as transações, por
exemplo o DFD.
c) Construção da rede
de Petri
Conhecendo a lista das
transações do sistema e os estados que os objetos manipulados por
este sistema podem assumir, pode ser iniciada a construção da rede
de Petri para modelar os aspectos dinâmicos.
Formalmente a rede de
Petri que modela um sistema é um modelo único. Em sistemas maiores
é recomendável dividir a rede em segmentos. Um critério possível
para a segmentação é o de modelar em um mesmo diagrama transações
afins. A conexão entre dois segmentos de rede de Petri se dá através
da repetição dos lugares que lhes são comuns.
Adaptação
das redes de Petri compactas para OMT
O presente trabalho propõe
que a utilização da rede de Petri compacta de alto nível obedeça
à seguinte regra que promove a sua integração com o modelo de objetos
da visão estática:
Qualquer lugar da
rede de Petri deve sempre corresponder a um determinado estado de
uma classe ou associação do modelo de objetos e todos os estados
possíveis de todas as classes e associações do modelo de objetos
devem estar representados por lugares na rede de Petri.
A figura 5 apresenta
uma rede de Petri compacta construída conforme a regra acima. Trata-se
do mesmo sistema de atendimento a reclamações modelado via statecharts
na figura 2 da sessão anterior.
A notação utilizada na
rede de Petri é aquela utilizada em [HEU90,HEU93] com a introdução
de uma regra de formação dos nomes dos lugares da rede. Propõe-se
que seja atribuído a cada lugar o nome da classe de objetos seguida
de um nome de estado entre colchetes, por exemplo, os lugares Técnico
[ocupado] e Lote [formado], entre outros existentes na figura 5.
Dentro de um lugar da rede podem haver vários objetos da classe
especificada na notação, significando que todos eles estarão no
estado descrito entre colchetes.
Tendo em vista a interpretação
que lhes é dada neste trabalho, as conexões da rede de Petri (os
retângulos do diagrama) serão chamadas de transações. Uma transação
para ser efetivada necessita estar habilitada conforme as regras
das redes de Petri. Por exemplo, a transação associarConjRecl estará
habilitada toda vez que:
- o lote representado
pela variável lote estiver presente no lugar Lote[vazio] e ausente
do lugar Lote[formado];
- o subconjunto de reclamações
representado pela variável cj_recl estiver presente no lugar Reclamação[pendente]
e ausente do lugar Reclamação [selecionada];
- o par formado pela
combinação do lote com o conjunto de reclamações, representados
respectivamente pela variável lote e pela variável cj_recl, estiver
ausente do lugar Engloba[X].
A efetivação da alteração
especificada pela transação associarConjRecl produzirá os seguintes
resultados na rede:
- o lote representado
pela variável lote sairá do lugar Lote[vazio] e entrará no lugar
Lote[formado];
- todas as reclamações
do subconjunto representado pela variável cj_recl sairão do lugar
Reclamação [pendente] e entrarão no lugar Reclamação [selecionada].
- surgirá no lugar Engloba[X]
um objeto correspondente ao par composto pelo lote representado
pela variável lote e pelo subconjunto de reclamações representado
pela variável cj_recl.
A modelagem desta transação
demonstra a capacidade da rede de Petri de tratar com precisão conjuntos
variáveis de objetos, o que não ocorre com statecharts, conforme
ficou evidenciado quando se tentou modelar a mesma transação na
sessão anterior.
Situações especiais
Para integrar as redes
de Petri compactas de alto nível à OMT, algumas situações específicas
precisam ter a sua notação convencionada. Neste trabalho duas delas
são apresentadas: objetos que não apresentam transição de estados
e criação/destruição de objetos:
a) Objetos que não
apresentam transição de estados
Certos objetos envolvidos
em uma aplicação podem não apresentar transições de estados relevantes,
com exceção da sua criação e da sua eliminação. Nestes casos, a
identificação do lugar na rede de Petri leva o nome da classe seguido
da constante 'X' entre colchetes.
Os objetos que venham
a estar nestes lugares não poderão nunca ser transferidos para outro
lugar na rede, pois isto configurar-se-ia em uma transição de estados.
A única forma de promover alteração no conteúdo destes lugares é
através da criação ou da destruição de objetos.
b) Criação e destruição
de objetos
Toda a vez que um objeto
é criado dentro do contexto de uma aplicação ele passa a ter uma
identidade que o individualiza em relação aos demais objetos do
universo de discurso da aplicação. Entre a criação e a destruição
de um objeto não devem haver lapsos na sua existência, isto é, ele
existe durante todos os momentos deste período de tempo.
A forma de modelar a
criação de um objeto em rede de Petri é através de uma conexão que
possua um ramo alterador de saída ligado a um lugar referente à
classe do objeto em seu estado inicial. Por ser uma conexão criadora
de objetos ela não deve possuir ramos alteradores de entrada referindo-se
ao objeto que está sendo criado. Caso isto ocorresse tal objeto
não estaria sendo criado, simplesmente estaria mudando de estado.
Modelar a destruição
de objetos é exatamente o inverso da forma de modelar a sua criação.
Conclusão
O uso de redes de Petri
de alto nível na modelagem dos aspectos dinâmicos de um sistema
de informação, conforme é proposta neste artigo, mostra-se superior
ao formalismo statecharts quando existe a necessidade de se referenciar
conjuntos variávies de objetos de uma mesma classe. A rede de Petri
permite que se especifique precisa e formalmente esta situação.
As redes de Petri são
muito estudadas na literatura sendo sua semântica mais precisamente
formalizada que a do statecharts.
A favor de statecharts
conta, além da simplicidade de uso, a sua capacidade de permitir
a elaboração de modelos estruturados, multiníveis.
A respeito da perspectiva
que se tem de um sistema, existe uma diferença de paradigma entre
statecharts e redes de Petri. Em statecharts focalizam-se as classes
do modelo de objetos, construindo-se um diagrama independente para
cada uma delas. Em redes de Petri, aborda-se o sistema como um todo,
através de um diagrama unificado e integrado, tendo como foco principal
as transações que afetam objetos de classes diferentes.
Para tratar a complexidade
de uma rede de Petri, há a necessidade de se pesquisar e propor
mecanismos que permitam o particionamento e estruturação de uma
rede, sem que isto comprometa o seu formalismo.
Bibliografia
[HAR87a] HAREL, David.
statecharts: a visual formalism for complex systems. Science of
Computer Programmming, v. 8, 1987.
[HAR87b] HAREL, David.
On visual formalisms. The Weizmann Inst.of Science, Rehovot, Israel,
jun/1987.
[HEU90] HEUSER, Carlos
A. Modelagem conceitual de sistemas: redes de Petri. V EBAI. Nova
Friburgo, 1990.
[HEU91] HEUSER, C. A.;
PERES, Eduardo M. ER-T diagrams: an approach to specifying database
transactions. In: 10th Intern. Conf. on the E-R Approach, 1991,
San Mateo, CA.
[HEU93] HEUSER, C. A.;
PERES, E. M; RICHTER, G. Towards a complete conceptual model: Petri
nets and E-R diagrams. Inf. Systems v.18,n.5, 1993
[JEN92] JENSEN, K. Colured
Petri Nets: Basic concepts, Analysis Methods and Practical Use.
Vol 1. Springer Verlag, Berlin 1992
[KAP91] KAPPEL, G.; SCHREFL,
M. Object Behavior diagrams. Proc. Int. Conf. on Data Engineering.
Kobe, pp 530-539, IEEE Computer Society Press 1991
[RUM91] RUMBAUGH, James
et al. Objetct-oriented modeling and design. Prentice-Hall, New
Jersey, 1991
antunes@inf.ufrgs.br

|