• Aucun résultat trouvé

TRIBUNA LLIURE

Dans le document a ¡escola!! per cata (Page 23-26)

Um modelo M é um objeto definido como uma quádrupla conforme a eq. (15).

M = (nameM, nameMM, I, descriptori) (15)

Em que:

 nameM  + é uma cadeia não-vazia que representa o nome do modelo. O

conjunto  é suposto ser o mesmo daquele apresentado no contexto dos metamodelos;

 nameMM  + é uma cadeia não-vazia que representa o nome do metamodelo

alvo pretendido. Diferentemente de outros formalismos apresentados, cujas definições de modelo fazem referência direta (hard reference) ao objeto que representa seu metamodelo, aqui o metamodelo correspondente é apenas referenciado pelo seu nome como uma cadeia de símbolos (soft reference). Isso permite que um modelo M exista mesmo sem um metamodelo, já que a localização do objeto do metamodelo correspondente ao nome nameMM é um

problema à parte, a ser atribuído a alguma função. Enquanto existe sem metamodelo, o modelo carece de uma interpretação, já que a semântica de um modelo está atrelada à semântica das metaclasses de seu metamodelo. Entretanto, a existência de um modelo de maneira independente permite maior facilidade na implementação de ferramentas nas quais um mesmo modelo pode ser interpretado de diferentes formas quando enxergados sob o

93 contexto de diferentes metamodelos, ou sob o contexto de diferentes versões do mesmo metamodelo que evolui com o tempo;

 I = {i1, ..., ia} é o conjunto finito, eventualmente vazio, de instâncias ou

elementos do modelo. Será utilizada a nomenclatura instância ou elemento indistintamente no texto, mas optou-se pela letra I para não haver ambiguidades com o conjunto E de enumerações do metamodelo. O número de instâncias no conjunto é dado por a = | I |, em que | I | é a cardinalidade de I;

 descriptori é uma função que mapeia cada instância ij  I em seu descritor,

que é dado por uma tripla composta por um nome identificador único, o nome do tipo base e um conjunto de slots, a ser detalhado e exemplificado a seguir.

Cada instância ij  I, com 1  j  a possui um tipo base (base type), conforme

definido anteriormente na seção 4.2, que corresponde a uma metaclasse do metamodelo alvo.

Para preservar a definição de modelo independente de qualquer metamodelo, ou seja, sem fazer referência direta a conjuntos ou objetos externos a M (com exceção do conjunto de símbolos  que é universal), uma instância ij é mapeada a uma tripla

ordenada descritiva conforme a eq. (16):

descriptori(ij) = (instancenamej, metaclassnamej, Sj) (16)

Em que:

 instancenamej  + é uma cadeia não-vazia que representa o nome da

instância. Esse nome deve ser único para as instâncias do conjunto I e funciona como identificador da instância no modelo;

 metaclassnamej  + é uma cadeia não-vazia que representa o nome da

94 interpretação de algum metamodelo específico, é tarefa de alguma função retornar o objeto correspondente à metaclasse a partir desse nome;

 Sj = {sj1, ..., sjb} é o conjunto finito, eventualmente vazio, de slots de dados.

Cada slot sjx representa um valor atribuído a alguma propriedade efetiva da

metaclasse tipo base para a instância em questão ij. Recordando, as

propriedades efetivas de uma metaclasse são as definidas por ela mesma mais aquelas definidas por suas supermetaclasses, transitivamente, conforme as eqs. (5) e (7). O número de slots no conjunto Sj é dado por b = |Sj|.

Cada slot sjx deve referenciar a propriedade efetiva à qual corresponde, bem como

indicar o valor que o modelo carrega para ela. Ou seja, um slot é um objeto definido pelo par da eq. (17).

sjx = (propertynamejx, valjx) (17)

Em que:

 propertynamejx  + é uma cadeia não-vazia que representa o nome da

propriedade efetiva do tipo base ao qual o slot sij se refere. Não podem

ocorrer dois slots sjx e sjy  Sj tais que propertynamejx = propertynamejy, ou

