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

#1111. Описываем модель

Это всё - "новое прочтение" вот чего - Пример использования шаблонов генерации.

Предыдущая серия была тут - Описываем мета-модель. Технические детали

Там мы описали мета-модель.

Теперь опишем одну из конкретных моделей:

https://bitbucket.org/lulinalex/mindstream/src/6b9f39b15ecc6d83dbcd4219dc2c214f562c7297/Examples/Scripts/CodeGeneration/CodeGen12.ms.script?at=B284

USES
 metaMACRO.ms.dict
;

Test CodeGen
 // %SUMMARY это мета-информация, которая позволяет привязывать документацию
 // к элементам кода. Эта документация доступна потом из скриптовой машины.
 %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>> UMLCategory
 %SUMMARY '
 Категория в терминах UML
 ' 
 ; // %SUMMARY 
; // UMLCategory

<<@meta>> UMLClass
 %SUMMARY '
 Класс в терминах UML
 ' 
 ; // %SUMMARY 
; // UMLClass

meta-model-end

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

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

concrete-model-begin 'Модель шаблонов'
 'Тут будем определять аксиоматику конкретной модели.
  Пока - "модели шаблонов". 
  А потом вынесем её 
  в отдельный словарь.
 '

<<UMLCategory>> Project
 %SUMMARY '
 Наверное у нас при разработке встречаются проекты.
 Так вот Project это стереотип, который описывает наши проекты.
 '
 ; // %SUMMARY
; // Project

<<UMLCategory>> Library
 %SUMMARY '
 Наверное у нас при разработке встречаются проектные библиотеки.
 Так вот Library это стереотип, который описывает наши библиотеки.
 '
 ; // %SUMMARY
; // Library

<<UMLCategory>> Programm
 %SUMMARY '
 Наверное у нас при разработке встречаются программы.
 Так вот Programm это стереотип, который описывает наши программы.
 '
 ; // %SUMMARY
; // Programm

<<UMLClass>> Class
 %SUMMARY '
 Наверное у нас при разработке встречаются проектные классы.
 Так вот Class это стереотип, который описывает наши проектные классы.
 '
 ; // %SUMMARY
; // Class

// Могут ли Library вкладываться в Project, а Project в Library
// Или могут ли Programm вкладываться в Class, а Class в Programm
// И прочие отношения между стереотипами - мы определим несколько позже.
// Когда начнём использовать их.

model-end

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

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

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

help
// Выводим всю доступную аксиоматику в стандартное устройство вывода.
// Чисто для отладки того, что мы сейчас написали.

; // CodeGen

CodeGen

- тут мы описали стереотипы конкретной модели - Project, Library, Programm и Class.

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

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