Встретив в курсе “Моделирование и собранность” упоминание BORO, решил ознакомиться с первоисточником: книгой Business Objects - Re-Engineering for Re-Use, где описан подход к построению бизнес-модели с использованием BORO - Business Objects Reference Ontology.
Основная идея книги заключается в том, что современные бизнес-модели и программные системы, основанные на них, проектируются в рамках устаревшей entity-парадигмы, заточенной для удобства использования на бумаге, но искажающей объективную картину мира, что приводит к неоправданному усложнению и ограничению возможностей созданных в данной парадигме информационных систем. Предлагается осуществить переход (и описывается процесс этого перехода) к object-парадигме, в рамках которой получаются объективно отражающие действительность и в то же время более простые (за счет генерализации паттернов) бизнес-модели.
Подход BORO интересен тем, что описание всего, что есть в бизнесе (и вообще в мире), включая объекты, их свойства и отношения, осуществляется с помощью всего лишь трех базовых типов элементов: объектов физического мира (thing), классов (class) и кортежей (tuple).
Объекты физического мира
Физическое тело как четырехмерный объект
Физические тела (body) рассматриваются как четырехмерные объекты и определяются объемом (extension), занимаемым ими в пространстве-времени. Например, яблоко, которое лежит у меня на столе, - это не просто яблоко в текущий момент времени, а яблоко на протяжении всего времени существования, начиная с момента, когда оно появилось на яблоне и заканчивая моментом, когда его съедят. Рассмотрение физических тел как четырехмерных объектов решает проблему определения идентичности объекта в разные моменты времени (я 25 лет назад и я сейчас - это один и тот же человек, если все атомы в моем теле заменились на новые?). В подходе BORO объект сейчас и объект в прошлом - это просто срезы одного четырехмерного объекта во времени.
Состояния
Подобно тому, как объект можно разделить (мысленно) на части в пространстве (выделить у яблока мякоть, кожуру, хвостик), его можно разделить на части по временной координате. В этом случае получаются стадии существования, состояния объекта (state), например, “незрелое яблоко” и “зрелое яблоко”. Как привычные части с разделением в пространстве, так и временны́е (temporal) части, состояния исходного четырехмерного физического тела также являются четырехмерными телами.
Вещества
Интересный частный случай возникает, когда мы говорим о неисчисляемых объектах (каких-нибудь веществах, например молоко, вода, медь). Мы можем сослаться на конкретный стакан молока, который стоит у нас на столе. Но есть ли объект в пространстве-времени, соответствующий в целом слову “молоко”? В книге предлагается рассматривать такие объекты как совокупность всех объемов данного вещества, существующих во всем мире (и на протяжении всего времени существования Вселенной), то есть молоко в стакане на столе + молоко в пакетах в магазине + молоко в цистерне фургона… и т.д.
Временны́е промежутки
Временны́е промежутки также рассматриваются как четырехмерные объекты. Например, объект “27 октября 2023 г.” - это срез всего четырехмерного пространства-времени, который занимает весь объем Вселенной между 0:00:00 27 октября 2023 г. и 23:59:59(9) 27 октября 2023 г.
События
Отдельно выделяются события (event) - трехмерные срезы четырехмерного объекта. Например, событие “автомобиль разбился” - это трехмерный срез четырехмерного объекта “автомобиль” в момент времени 12:43:15 27 октября 2023 г. События часто являются границей между двумя четырехмерными временны́ми частями, состояниями объекта - в данном случае это “целый автомобиль” (автомобиль с момента производства до момента до момента аварии) и “поврежденный автомобиль” (автомобиль с момента аварии до момента утилизации).
Процессы
Интересный эффект от перехода к четырехмерному рассмотрению объектов состоит в том, что из бизнес-модели пропадают процессы - вместо этого появляется статичная четырехмерная картинка, где время - просто одно из измерений наряду с тремя пространственными.
Классы
Атрибуты
С физическими объектами все относительно просто - мы ссылаемся на определенный объем в пространстве-времени. Но что делать с атрибутами объектов, такими как красный, круглый, тяжелый? Как они связаны с реальным миром? Как они привязаны к физическим телам, этим объемам пространства-времени?
В BORO предлагается интересное, в чем-то контринтуитивное решение: объекты не содержат где-то “внутри” себя информации об атрибутах. Здесь на сцену выходят классы. Класс - набор объектов, объединенных по какому-то признаку. Например, класс “автомобили” содержит все автомобили (помним, что это четырехмерные пространство-временные объекты), которые когда-либо были или будут произведены.
Класс “люди, родившиеся в Германии” содержит Ганса, Фридриха, и еще миллионы людей.
Таким образом, атрибуты объекта можно выразить как принадлежность данного объекта к определенным классам, например, конкретный синий автомобиль “Лада Гранта” является членом (экземпляром) классов “автомобили”, “синие вещи”, “четырехколесные транспортные средства”, “вещи, произведенные на территории России”, “вещи массой более 500 кг”.
Члены класса
Членом класса может быть любой объект: не только физические тела, но и пространственные части тел (члены класса “автомобильные колеса”), временны́е части, состояния (члены класса “разбитые автомобили”), события (члены класса “автомобильные аварии”) и даже другие классы и кортежи (о них позже).
В классе может быть произвольное число объектов. Вполне возможно создать класс, состоящий из одного объекта.
Классы классов
В класс объединяются объекты, имеющие какой-то общий признак (или набор признаков). Например в класс “исправные автомобили” попадают все объекты, обладающие признаком “исправный автомобиль”). В класс “неисправные автомобили” попадают все объекты, обладающие признаком “неисправный автомобиль”).
Классы тоже могут иметь общий признак. Оба приведенных выше класса - и класс “исправные автомобили”, и класс “неисправные автомобили” - характеризуют техническое состояние автомобиля, и по этому признаку их можно объединить в класс. Класс “исправные автомобили” и класс “неисправные автомобили” являются членами класса “классы технического состояния автомобиля” (класса классов).
Подклассы и надклассы
Иногда все члены одного класса (например, класс “красные автомобили”) являются также членами другого, более крупного класса (класс “автомобили”). В этом случае имеет место отношение подкласса. Класс “красные автомобили” является подклассом класса “автомобили”. Класс “автомобили” является надклассом для класса “красные автомобили”.
Еще все члены класса “красные автомобили” являются также членами более крупного класса “красные вещи”, значит класс “красные автомобили” также является подклассом класса “красные вещи”. То есть может быть множественное наследование.
Также можно определить класс “физические тела”, куда будут входить вообще все объекты физического мира, и который будет надклассом для классов “автомобили” и “красные вещи” (и многих других классов).
Отношение “подкласс - класс” не следует путать с отношением “член класса - класс”.
Отношение “член класса - класс” возникает когда мы объединяем элементы по какому-то признаку, и в итоге у нас получается группа объектов - класс. В роли члена класса может выступать объект любого типа. В роли класса, естественно, только класс.
Отношение “подкласс - класс” возникает когда мы объединили объекты по какому-то признаку в маленькую группу - подкласс, и абсолютно все объекты этой маленькой группы входят в состав более широкой группы - класса, в которую объекты добавляются по более общему признаку. Отношение “подкласс - класс” возможно только между классами.
Кортежи
Кортеж - это упорядоченный набор объектов.
Кортеж обозначается записью с треугольными скобками:
<Объект 1, Объект 2, Объект 3…>
Для кортежа важен порядок объектов (в то время как для классов порядок членов не важен).
Кортеж может содержать произвольное число объектов, начиная с двух, но во множестве продемонстрированных в книге примерах бизнес-моделей используются только кортежи из 2-х объектов: <Объект 1, Объект 2>.
Элементами кортежа могут быть физические тела, классы и другие кортежи.
Отношения
Кортежи используются для того, чтобы показать отношения между объектами.
Допустим, мы хотим показать отношение отцовства.
У нас есть два человека, Василий Иванович Пупкин и Петр Васильевич Пупкин. Мы создаем кортеж <Пупкин В.И., Пупкин П.В.>.
Однако сам по себе кортеж не содержит никакой информации об отношении между объектами в его составе. Даже знание о том, что эти объекты упорядочены, не дает нам информации о типе отношения между этими объектами.
Здесь, как и в ситуации с атрибутами для физических тел, на помощь приходят классы. Как атрибуты объектов выражались через принадлежность объекта классу, так отношения между объектами в кортеже выражаются через принадлежность кортежа классу.
Мы создаем кортеж <Пупкин В.И., Пупкин П.В.>, и говорим, что этот кортеж является членом класса “A является отцом B” (чаще классы кортежей называются короче, например просто “является отцом”). Теперь у нас достаточно информации, чтобы сказать, что Пупкин В.И. является отцом Пупкина П.В.
Если мы переставим объекты в кортеже, то это перестанет быть истинным, поэтому порядок объектов в кортеже важен. (При перестановке объектов местами получившийся кортеж <Пупкин П.В., Пупкин В.И.> будет принадлежать классу “A является ребенком B”).
В класс “A является отцом B”, помимо нашего кортежа, входят еще миллиарды других кортежей, в которых люди связаны отношением отцовства.
В то же время наш кортеж <Пупкин В.И., Пупкин П.В.> может быть членом и других классов, например, членом класса “A выше, чем B”.
Классы, составленные из кортежей (классы кортежей), также могут быть подклассами других классов (тоже содержащих кортежи). Например, класс “A является отцом B” является подклассом класса “A является родителем B” (еще одним подклассом этого класса является “A является матерью B”).
Рассмотренные раньше отношения “часть - целое”, “член класса - класс” и “подкласс - класс” точно также выражаются через кортежи и классы кортежей:
Кортеж <”правое переднее колесо”, “мой красный автомобиль Lada Granta”> является членом класса кортежей “А является физической частью B”.
Кортеж <”мой красный автомобиль Lada Granta”, “красные автомобили”> является членом класса кортежей “А является членом класса B”.
Кортеж <”красные автомобили”, “автомобили”> является членом класса кортежей “А является подклассом B”.
Итого, в подходе BORO мне показались интересными следующие вещи:
Всего три базовых типа элементов позволяют строить бизнес-модели любой сложности.
Статичность модели за счет работы с четырехмерными объектами.
Одинаковость рассмотрения временно́го и пространственных измерений физических объектов.
Заземленность модели на объектах физического мира (то есть если двигаться вниз по цепочке кортежей/классов, то в конце цепочки придешь к физическому объекту).