Объектная модель предметной области

системы управления

описание

 

Авторы-разработчики

Романенко Владимир Витальевич, rvv@siblss.ru

Соковиков Игорь Георгиевич, sig@siblss.ru

Лицензия

Продукт распространяется на условиях лицензии GNU FDL v1.3.

При использовании ссылка на авторов обязательна.

Философия и преимущества

В любом виде деятельности – предпринимательской, общественной или социальной – присутствует управление этой деятельностью. Управление деятельностью состоит из объектов (то, чем управляют), субъектов (кто управляет) и взаимодействия между ними (как управляют).

Для быстрой и унифицированной автоматизации управленческих процессов с помощью специального программного обеспечения разработана объектная модель предметной области или Доменная Объектная Модель Предприятия (Enterprise Domain Object Model), EDOM .

Описываемая модель использует объектно-ориентированный подход при классификации и учёте объектов управления.

Реализация модели на прикладном уровне даёт высокую скорость внедрения за счёт унификации объектов управления и использования шаблонных моделей.

Объектная модель быстро и легко адаптируется под текущие процессы и задачи, позволяя одновременно производить изменения в системе, направленные на повышение как общей эффективности, так и отдельных частей системы управления.

Изменения в любой части модели происходят бесшовно и могут не затрагивать другие части. Это приводит к тому, что изменения в модель вносятся быстро и без коллизий.

Использование модели даёт возможность лёгкой кастомизации «под себя» в процессе внедрения и эксплуатации, позволяя уделить больше времени на отладку бизнес-процессов и упрощая сам процесс отладки.

Модель легко интегрируется со сторонними информационными системами на уровне файлов. Стандартный формат данных для обмена – JSON.

При использовании с цифровыми регламентами сильно снижает стоимость владения и затраты на внесение изменений в кастомизированные решения.

Даёт реальную и эффективную возможность управления ресурсами предприятия.

Сущности модели

В модели присутствуют четыре основные сущности:

  1. Классы объектов (class)
  2. Атрибуты классов (attributes)
  3. Объекты с наследуемыми атрибутами (objects)
  4. Ограничения (restrictions)

ЗАМЕЧАНИЕ: ограничения можно считать атрибутами класса или объекта, но они преднамеренно выделены в отдельную сущность в связи с отличной от других атрибутов внутренней структурой.

Классы объектов.

Условное объединение каких-либо объектов управления в конкретной прикладной системе управления.

Наиболее часто используемые (встречающиеся в практике) классы:

1. Товары (Goods)

2. Документы (Documents)

3. Организации (Organizations)

4. Оборудование (Equipments)

5. Сотрудники (Employees)

Пример: товары на складе магазина объединяются в класс «Товары» несмотря на то, что они могут очень сильно отличаться друг от друга по своим характеристикам.

В модели присутствует специальный мета-класс Единицы измерения (unit). В нём содержатся только описания атрибутов объектов, которые используются в других классах. Ссылка на атрибуты класса «Единицы измерения» указывается в поле unit соответствующего атрибута объекта другого класса.

Атрибуты классов объектов.

Атрибуты разделены на три основных класса (не путать с классами объектов):

  1. Свойства (properties) – все атрибуты, описывающие признаки объекта, принадлежащего к классу: цвет, запах, длительность, скорость, прочность, размеры и т.д.
  1. Параметры (parameters) – все атрибуты объектов, которые используются для расчётов в конкретной предметной области. Например: цена, баланс, вес за единицу, цена за килограмм, длина, количество и так далее.
  1. Прочие атрибуты (others) – любые другие атрибуты, не входящие в properties и parameters, но являющиеся существенными для описания объекта класса в прикладной реализации объектной модели предметной области.

Остальные классы атрибутов являются дополнительными и могут отсутствовать в прикладной реализации. Три из них указаны ниже в разделе «Синтаксис модели», но их может быть больше.

Объекты.

Как упоминалось выше, все объекты в системе управления объединяются в классы, определяемые аналитиком.

Пример:

Всё оборудование: станки, агрегаты, машины, компьютеры, видеокамеры, инструменты относятся к классу Оборудование (Equipments).

Счета на оплату, акты, сменные задания, технологическая документация и прочие документы относятся к классу Документы (Documents).

Все товары на складе, в производстве, сырьё, полуфабрикаты, готовая продукция относятся к классу Товары (Goods) или ТМЦ (Inventories).

