Types

Signatures

Signatures/Assinaturas são conjuntos.

Exemplos: sig Object {} sig Entry {} sig Name {}

Subset Signatures (subconjuntos)

Uma assinatura pode ser declarada como um subconjunto de mais de uma assinatura. As assinaturas do subconjunto não podem ser estendidas.

Exemplos: sig Dir in Object {} sig File in Object {}

Extension Signatures

Assinaturas de extensão indicam características adicionais ou especializações dentro desses subtipos.

Exemplos: sig Dir extends Object { contains : set Entry } sig File extends Object {} sig Root extends Dir {}

Abstract signatures

Assinaturas abstratas referem-se a características genéricas ou essenciais que definem uma categoria, sem se ater a detalhes específicos.

abstract sig Object {}

Fields

Fields/Campos são relações.

Exemplos: sig Objecto { contains : set Entry } sig Entry { refersTo : set Object, name : set Name }

Ternary Relation

Exemplo: abstract sig ****Object {} sig Dir extends Object { contents : Name -> lone ****Object }

Um diretório (Dir) tem um campo chamado "contents" que mapeia nomes (da assinatura "Name") para objetos (da assinatura "Object"). O modificador lone indica que cada nome está associado a no máximo um objeto.

Facts