Changes between Initial Version and Version 1 of ru/AMF


Ignore:
Timestamp:
Dec 18, 2010, 5:54:58 PM (11 years ago)
Author:
vadim.godunko
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ru/AMF

    v1 v1  
     1Разработчики проекта используют русский язык как основной, а поэтому в этой группе страничек можно найти записки разработчиков.
     2
     3= API библиотеки моделирования =
     4
     5На сегодняшний день имеется три варианта API библиотеки моделирования. Далее приводятся все три варианта.
     6
     7== Классический ==
     8
     9Очень удобный на этапе раскрутки реализации, но не совсем отвечает предположениям современных пользователей.
     10
     11В основе лежит отказ от использования объектной ориентации. Все элементы представлены приватным типом данных вне зависимости от метакласса. Собственно именно этот вариант сейчас и используется.
     12
     13== Классический объектно-ориентированный (Ada2012) ==
     14
     15Второй классический вариант API требует поддержки компилятором стандарта Ada2012, в противном случае все интерфейсные типы придётся описать в одном пакете из-за слишком большого числа перекрёстных связей.
     16
     17Для каждого класса объявляется интерфейсный и ссылочный типы, причём для исключения шансов ошибочного использования пользователем освобождения памяти ссылочный тип объявляется как неосвобождаемый.
     18
     19{{{
     20with CMOF.Classifiers;
     21with CMOF.Elements;
     22
     23package CMOF.Classes is
     24
     25   type CMOF_Class is limited interface
     26     and CMOF.Classifiers.CMOF_Classifier;
     27
     28   type CMOF_Class_Access is access all CMOF_Class'Access;
     29   for CMOF_Class_Access'Storage_Size use 0;
     30
     31   function Get_Owner
     32    (Self : not null access CMOF_Class) return CMOF.Elements.CMOF_Element_Access;
     33}}}
     34
     35Можно предложить и альтернативную схему именования, например:
     36
     37{{{
     38with CMOF.Classifiers;
     39with CMOF.Elements;
     40
     41package CMOF.Classes is
     42
     43   type CMOF_Class_Interface is limited interface
     44     and CMOF.Classifiers.CMOF_Classifier_Interface;
     45
     46   type CMOF_Class is access all CMOF_Class_Interface'Access;
     47   for CMOF_Class'Storage_Size use 0;
     48
     49   function Get_Owner
     50    (Self : not null access CMOF_Class_Interface) return CMOF.Elements.CMOF_Element;
     51}}}
     52
     53Второй вариант уменьшает количество кода при использовании и в то же время немного "скрывает" факт использования ссылочного типа; поскольку это не является важным с точки зрения управления памятью.
     54
     55{{{
     56with CMOF.Classifiers;
     57with CMOF.Elements;
     58
     59package CMOF.Classes is
     60
     61   type CMOF_Class is interface
     62     and CMOF.Classifiers.CMOF_Classifier;
     63
     64   function Get_Owner
     65    (Self : CMOF_Class) return CMOF.Elements.CMOF_Element'Class;
     66}}}
     67
     68== Объектно-ориентированный надклассовый ==
     69
     70В этом случае используется факт особенностей внутреннего хранения данных. Поэтому не используется ссылочных типов, а вместо этого активно используются надклассовые типы. Серьёзным недостатком этого способа можно назвать весьма специфический способ написания клиентского приложения, требующий учёта того факта, что фактический тип объекта никогда не известен, а в то же время объект передаётся по значению.
     71
     72= Управление структурами данных =
     73
     74Сейчас все данные хранятся в наборе глобальных таблиц. Это достаточно для раскрутки, но недостаточно для реального использования в некоторых вариантах использования.
     75
     76== Поддержка нескольких extent-ов ==
     77
     78Понятие extent вводится в спецификации как некоторый способ группировки моделей. Может быть полезным поддержка нескольких extent-ов, в частности для реализации функций управления версиями, импорта внешних метамоделей, верификации/валидации.
     79
     80== Поддержка валидации/транзакций ==
     81
     82Валидация модели может выполняться вспомогательными компонентами (например, модулем OCL), поэтому может полезным иметь механизм транзакций с пвалидачией при фиксации изменений.
     83
     84== Поддержка версий ==
     85
     86Классический системы контроля изменений ориентированы как правило на файлы, для моделей же важнее и удобнее использовать элемент как атомарную величину. При использовании в качестве храненилища базы данных значительно упрощается отслеживание изменений, ветвей, слияний и появляется возможность реальной реализации 3-way diff. Тоже самое может быть теоретически реализовано и при использовании ориентированной на файлы системы клонтроля изменений, но требует глубокой интеграции с последней.
     87
     88== Поддержка хранения данных в реляционных базах данных ==
     89
     90Использование базы данных как локального хранилища (да и глобального тоже) может быть полезно для функций отката/наката, слияния моделей.
     91
     92== Поддержка отката/наката ==
     93
     94В соверменных графических средствах обязательным является наличие функции отката/наката сделанных изменений. Правильная реализация внутренних структур данных может значительно упростить их реализацию.