Какова цель абстрактных подписей без полей в сплаве?

#alloy

Вопрос:

Я часто вижу, как моделисты используют абстрактные подписи без полей в своих моделях. Абстрактные подписи обычно имеют расширения подсигналов, но не имеют полей. Например, рассмотрим следующую модель из книги Джексона о сплаве:

 abstract sig A {}
sig A1 extends A {}
sig A2 extends A {}
 

Без полей, как используется A после объявления? В чем смысл создания абстрактного и как бы модель была ограничена по-другому, если бы A не была абстрактной?

Ответ №1:

Вы правы в том, что наибольшее значение для абстрактного сига имеет то, что у него есть поле. А поскольку в сплаве есть союзы, вы можете писать A1 A2 вместо A . Но даже если это не так, есть преимущества: объявив A как abstract sig, я могу упростить изменение своей модели. Если бы я добавил новый сигнал A3 , мне пришлось бы заменить A1 A2 его на A1 A2 A3 , но с абстрактным сигналом это все равно A . Это также дает мне место для добавления поля позже, и это делает спецификации короче. И это позволяет мне дать ему простор; если бы я только имел A1 и A2 , Мне пришлось бы установить их области действия отдельно, но установка области действия A до 5 (скажем) позволяет анализатору распределять атомы в любом соотношении между A1 и A2 . И в визуализации я могу применить настройки к явным образом.