Beruflich Dokumente
Kultur Dokumente
Abstract
This text aims to present a universal model of computation based on graphs and graph transformations.
It also shows how this formalism can be used to specify and to program object-oriented concurrent
systems.
Resumo
Este texto visa apresentar um modelo universal de computao baseado em grafos e transformaes
de grafos, e como este modelo pode ser usado para especificar e programar sistemas concorrentes
orientados a objetos.
8.1. Introduo
Programas de computador so parte integrante da vida moderna, fazendo
com que a maior parte das nossas atividades dirias dependam deles para que
possam ser realizadas. Aplicaes comuns so terminais bancrios, sistemas
de reservas de passagens, caixas de supermercado, clientes de correio eletr-
nico, processadores de texto, entre muitos outros. Servios mais sofisticados
so tambm controlados por programas, como sistemas de telecomunicaes,
controle de semforos, pilotos automticos de aeronaves e mesmo sistemas
de suporte vida utilizados em unidades de terapia intensiva em hospitais. Em
geral, tais sistemas necessitam controlar uma quantidade de componentes de
software que operam de forma simultnea. Para os usurios, de fundamen-
tal importncia que aqueles operem de forma absolutamente correta, visto que
falhas podem causar perdas tanto financeiras quanto humanas. Por exemplo,
um terminal para reservas de passagens areas necessita acessar uma base
de dados compartilhada para verificar se um assento est disponvel ou no;
pilotos automticos devem receber informaes de diversas partes da aero-
nave, bem como das condies climticas exteriores, para garantir que a rota
seja seguida apropriadamente; equipamentos de suporte vida devem moni-
torar constantemente os sinais vitais do paciente para que, em caso de algum
problema, medidas adequadas possam ser tomadas a tempo. Se uma falha
durante a execuo de um jogo ou de um editor de texto no traz problemas
387
Ferreira e Ribeiro
388
Programao Orientada a Objeto com Grafos
389
Ferreira e Ribeiro
390
Programao Orientada a Objeto com Grafos
instncia de uma subclasse pode ser usada em lugares onde uma instncia da
superclasse seria esperada. Este conceito de polimorfismo pode ser exempli-
ficado pela seguinte situao: se duas classes c1 e c2 esto relacionadas via
herana, com c2 sendo uma subclasse de c1 , ento em qualquer ponto onde
um objeto da classe c1 esperado um objeto da classe c2 pode ser usado, j
objetos da classe c2 so tambm objetos da classe c1 , pois herdam todas as
caractersticas de c1 .
Polimorfismo de subclasse especialmente interessante em abordagens
orientadas a objeto que permitem que mtodos sejam sobrescritos (ou rede-
finidos). A sobrescrita de um mtodo herdado no mbito de uma classe de-
rivada permite que este mtodo possa ter uma implementao diferente do
mtodo herdado, embora ambos ainda possuam a mesma assinatura. Nes-
sas abordagens, pode ser implementada a chamada ligao dinmica, que
o mecanismo que seleciona o mtodo a ser executado baseado no tipo do ob-
jeto que executar de fato o mtodo. Como uma referncia a um objeto de
uma determinada classe pode conter objetos de classes diferentes nome-
adamente, de todas as subclasses da classe da referncia pode-se definir
um cdigo genrico que especializado em tempo de execuo pela ligao
dinmica de mtodos redefinidos. Desta forma, o cdigo a ser executado para
efetuar uma dada operao determinado em tempo de execuo, depen-
dendo do objeto que executar este cdigo. Isto d uma grande flexibilidade
ao sistema, pois uma mesma solicitao de execuo de mtodo pode ter v-
rias implementaes diferentes, dependendo do tipo do objeto que recebe esta
solicitao. A maioria das linguagens orientadas a objetos suporta a seleo do
mtodo apropriado a ser executado baseada na classe do objeto que recebe
a requisio de executar o mtodo [Campione et al. 2000], [Stroustup 2000],
[Thomas and Weedon 1997].
Existe na literatura um grande nmero de mtodos formais
[Fitzgerald et al. 2005], [CSK CORPORATION 2005], [Smith 1992],
[Smith 1999], [Goguen and Malcom 1996] e semi-formais [Booch et al. 1999]
para a especificao de sistemas orientados a objetos. Programas orientados
a objetos normalmente usam herana (que a maneira mais comum de reuso
de cdigo) e redefinio de mtodos para atingir seus objetivos. Portanto,
seria esperado que os formalismos para especificao de sistemas orientados
a objeto oferecessem construes correspondentes que refletissem esses
conceitos, caso contrrio, o formalismo iria negligenciar conceitos que tm
uma grande influncia na abordagem sendo descrita.
Mtodos para modelagem e programao de sistemas orientados a objetos
deveriam apresentar uma srie de caractersticas, entre as quais: (i) a existn-
cia de uma linguagem de especificao formal que possa ser facilmente enten-
dida tanto por desenvolvedores de software quanto por usurios finais; (ii) pos-
sibilidade de especificar aspectos estticos e dinmicos do sistema de forma
integrada, ou seja, no mesmo formalismo; (iii) a existncia de uma semntica
formal que seja compatvel com operadores de composio, para permitir o
391
Ferreira e Ribeiro
392
Programao Orientada a Objeto com Grafos
393
Ferreira e Ribeiro
Exemplo 8.2.2 (Relao) Vejamos ento, como podemos expressar uma re-
lao matematicamente: imagine que queremos relacionar todas as pessoas
com seu respectivos pais, por meio de uma relao que vamos chamar de R.
Um pai ou me de algum tambm uma pessoa, ento podemos construir
todas as triplas ordenadas ( f , p, m), onde cada um desses elementos pertence
394
Programao Orientada a Objeto com Grafos
Definio 8.2.4 (Relaes binrias) Uma relao R dita binria se for uma
relao 2-ria. Uma relao binria R A A dita
reflexiva, se sempre que a A ento (a, a) R.
simtrica se sempre que (a, b) R ento (b, a) R.
antisimtrica se sempre que (a, b) R e (b, a) R ento a = b.
transitiva, se sempre que (a, b) R e (b, c) R ento (a, c) R.
395
Ferreira e Ribeiro
Esta definio de funo pode parecer muito diferente daquilo que aprende-
se na escola a chamar de funo, mas de fato somente sua caracterizao
formal. Usualmente, uma funo matemtica representada pela sua lei de
formao, por exemplo, f (x) = x2 . Essa forma de representao contm infor-
mao sobre a funo, mas esta informao no completa. Para descrever
uma funo tambm fundamental informar o seu domnio de definio (quais
so os elementos aos quais a funo dever ser aplicada) e o seu contradom-
nio (em que conjunto esto as imagens dos elementos resultantes da aplicao
da funo). Naturalmente que o domnio e a lei de formao da funo definem
o seu contradomnio. No caso da funo f , seu domnio pode ser o conjunto
dos nmeros naturais, dos inteiros, dos reais, dos complexos ou qualquer sub-
conjunto finito ou infinito destes, embora usualmente as funes matemticas
tenham como domnio implcito o conjunto R, a no ser que algo seja dito em
contrrio. Uma funo, contudo, no precisa ter somente um argumento. A
funo que, dado um ponto (x, y)1 no p plano retorna a distncia deste ponto at
a origem (0, 0) dada por d(x, y) = x2 + y2 . A funo d : R R R neste
caso, recebe como argumentos dois valores reais x e y (ou um p par ordenado
de valores reais (x, y)) e retorna o valor real correspondente a x2 + y2 . Assim,
pode-se representar a funo d : R R R pcomo uma relao contida no con-
junto R R R, definida como d = {(x, y, x2 + y2 ) | x, y R}, e naturalmente
que d R R R. Ou seja, toda funo que recebe n argumentos pode ser
representada por uma relao n + 1-ria (uma relao em que suas tuplas tm
n+1 elementos) onde os primeiros n elementos so os argumentos da funo e
o ltimo elemento o resultado da aplicao da funo aos seus n argumentos.
Assim, a funo f (x) = x2 pode ser igualmente representada por uma relao
que contm os pares ordenados (1, 1), (1, 1), (3, 9), (5, 25) e assim sucessi-
vamente (para todos os valores possveis). Formalmente, a relao f pode ser
definida como f = {(x, x2 ) |px R}.
As relaes d = {(x, y, x2 + y2 ) | x, y R} e f = {(x, x2 ) | x R} definidas
acima so funes porque a lei de formao assegura que para quaisquer ar-
gumentos das funes, seu resultado, isto , o ltimo elemento da tupla,
nico. Existe somente uma distncia de um ponto origem, e existe somente
um quadrado de um nmero.
1Note que este um par ordenado pertencente ao conjunto resultante do produto carte-
siano R2 = R R.
396
Programao Orientada a Objeto com Grafos
descreve a funo que calcula a distncia entre dois pontos que possuem co-
ordenadas (x1 , y1 ) e (x2 , y2 ). Note que o cabealho da funo descreve o seu
domnio (na forma do tipo de seus parmetros formais) e seu contradomnio
(no tipo de retorno da funo). Ou seja, o cabealho da funo Pascal dist
o equivalente da definio matemtica dist p : R R R R R, onde a sua lei
de formao dada por dist(x1 , y1 , x2 , y2 ) = (x2 x1 )2 + (y2 y1 )2 .
A diferena entre funes totais e funes parciais reside no fato de que
nestas ltimas nem todos os elementos do domnio so mapeados. Em um
programa, isso corresponde ao fato de que no existem sadas com significado
para todas as possibilidades de valores de entrada. O resultado da aplicao
de uma funo parcial a um elemento que no pertence ao seu domnio de
definio (ou seja, que no mapeado pela funo) indefinido, e usualmente
representado pelo smbolo .
Na Figura 8.1 pode-se ver essa funo graficamente representada. Note que
somente os elementos pares do domnio so mapeados para os seus respec-
tivos sucessores no contradomnio da funo.
397
Ferreira e Ribeiro
398
Programao Orientada a Objeto com Grafos
399
Ferreira e Ribeiro
400
Programao Orientada a Objeto com Grafos
Definio 8.2.12 (Supremo (lub, join), nfimo (glb, meet)) Seja hP, vP i um
conjunto parcialmente ordenado. Se, para um subconjunto A P o seu con-
junto de limitantes superiores possuir um menor elemento x, ento x cha-
mado de menor limitante superior, ou supremo ou ainda join de A e escreve-se
x = lub(A) ou x = tA.
Dualmente, se, para um subconjunto A P o seu conjunto de limitantes
inferiores possuir um maior elemento x, ento x chamado de maior limitante
inferior, ou nfimo ou ainda meet de A e escreve-se x = glb(A) ou x = uA.
401
Ferreira e Ribeiro
Um grafo pode ento ser visto como um conjunto de elementos e uma rela-
o binria sobre estes elementos. Contudo, em alguns casos podemos querer
representar multigrafos, que so grafos que possuem mais do que uma aresta
entre os mesmos dois nodos. Estas situaes podem acontecer para mode-
lar, por exemplo, caminhos diretos distintos entre a mesma origem e o mesmo
destino, ou atributos diferentes de um mesmo objeto que tm o mesmo tipo.
Neste caso, a Definio 8.2.13 no adequada. A razo que, sendo uma
relao um conjunto, elementos iguais so identificados como sendo o mesmo
elemento. Desta forma, duas arestas distintas, mas como mesma origem v e
destino u, seriam representadas como o par ordenado (u, v). Como deixaria
de existir uma bijeo entre os arcos do grafo e o conjunto que os representa,
no se pode reconstruir o grafo a partir de sua definio matemtica. Logo,
precisamos de uma definio formal que contemple esta situao.
Definio 8.2.14 (Grafo) Um grafo uma tupla G = hVG , EG , srcG , tarG i onde
VG um conjunto de vrtices, EG um conjunto de arcos, srcG : EG VG a
funo que para cada arco retorna seu nodo de origem e tarG : EG VG a
funo que para cada arco retorna seu nodo de destino.
402
Programao Orientada a Objeto com Grafos
403
Ferreira e Ribeiro
No entanto, uma porta NAND diferente de uma porta OR, por exemplo. A
sada de uma porta depende das suas entradas e de qual porta lgica estamos
falando. Assim, embora conexes entre portas, entradas e sadas sejam sem-
pre idnticas, os nodos do grafos pertencem a classes de elementos distintas.
Podemos inserir esta informao adicional em um grafo por meio de rtulos.
Tanto arestas quando vrtices podem ser rotulados, embora neste caso s faa
sentido rotular os nodos, que so os elementos que efetivamente devem conter
informao adicional. No caso deste circuito lgico, pode-se criar o conjunto
de rtulos Portas = {OR, AND, NAND, NOR, XOR, NOT, entrada, sada}, e uma
funo que, para cada nodo, devolva o seu rtulo correspondente. Para o grafo
da Figura 8.3, a funo de rotulao dos nodos labV : V Portas dada por
404
Programao Orientada a Objeto com Grafos
405
Ferreira e Ribeiro
406
Programao Orientada a Objeto com Grafos
407
Ferreira e Ribeiro
408
Programao Orientada a Objeto com Grafos
a relao adicionada dos pares que faltam para que ela se torne uma re-
lao transitiva e reflexiva. Especificamente, para uma relao vP , seu fe-
cho reflexivo vP {(x, x) | x P}, ou seja todos os pares que contm os
elementos relacionados com eles mesmos. O fecho transitivo construdo
como vP {(x, y) | z1 , . . . , zk P : (x, z1 ), (z1 , z2 ) . . . , (zk1 , zk ), (zk , y) vP }, isto
, completado pelos pares necessrios para tornar a relao transitiva. O
Exemplo 8.3.1 mostra a construo do fecho reflexivo e transitivo da relao
estrita apresentada na Figura 8.5.
409
Ferreira e Ribeiro
410
Programao Orientada a Objeto com Grafos
411
Ferreira e Ribeiro
412
Programao Orientada a Objeto com Grafos
413
Ferreira e Ribeiro
414
Programao Orientada a Objeto com Grafos
Definio 8.3.4 (Grafo C-tipado) Um grafo C-tipado GC uma tupla hG,t, Ci,
onde C = hVC v , EC v , L, srcC , tarC , labC i um grafo de classes, G = hVG , EG ,
srcG , tarG i um hipergrafo e t um par de funes totais htV : VG VC ,tE :
EG EC i tais que (tV srcG )vVC (srcC tE ) e (tV tarG )vVC (tarC tE ).
415
Ferreira e Ribeiro
416
Programao Orientada a Objeto com Grafos
elementos v dom(hV ), (t2V hV )(v) vVC t1V (v), e para todos os elementos e
dom(hE ), (t2E hE )(e) vEC t1E (e). Se (t2E hE )(e) = t1E (e) para todo e dom(hE )
ento o morfismo dito estrito.
417
Ferreira e Ribeiro
418
Programao Orientada a Objeto com Grafos
419
Ferreira e Ribeiro
Para qualquer grafo C-tipado hG,t, Ci existe uma funo total tE : P(EG )
P(EC ), que pode ser vista como uma extenso da funo de tipagem para
conjuntos de nodos ou de arcos. A funo tE , quando aplicada a um conjunto
E P(EG ), retorna o conjunto {tE (e) EC | e E} P(EC ). A notao tE |msg
e tE |attr ser usada para indicar a aplicao de tE a conjuntos contendo exclu-
sivamente arcos mensagens e atributos (respectivamente). Com as funes j
definidas, pode-se ento definir o tipo de grafo que vai representar sistemas
orientados a objeto.
420
Programao Orientada a Objeto com Grafos
Se, para todo v VG a funo tE |attr (attrG (v)) for injetora, GC dito um grafo
orientado a objeto estrito. Se tE |attr (attrG (v)) for tambm sobrejetora, GC
chamado um grafo orientado a objeto completo.
Grafos orientados a objeto diferem dos grafos C-tipados no seguinte sen-
tido: o nico tipo de mensagem que pode ser recebida por um objeto so as
menores possveis de acordo com a relao de sobrescrita. Isso porque, se-
gundo a primeira condio apresentada na Definio 8.3.7, uma mensagem
que tem como destino um objeto somente pode ser tipada por algum dos tipos
retornados pela funo de conjunto de mensagens estendida. Isso quer dizer
que no possvel termos uma mensagem tipada como algum mtodo que j
foi redefinido. Isso feito para garantir a implementao da ligao dinmica
de mtodos, visto que um objeto sempre responde ao mtodo mais prximo a
ele na hierarquia de herana e sobrescrita. A forma de garantir que isso sem-
pre acontece ser discutida na Seo 8.4, quando computaes de sistemas
orientados a objeto forem discutidas.
Grafos orientados a objeto podem ser estritos ou completos. Grafos orien-
tados a objeto estritos so aqueles onde cada nodo no pode possuir dois ou
mais atributos tipados como o mesmo arco no grafo de classes subjacente. A
injetividade de todas as funes tE |attr (attrG (v)), onde v VG , expressa que to-
dos os arcos de atributo de um mesmo vrtice so tipados de forma distinta (ou
seja, um objeto no possui atributos em excesso). Para que um grafo orientado
a objeto seja completo, no entanto, tambm necessrio que todos os atribu-
tos definidos em todos os nveis da relao de herana estejam presentes. A
definio de um grafo orientado a objeto completo coerente com a noo de
herana no paradigma da orientao a objeto: um objeto possui todos os atri-
butos definidos no mbito de sua prpria classe e herda todos os atributos, e
exatamente os atributos, que pertencem s suas classes primitivas.
Sistemas orientados a objeto so usualmente compostos por um nmero
grande de objetos, que podem receber mensagens de outros objetos (inclu-
sive de si prprio) e reagir a estas mensagens alterando seu estado interno
ou enviando mensagens a outros objetos. Grafos orientados a objeto podem
representar um sistema orientado a objeto de forma adequada: eles podem ter
quantos objetos se desejar, e mesmo que o nmero e tipo de atributos em cada
objeto seja limitado, o nmero de nodos no grafo que representa o sistema no
. Sendo assim, temos um formalismo capaz de expressar a estrutura esttica
das classes definidas em um programa orientado a objeto, juntamente com os
estados de um programa em execuo onde os nodos do grafo so os objetos
e os hiperarcos so todos os atributos e todas as mensagens a executar.
Para expressarmos a dinmica da execuo de um programa orientado a
objeto, contudo, precisamos de outro formalismo, capaz de expressar a ma-
neira como os estados de um programa evoluem com o tempo. Para isso, na
Seo 8.4 introduz-se formalmente o conceito de gramtica de grafos orien-
tados a objeto, que capaz de expressar finitamente todas as computaes
(finitas ou infinitas) de um sistema orientado a objeto.
421
Ferreira e Ribeiro
422
Programao Orientada a Objeto com Grafos
cada; todos os itens mapeados do lado esquerdo da regra para o lado direito
da regra (via o morfismo entre os dois lados da regra) sero preservados pela
aplicao da regra; todos os elementos do lado esquerdo da regra que no
so mapeados so removidos; e, finalmente, todos os elementos que apare-
cem somente do lado direito da regra so adicionados ao estado corrente do
sistema.
O tipo de regra permitida pode variar, de acordo com aquilo que se quer
representar ou implementar. Regras sem qualquer tipo de restrio permitem
uma expressividade muito grande na especificao de sistemas. Contudo, elas
tambm podem levar a muitos problemas indecidveis. Restries em regras
423
Ferreira e Ribeiro
424
Programao Orientada a Objeto com Grafos
425
Ferreira e Ribeiro
426
Programao Orientada a Objeto com Grafos
427
Ferreira e Ribeiro
428
Programao Orientada a Objeto com Grafos
8.4.3. Derivaes
Uma derivao direta, ou passo de derivao, representa uma mudana no
estado de um programa em execuo, e obtida pela aplicao de uma regra
ao grafo que representa o estado do sistema.
Uma regra representa uma maneira possvel de evoluo de um sistema
orientado a objeto em qualquer ponto de sua execuo. Para que uma regra
possa ser aplicada, contudo, seus pr-requisitos devem estar presentes. O
pr-requisito de aplicao de uma regra dado pelo seu lado esquerdo. Sem-
pre que o lado esquerdo de uma regra existir em algum ponto do grafo que
representa o sistema, esta regra pode ser aplicada sobre aquele ponto. Essa
a noo de transformao local que os sistemas baseados em regras im-
plementam e que j foi discutida anteriormente. Note que uma mesma regra
pode potencialmente vir a ser aplicada em vrios pontos distintos do grafo do
sistema, bastando para isso que seu lado esquerdo aparea em mais que um
lugar do grafo ao mesmo tempo. Sendo assim, no h impedimentos para que
vrias aplicaes ocorram simultaneamente. Note como vrias aplicaes de
regra simultneas so equivalentes a vrios comandos sendo executados ao
mesmo tempo. Ou seja, aplicaes de regras so naturalmente atividades que
descrevem sistemas concorrentes.
Para que uma regra seja aplicada, ento, preciso encontrar uma ocorrn-
cia do lado esquerdo da regra no grafo que representa o sistema. Encontrar
uma ocorrncia significa achar um mapeamento total entre dois grafos, que
formalmente expresso por um morfismo de grafos.
429
Ferreira e Ribeiro
a objeto, mas interessante apontar que este um problema que pode ser
resolvido de forma eficiente.
Note-se que, pela definio de ocorrncia, dois vrtices distintos podem ser
identificados pelo morfismo. Essa identificao faz sentido, porque um objeto
pode ter uma referncia a si prprio ou enviar a si mesmo como parmetro
de uma mensagem para outro objeto. No entanto, no faz sentido identificar
dois atributos diferentes como sendo o mesmo atributo ou duas mensagens
distintas como sendo a mesma mensagem, ento a funo componente do
morfismo que mapeia arcos deve ser injetora.
O morfismo de ocorrncia tambm exige que elementos que so preser-
vados pela regra no possam ser identificados com elementos removidos por
ela. Esta restrio existe para impedir que efeitos colaterais indesejados ocor-
ram quando a regra for aplicada. Neste caso, o efeito colateral relevante a
remoo de um elemento que deveria ser preservado.
Depois de encontrada uma ocorrncia, a regra em questo pode ser apli-
cada. A idia por trs de uma aplicao de regra construir um novo grafo de
estado a partir do grafo atual. Quando existe uma ocorrncia do lado esquerdo
de uma regra para o grafo que representa o estado atual do sistema, pode-se
dividir este grafo da seguinte forma: os elementos que esto na imagem do
morfismo de ocorrncia e os que no esto. Estes ltimos so ditos pertence-
rem ao contexto da aplicao da regra (que todo o grafo tirando os elementos
que esto na imagem da ocorrncia). Os elementos que esto no contexto da
aplicao no so alterados pela aplicao da regra5 ; os elementos que per-
tencem imagem do morfismo so alterados da seguinte forma: todos os tens
mapeados tanto pela ocorrncia quanto pela regra so preservados e levados
para o novo grafo; todos os elementos que pertencem imagem da ocorrncia
mas cujas origens no pertencem ao domnio da regra (isto , no so ma-
peados pela regra) so apagados e no aparecem no novo grafo; finalmente,
todos os elementos que no pertencem imagem do morfismo da regra so
adicionados ao novo grafo, que representa ento o novo estado do sistema.
O Exemplo 8.4.1 mostrou um exemplo de aplicao de regra, antes que sua
definio formal fosse apresentada. interessante tentar mapear o exemplo
na definio formal de derivao direta, para verificar se tanto a prtica como
a teoria foram entendidas.
430
Programao Orientada a Objeto com Grafos
em dois passos:
1. Construir a derivao resultante da aplicao da regra r ocorrncia
m conforme definido em [Ehrig et al. 1996a] e exemplificado no Exem-
plo 8.4.1, conseguindo um hipergrafo H e morfismos r0 : G H e m0 :
R H;
2. para obter o grafo resultante da derivao H C = hH,tH , Ci, equipar o re-
sultado do item anterior com o morfismo de tipagem para os seus nodos
e arcos dado abaixo:
para todo v VH , tH (v) = u tG (r0 1 (v)) tR (m0 1 (v)) ,
para todo e EH |attr , tH (e) = u tG (r0 1 (e)) tR (m0 1 (e)) ,
para todo e EH |msg , tH (e) = e0 , onde e0 msgC (tH (tarH (e))) e
e0 vE u [tG (r0 1 (e)) tR (m0 1 (e))].
A tupla hH C , r0 , m0 i o grafo orientado a objeto completo resultante da aplicao
da regra r ocorrncia m. Uma derivao direta do grafo GC para o grafo H C
r,m
sob a regra r e ocorrncia m denotado por GC H C .
Uma derivao de uma regra sobre uma ocorrncia provoca o colapso dos
elementos que so simultaneamente mapeados pela regra e pela ocorrncia,
enquanto copia o restante dos elementos provenientes do contexto e do lado
direito da regra. At aqui, esta definio idntica da abordagem algbrica
para gramticas de grafos. A diferena fundamental encontra-se na tipagem
dos elementos do grafo resultante.
Na abordagem tradicional, que usa morfismo de grafos tipados, os tipos
devem ser preservados pelo morfismo. Na abordagem aqui apresentada, as
relaes subjacentes que devem ser preservadas. Isso quer dizer que ele-
mentos de tipos diferentes podem ser mapeados pelo morfismo de ocorrncia
(o que, como j foi visto, implementa o polimorfismo de subclasses), ento
tem-se que decidir qual o tipo do elemento em questo no grafo resultante.
Note que no grafo resultante de uma aplicao de regra sob uma determi-
nada ocorrncia, cada elementos (nodo ou arco) pertence a uma das seguintes
trs situaes distintas: (i) o elemento pertence imagem da ocorrncia e
preservado pela aplicao da regra; (ii) o elementos no pertence imagem
da ocorrncia, e neste caso dito pertencer ao contexto da aplicao da regra;
(iii) o elemento foi criado pela aplicao da regra. Se o elemento vem do con-
texto ou do lado direito da regra, ento o seu tipo meramente copiado, visto
que o elemento em questo no est na imagem nem da ocorrncia nem da
regra. Para os elementos preservados pela regra, o tipo resultante o maior
limitante inferior (Definio 8.2.12) com respeito relao pertinente (herana
ou sobrescrita) entre os tipos dos elementos que esto na imagem do morfismo
e da regra sob o mesmo elemento no lado esquerdo desta e que so mape-
ados pelos morfismos m0 e r0 para o mesmo elementos do grafo resultante. A
431
Ferreira e Ribeiro
432
Programao Orientada a Objeto com Grafos
433
Ferreira e Ribeiro
434
Programao Orientada a Objeto com Grafos
435
Ferreira e Ribeiro
436
Programao Orientada a Objeto com Grafos
437
Ferreira e Ribeiro
respectivamente) que ele deve apanhar para poder comer. Note que um fil-
sofo no pode pegar qualquer garfo da mesa, somente os que esto prximos
a ele; um garfo (classe Fork ) tem um dono, que pertence classe ForkHolder
e, pela relao de herana, classe Table ou classe Philosopher. Como
todos os hiperarcos do grafo possuem somente um nodo de origem e um de
destino, eles sero representados como arcos comuns. O quadrado preto da
notao utilizada at agora ser descartado para facilitar a leitura.
As mensagens que aparecem na Figura 8.14 correspondem s aes que
os objetos podem receber durante a execuo do programa. Um Fork pode ser
adquirido por um Philosopher, e liberado por um Philosopher para uma Table
(mensagens acquire e release, respectivamente). Um Philosopher pode estar
pensando (thinking), comendo (eating), receber a mensagem eat, que faz com
que ele comece a tentar comer, pegando os garfos de que precisa pra isso, ou
receber a mensagem got, que o notifica que um Fork foi apreendido.
438
Programao Orientada a Objeto com Grafos
439
Ferreira e Ribeiro
440
Programao Orientada a Objeto com Grafos
dereada a um filsofo para ser aplicada. Note que existem cinco ocorrncias
possveis desta regra no grafo inicial.
fcil construir uma computao que leve a uma situao de bloqueio:
basta que uma regra StopThinking (Figura 8.16) seja aplicada em cada um
dos cinco filsofos ao redor da mesa. Neste caso, todos eles estariam re-
cebendo a mensagem eat. Se a todos os filsofos for aplicada ento a regra
1stFork (Figura 8.16), ser enviada uma mensagem acquire a todos os garfos
da mesa (que correspondem exatamente aos garfos do lado esquerdo de cada
filsofo). Como todos os garfos esto inicialmente sobre a mesa, existe uma
ocorrncia para a aplicao da regra AcquireFork (Figura 8.15) em todas as
mensagens geradas. Todos os garfos tero agora um filsofo como dono, e to-
dos os filsofos sero notificados com a mensagem got, gerada pela aplicao
da regra anterior. Todos os filsofos tentaro conseguir um segundo garfo para
comear a comer, a regra 2ndFork pode ser aplicada a todos eles, enviando
agora uma mensagem acquire aos garfos do lado direito dos filsofos. A partir
da, nenhuma outra computao possvel. Todos os garfos esto alocados
para algum filsofo, que no devolve o garfo mesa enquanto no conseguir
comer. No h maneira das mensagens acquire poderem ser consumidas, e
uma situao de bloqueio est estabelecida.
Note que esta computao especfica leva a uma situao de bloqueio em-
bora muitas outras possam no levar. Sendo assim, esse modelo no correto,
pois a propriedade de que sempre que um filsofo desejar comer ele o conse-
guir no futuro no verdadeira.
441
Ferreira e Ribeiro
442
Programao Orientada a Objeto com Grafos
443
Ferreira e Ribeiro
444
Programao Orientada a Objeto com Grafos
objeto que fez a pergunta (passado como parmetro da mensagem free?), si-
nalizando que ele no est livre. Quando um garfo recebe a mensagem ok, a
regra FirstForkAcq sempre pode ser aplicada (note que a ocorrncia sem-
pre vai existir, visto que o garfo j foi alocado para um filsofo) e a nica ao
notificar o filsofo que pediu o garfo e que ainda no tinha sido notificado sobre
isso. Se a mensagem recebida for nok, contudo, tempos uma possvel situao
de bloqueio no horizonte. Neste caso, a regra FirstForkAgain aplicada, o
objeto Fork volta a pertencer mesa, e a mensagem que deu origem a todo
o processo, acqFirst enviada novamente ao garfo, com os parmetros ori-
ginais, reiniciando o processo. A nica alterao que necessria fazer nas
regras da classe Philosopher (apresentadas originalmente na Figura 8.16)
na regra PhilFirstFork, que ao invs de enviar a mensagem acquire agora
deve enviar a mensagem acqFirst, que d conta da verificao do estado do
garfo esquerdo do filsofo da esquerda do que est enviando a mensagem. A
regra alterada para a classe Philosopher est descrita na Figura 8.20.
O grafo inicial do problema tambm alterado, de maneira que cada garfo
conhea o garfo que deve ser investigado. O esquema inicial da gramtica
definida nesta seo apresentado na Figura 8.21.
Note que esta soluo no bloqueia o filsofo, que continua sempre ten-
tando pegar o garfo. Esta soluo apresentada, apesar de tornar impossvel
a existncia de bloqueios, permite postergaes indefinidas. Seja a seguinte
situao (de acordo com o grafo inicial apresentado na Figura 8.21): a men-
sagem thinking inicialmente enviada ao filsofo Hegel consumida pela apli-
cao da regra StopThinking, que envia uma mensagem eat para o mesmo
filsofo. Esta mensagem consumida ento pela nova regra Phil1stFork
(Figura 8.20), que produz a mensagem acqFirst que enviada ao garfo do
lado esquerdo de Hegel, Fork3. Como o atributo owner de Fork3 tem como
tipo Table, a regra Acquire1stFork pode ser aplicada. Com a aplicao
desta regra, o atributo owner de Fork3 passa a apontar para Hegel e en-
viada uma mensagem free? ao garfo Fork4. Como Fork4 tem seu o atri-
buto owner apontando para um objeto de tipo Table, existe uma ocorrncia
para a regra ForkFree e esta pode ento ser aplicada. A aplicao da regra
ForkFree sobre o garfo Fork4 envia uma mensagem ok para o garfo Fork3
que foi passado como parmetro da mensagem free?. Neste momento, a re-
445
Ferreira e Ribeiro
8.6. Concluses
Gramticas de grafos orientados a objeto representam um formalismo para
especificao de modelos de sistemas ou programas orientados a objeto. O for-
malismo em questo consiste em uma extenso da abordagem single-pushout
para gramticas de grafos com vistas a incorporar as principais caractersticas
do paradigma de orientao a objeto, nomeadamente: herana, polimorfismo,
encapsulamento e ocluso da informao.
Hipergrafos rotulados denominados grafos de classes so as estruturas
usadas para representar a hierarquia de classes em um sistema orientado a
objeto. Nodos representam classes, hiperarcos representam mensagens (m-
446
Programao Orientada a Objeto com Grafos
447
Ferreira e Ribeiro
Referncias
[Arajo Jr. and Sawyer 1998] Arajo Jr., J. and Sawyer, P. (1998). Integrating
object-oriented analysis and formal specification. Journal of the Brazilian
Computer Society, 5(1).
[Baresi and Pezz 2000] Baresi, L. and Pezz, M. (2000). Can graph gram-
mars make formal methods more human? In Workshop on Graph Transfor-
mation and Visual Modeling Techniques, pages 387394, Geneva (Switzer-
land).
[Barnes 1998] Barnes, J. (1998). Programming in Ada 95. Addison-Wesley
Professional, 2nd edition. 720p.
[Bergstra et al. 1989] Bergstra, J. A., Heering, J., and Klint, P. (1989). Algebraic
Specification. ACM Press, New York.
448
Programao Orientada a Objeto com Grafos
[Booch et al. 1999] Booch, G., Rumbaugh, J., and Jacobson, I. (1999). The
Unified Modeling Language User Guide. The Addison-Wesley Object Tech-
nology Series. Addison-Wesley, Reading.
[Breu 1991] Breu, R. (1991). Algebraic Specification Techniques in Object Ori-
ented Programming Environments, volume 562 of Lecture Notes in Computer
Science. Springer-Verlag, Berlin.
[Campione et al. 2000] Campione, M., Walrath, K., and Huml, A. (2000). The
Java(TM) Tutorial. Addison-Wesley, Upper Saddle River, 3rd edition.
[Cardelli and Wegner 1985] Cardelli, L. and Wegner, P. (1985). On understan-
ding types, data abstraction and polymorphism. ACM Computing Surveys,
17(4):471522.
[Clark and Taernlund 1982] Clark, K. L. and Taernlund, S.-A. (1982). Logic pro-
gramming. Academic Press, London. 366p.
[Clarke et al. 1999] Clarke, E. M., Grumberg, O., and Peled, D. A. (1999). Mo-
del Checking. MIT Press, Cambridge, MA. 387p.
[Cook 1990] Cook, W. R. (1990). Object-oriented programming versus abstract
data type. In de Bakker, J. W., de Roever, W. P., and Rozemberg, G., editors,
Foundations of Object-Oriented Languages, volume 489 of Lecture Notes in
Computer Science, pages 151178. Springer, Berlin.
[Cook et al. 1989] Cook, W. R., Hill, W. L., and Canning, P. S. (1989). Inhe-
ritance is not subtyping. In 17th Annual ACM Symposium on Principles of
Programming Languages, POPL, pages 125135. New York: ACM Press.
[Corradini et al. 1996] Corradini, A., Montanari, U., and Rossi, F. (1996). Graph
processes. Fundamentae Informatica, 26(3-4):241265.
[CSK CORPORATION 2005] CSK CORPORATION (2005). The
VDM++ Language. CSK Corporation. Available at
<http://www.vdmbook.com/langmanpp_a4_001.pdf>. Visited in May,
2005.
[Dijkstra 1965] Dijkstra, E. W. (1965). Solution to a problem in concurrent pro-
gramming control. Communications of the ACM, 8(9):569.
[Dotti et al. 2003] Dotti, F. L., Foss, L., Ribeiro, L., and Santos, O. M. (2003).
Verification of object-based distributed systems. In Najm, E., Nestmann, U.,
and Stevens, P., editors, International Conference on Formal Methods for
Open Object-Based Distributed Systems, FMOODS, volume 2884 of Lecture
Notes in Computer Science, pages 261275, Paris. Berlin: Springer-Verlag.
[Ehrig et al. 1996a] Ehrig, H., Heckel, R., Korff, M., Lwe, M., Ribeiro, L., Wag-
ner, A., and Corradini, A. (1996a). Algebraic approaches to graph transforma-
tion. Part II: single-pushout approach and comparison with double pushout
approach. In Ehrig, H., Kreowski, H.-J., Montanari, U., and Rozemberg, G.,
editors, Handbook of Graph Grammars and Computing by Graph Transfor-
mation, volume 1, chapter 4, pages 247312. World Scientific, Singapore.
449
Ferreira e Ribeiro
[Ehrig et al. 1996b] Ehrig, H., Kreowski, H.-J., Montanari, U., and Rozemberg,
G. (1996b). Handbook of Graph Grammars and Computing by Graph Trans-
formation, volume 1 (Foundations). World Scientific, Singapore.
[Ehrig and Lwe 1993] Ehrig, H. and Lwe, M. (1993). Parallel and distributed
derivations in the single-pushout approach. Theoretical Computer Science,
109:123143.
[Ferreira 2005] Ferreira, A. P. L. (2005). Object-Oriented Graph Grammars.
PhD thesis, Universidade Federal do Rio Grande do Sul, Porto Alegre.
[Ferreira and Ribeiro 2003] Ferreira, A. P. L. and Ribeiro, L. (2003). Towards
object-oriented graphs and grammars. In Najm, E., Nestmann, U., and
Stevens, P., editors, International Conference on Formal Methods for Open
Object-Based Distributed Systems, FMOODS, volume 2884 of Lecture Notes
in Computer Science, pages 1631, Paris. Berlin: Springer-Verlag.
[Ferreira and Ribeiro 2005] Ferreira, A. P. L. and Ribeiro, L. (2005). A graph-
based semantics for object-oriented programming constructs. Electronic No-
tes in Theoretical Computer Science, 122:89104.
[Fitting 1996] Fitting, M. (1996). First-order logic and automated theorem pro-
ving. Springer, New York, 2nd edition.
[Fitzgerald et al. 2005] Fitzgerald, J., Larsen, P. G., Mukherjee, P., Plat, N., and
Verhoef, M. (2005). Validated Designs for Object-oriented Systems. Springer,
New York.
[Gadducci 1996] Gadducci, F. (1996). On the Algebraic Approach to Concur-
rent Term Rewriting. PhD Thesis, Dipartimento di Informatica, Universit di
Pisa, Pisa, Italy.
[Garey and Johnson 1999] Garey, M. R. and Johnson, D. S. (1999). Computers
and intractability: a guide to the theory of NP-completeness. W. H. Freeman,
New York.
[Goguen and Malcom 1996] Goguen, J. A. and Malcom, G. (1996). Algebraic
semantics of imperative programs. MIT Press, London.
[Holzmann 1997] Holzmann, G. J. (1997). The model checker SPIN. IEEE
Transactions on Software Engineering, 23(5):117.
[Hopcroft 1969] Hopcroft, J. E. (1969). Formal languages and their relation to
automata. Addison-Wesley, Reading.
[Hopcroft et al. 2001] Hopcroft, J. E., Motwani, R., and Ullman, J. D. (2001). In-
troduction to automata theory, languages, and computation. Addison-Wesley,
Boston, 2nd edition.
[Huth and Ryan 2000] Huth, M. R. A. and Ryan, M. D. (2000). Logic in Compu-
ter Science: Modelling and reasoning about systems. Cambridge University
Press, Cambridge.
450
Programao Orientada a Objeto com Grafos
451
Ferreira e Ribeiro
452