Объекты наследуют атрибуты класса. Наследование происходит выборочно, в зависимости от потребностей и условий прикладной системы. При наследовании атрибутов класса объектом происходит присвоение значения выбранному наследуемому атрибуту и, таким образом, фиксируется состояние объекта на момент добавления его в систему (базу данных объектов).

Состояние объекта (добавление, удаление, изменение значений атрибутов) может фиксироваться или изменяться как вручную, через пользовательский интерфейс, так и автоматически обработчиком прикладной системы.

Синтаксис модели

Классы объектов

Определение классов в схематичном варианте выглядит так:

class:

name: nameClass # имя класса на английском

alias: имяКласса # имя класса на языке страны применения

properties:

{ name: nameProperty, alias: имяСвойства }

parameters:

{ name: nameParameter, alias: имяПараметра }

others:

{ name: nameOtherAttribute, alias: имяДругогоАтрибута }

restrictions:

{ name: nameRestriction, alias: имяОграничения }

methods:

{ name: nameDomainFunction, alias: имяДоменнойФункции }

rules:

{ name: nameRule, alias: имяПравила }

Поля name и alias являются обязательными. Поле name всегда имеет значение на английском языке, поле alias имеет значение на языке страны применения модели.

ЗАМЕЧАНИЕ: Курсивом обозначены дополнительные, но необязательные классы атрибутов.

Мета-класс «Единицы измерения» (Unit) описывается упрощённой схемой

class:

name: unit

alias: ’единица измерения

properties:

{ name: nameProperty, alias: имяСвойства }

Атрибуты класса объектов

В минимальном описании атрибута класса допускаются два поля:

  1. nameназвание атрибута на английском языке
  2. aliasназвание атрибута на языке страны использования.

Пример:

{ name: height, alias: высота }

Расширенное описание атрибута класса может включать в себя дополнительные поля:

  • unitединица измерения атрибута
  • inputMaskмаска ввода значения атрибута объекта, используемая в пользовательских интерфейсах и/или обработчиках
  • другие поля в зависимости от прикладного использования модели

Пример:

{ name: height, alias: высота, unit: метр }

ВАЖНО: Атрибуты класса не содержат значений. Значения атрибутам присваиваются только при создании объектов и наследовании ими атрибутов класса.

Атрибут класса может содержать локальное ограничение, применяемое только к нему. Это исключение из правила, что атрибуты класса не содержат значений. При применении ограничения в атрибуте класса, это ограничение содержит значение и наследуется всеми объектами класса, содержащими этот атрибут.

Пример:

{ name: height, alias: толщина, maxValue: 100, minValue: 10 }

Обработчик должен проверять эти ограничения при присваивании значения атрибуту объекта.

Расширение описания атрибута производится аналитиком при реализации объектной модели в прикладном решении.

Для упрощения обработки атрибутов в прикладных обработчиках атрибуты объединяются в группы.

Типовые группы:

  • standard
  • banks # банковские реквизиты
  • messengers # используемые мессенджеры
  • legal # регистрационные данные (ИНН, ОКПД и т.д.)

Названия групп атрибутов не являются фиксированными и даже могут повторять названия групп атрибутов из мета-класса «Единицы измерения» (Unit) или определяться аналитиком для прикладной реализации объектной модели.

ЗАМЕЧАНИЕ: некоторые атрибуты могут быть отнесены как к свойствам (properties), так и к параметрам (parameters). Это зависит от прикладной реализации объектной модели предметной области. Например, завод выпускает фанеру разного типоразмера (в соответствии с возможностями используемого оборудования). Продажа осуществляется листами (штуками). В этом случае, размеры листа будут являться свойствами объекта «лист фанеры», а количество листов (на складе или в счёт-фактуре) – параметрами объекта «лист фанеры».Компания-покупатель этой фанеры использует её для производства стеллажей и ведёт учет фанеры в м2. Для неё размеры кусков фанеры становятся параметрами объекта «лист фанеры», так как для разных стеллажей используются разные размеры кусков.

Полнота модели

 

Практическое применение модели не предусматривает наличие в схеме всех возможных классов. Можно ограничиваться лишь необходимыми классами, которые объединяют все управляемые объекты. Если объект не управляется, то он не включается в класс и может участвовать в процессе управления лишь как статическая сторонняя сущность.