seja, só pode haver no máximo um slot por propriedade efetiva na mesma instância. Quando o modelo é contextualizado sob a interpretação de algum metamodelo específico, é tarefa de alguma função retornar o objeto correspondente à propriedade a partir desse nome;

 valjx  (*  2I é o valor que o slot sjx carrega, atribuído à propriedade

identificada por propertynamejx, tal que #  .

É fornecida a seguir uma explicação mais detalhada para valjx, buscando melhor

compreensão do significado da expressão que determina o conjunto ao qual ele pertence.

95 O termo valjx se trata do valor atribuído à propriedade de nome propertynamejx para

a instância do modelo ij. A propriedade referenciada por propertynamejx está definida

na metaclasse referenciada por metaclassnamej (ou em alguma de suas

supermetaclasses) no metamodelo correspondente. A propriedade tem um tipo alvo, que pode ser uma enumeração ou metaclasse. Além disso, essa propriedade tem uma multiplicidade, que define os limites inferior e superior da quantidade de valores que pode conter. Sendo assim, valjx representa um valor de enumeração (ou uma

lista deles, se a propriedade tiver multiplicidade não unitária), ou então uma instância do modelo que tem uma metaclasse como tipo (ou um conjunto de instâncias, se a multiplicidade for não unitária), não necessariamente tipo base. Isso determina que valjx  (*  2I, conforme detalhado nos parágrafos seguintes.

Como a definição de modelo é construída de modo que eles existam independentemente de metamodelo, embora enfatizando que a interpretação do modelo requer obrigatoriamente um metamodelo, então nota-se que o modelo não tem “conhecimento” sobre os valores de enumerações que podem ser referenciados. Dessa forma, deve-se ter uma convenção geral para codificar valores de enumerações que, sob determinada interpretação, podem ser convertidos nos valores de fato da enumeração correspondente. Esse fato é similar ao caso das máquinas de Turing universais. Uma máquina de Turing é capaz de operar sobre uma cadeia cujos símbolos pertencem a um alfabeto de fita. Uma máquina de Turing universal emula outra máquina de Turing, e para isso existe uma convenção para codificar máquinas de Turing como sequencias de símbolos, que por sua vez servem como entradas para as máquinas de Turing universais (SIPSER, 2007). Cada sequência desse tipo, quando sozinha, é apenas uma cadeia de símbolos. Porém, quando interpretada à luz da convenção, pode ser entendida como uma máquina de Turing e até mesmo convertida em sua representação formal usual. Os valores de qualquer enumeração são representados por uma cadeia de símbolos. Por exemplo, o conjunto dos booleanos ℬ = {true, false} possui dois valores atômicos. As cadeias “true” e “false”, por sua vez, são representações textuais para esses valores. Para o conjunto dos números naturais ℕ, também tem- se a representação usual na forma de dígitos decimais utilizando cadeias sobre o alfabeto {“0”, “1”, ..., ”9”}, no qual cada dígito está representado entre aspas para explicitar que se tratam dos símbolos, e não dos números de 0 a 9.

96 Como os valores de cada enumeração sempre podem ser codificados na forma de cadeias de símbolos, resta então determinar uma codificação para listas, afinal as propriedades podem ter multiplicidade não unitária. Para isso, é introduzido um símbolo especial # não pertencente a , que serve como separador. Por exemplo, para codificar uma lista de três números inteiros composta por 52, 68 e 327, é utilizada a cadeia “52#68#327”. Dessa forma, valjx  (  {#})* para enumerações.

Convenientemente, define-se uma função auxiliar específica para cada metamodelo MM, denominada decodeMM, capaz de decodificar uma cadeia na sequência de

valores de enumeração que representa, de modo que:

decodeMM: (  {#})*  L1*  L2*  ...  L|E|* (18)

Sendo |E| o número de enumerações do metamodelo MM e, recordando, Lj o

conjunto dos valores permitidos para a enumeração ej  E. Lj* é o fecho transitivo e

reflexivo de L, representando o conjunto de todas as listas que podem ser formadas pelos valores de L, com um número arbitrário de elementos. A função decodeMM

volta a ser utilizada mais adiante, na seção 4.9, dentro do tópico sobre conformidade de modelos.

Por outro lado, se o tipo da propriedade referenciada por propertynamejx for uma

metaclasse, então valjx deve ser alguma instância existente no modelo e, portanto,

pertencente ao conjunto I. Entretanto, como a multiplicidade pode ser não unitária, então valjx pode carregar um subconjunto das instâncias, inclusive o conjunto vazio.

No caso de multiplicidade unitária, então obrigatoriamente valjx deve ser um conjunto

unitário. Sendo assim, então valjx  2I para instâncias de metaclasses. Observa-se

que a mesma instância não pode aparecer duas vezes dentro de valjx, ao contrário

do caso das enumerações, em que o mesmo valor pode aparecer mais de uma vez na lista, tal como no exemplo codificado pela cadeia “52#68#52#327”.

Conclui-se então que, no caso geral, valjx  (*  2I, lembrando que #  .

O valor do slot também tem seu equivalente no formalismo definido por Alanen e Porres (2008). Entretanto, suas definições não incluem as enumerações, permitindo apenas instâncias como valores para os slots.

97 Assim como se definiram os operadores =c e =e na seção 4.2 para simplificar a

notação e tornar implícitas as funções descriptorc e descriptore, também se define

aqui de maneira análoga o operador =i que torna implícita a função descriptor i.

Dans le document a ¡escola!! per cata (Page 23-26)

Documents relatifs