СИСТЕМА И СПОСОБ УПРАВЛЕНИЯ ФУНКЦИОНАЛЬНО СВЯЗАННЫМИ ДАННЫМИ
SYSTEM AND METHOD OF MANAGING FUNCTIONALLY RELATED DATA

ОБЛАСТЬ ТЕХНИКИ
Изобретение относится к системе и способам идентификации, хранения, извлечения и преобразования информации. Более конкретно, изобретение относится к системам управления базами данных и данными вообще, а также к структуре, внутренней организации и способам взаимодействия данных в частности.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
Система управления данными вообще, и базами данных в частности, представляет собой компьютерную систему, которая позволяет пользователям однозначно идентифицировать, преобразовывать и хранить информацию в структурированном, связанном и логически целостном виде.
В основе современных методов управления данными лежит аппарат теории множеств, и в частности реляционная модель данных, предложенная Э.Ф. Коддом. Кодд показал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, известных в реляционной математике как отношение. В соответствии с реляционным методом каждая сущность предметной области представляется таблицей - условно, для более наглядного понимания. Каждый столбец такой таблицы содержит значения одного из атрибутов сущности. Каждая строка содержит все характеристики (признаки) одного из экземпляров сущности. Связи между сущностями представлены атрибутами таблиц. Для заполненных данными таблиц связи показывают, какие экземпляры одной таблицы связаны с экземплярами другой таблицы. Связь выполняется по совпадающим значениям одного или нескольких столбцов связанных таблиц. При этом реляционная мета-модель данных не содержит никаких правил и указателей, связывающих одно значение с другим, и, соответственно, информационное наполнение базы данных возможно только одним способом, а именно - явным заданием значений атрибутов в кортежах отношений.
Это последнее обстоятельство приводит к тому, что в современных системах управления данными, так или иначе основанных на реляционной (или производной от нее объектно-реляционной) модели, реализация внутренних правил предметной области, функционально или событийно связывающих между собой значения, производные от атрибутов сущностей, осуществляется за пределами собственно системы управления данными, с использованием самых различных технологических приемов, вычислительных сред и языков программирования. Тем самым реализация всей совокупности бизнес-правил прикладной программы становится самостоятельной задачей, требующей постоянного контроля за сохранением логической целостности и согласованности данных, что в свою очередь порождает самые различные ошибки, и в том числе тривиальные ошибки программирования. Взаимная изоляция данных от правил их формирования, и возникающая вследствие этого необходимость использования традиционных форм программирования, в свою очередь приводящая к написанию и отладке большого объема программных кодов, существенно усложняет разработку приложений.
Задачей настоящего изобретения является устранение указанных недостатков, а также получения целого ряда дополнительных преимуществ.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
Предметом изобретения является создание прогрессивных способов внутренней организации и взаимодействия управляющих структур системы управления данными, которые полностью, или по крайней мере частично, устраняют недостатки, присущие реляционной модели данных, а также обеспечивают ряд дополнительных преимуществ. Настоящее изобретение делает возможным создание прикладных программ, в которых вся алгоритмическая часть интегрирована непосредственно в структуру базы данных, и тем самым преодолевает ограничения предшествующего уровня техники.
В первом своем аспекте настоящее изобретение дополняет общепринятую Модель данных новым фундаментальным членом, и описывает систему управления данными, в которой декларация причинно-следственной зависимости информационных значений реализуется непосредственно на уровне мета-описания данных при помощи унифицированных абстрактных соединителей.
Во втором аспекте настоящего изобретения раскрывается декларативный способ управления данными, использующий реализованные экземплярами унифицированной структуры данных абстрактные соединители для описания причинно-следственной зависимости информационных значений, и реализующий эту зависимость в соответствии с декларациями таким образом, что полная совокупность значений сохраняет свою непрерывную согласованность и логическую целостность. В третьем аспекте настоящего изобретения описывается мультипроцессорное устройство, в котором распределением деклараций субъектов метаданных и производных от них значений системы управления данными в локальной памяти множества независимых процессоров, достигается высокий уровень параллелизма исполнения при реализации причинно-следственной зависимости информационных значений.
Помимо этого настоящее изобретение раскрывает простой и производительный способ унифицированной идентификации всех субъектов метаданных, обеспечивающий компактность представления адреса субъекта и высокую скорость доступа к субъекту.
Важной особенностью всех аспектов настоящего изобретения является полностью декларативный характер их внутренней реализации, который позволяет создавать прикладные программы не прибегая к написанию программных кодов в любой их форме, и тем самым делает эти программы полностью кросс-платформенными. При этом стоит упомянуть, что настоящее изобретение имеет практическую программную реализацию и использование в платформе быстрой разработки приложений Visual Data. Эти и другие особенности и преимущества настоящего изобретения будут очевидны из следующего описания и формулы изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ
Из предшествующего уровня техники известно, что на физическом уровне представления любую предметную область автоматизации можно рассматривать как конечное множество конкретных информационных значений, согласованно изменяющих во времени свое состояние под воздействием событий окружающей среды. В системе управления данными каждое такое информационное значение является экземпляром, производным от частной характеристики некоторой понятийной сущности. При этом отдельное значение не может существовать самостоятельно, и инкапсулировано в кортеж значений (уникально идентифицируемый Объект данных - в объектном представлении, или отношение в форме записи Таблицы - в реляционном), который является экземпляром, производным от описания некоторой понятийной сущности уровня абстракции.
Ранее Э.Ф. Кодд доказал, что на уровне абстрактного восприятия любая предметная область однозначно описывается совокупностью формализованных деклараций сущностей, именуемых Классом (в объектном представлении), или Таблицей (в реляционном), а также входящих в их состав собственных характеристик (далее, Атрибутов). Совокупность Классов и Атрибутов образует мета-описание предметной области, иначе называемое Модель приложения.
В Модели приложения каждый Класс характеризуется по меньшей мере именем соответствующей понятийной сущности и кортежем Атрибутов. Кортеж атрибутов класса однозначно определяет внутреннюю структуру хранения информационных значений, одинаковую для всех экземпляров данного класса, что обуславливает неизменность порядка следования атрибутов в кортеже. Каждый Атрибут класса характеризуется по меньшей мере именем характеристики сущности, а также функциональным типом и формой хранения производного от него значения. Отдельные понятийные сущности предметной области связаны между собой количественным отношением, и эта связь характеризует меру количественного взаимодействия производных экземпляров этих сущностей. В каждом из связанных между собой таким образом Классов, эта связь представлена Атрибутом отношения. В свою очередь, декларации Классов и Атрибутов, описывающие отдельные понятийные сущности и их частные характеристики, являются экземплярами, производными от формализованных абстрактных сущностей мета-Класс и мета-Атрибут - понятий более высокого уровня абстракции, образующих Мета-модель системы управления данными, и являющимися ее фундаментальными членами. Таким образом, в системе управления данными можно выделить три уровня: 1) уровень Мета-модели самой системы; 2) уровень Модели приложения; и 3) уровень конечных информационных значений. При этом важно отметить, что все перечисленные субъекты первых двух уровней, представляют собой некоторое декларативное описание, существующее в машиночитаемом виде, пригодном для долговременного хранения. Система управления данными использует декларативные субъекты для создания на их основе производных экземпляров последующего уровня, и делает это унифицированным образом. Стоит обратить внимание, что субъекты уровня Модели приложения принято обобщенно именовать субъектами метаданных.
Для целей настоящего изобретения важно обратить внимание на существование причинно-следственной зависимости, связывающей между собой отдельные информационные значения предметной области. Для примера рассмотрим строку Счета (Invoice), в которой значение Сумма (Total) является произведением значений-аргументов: Количество (Quantity) и Цена (Price). Изменение значения любого из аргументов приводит к немедленному изменению значения Сумма (Total), при этом все три значения являются перманентно согласованными. То есть, на физическом уровне зависимость действует таким образом, что все изменения связанных значений происходят синхронно и согласовано, без возможности выделить некоторое промежуточное состояние.
Для решения задачи согласованной связанности значений, настоящее изобретение вводит абстрактное понятие универсального Соединителя. На уровне Модели приложения абстрактный Соединитель попарно связывает Атрибуты класса, обеспечивая тем самым возможность обмена значениями между ними. Образованная таким образом декларация зависимости рассматривается вычислительной средой системы управления данными как единичное правило предметной области, согласно которому зависимый Атрибут формирует свой экземпляр значения. Такие единичные правила можно условно-бесконечно комбинировать, при соблюдении единственного ограничения, которое запрещает образование циклически замкнутых последовательностей. При этом система управления данными, независимо от совокупной протяженности и разветвленности сложившейся системы зависимостей, способна обеспечить синхронность и согласованность результатов за счет инкапсуляции всех промежуточных состояний.
Прямое использование Соединителя в форме декларации некоторой сущности Модели приложений не совсем удобно с точки зрения практической реализации его взаимодействия со связываемыми атрибутами. Поэтому, в Модели приложения Соединитель используется исключительно в абстрактной его форме, обеспечивающей удобство наглядного восприятия связи атрибутов. Для декларативного же представления Соединителя в Модели данных используется понятие Сокета (он же - коннектор, или разъем). Пара концевых коннекторов являются неотъемлемой частью любого соединителя, и с их помощью Соединитель взаимодействует со связываемыми сущностями. Стоит обратить внимание, что в объектной Модели приложения, при реализации количественного взаимодействия понятийных сущностей, аналогичную роль таких коннекторов выполняют Атрибуты отношения, содержащие в своих характеристиках полное описание свойств отношения. Аналогичным образом, каждый из двух Сокетов соединителя содержит полное описание характеристик декларируемой связи со своей стороны, и этой информации вполне достаточно для организации полноценного двустороннего взаимодействия Атрибутов.
Таким образом, на уровне Модели приложения, при декларировании причинно-следственной зависимости двух Атрибутов, каждый из них получает в свое владение Сокет, который в свою очередь является экземпляром, производным от абстрактной сущности мета-Сокет.
Важно подчеркнуть, что настоящее изобретение дополняет стандартную и общепринятую Мета-модель системы управления данными третьим фундаментальным членом - формализованным абстрактным мета-Сокетом. Мета-Сокет связан с мета-Атрибутом отношением ребенок-родитель, точно так же, как мета-Атрибут связан с мета-Классом. Представляя собой такое же формализованное описание, как и мета-Класс или мета-Атрибут, мета-Сокет включает в себя декларативное описание характеристик экземпляров Сокета, которые будут подробно рассмотрены ниже.
Единичный Сокет характеризуется по меньшей мере тремя аспектами: адресным, функциональным и событийным, каждый из которых включает в себя соответствующий набор декларативных характеристик.
Адресный аспект позволяет Сокету однозначно идентифицировать в Модели приложения оппозитный Сокет общего для обоих сокетов Соединителя. Следует учитывать, что Сокет не обладает собственной прямой (глобальной) идентифицируемостью, так как локализован в кортеже Атрибута, который в свою очередь локализован в кортеже Класса. В столь сложно-структурированной многоуровневой Модели приложения, для реализации связи Сокетов необходимо использовать максимально простую, компактную и универсальную систему организации внутренней идентификации всех субъектов Модели. При этом, для полноты картины следует вспомнить, что в объектном представлении Атрибут может определять не только унитарную, но и перечислимую форму хранения производных от него информационных значений. Перечислимая форма предполагает, что Атрибут включает в состав своих характеристик, помимо собственного наименования, кортеж пользовательских наименований элементов перечисления, а производное от него значение представлено массивом значений. Таким образом, полный адресный аспект Сокета должен включать в себя идентификаторы Класса и Атрибута класса, которым принадлежит оппозитный Сокет, а также идентификатор оппозитного Сокета в кортеже Атрибута, и идентификатор элемента перечислимой формы Атрибута. Обратим внимание, что в Модели приложения отношение родитель-ребенок; выражается наличием у Класса кортежа Атрибутов, и наличием у Атрибута кортежа Сокетов. Аналогичным образом, Классы Модели приложения также образуют кортеж, владельцем которого является служебная абстрактная сущность, именуемая супер-Классом. Причем стоит также обратить внимание, что упомянутый кортеж супер-Класса может быть образован как непосредственно Классами - экземплярами мета-Класса, так и Атрибутами отношения с супер-Классом, которое (Отношение) автоматически декларирует каждый Класс при своем создании. Логически, каждый упомянутый кортеж содержит линейный набор однородных (в пределах кортежа) экземпляров, и в самом общем случае представляет собой динамически расширяемый массив. В таком массиве для размещения каждого нового экземпляра автоматически создается новая ячейка, что позволяет каждый экземпляр кортежа однозначно и уникально идентифицировать индексом элемента кортежа. Эта существенная особенность позволяет выразить полный адресный аспект Сокета простой форматной записью, включающей в себя четыре индекса упомянутых ранее субъектов. Указанный способ унифицированной индексной идентификации всех разнородных экземпляров Модели приложения, производных от мета-Классов, мета-Атрибутов и мета-Сокетов системы управления данными, является важным аспектом настоящего изобретения. Этот способ позволяет не только упростить и унифицировать декларативную адресацию, но и существенно ускорить реализацию методов доступа к требуемому экземпляру - субъекту Модели приложения. Кроме того, индексный способ идентификации обеспечивает полную независимость Модели приложения от используемых пользовательских наименований Классов и Атрибутов, которые, как правило, непосредственно заимствуются у понятийных сущностей предметной области, и их характеристик.
При анализе адресного аспекта Сокета следует обратить внимание на следующую важную особенность использования входящего в его состав индекса элемента перечисления. При передаче значения через абстрактный Соединитель, упомянутый индекс может быть не инициализирован в двух случаях: 1) целевой Атрибут не использует перечислимую форму хранения; 2) Сокет адресует сразу все элементы перечислимой формы. В последнем случае абстрактный Соединитель используется одновременно и одинаковым образом применительно ко всем элементам целевого Атрибута, реализуя тем самым групповую зависимость. Если же абстрактный Соединитель связывает два атрибута с перечислимой формой хранения, и упомянутый индекс адресного аспекта обоих Сокетов не инициализирован, то реализация групповой зависимости осуществляется исключительно попарно, то есть через общий Соединитель между собой взаимодействуют только элементы Атрибута с одинаковым индексом.
Функциональный аспект Сокета позволяет управлять модификацией значения, и включает в себя в том числе идентификатор метода вычисления и флаг инверсии. В вычислительной среде системы управления данными с каждым функциональным типом значения сопоставлен предопределенный набор вычислительных методов (функционалов), потенциально применимых к значениям данного типа. При этом каждый метод может быть уникально идентифицирован, и в то числе числовым идентификатором-индексом. В приведенном ранее примере (Total = Quantity × Price), где атрибут Total связан одним соединителем с атрибутом Quantity, а другим - с атрибутом Price, таким методом является мультипликативная арифметическая операция.
Стоит обратить внимание на тот факт, что абстрактным соединителем можно связать два Атрибута только в том случае, если их функциональные типы совпадают, или если в системе управления данными существует по меньшей мере один предопределенный метод, позволяющий преобразовать значение из функционального типа одного Атрибута в функциональный тип другого.
Флаг инверсии значения (Inverse) используется в элементарных арифметических и логических операциях как для изменения знака значения-аргумента, так и для изменения характера операции, и тем самым позволяет сократить номенклатуру предопределенных методов системы управления данными. Так если флаг инверсии установлен Сокету, локализованному в кортеже атрибута-аргумента, то тем самым он изменяет знак значения-аргумента на противоположный, при этом соединитель не изменяет передаваемое значение-аргумент, а только передает вместе с ним значение флага инверсии. Если же флаг инверсии установлен Сокету, локализованному в кортеже целевого атрибута, то такой флаг изменяет характер операции. Например, таким образом можно мультипликативное умножение преобразовать в операцию деления на значение-аргумент.
Событийный аспект Сокета позволяет управлять передачей значения, и характеризуется флагами Set и Get, разрешающими Атрибуту использование Сокета в операциях извлечения и рассылки значения.
В вычислительной среде системы управления данными механизм использования абстрактного соединителя, образованного парой Сокетов, основан на двух базовых методах, предоставляемых Мета-Сокетом. На уровне действующих Атрибутов этот механизм реализуется следующим образом:
1) Метод Set предоставляется Сокетом для передачи значения оппозитному Сокету целевого Атрибута соединителя. При любом изменении своего производного значения (независимо от причины и источника изменения) Атрибут последовательно просматривает свой кортеж Сокетов, и для каждого сокета, у которого установлен флаг Set, вызывает метод Сокета Set, не заботясь о последствиях.
2) Метод Get предоставляется Сокетом для запроса значения у оппозитного Сокета. Независимо от источника события, принуждающего к формированию производного значения, Атрибут последовательно просматривает свой кортеж Сокетов, и для каждого Сокета, обладающего установленным флагом Get, вызывает одноименный метод. Метод Get возвращает Атрибуту из соединителя значение, к которому Атрибут для получения результирующего значения применяет вычислительный метод, назначенный Атрибуту, с учетом функционального аспекта Сокета.
Для пояснения важного аспекта настоящего изобретения следует обратить внимание, что во всех современных системах управления данными, и в том числе основанных на реляционном представлении, Атрибут оперирует значением, существующим в явной хранимой форме. При этом методы Атрибута используются только для того, чтобы извлечь хранимое значение, или сохранить значение, сформированное где-то вовне, приведя его к удобной для хранения форме.
С введением в Модель приложения абстрактных соединителей, Атрибут получает способ вычисления производного значения "на лету" непосредственно в Модели данных, в том числе в момент обращения к Атрибуту. Это обстоятельство приводит к следующим важным последствиям:
1) Если хранимое производное значение Атрибута к моменту обращения к нему еще не было инициализировано (не сформировалось), то, при наличии в его кортеже Get-Сокетов, Атрибут обладает способом сформировать и сохранить это значение непосредственно в момент обращения к нему. Иначе, при наличии хранимого значения, Атрибут вернет его, не обращаясь к кортежу Сокетов;
2) Как следствие, появляется возможность ввести в Мета-модель системы управления данными новый событийный метод Атрибута, именуемый Пересчет значения (Recalculate), позволяющий "привязать" формирование производного значения к внешнему событию. Метод Recalculate, применимый при наличии в кортеже Атрибута Get-Сокетов, принуждает Атрибут сформировать хранимое значение заново, опросом кортежа сокетов;
3) Появляется возможность объявить Атрибут динамическим, для чего к характеристикам атрибута добавляется свойство-флаг Dynamic. Динамический (с установленным флагом Dynamic) Атрибут, будучи полноправным Атрибутом в кортеже Класса, в принципе не образует производного значения в хранимой форме, и, соответственно, при обращении к нему за значением не пытается извлечь значение из системы хранения. Вместо этого, при каждом обращении к нему, динамический Атрибут формирует возвращаемое производное значение опросом своих Get-Сокетов. Естественно, прямым следствием такого поведения является тот факт, что динамический Атрибут не может принять значение извне. В приведенном рацее примере (Total = Quantity × Price), атрибут Total вполне можно объявить динамическим, при необходимости. Не динамический Атрибут, в целях отличить его в описании от динамического, далее именуется статическим Атрибутом.
Введение в Модель данных события Recalculate и динамических свойств Атрибута является важным аспектом настоящего изобретения, качественно расширяющим общую функциональность системы управления данными. Также, при этом открывается возможность неявно управлять общей физической производительностью системы, комбинируя статический и динамический способы формирования Атрибутами своих производных значений.
Причинно-следственный характер декларируемой зависимости Атрибутов предполагает, что абстрактный соединитель обладает такими характеристиками как направление передачи значения и активность действия зависимости. Обе эти характеристики самым естественным образом определяются состоянием флагов Set и Get в обоих Сокетах соединителя.
Флаг Get определяет направление передачи значения опосредственно. Если Сокету установлен флаг Get, то Атрибут может (по запросу) получить значение из данного соединителя. Флаг Get устанавливается непосредственно при создании соединителя в соответствующем направлению передачи значения Сокете целевого Атрибута. Флаг Set определяет и активность соединителя, и направление передачи. Если Сокету установлен флаг Set, то соединитель активно передает любое изменение значения Атрибута, которому принадлежит Set-Сокет, в адрес оппозитного Атрибута. Если же флаг Set не установлен ни в одном из Сокетов, то соединитель не обладает собственной активностью, и передаст значение только по запросу. Обратим внимание, что в кортеже Сокетов динамического Атрибута по определению не может быть ни одного Сокета с установленным флагом Set.
Существует частный случай, когда флаг Set может быть установлен в обоих Сокетах соединителя. В приведенном ранее примере (Total = Quantity × Price), если атрибут Total является статическим, а оба соединителя (Price ->Total и Quantity ->Total) активны (флаг Set установлен сокетам атрибутов-аргументов Quantity и Price), то атрибут Total очевидным образом не может получить произвольное значение извне, так как тем самым нарушится декларированное соединителями общее правило жесткой взаимной зависимости значений трех атрибутов, строго поддерживаемое вычислительной средой. В этом случае, разрешить прием внешнего значения в Total можно только при наличии возможности осуществить реверс изменения результирующего значения произведения в один из двух атрибутов-аргументов (например, в Price), то есть принудительно изменить значение аргумента таким образом, чтобы оно соответствовало введенному значению результата.
Для декларации возможности реверса значения Total, достаточно в его сокете соединителя с требуемым аргументом установить флаг Set. Получив значение извне, целевой Атрибут определяет реверсивный Сокет (как обладающий одновременно установленными флагами Get и Set), используя декларации функционала и остальных Get-сокетов "вычисляет" значение аргумента, удовлетворяющее их правилам, и передает это значение в реверсивный сокет.
При этом следует обратить внимание на следующую общую важную особенность реализации вычислительной среды системы управления данными: при поступлении Атрибуту (или извлечении Атрибутом) значения из Сокета, этот Сокет исключается из всех последующих опросов (Get) и рассылок (Set) с целью как оптимизации процесса исполнения, так и блокировки нежелательных обратных связей.
Помимо прочего, в целях настоящего изобретения следует обратить внимание на такую особенность взаимодействия атрибутов через абстрактный соединитель, как изолированность исполнения. В самом общем случае Атрибутом реализуется следующий цикл исполнения: 1) получив входящее сообщение, включающее в себя в том числе указатель на целевой объект данных, в адрес одного из своих Get-сокетов, Атрибут 2) формирует новое производное значение, и при этом возможно дополнительным опросом своих Get-сокетов, и 3) инициирует свои Set-сокеты на отправку исходящего сообщения. То есть Атрибут, выполняя функции "фабрики" по созданию производных значений, или предоставляя значение по запросу, логически изолирован, и не располагает какой-либо информацией об окружающей его среде, взаимодействие с которой он осуществляет путем приема/отправки информационных сообщений через Сокеты. При этом функции передаточного звена в процессе обмена сообщениями возлагаются на вычислительную среду системы управления данными, которая независимо от протяженности цепочек зависимостей Атрибутов, реализует все циклы исполнения последовательно, до полного их успешного завершения. Соответственно, общее время реакции такой "последовательной" системы управления данными на внешнее по отношению к ней событие находится в прямой зависимости от суммарного количества вовлеченных в процесс Атрибутов и их Соединителей, и может быть достаточно значимым.
Вместе с тем, можно достаточно легко представить себе вычислительную среду, в которой некоторый исходный Атрибут со всеми своими декларациями, включая декларации Сокетов, и производными значениями, занимает локальную память отдельного процессора, связанного прямыми программно-аппаратными каналами передачи данных с другими такими же независимыми процессорами, в локальной памяти которых размещены Атрибуты, связанные абстрактными соединителями с исходным Атрибутом. В такой условно-параллельной мультипроцессорной вычислительной среде, общее время реакции системы на внешнее событие будет приблизительно равным такому же времени в последовательной вычислительной среде только в том достаточно редком случае, когда система зависимостей имеет вид строго последовательной цепочки. Во всех остальных случаях, для "разветвленной" системы зависимостей общее время реакции мультипроцессорной системы будет очевидно меньше за счет параллельного исполнения в отдельных "ветвях".
В мультипроцессорной вычислительной среде, общее время реакции системы на единичное событие пользователя определяется протяженностью наиболее длинной последовательной цепи зависимостей из всех существующих, без учета ответвлений от нее. Помимо этого, в отличие от чисто последовательной, мультипроцессорная вычислительная может одновременно начать параллельную обработку произвольного количества внешних событий, адресованных различным атрибутам, что существенно сокращает общее время реакции системы управления данными. Обыкновенно, для организации исполнения в программ в мульти-поточных вычислительных средах, приходится предпринимать определенные усилия для принудительного распараллеливания бизнес-процессов внутри программы.
Модель приложения, образованная совокупностью Атрибутов, связанных абстрактными соединителями, в которой функциональность каждого Атрибута изолирована, а декларации локализованы в отдельной памяти соответствующего процесса, автоматически является "параллельной" с точки зрения организации процесса исполнения в мультипроцессорной среде. Естественно, при размещении деклараций Атрибутов и производных значений в памяти процессоров таким образом, чтобы связь Атрибутов осуществлялась через каналы связи процессов.
В целях настоящего изобретения важно подчеркнуть, что различные аспекты абстрактного Соединителя двух атрибутов могут быть поставлены в причинно-следственную зависимость от некоторого третьего Атрибута, производное значение которого динамически изменяет функциональное поведение зависимого соединителя. Такая зависимость в Модели приложения также декларируется и реализуется абстрактным Соединителем, который связывает один из Сокетов зависимого соединителя с управляющим Атрибутом. Этот управляющий Соединитель по сути является дополнением к основному зависимому Соединителю, который в этом случае рассматривается в качестве базового. Соответственно далее, для удобства изложения, зависимый Соединитель, его Сокеты и связываемые Атрибуты будут именоваться "базовыми", а управляющий Соединитель, его Сокеты и управляющий Атрибут будут дополнительно выделяться приставкой "-условие".
Взаимодействие базового Сокета и Сокета-условие, унифицированно локализованных в общем кортеже базового Атрибута, можно реализовать различным образом, и в том числе через систему взаимных указателей друг на друга. Но более предпочтительным является вариант, при котором Сокет управляющего соединителя целиком инкапсулирован в тело базового Сокета. Преимуществом такой реализации является ряд следующих обстоятельств: 1) оппозитный Сокет, локализованный в кортеже Атрибута-условия, получает возможность адресовать не свой оппозитный сокет, а непосредственно базовый Сокет, которому и транслирует свои события; 2) свойства управляющего соединителя полностью определяются свойствами сокета в кортеже Атрибута-условия, а инкапсулированный оппозитный сокет сохраняет только свою адресную часть; 3) фиксированный по назначению характер инкапсуляции. Базовый сокет перманентно допускает всего три позиционно-фиксированных инкапсуляции управляющих сокетов, при этом каждая инкапсуляция соответствует одному конкретному аспекту функциональности базового соединителя, а именно: блокирующему, адресному и контекстному, которые будут подробно рассмотрены ниже. В целях настоящего изобретения важно подчеркнуть, что указанные инкапсуляции, и управляемые ими аспекты могут быть задействованы одновременно, и в любых комбинациях их взаимной актуальности.
Инкапсуляция считается актуальной, если содержит в себе адресную часть оппозитного сокета управляющего соединителя. При исполнении вызванного относительно него метода Set или Get, базовый Сокет проверяет все три инкапсуляции, и для каждой из актуальных выполняет соответствующее ее функциональному аспекту действие.
Следует отметить, что введение причинно-следственной зависимости Соединителя в Модель приложения, дополняет исполнительную среду системы управления данными, представленную методами Set и Get, двумя новыми методами: Unset и Reset. Соответственно, в унифицированную структуру Сокета (мета-Сокета) добавляется два одноименных флага, разрешающих вызов соответствующего метода. Флаги Unset и Reset на практике используются применительно только к управляющим Сокетам, а разрешаемые ими методы по сути являются событиями, извещающими базовый соединитель об изменениях значения управляющего атрибута: Reset сигнализирует об инициализации управляющего значения; Unset - о его де-инициализации. При этом собственно управляющее значение не передается, базовый Сокет извлекает его при необходимости самостоятельно. Механизм использования методов Unset и Reset достаточно прост: в процессе изменения своего производного значения, перед собственно его изменением, статический Атрибут последовательно просматривает свой кортеж Сокетов, и для каждого Сокета, у которого установлен флаг Unset, вызывает одноименный метод. После фиксации нового значения Атрибут снова последовательно просматривает свой кортеж Сокетов, и для каждого Сокета, у которого установлен флаг Reset, снова вызывает одноименный метод. Тем самым адресуемый базовый Соединитель инициируется сначала (Unset) на исполнение действия, обратного своему прямому воздействию на зависимое значение (аналогично де-инициализации собственного значения, при исходном управляющем контекстном значении), а затем (Reset) снова инициируется, но уже на прямое действие с новым управляющим значением. В свою очередь базовый Атрибут, обладающий инкапсуляцией, извлекает управляющее значение, используя метод Get, и адресную составляющую этой инкапсуляции.
Рассмотрим самый простой в понимании аспект управления - блокировку передаточной функции соединителя. Управляющий соединитель с блокирующим аспектом создается, если в качестве управляющего Атрибута-условия выбран» атрибут логического типа. При наличии в декларациях базового сокета актуальной блокирующей инкапсуляции, во всех методах этого сокета перед их исполнением осуществляется запрос состояния управляющего атрибута (конкретного производного значения). Если вызов Get в адрес Атрибута-условия вернет значение True, то исполнение текущего метода базового сокета будет продолжено, иначе (False) - прекращено.
Стоит обратить внимание, что самостоятельный сокет управляющего соединителя, локализованный в кортеже Атрибута-условия, в свою очередь может рассматриваться в качестве целевого субъекта блокирующего управления. Это обстоятельство позволяет создавать управляющие цепочки блокировок произвольной протяженности.
Наличие в свойствах абстрактного соединителя адресного аспекта управления, позволяет связывать абстрактными соединителями атрибуты разных классов. По ходу изложения до настоящего момента неявно подразумевалось, что связанные абстрактными соединителями атрибуты принадлежат одному классу, и, соответственно, их производные значения взаимодействуют в пределах одного производного экземпляра Класса (объекта данных). Если же абстрактный соединитель связывает атрибуты разных классов, то для получения доступа к целевому значению, принадлежащему другому объекту данных, в параметрическую часть методов сокета следует (наряду с идентификаторам целевых субъектов метаданных: Класс, Атрибут [Элемент], Сокет) включать и идентификатор целевого объекта. Идентификатор стороннего объекта данных может присутствовать в исходном объекте только как значение, производное от атрибута отношения. А значит, взаимная связь Атрибутов разных классов возможна, если только эти атрибуты локализованы в классах, между которыми действует отношение количественного взаимодействия (отношение Классов), и должна учитывать характер этого отношения. При этом, реализация упомянутой связи в форме абстрактного соединителя должна использовать атрибуты отношения в качестве Управляющих атрибутов этого соединителя. Таким образом, при создании абстрактного соединителя атрибутов через отношение классов этих атрибутов, для одного или обоих базовых сокетов соединителя автоматически создается управляющий соединитель с соответствующим атрибутом отношения в качестве управляющего атрибута, с включением этого соединителя в адресный аспект базового сокета. При наличии в декларациях базового сокета актуального адресного включения (инкапсуляции), во всех методах Set или Get этого сокета перед их исполнением осуществляется запрос значения управляющего атрибута отношения. Если вызов Get в адрес управляющего атрибута вернет пустое значение (то есть, декларированное в классах отношение, не реализовано на уровне объектов), то исполнение текущего метода базового сокета будет прекращено. Иначе, полученное значение будет включено в параметрическую часть метода, обращенного к оппозитному сокету, в качестве идентификатора целевого объекта данных.
Стоит обратить внимание, что прямой зависимостью, выраженной абстрактным соединителем, можно связать в том числе и атрибуты отношения, локализованные в разных классах.
В качестве наглядного примера такой зависимости рассмотрим следующую предметную область (в форме утверждения): "Сотрудник числится в Департаменте конкретной Компании". Если все три класса (Сотрудник, Департамент, Компания) связаны между собой очевидным отношением "многие-к-одному" (Департамент -> Компания, Сотрудник -> Департамент, Сотрудник -> Компания), то можно декларировать не менее очевидную ссылочную зависимость, которая связывает между собой атрибуты отношения Департамент_Компания и Сотрудник_Компания, и реализуется через отношение Сотрудник -> Департамент. Понятийная очевидность заключается в том, что Сотрудник, в числе прочих своих характеристик, хранит указатель на свою принадлежность к конкретной Компании, причем именно к той (и только к той), в состав которой входит Департамент, в котором он числится. Если по какой-либо причине весь Департамент целиком перейдет под юрисдикцию другой компании, то под воздействием прямого соединителя каждый Сотрудник автоматически получит у Департамента новое значение указателя на Компанию. То есть, при наличии указанной декларации, Модель данных будет способна автоматически соблюдать ссылочную целостность и непротиворечивость, причем непосредственно на уровне хранимых данных. При этом, побочным эффектом указанной ссылочной зависимости будет являться автоматическое ограничение, осуществляемое Моделью данных при выборе Сотрудником другого Департамента в той же Компании (например, при переводе на другую работу). Из полного множества всех Департаментов всех Компаний, Модель данных предоставит к выбору только Департаменты той Компании, в которой числится Сотрудник.
Помимо рассмотренной ссылочной зависимости, существует еще по меньшей мере несколько различных вариантов зависимостей, возникающих в системе классов при различной комбинации меж-классовых отношений, и требующих соблюдения правил согласованности и взаимной непротиворечивости значений атрибутов отношений. Рассмотрение всех этих зависимостей выходит за рамки настоящего описания, но в целях настоящего изобретения важно подчеркнуть, что все они без исключения также реализуются при помощи абстрактных Соединителей.
Взаимодействие значений через асимметричное отношение классов "многие-к-одному" подразумевает в том числе, что множество значений на стороне "многие-" образует единственное значение на стороне "-один". Такое объединение возможно только при использовании некоторых упомянутых ранее методов, предопределенных на уровне Мета-модели данных, и именуемых функционал атрибута. Например, в классе Счет (Invoice) общая Сумма счета (Total) представляет собой обобщение множества частных сумм (Total) отдельных Записей этого счета (Invoice record), которое реализуется соединителем, связывающим атрибуты Total в классах Invoice и Invoice Record, и соответствующим функционалом атрибута Total в классе Invoice, который выполняет суммирование входящего множества значений.
Наличие в свойствах абстрактного соединителя контекстного аспекта управления позволяет Модели приложения формировать комплексные значения атрибутов, представляющие собой список записей в формате "ключ-значение" (key-value). Такой список упорядочен по значению ключа (key), что позволяет при помощи ключа извлекать из него отдельные унитарные значения. Для управления списком в Мета-модели предопределен соответствующий функционал, использующий контекстно управляемый абстрактный соединитель в качестве источника значений (value) и ключей (key).
В качестве иллюстрации рассмотрим списковый атрибут Rate List в классе Валюта (Currency), который содержит список записей, образованный парами значение курса (Rate) на определенную дату (Date), производными от атрибутов, локализованных в классе День (Date). Очевидно, что для формирования такого списка атрибутом Rate List на стороне отношения "-один" (Currency), необходимо каждому значению Rate из множества на стороне отношения "многие-" (Date) сопоставить значение Date. Такое сопоставление и осуществляется управляющим соединителем, с использованием контекстного аспекта управления.
При наличии в декларациях базового сокета актуального контекстного включения (инкапсуляции), во всех методах Set и Get этого сокета перед их исполнением осуществляется запрос значения управляющего Атрибута. Если вызов Get в адрес Атрибута-контекста вернет пустое значение (значение не инициализировано), то исполнение текущего метода базового сокета будет прекращено. Иначе, полученное значение будет включено в параметрическую часть метода, обращенного к оппозитному сокету, в качестве контекстного значения, дополняющего основное значение. Далее, управляющий списком функционал использует контекстное значение в качестве ключа для локализации требуемой записи.
Следует обратить внимание, что контекстное значение может использоваться не только для формирования списка ключ-значение, но также для извлечения значения из такого списка, которое осуществляется аналогичным соединителем с управляющим контекстом.
В целях настоящего изобретения важно подчеркнуть, что абстрактный соединитель используется не только для описания и реализации причинно-следственной зависимостей предметной области, но и для решения чисто внутренних утилитарных задач самой системы управления данными. К таким задачам относятся управление ссылочной симметрией и соблюдение ссылочной целостности.
В парадигме объектного представления данных, соблюдение ссылочной целостности жестко обеспечивается полной симметрией реализации отношения классов, которая выражается в том, что каждому значению ссылки (прямой) в исходном объекте данных на другой (оппозитный) объект, соответствует значение ссылки (обратной) в оппозитном объекте на исходный объект. Соответственно, при декларации количественного взаимодействия (Отношения) двух классов, в каждом из этих классов создается атрибут отношения, типизированный идентификатором оппозитного класса отношения. При этом ссылочное значение, производное от атрибута отношения, фактически является идентификатором целевого объекта.
Логично предположить, что оба атрибута отношения должны быть связаны активным абстрактным соединителем, именуемым далее ссылочным, который и будет обеспечивать ссылочную целостность и симметрию отношения непосредственно на уровне Модели приложения. Но такому связыванию, реализуемому непосредственно, препятствует тот факт, что в разных классах атрибуты общего отношения имеют разный тип значения. Для пояснения механизма реализации ссылочного соединителя следует вспомнить, что Класс в числе прочих содержит в своем кортеже служебный атрибут Self, существование которого декларировано непосредственно в мета-Классе. В конкретном Классе, экземпляре мета-Класса, атрибут Self типизируется идентификатором своего Класса, и соответственно, производным значением этого атрибута в объекте данных будет идентификатор этого объекта.
Для каждого из связанных отношением классов, тип значения атрибута Self совпадает с типом значения Атрибута отношения в оппозитном классе, что позволяет связать эти атрибуты абстрактным Соединителем (ссылочным), с использованием Атрибута отношения на стороне атрибута Self в качестве атрибута, управляющего адресным аспектом. При декларировании Отношения классов, такой ссылочный Соединитель создается автоматически, непосредственно вслед за созданием атрибутов отношения, при этом базовый Сокет, локализованный в кортеже атрибута Self, автоматически же получает дополнительный, управляющий адресным аспектом Соединитель с упомянутым Атрибутом отношения в своем классе.
В абсолютно симметричном отношении количественного типа "один-к-одному", оба атрибута отношения равноправны, поэтому ссылочный соединитель создается для каждого атрибута Self в каждом классе. Таким образом, получение атрибутом отношения ссылочного значения в любом из объектов классов, связанных отношением "один-к-одному", немедленно приводит к получению аналогичного значения оппозитным ему атрибутом отношения.
В отношении типа "многие-к-одному" наблюдается явная асимметрия реализации, которая выражается прежде всего в том, что только атрибут отношения на стороне "многие-" вправе инициировать обмен идентификаторами, так как значением атрибута отношения на стороне "-один" очевидно будет производный условно-пассивный список "обратных" ссылок. Соответственно, при создании отношения такого типа, ссылочный соединитель создается только для атрибута Self на стороне "многие-". При этом, так как упомянутый список обратных ссылок существует по общим правилам списков, и представляет собой список записей в формате "ключ-значение", управляемый унифицированным функционалом, то ссылочный соединитель автоматически дополняется еще одним управляющим соединителем, но теперь уже с контекстным аспектом управления. В качестве Атрибута для контекстного управления по умолчанию выбирается Атрибут, представляющий собой основную характеристику Класса: Наименование (Name), или Событие (Date).
Указанная асимметрия отношения "многие-к-одному" порождает терминологическую разницу: атрибут отношения на стороне "многие-" далее именуется атрибутом "прямой" ссылки, а атрибут отношения на стороне "-один" - атрибутом "обратной" ссылки. В симметричном отношении "один-к-одному", оба атрибута отношения равноправны, и фактически являются атрибутами "прямой" ссылки.
И в реляционной, и в объектной реализациях системы управления данными, для управления циклом жизни объекта данных предусмотрена характеристика сущности, значение которой указывает, актуален объект данных, или он отмечен как удаленный. Соответственно, любой Класс в числе прочих содержит в своем кортеже служебный атрибут Delete, существование которого декларировано непосредственно в мета-Классе. Если в объекте данных производное значение атрибута Delete инициализировано, то объект данных считается удаленным (неактуальным). По правилам ссылочной целостности, удаленный объект должен де-инициализировать все свои связи с другими объектами таким образом, чтобы в системе управления данными не содержалось прямых или обратных ссылок на этот объект. При этом, при наличии актуальных "обратных" ссылок на объект данных, его удаление с точки зрения предметной области и Модели приложения не считается корректным, так как при этом теряется весьма значимая информация. Например, если удалить объект Счета (Invoice), то объекты Запись счета (Invoice Record) фактически останутся изолированными. Иначе говоря, при наличии хотя-бы одного объекта Invoice Record, удаление объекта Invoice следует запретить. Вместе с тем, если обеспечить условие, при котором все объекты Invoice Record будут удалены одновременно с объектом Invoice, то удаление объекта Invoice не приведет к нарушению ссылочной целостности.
Рассмотрим подробнее механизмы реализации указанных причинно-следственных зависимостей при помощи абстрактных соединителей Модели приложения. Очевидно, что атрибут Delete обладает абстрактными соединителями с каждым атрибутом отношения в своем классе, причем эти соединители создаются автоматически непосредственно при декларации отношения классов.
Рассмотренный ранее ссылочный Соединитель, на стороне атрибута Self (прямая ссылка) дополнен управляющим соединителем с атрибутом Delete с блокирующим аспектом (таким образом, актуальны все три управляющих аспекта базового сокета ссылочного соединителя, локализованного в кортеже атрибута Self). Этот управляющий соединитель обладает перманентно установленным флагом Inverse, и при инициализации значения атрибута Delete блокирует передаточную функцию базового соединителя, что в свою очередь вызывает де-инициализацию связи объектов, с аннулированием соответствующего значения в обратной ссылке объекта данных оппозитного класса (значение прямой ссылки в исходном объекте при этом сохраняется). В отношении типа "один-к-одному", в котором атрибуты отношения симметрично связаны ссылочными соединителями, а атрибут прямой ссылки одновременно является и атрибутом обратной ссылки, в результате инициализации значения Delete будут аннулированы оба ссылочных значения. Тем самым, при любом типе отношения классов, удаляемый объект автоматически аннулирует все внешние указатели на себя в других объектах данных.
Помимо этого, атрибут Delete обладает пассивными абстрактными соединителями с каждым атрибутом обратной ссылки в своем классе. Наличие такого соединителя позволяет функционалу атрибута проинспектировать состояние значений обратных ссылок, и, при наличии хотя бы одного актуального значения, перманентно блокировать процедуру удаления объекта данных.
По условиям предметной области возможно потребуется удалить объект данных вместе со всем множеством ссылающихся на него объектов. Например, удалить объект Invoice вместе со всеми его объектами Invoice Record. В этом случае необходимо создать абстрактный Соединитель, связывающий атрибуты Delete в классах Invoice и Invoice Record, с установленным на стороне Invoice флагом Set. Этот соединитель в классе Invoice будет автоматически дополнен управляющим Соединителем с атрибутом обратной ссылки (Invoice Record), и при этом де-активирован (сброшен флаг Get) упомянутый выше Соединитель, связывающий Delete и Invoice Record. Тогда, при инициализации значения атрибута Delete в объекте класса Invoice, он использует имеющийся список обратных ссылок Invoice Record для инициализации Delete во всех объектах Invoice Record, ссылающихся на исходный объект Invoice.
Таким образом, как было показано выше, декларация функциональной причинно-следственной зависимости значений при помощи унифицированных экземпляров Сокетов, образующих абстрактные Соединители атрибутов различного типа и назначения, является универсальным способом реализации самого сложного функционального поведения, осуществляемой комбинацией очень простых методов и деклараций. Притом, что показательно - не только функциональности, обусловленной потребностями предметной области автоматизации, но и служебной, сугубо внутренней функциональности самой системы управления данными.
Так как все Сокеты являются простыми декларативными экземплярами мета-Сокета, а все методы исполнения являются системными и предопределенными, то тем самым целевую функциональность произвольного уровня сложности можно реализовать без написания программных кодов, простым созданием абстрактных Соединителей и установкой их флагов непосредственно на уровне Модели приложения, причем указанные действия вполне осуществимы методами прямого визуального конструирования.
Важно подчеркнуть, что в настоящем описании были рассмотрены наиболее значимые аспекты абстрактных Соединителей и Сокетов, и наиболее значимое их поведение. Вместе с тем различные модификации упомянутого могут быть сделаны и без отступления от сущности и объема настоящего изобретения, который ограничивается только формулой изобретения и ее эквивалентами.