Класс может включать в себя и другие атрибуты, кроме перечисленных. В данной модели важно не количество атрибутов класса, а конкретный набор атрибутов.

Наименования полей в модели максимально унифицированы, но могут быть изменены, в зависимости от применяемой конвенции пространства имён в конечном обработчике.

Форма записи

 

На примере класса Оборудование

через знак # идут комментарии

 

На примере класса Организация

 

 

Форматы реализации

 

Атом записи формируется по принципу ключ=значение.

ЗАМЕЧАНИЕ: Вместо значения может быть указан массив, содержащий несколько пар ключ=значение, массив значений или ссылка на другой ключ.

Технически запись может быть реализована в любом формате, допускающем использование принципа ключ=значение.

Примеры:

в формате JSON

class«:{alias:»организация»,»others«:{«standard«:[{alias:»поставщик»,»name«:»supplier«},{alias:»клиент»,»name«:»client«},{«name«:»owner«,alias:»владелец»}]},»properties«:{«standard«:[{alias:»юридический адрес»,»name«:»govaddr«},{alias:»почтовый адрес»,»name«:»postaddr«},{alias:»электронный адрес»,»name«:»email«},{«name«:»phone«,alias:»номер телефона»},{alias:»номер факса»,»name«:»fax«}],»banks«:[{alias:»банк»,»name«:»bank«},{«name«:»BIK«,alias:»БИК банка»},{«name«:»account«,alias:»расчётный счёт»},{alias:»корреспондентский счёт»,»name«:»kor«}],»persons«:[{alias:»директор»,»name«:»chief«},{alias:»менеджер»,»name«:»manager«},{«name«:»contactPerson«,alias:»контактное лицо»}],»goverment«:[{alias:»ИНН»,»name«:»INN«},{«name«:»KPP«,alias:»КПП»},{«name«:»OGRN«,alias:»ОГРН»},{«name«:»OKPO«,alias:»ОКПО»}],»messengers«:[{aliasTelegram«,»name«:»telegram«},{aliasWeChat«,»name«:»wechat«},{aliasSkype«,»name«:»skype«},{«name«:»whatsapp«,aliasWhatsapp«}]},»name«:»organization«,»parameters«:{«monetary«:[{alias:»задолженность»,»name«:»debt«}]}}}

 

в формате YAML

# Класс Организация

class:

name: organization

alias: организация

properties:

standard:

— {name: ‘govaddr’, alias: ‘юридический адрес’}

— {name: ‘postaddr’, alias: ‘почтовый адрес’}

— {name: ‘email‘, alias: ‘электронный адрес’}

— {name: ‘phone’, alias: ‘номер телефона’}

— {name: ‘fax’, alias: ‘номер факса’}

messengers:

— {name: ‘telegram’, alias: ‘Telegram’}

— {name: ‘wechat’, alias: ‘WeChat’}

— {name: ‘skype’, alias: ‘Skype’}

— {name: ‘whatsapp’, alias: ‘Whatsapp’}

persons:

— {name: ‘chief’, alias: ‘директор’}

— {name: ‘manager’, alias: ‘менеджер’}

— {name: ‘contactPerson’, alias: ‘контактное лицо’}

legal:

— {name: ‘INN’, alias: ‘ИНН’}

— {name: ‘KPP’, alias: ‘КПП’}

— {name: ‘OGRN’, alias: ‘ОГРН’}

— {name: ‘OKPO’, alias: ‘ОКПО’}

banks:

— {name: ‘bank’, alias: ‘банк’}

— {name: ‘BIK’, alias: ‘БИК банка’}

— {name: ‘account’, alias: ‘расчётный счёт’}

— {name: ‘kor‘, alias: ‘корреспондентский счёт’}

parameters:

monetary:

— {name: ‘debt’, alias: ‘задолженность’}

others:

standard:

— {name: ‘supplier’, alias: ‘поставщик’}

— {name: ‘client’, alias: ‘клиент’}

— {name: ‘owner’, alias: ‘владелец’}

хэшмассив PERL

