В прошлой статье Моделирование конструкций. Требования к моделлеру я говорил о том, что несколько объектов, мыслимых нами как целое, существуют в нашем сознании, но не осознаются нами явно. Математики осознали это и сделали явным, введя для этого понятие множества. Я также напомнил, что понятие множество и понятие объект — аксиомы, которые невыводимы из других понятий. При этом понятие объект для нас привычно, и мы имеем достаточный опыт, чтобы работать с ними, а вот со множеством мы знакомимся в институте при изучении основ математики, и представление о них не столь очевидно. Для тех, кто ищет возможность научиться представлять множество более ясно, я рассказал, где мы можем найти хороший образ – в представлении конструкций. В этой статье я продолжу рассказ про множества, и расскажу, что такое тип и атрибут с точки зрения теории множеств. И самое главное – я расскажу, как эти понятия находят свое отражение в моделях, которые мы строим.
Множества в математике и физике
Мы воспринимаем мир либо как пространство, либо как время, но не можем одновременно представить и то и другое. Это накладывает свои ограничения на язык, которым мы пользуемся, и модели, которые мы строим.
Например, математическое множество не существует во времени, как и операции над ним. Это значит, что нельзя сказать, что состав множества меняется во времени.
Мне самому это кажется контринтуитивным и неочевидным требованием, но без него мы не сможем проводить операции над множествами и делать сравнения. Это значит, что, если мы хотим описать множество песчинок в куче песка, то у нас есть два способа это сделать: для каждого нового состава песчинок вводить новое множество, или рассмотреть множество темпоральных частей песчинок в исследуемой куче. Под темпоральной частью песчинки понимается временная часть песчинки, которая имеет атрибут: начало и конец, моделирующие присутствие данной песчинки в куче. Это множество темпоральных частей еще называют 4D-представление, выполненное в 4D парадигме. Состав песчинок на конкретный момент можно получить из этого множества путем временного среза: выбрать только те темпоральные части песчинок, которые «актуальны» на данный момент времени, то есть те, которые появились в куче раньше, а ушли из кучи позже выбранного момента времени.
Так моделируется состав реальных «физических» множеств. Но для текущей статьи такое представление будет достаточно сложным, и я вернусь к обычному представлению простых множеств «замороженных» во времени, то есть таких, которые существуют «вне времени».
Определение состава множества
Множество– это многое, мыслимое как целое, где многое – это состав множества. Рассмотрим способы определения состава множества. Как мы знаем, что состав множества может быть задан двумя способами:
- Непосредственным перечислением объектов, выбранных из какого-то множества.
- Правилами идентификации объектов, выбранных из какого-то множества.
Например, пусть в комнате среди прочих объектов есть два: белая тарелка и зеленый маркер.
- Множество А, состоящее из этих двух элементов можно задать путем перечисления: белая тарелка входит в состав множества А и зеленый маркер входит в состав множества А. Больше ничто из находящегося в комнате, не входит в состав множества А.
- Можно поступить иначе. Можно к тарелке и маркеру приклеить желтый стикер и проследить, чтобы других стикеров в комнате не было. Тогда можно сказать, что те и только те объекты в данной комнате, которые имеют желтый стикер, входят в состав множества А.
Первый способ определения состава – это перечисление
Второй способ – задание условия идентификации.
В ходе обсуждения прошлой статьи я понял, что не все ясно понимают разницу между этими двумя способами определения состава множества. Поэтому я расскажу про них подробнее.
Первый способ основан на серии высказываний:
Тарелка входит в состав множества А
Маркер входит в состав множества А
Больше никто не входит в состав множества А
Второй способ – это высказывание в предикатах:
Тот и только тот объект из находящихся в комнате, который имеет желтый стикер, входит в состав множества А.
В первом способе описания состава могут участвовать любые модели объектов. Во втором способе описания модели объектов должны обладать одним общим атрибутом, значение которого определяет вхождение или не вхождение объекта в состав множества. То есть, если в моделях объектов нет общих атрибутов, построить условия идентификации невозможно.
В обсуждении статьи было предложено само вхождение во множество при помощи перечисления тоже сделать атрибутом: «входит в состав множества А». Таким образом, те объекты, которые входят во множество А, имеют значение этого атрибута «да». Затем было предложено на основании этого атрибута сделать признак для отбора в состав того же самого множества А: те объекты, которые имеют значение «да», входят в состав множества А. Автор этой затеи не заметил, что в результате логического вывода из этих двух высказываний мы получаем две тавтологии:
В состав множества А входят те и только те объекты, которые входят в состав множества А и
Объект входит в состав множества А тогда и только тогда, когда он входит в состав множества А.
Эти очевидные высказывания не содержат информации ни о конкретных объектах, ни о множестве А. Если я возьму тарелку, то на основании этого высказывания нельзя будет определить, относится ли она к множеству А, или нет.
Поэтому перечисление и правило – два принципиально разных способа описания состава множества, и в математике они указаны как два основных и совершенно разных способа определения состава множества.
Кстати, в свое время был длительный спор об определении того, что такое функция. Этот спор возник по причине того, что не могли принять решение о том, какие правила идентификации считать корректными, а какие – нет. В итоге была принята идея Дирихле о том, что любые правила будут считаться корректными. Именно поэтому я не буду замахиваться на классификацию всех правил, но рассмотрю лишь несколько, которые в данном контексте нам понадобятся.
В учебниках часто правило идентификации называют правилом отбора. Термин «правило отбора» вводит в заблуждение, потому что предполагает некую операцию по отбору. А это намек на то, что множество может пополняться. Но это не так. Множество имеет фиксированный состав. Поэтому лучше говорить не об отборе, а об идентификации. Мы не отбираем элементы во множество, мы идентифицируем их как элементы множества.
Определение состава подмножества
Давайте посмотрим, как мы определяем состав множества африканских слонов. Я насчитал четыре разных способа это сделать.
- Можно определить их путем перечисления.
- Можно приклеить стикер к слонам, и сказать, что те слоны, у которых есть приклеенный стикер, считаются африканскими. Это определение состава множества через атрибут. Атрибутом будет считаться наличие или отсутствие стикера.
- Можно определить состав через пересечение двух множеств: множества слонов и множества животных, обитающих в Африке.
- Можно ввести понятие типа «африканские слоны».
Используя в нашей работе OWL, мы имеем возможность реализовать три описанных выше способа задания подмножества:
- Явно перечислить входящие в подмножество объекты,
- Определить правило идентификации через любые условия на любые атрибуты, с разными операциями: от самого факта обладания значением какого-либо атрибута до попадания этого значения в определенный диапазон
- Задать операции над другими множествами: например, в состав множества A входят только те объекты, которые входят в состав множества B и не входят при этом в состав множества С.
Чтобы понять, можем ли мы реализовать четвертый способ идентификации при помощи типа объектов, рассмотрим его подробнее.
Моделирование подмножества при помощи типа
Для определения типа «африканский слон» нам понадобятся:
- Группа объектов, из которой мы выбираем объекты для под-типа. В данном случае эта группы имеет название – это группа слонов.
- Уникальное свойство, котором объекты типа отличаются от остальных объектов группы: проживают в Африке.
- Уникальное название для объектов данного типа
Можно поступить иначе и в качестве группы взять животных, проживающих в Африке. Тогда уникальным свойством, выделяющим африканских слонов от других африканских животных будет то, что эти животные – слоны.
Итого, чтобы дать определение типа, надо:
- Указать группу объектов.
- Указать отличительные особенности (дифференциальные свойства) объектов данного типа от объектов группы.
- Указать название объектов данного типа
Дополнительно можно указать:
- Причины, по которым данный тип объектов стал востребован (дифференциальные функциональные свойства объектов данного типа
- Пользу от введения данного типа объектов
- Историю термина
- Итд.
Объекты одного типа отличаются от объектов группы каким-то уникальным свойством. Это уникальное свойство может моделироваться через любые условия на любые атрибуты. Но при этом не обязательно, чтобы все значения всех атрибутов совпадали, или чтобы состав атрибутов у всех однотипных объектов был одинаков.
Зная, что такое тип, можно подумать, что четвертый способ выделения подмножеств совпадает со вторым. Однако, для определения типа нам потребуется дополнительно, как минимум, указать специализированное название, а в качестве опции — указать другие атрибуты типа, например, указать причины выделения данного типа объектов, историю термина и тд. При помощи второго способа это сделать невозможно. Поэтому четвертый способ отличается от второго и не реализуется пока в стандартах моделирования, которые мне известны.
Понятие тип
Итак, с точки зрения теории множеств:
Тип – это способ выделения подмножества из над-множества и присвоение нового имени объектам этого подмножества
Если над-множества нет, то тип считается аксиоматическим, невыводимым. Как я говорил ранее, понятие объекта и понятие множества являются невыводимыми понятиями, потому что для них нельзя указать над-множество объектов.
Разница между типом объектов и множеством объектов
Из обсуждений статьи я понял, что есть люди, которые считают, что тип объектов и множество объектов – это то ли связанные понятия, то ли одно и тоже. Попробую объяснить, почему это не так. Тип — это одновременно и правило идентификации объектов, и название этих объектов. То есть тип служит одновременно и специализации (или выделению) подмножества из множества, и дает новое название специализированным объектам.
Каждый тип определяет состав множества, но не каждому множеству соответствует тип, определяющий его состав, например, когда мы говорим о множестве, состав которого задан перечислением его элементов, или, когда мы говорим о множестве, чьи элементы не имеют своего названия.
Понятно, что правило, задающее множество не есть само множество.
Мне кажется, что из всего сказанного ясно, чем понятие «тип объектов» отличается от понятия «множество объектов».
Моделирование однотипных объектов
Часто в ИС однотипные объекты моделируются при помощи моделей, содержащих одинаковый набор атрибутов. Теперь можно видеть, что данное ограничение избыточное, поскольку у объектов одного типа могут быть разные наборы атрибутов. Такое ограничение вызвано техническими особенностями реализации, но не требованиями предметной области.
В ИС список однотипных объектов пополняется. Это наводит на мысль о переменном составе множеств, которые мы моделируем. Однако, это не так. Список объектов, которые были зарегистрированы в ИС, не является исчерпывающим списком множества. То есть, в ИС хранятся модели не всех элементов множества, а лишь тех, которые на данный момент зарегистрированы. Поэтому, когда мы делаем запрос, его смысл такой: дай мне все объекты данного типа, которые зарегистрированы на данный момент в ИС.
Жизненный цикл объекта
Кроме того, что объект может быть отнесен к определенному типу объектов, есть еще два момента, про которые нельзя забывать:
- Классификация (отнесение объекта к определенному классу, или типу объектов) всегда субъективна. Один и тот же объект с разной точки зрения может выглядеть по-разному. Если мы строим расширяемую модель предметной области, использование которой предполагает наличие разных стейкхолдеров, то должна быть возможность моделирования контекста и различных точек зрения. При этом с разных точек зрения один и тот же объект может быть отнесен к разным типам.
- Учет жизненного цикла объекта предполагает не только учет изменений объекта, но и учет изменения нашего восприятия этого объекта, поскольку наравне с процессом синтеза и анализа идет процесс объективации и деобъективации.
Процесс объективации и деобъективации выглядит так:
Объективация
Обладая представлением о типах, мы пытаемся найти объекты этих типов в окружающем нас мире. Найденные объекты, как правило, относятся к самым широким типам. Например, если речь идет о предприятии, то на первом шаге найденные объекты могут относиться к операциям, функциям и объектам. Или если речь идет о растениях, сначала мы делим их на деревья, траву и кустарники. Далее происходит уточнение типа объекта путем проверки различных гипотез. В процессе уточнения мы пытаемся найти такой тип, который скажет нам об объекте достаточно, чтобы этим знанием можно было эффективно пользоваться на практике (пытаемся найти более узкий тип, к которому можно отнести этот объект). В процессе уточнения модель объекта обрастает новыми деталями. Параллельно мы используем наши знания об этом объекте на практике. Если применение этих знаний успешное, объект считается правильно полученным и правильно классифицированным (тип объекта выбран верно).
Деобъективация
Однако все меняется: меняются представления об окружающем нас мире, появляются новые знания и т. д. В результате оказывается, что модель объекта перестает удовлетворять требованию полезности. И тогда слишком узкая специализация объекта становится его же врагом. Объект подвергается переклассификации (заявка превратилась в требование), а порой и полностью уничтожается, как был уничтожен эфир, или теплород. И тогда цикл начинается сначала: выбор объектов, уточнение знаний о них и т. д.
Примеры из практики:
Объективация:
Пусть клиент пришел для подачи заявки. До тех пор, пока заявка не исполнена, мы можем знать ее тип только с некоторой долей вероятности. Поэтому сначала регистрируется заявка самого широкого типа. Затем по мере уточнения деталей и в процессе ее исполнения, модель заявки обрастает новыми атрибутами. Спустя какое-то время становится ясно, к какому типу заявок отнести данную заявку и происходит окончательная ее классификация.
Деобъективация:
Пусть у нас есть типовой сценарий поиска информации в интернете. Пусть в нем сказано, что всякий раз, когда надо найти нужную информацию, воспользуйтесь таким-то поисковиком – программой для поиска нужной информации. Пусть мы пользовались этой программой многократно, каждый раз совершая операцию поиска. Таких операций за время эксплуатации этой программы было много, и все они были классифицированы как операции типа «поиск информации». Спустя какое-то время выясняется, что программа-поисковик выполняет шпионские функции, «сливая» данные о пользователе заинтересованным в этой информации лицам. И тогда выясняется, что те операции, которые использовал этот поисковик, теперь будут переклассифицированы из операций по поиску информации в операции по пересылке данных заинтересованным лицам. Но вполне может статься, что мы узнаем еще что-то про эту программу и тогда нам придется пересматривать и другие операции, в которых она принимала участие.
Требования к моделлеру, моделирующего типы
Сформулируем требования к моделлеру, который предназначен для моделирования типов:
- Необходимо уметь моделировать однотипные объекты, состав атрибутов которых не совпадает
- Необходимо уметь моделировать правила, которые выделяют объекты в один тип
- Необходимость моделировать другие атрибуты типа: название объектов данного типа, историю этого названия и проч.
- Необходимо уметь моделировать разные точки зрения на один и тот же объект
- Необходимо уметь моделировать жизненный цикл объекта
- Необходимо уметь моделировать изменение нашего представления об объекте с течением времени .
Как в ИТ отрасли реализовать эти требования без обращения к структуре БД? Как, не обращаясь к структуре данных, учитывать разные точки зрения, добавлять новые типы объектов, уточнять тип объектов, переклассифицировать объекты в случае необходимости?
Моделирование объектов при помощи OWL
Есть одно ограничение, которое присутствует в OWL: в нем множество и тип объектов не различаются. Из-за этого мы имеем ограниченный функционал для моделирования типов объектов. Однако, этот функционал намного шире того, что дают нам следующие возможности:
- Добавление нового множества объектов в OWL ничем не отличается от добавления нового объекта.
- Можно потребовать, что, если тип объекта известен, то модель объекта создается с заданными, наперед известными атрибутами. При этом после создания атрибуты могут как добавляться, так и удаляться. Пример: создавая модель заявки, мы можем потребовать указать значения атрибутов (номер заявки, дата заявки, заявитель, адресат). Надо только помнить, что эти атрибуты в OWL существуют отдельно от типов объектов. И один атрибут может быть использован при моделировании объектов разных множеств. Это принципиальное отличие от распространенных языков программирования, где атрибут существует только в рамках одного типа объектов. Другой атрибут в другом типе, пусть и называемый так же, будет другим атрибутом.
- Можно потребовать наоборот: определять подмножество моделируемого объекта на основе атрибутов модели объекта и его принадлежности к над-множеству. Для этого в правиле будет записано, что если модель объекта, относящегося к определенному над-множеству, содержит такие-то атрибуты и их значения удовлетворяют определенным правилам, то объект автоматически будет отнесен к определенному подмножеству. Так при помощи правил будет реализована, так называемая, «утиная классификация». Например, если в модели заявки есть значение атрибута «Телефонный номер», а «Подключение» — это значение атрибута «Тип выполняемых работ», то заявка автоматически будет классифицирована как заявка на подключение телефонного номера.
Разделения множества на подмножества
Пусть есть множество объектов. И пусть стоит задача по разделению этого множества на семь подмножеств, каждому из которых приписан свой цвет: «красные объекты», желтые объекты». И тд.
Разделение множества на подмножества можно провести разными способами.
- Можно разделить множество на непересекающиеся подмножества, распределив объекты по подмножествам путем их перечисления. Создать семь подмножеств и перечислить объекты, которые принадлежат каждому из подмножеств.
- Для каждого подмножества можно придумать свой подтип. Тогда все множество можно разделить на семь подмножеств, введя семь подтипов: «Тип красных объектов», «Тип желтых объектов» и т. д. Каждый объект можно отнести к одному из перечисленных типов и сказать, например, так: объект относится к типу красных объектов.
- Можно разделить надмножество при помощи атрибута и его значений. Например, можно ввести атрибут «Цвет» и семь его значений: «Красный», «Желтый» и тд. Тогда название цвета станет прилагательным для объекта и будет звучать так: красный объект, желтый объект и тд.
Первый способ в OWL реализован при помощи создания семи разных классов и указания объектов, которые к ним относятся.
Второй способ может быть реализован тремя разными способами:
- При помощи создания отдельных классов, объединенных одним типом, но сами типы, как я говорил ранее, не моделируются. Этот способ ничем не отличается от способа разделения перечислением.
- При помощи справочника «Типы цветных объектов», значениями которого будут объекты, моделирующие типы: «Красные объекты», «желтые объекты» и тд
- При помощи атрибута с названием «тип объекта», значения которого будут иметь текстовую форму: «Тип красных объектов», «Тип желтых объектов» и тд
Третий способ разделения множества на подмножества в ИС моделируется двумя способами:
- При помощи справочника «Цвета», значениями которого будут объекты, моделирующие значения атрибутов: красный, желтый и т. д.
- При помощи атрибута с названием «Цвет», значения которого будут иметь текстовую форму: «красный», «желтый» и тд.
Видно, что разделение при помощи типов и атрибутов моделируется в двух случаях одинаковым способом, но имеет разные названия. И действительно, обладание значением атрибута в OWL моделируется таким триплетом:
#объект #атрибут #значение
Принадлежность классу — таким:
#объект rdf:type #класс
То есть можно сказать, что принадлежность классу просто выражается при помощи специального служебного атрибута, определенного в стандарте — rdf:type.
Понятие атрибут
Сформулируем утверждение:
Атрибут – это способ разделения множества объектов на подмножества. При этом каждому значению атрибута соответствует определенное подмножество, объекты которого имеют атрибут с таким значением.
Моделирование подмножеств при помощи атрибута
Каждый из трех способов перечисленных ранее способов моделирования подмножеств имеет свои преимущества и недостатки в зависимости от контекста и выбранного способа реализации.
Если подмножеств немного, можно выбрать любой и перечисленных способов разделения на подмножества и любую реализацию.
Если подмножеств много (в пределе бесконечно, например, когда каждое из множеств группирует объекты одинаковой длины), то формально остаются:
- третий способ моделирования типа и
- второй способ моделирования атрибута.
Однако, я писал ранее, что каждому типу нужно дать название. Если подмножеств много (бесконечно), то дать имя каждому из них нереально. Поэтому мы не моделируем такое деление при помощи типов. Мы моделируем такое деление только при помощи атрибута, областью значений которого будет одно из распространенных множеств: множество вещественных чисел, множество, моделирующее временную шкалу, множество натуральных чисел, множество строк конечной длины и тд. Узнаете типы данных?
О том, как вводится функция на множестве подмножеств и не только про это, можно почитать тут: http://ift.tt/2sG2LcE
Третий способ реализации атрибута хорош тем, что при помощи него можно моделировать огромное количество подмножеств (вариантов написания строки – очень много), но плох тем, что не понятно, как узнать, что объекты относятся к одному множеству: «Красный», красный», «»кра)сный_» — это значения одного и того же множества, или разных?
О том, как лучше моделировать подмножества написано море литературы, и я не буду здесь повторяться. Просто запомним, что атрибут – это модель подмножеств, а значение – это указание на подмножество.
Комментарии (0)