четверг, 20 августа 2015 г.

Описываем мета-мета-модель

Предыдущая серия - Отвлечёмся на время от эмуляции объектов. Займёмся мета-моделью и кодогенерацией

Добавил несколько "украшательств".

https://bitbucket.org/lulinalex/mindstream/src/87bd8df93e76bb4d154a75cf9652e8263c251050/Examples/Scripts/CodeGeneration/CodeGen3.ms.script?at=B284

Вот что получилось:

USES
 metaMACRO.ms.dict
;

Test CodeGen
 // %SUMMARY это мета-информация, которая позволяет привязывать документацию
 // к элементам кода. Эта документация доступна потом из скриптовой машины.
 %SUMMARY '
 Тут будем тестировать построение сначала мета-модели, потом модели, а потом и
 кодогенерации'
 ;

// ---------------------------------------------------------------------------

meta-meta-model-begin
 'Тут будем определять аксиоматику мета-мета-модели, а потом вынесем её 
  в отдельный словарь.
 '

StereotypeStereotypeProducer meta
 %SUMMARY '
 Определяем базовый элемент мета-модели
 Тот самый который позволяет тащить всё остальное "за волосы из болота"
 Через этот примитив выводятся все остальные'
 ; // %SUMMARY 
; // meta

meta-meta-model-end

// ---------------------------------------------------------------------------

// ---------------------------------------------------------------------------

meta-model-begin
 'Тут будем определять аксиоматику мета-модели, а потом вынесем её 
  в отдельный словарь.

  Дальше будем определять понятия из UML - https://ru.wikipedia.org/wiki/UML

  Там бывают КАТЕГОРИИ и КЛАССЫ (Category и Class)

  На самом деле разница между ними - "призрачна", но раз умные дяди так решили, 
  то так тому и быть

  Вот с них и начнём:
  '

meta-model-end

// ---------------------------------------------------------------------------

USES
 CodeDump.ms.dict
 // - тут подключаем словарь CodeDump.ms.dict, чтобы "увидеть" слово DumpElement
;

@SELF DumpElement
// - тут дампим элемент CodeGen и его содержимое
//   в стандартное устройство вывода.
//   Чисто для отладки того, что мы сейчас написали.

; // CodeGen

CodeGen


Опять же - имеем некоторую "самодокументируемость" кода.

Такие слова как:

%SUMMARY
meta-meta-model-begin
meta-model-begin

О ней (самодокументируемости) и как её можно использовать - я как-нибудь позже скажу.

"Намекну" пока - "требования и тесты". UseCase, TDD и BDD.

Комментариев нет:

Отправить комментарий