{class=>{alias=>’организация’,’others’=>{‘standard’=>[{alias=>’поставщик’,name=>’supplier’},{alias=>’клиент’,name’=>’client’},{name=>’owner’,alias=>’владелец’}]},properties=>{standard=>[{alias=>’юридический адрес’,name=>’govaddr’},{alias=>’почтовый адрес’,name=>’postaddr’},{alias=>’электронный адрес’,name=>’email’},{name=>’phone’,alias=>’номер телефона’},{alias=>’номер факса’,name=>’fax’}],’banks’=>[{alias=>’банк’,name=>’bank’},{name=>’BIK’,alias=>’БИК банка’},{name=>’account’,alias=>’расчётный счёт’},{alias=>’корреспондентский счёт’,name=>’kor’}],’persons’=>[{alias=>’директор’,name=>’chief’},{alias=>’менеджер’,name=>’manager’},{name=>’contactPerson’,alias=>’контактное лицо’}],’goverment’=>[{alias=>’ИНН’,name=>’INN’},{name=>’KPP’,alias=>’КПП’},{name=>’OGRN’,alias=>’ОГРН’},{name=>’OKPO’,alias=>’ОКПО’}],’messengers’=>[{alias=>’Telegram’,name=>’telegram’},{alias=>’WeChat’,name=>’wechat’},{alias=>’Skype’,name=>’skype’},{name=>’whatsapp’,alias=>’Whatsapp’}]},name=>’organization’,’parameters’=>{‘monetary’=>[{alias=>’задолженность’,name=>’debt’}]}}}

объект в JavaScript

{class:{alias:»организация»,»others»:{«standard»:[{alias:»поставщик»,name:»supplier»},{alias:»клиент»,»name»:»client»},{«name»:»owner»,alias:»владелец»}]},»properties»:{«standard»:[{alias:»юридический адрес»,»name»:»govaddr»},{alias:»почтовый адрес»,»name»:»postaddr»},{alias:»электронный адрес»,»name»:»email»},{«name»:»phone»,alias:»номер телефона»},{alias:»номер факса»,»name»:»fax»}],»banks»:[{alias:»банк»,»name»:»bank»},{«name»:»BIK»,alias:»БИК банка»},{«name»:»account»,alias:»расчётный счёт»},{alias:»корреспондентский счёт»,»name»:»kor»}],»persons»:[{alias:»директор»,»name»:»chief»},{alias:»менеджер»,»name»:»manager»},{«name»:»contactPerson»,alias:»контактное лицо»}],»goverment»:[{alias:»ИНН»,»name»:»INN»},{«name»:»KPP»,alias:»КПП»},{«name»:»OGRN»,alias:»ОГРН»},{«name»:»OKPO»,alias:»ОКПО»}],»messengers»:[{alias:»Telegram»,»name»:»telegram»},{alias:»WeChat»,»name»:»wechat»},{alias:»Skype»,»name»:»skype»},{«name»:»whatsapp»,alias:»Whatsapp»}]},»name»:»organization»,»parameters»:{«monetary»:[{alias:»задолженность»,»name»:»debt»}]}}}

словарь в Python

сlass = {alias:»организация»,»others«:{«standard«:[{alias:»поставщик»,name:»supplier«},{alias:»клиент»,name:»client«},{name:»owner«,alias:»владелец»}]},»properties«:{«standard«:[{alias:»юридический адрес»,name:»govaddr«},{alias:»почтовый адрес»,name:»postaddr«},{alias:»электронный адрес»,name:»email«},{name:»phone«,alias:»номер телефона»},{alias:»номер факса»,name:»fax«}],»banks«:[{alias:»банк»,name:»bank«},{name:»BIK«,alias:»БИК банка»},{name:»account«,alias:»расчётный счёт»},{alias:»корреспондентский счёт»,name:»kor«}],»persons«:[{alias:»директор»,name:»chief«},{alias:»менеджер»,name:»manager«},{name:»contactPerson«,alias:»контактное лицо»}],»goverment«:[{alias:»ИНН»,name:»INN«},{name:»KPP«,alias:»КПП»},{name:»OGRN«,alias:»ОГРН»},{name:»OKPO«,alias:»ОКПО»}],»messengers«:[{aliasTelegram«,name:»telegram«},{aliasWeChat«,name:»wechat«},{aliasSkype«,name:»skype«},{name:»whatsapp«,aliasWhatsapp«}]},name:»organization«,»parameters«:{«monetary«:[{alias:»задолженность»,name:»debt«}]}}

Принципиальная схема применения объектной модели с цифровыми регламентами