Понятие системы и конструкции. Их место в проектировании информационных систем

в 20:09, , рубрики: IT-стандарты, Анализ и проектирование систем, конструкция, концептуальная модель, онтологическое моделирование, Проектирование и рефакторинг, проектирование систем, Семантика, системный анализ

После прочтения комментариев к предыдущей статье Классификация конструкций: примеры и заблуждения, посвященной классификации конструкций, я понял, насколько разное представление мы имеем относительно термина конструкции. Когда я писал статью, мне казалось, что этот термин трактуется довольно просто. Но, почитав комментарии, понял, что стоит поговорить о нем отдельно.

Конструкция

Толковый словарь Ефремовой определяет два разных понятия, которые обозначаются одним термином конструкция:

  1. Состав и взаимное расположение частей какого-либо сооружения, механизма.
  2. Само сооружение или механизм с таким устройством.

Попробуем перевести их на формальный язык.

Поскольку состав – это множество, то первое понятие переводится так: конструкция — это множество объектов, связанных между собой связями. При этом, судя по определению, объекты должны быть рукотворным и неживыми. То есть, нельзя представить Землю в виде конструкции, если не предположить, что ее сделали инопланетяне. Нельзя представить ДНК в виде конструкции, если только эта ДНК не создана кем-то. То есть, в определение конструкции надо добавить, что объекты рукотворные. Например, множество объектов: {фюзеляж, крылья, хвост} состоит из рукотворных объектов, и, потому, может называться конструкцией. Конструкцией под названием самолет. Замечу, что в данном контексте самолет – это не объект, а множество объектов {фюзеляж, крылья, хвост}. Можно назвать это множество самолет(к).

Сколько объектов может быть в конструкции? В определении нет ответа на этот вопрос. Но мы можем предположить, что их конечное число, большее одного, потому что в определении говорится о связях. Итого получилось: рукотворное множество объектов, созданное человеком, объекты объединены связями, множество конечное, количество элементов больше одного.

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

Второе понятие термина «конструкция» значит следующее: конструкция — это объект, который может быть представлен в виде множества объектов. Например, поскольку самолет как объект может быть представлен в виде множества объектов, состоящего из фюзеляжа, крыльев и хвоста, его также называют конструкцией. В данном тексте, чтобы отличить обозначение самолета как объекта от обозначения самолета как множества, можно написать: самолет(о) может быть представлен в виде множества объектов — самолета(к).

Любой объект может быть разделен на части. Неделимых объектов мы не знаем. То есть, любой объект можно назвать конструкцией? Нет. Потому что не всякий рукотворный объект можно поделить на рукотворные части. Например, отливка (болванка), являясь рукотворным объектом, не может быть поделена на рукотворные части. Поэтому болванку нельзя назвать конструкцией.

Разбирая термин «конструкция», мы обнаружили одну важную особенность языка: объект и его конструкция называются одним именем. То есть, самолет(о) и самолет(к) в быту называют одним именем: самолет. Понятно, что объект и множество объектов – это разные концепты. В словаре Ефремовой эти концепты различаются, но в быту название одно, и потому, люди часто путают их и не могут разделить эти два понятия, обозначенные одним термином. Та же проблема была в процессном подходе, в котором понятия функция, функциональная структура, сценарий и тд. назывались одним термином — процесс. Из-за этого многим аналитикам казалось, что функция и сценарий – одно и то же.

Путаница, которая возникает из-за того, что два понятия названы одним словом, проявляет себя в ответе на следующий вопрос: что такое тот или иной объект? Ответы можно разделить на два типа:

  • Первый тип ответов дает определение объектам: самолет — это летательный аппарат тяжелее воздуха с силовой установкой и крылом, создающим подъемную силу.
  • Второй тип ответов дает определение конструкциям: самолет – это крылья, двигатели, фюзеляж и хвост.

Первый тип определений дает определение понятиям(о), а второй тип – понятиям(к).

Другой пример: поезд – состав, сцепленных между собою железнодорожных вагонов, приводимых в движение локомотивным или моторным вагоном. В данном контексте дается определению поезду(к). Можно сказать, что поезд — это длинное транспортное средство для перевозки пассажиров или грузов по железной дороге. Это – определение поезда(о). Интересно, что в словарях можно найти определения как тем, так и другим понятиям.

В быту мы не замечаем разницы между такого рода определениями. Например, группе аналитиков показывается макет производственной линии. Каждый при этом может увидеть совершенно разные картины. Один увидит объект под названием «производственная линия», другой – конструкцию, имеющую то же название. Поскольку, объект и его конструкция – совершенно разные понятия, то увидят они совершенно разные вещи. До тех пор, пока они не договорятся о едином взгляде на этот макет, они будут говорить о разных объектах. Хорошо, если контекст заставит их сойтись на одной точке зрения. Однако, это происходит не всегда. Этап, на котором выясняется предмет обсуждения обычно пропускается. Из-за этого возникают ошибки в понимании. Та же проблема возникает, когда мы хотим строить онтологическую модель. Например, если мы хотим выяснить сложность конструкции самолета при помощи атрибута: «количество конструктивных элементов самолета», то надо найти объект в модели, которому приписать этот атрибут. Приписать его самолету(о) нельзя, потому что разделить самолет на части можно множеством способов. Поэтому, это атрибут должен быть отнесен ко множеству объектов, но не к объекту.

Система

Посмотрим, как справляется с данным терминологическим парадоксом системная инженерия. Системная инженерия дает определение системы так:

  • Множество элементов, находящихся в отношениях и связях друг с другом, которое образует определённую целостность.

Мы видим, что это определение близко к определению конструкции в первом ее смысле. То есть, системой называется множество объектов, обладающее свойствами:

  1. Множество объектов конечное, кстати, больше двух?
  2. Существуют связи между объектами
  3. Из множества и связей может быть синтезирован объект

Из списка свойств вычеркнут тезис о рукотворности системы. Системой можно назвать не только рукотворное изделие, но и то, что существует в природе помимо нашего участия. Например, биологические системы. Поэтому понятие системы шире понятия конструкции. Можно сказать, что конструкции – это специализированный подкласс класса систем, состоящий только из рукотворных систем.

Если для конструкций отношение между объектом и его конструкцией называлось так: «конструкция объекта», то для обозначения отношения между объектом и его системой используется другой термин: «строение объекта». Например, строение человека связывает человека(о) с человеком(с). Кстати, интересно, почему нет термина «система объекта» по аналогии с термином «конструкцией объекта»?

Можно ли назвать системой объект, а не множество объектов? То есть можно ли применить термин система к объекту так же, как термин конструкция применить к объекту? Скорее всего, — можно. Например, говорят, что система обладает эмерджентностью. Формально этот тезис переводится так: свойства объекта, строение которого представлено в виде исследуемой системы, отличны от свойств элементов этой системы. Поскольку в данном контексте объект назван системой, то объект тоже можно назвать системой.

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

Мне кажется, чтобы ликвидировать коллизии, которые могут возникнуть у инженера, читающего книги по системной инженерии, в словари стоит внести второе определение термина система по аналогии со вторым значением термина конструкция:

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

Неплохо было бы, чтобы в текстах по системной инженерии указывалось явно, о каком понятии в данном контексте идет речь: об объекте, или множестве объектов.

Можно ли распространить на системы тезис о том, что любой объект может иметь разные структуры в зависимости от наблюдателя? Да, можно. Мы прекрасно знакомы с двумя разными парадигмами строения человека, которые порождают разные структуры: внутреннее строение и внешнее строение человека.

В системной инженерии также существует требование, которое накладывает ограничения на множества возможных объектов. Речь об эмерджентности. Объект, чья структура представлена в виде системы, должен обладать свойствами, отличными от свойств элементов системы. При этом возникает два вопроса:

  1. Кто определяет если ли у множества объектов эмеджентность, или ее нет? Например, пусть есть участки трубопровода. Конструкция из этих участков образует более крупный участок трубопровода. Этот участок обладает новыми свойствами? Если нет, то системная инженерия не сможет назвать конструкцию из участков трубопровода системой. Если же найдется субъект, который скажет, что новые свойства есть, то множество участков превратится в систему. То есть, решение о том, является ли множество объектов конструкцией, или не является, принимает субъект. Кто он? Кстати, аналогичная проблема есть в определении бизнес-процесса в той его части, где процесс, по словам автора определения, должен иметь цель. Получается, что один и тот же процесс в зависимости от того, кто на него смотрит, может быть процессом, а может и не быть.
  2. Второй вопрос о стыковке системной инженерии со стандартом ИСО 15926. Если они стыкуются, то встает вопрос о том, как моделировать в стандарте ИСО 15926 конструкции, которые не обладают эмерджентностью. Например, пусть системный инженер сказал, что два участка трубопровода, объединенные в один участок, не обладают эмерджентностью. Однако, у заказчика такое деление участков трубопровода имеет место быть. Системная инженерия должна либо дать имя множествам объектов, не обладающим эмерджентностью, и объяснить, как их моделировать в стандарте ИСО 15926, либо сказать, что системная инженерия не рассматривает такого рода множества, а ИСО 15926 не позволяет их моделировать.

Вернувшись к определению конструкции, можно задать вопрос: должна ли конструкция(о), обладать свойствами эмерджентности? Допустим, что должна. Тогда множество конструкций(к) – это подмножество множества систем(с). Если не должна, то множество конструкций(к) пересекается со множеством систем(с).

Обобщение понятия конструкция

Теперь попробуем обобщить понятие конструкция(к) и система(с) на более широкий класс объектов и множеств. В своей статье я именно это и хотел сделать. Видимо, без текущего вступления это было не понятно. Я ввел понятие обобщенной конструкции(к), которая отличается от общепринятого понятия конструкции следующим:

  1. Обобщенная конструкция обозначает множество объектов, связанных между собой связями, но не обозначает синтезированный на этом множестве объект. Это позволяет мне не указывать приставку (к) после термина конструкция.
  2. Обобщенная конструкция может включать в себя множество элементов, состоящее из любого количества объектов. Это значит, что может быть пустое множество, множество, состоящее из одного объекта, множество, состоящее из счетного количества объектов, континуума объектов и тд.
  3. Множество может состоять из множеств объектов.
  4. Объекты могут быть любой природы.
  5. Эмерджентность и прочие возможные критерии не являются обязательными условиями для обобщенной конструкции.

В прошлой статье я убрал слово обобщенная из названия понятия, чтобы быть более кратким.

Получилась такая иерархия классов: Обобщенная конструкция – это самое широкое множество, подмножеством которого являются системы и конструкции.

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

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

Однажды мне была поставлена задача смоделировать различные версии конструкции одного космического аппарата. Версии существовали одновременно во времени и моделировали различные версии конструкторских решений. К тому же сами версии менялись во времени, потому что конструкторские решения эволюционировали с течением времени. Без введения понятия конструкция решить такую задачу было можно, но выглядело это очень странно. Похожая задача решалась мной при моделировании планов производства работ, которых одновременно было несколько версий: оптимистичный, пессимистичный и реальный. При этом план производства работ, в свою очередь, был частью другого плана производства работ. И таких этажей было 5. До ввода в модель объектов, моделирующих конструкции, моделирование выглядело так: множество связей «часть-целое», «раскрашенных» в разные цвета. «Красные» связи моделировали одну конструкцию объекта, «зеленые» — другую. «Цветов» было много и существовала проблема стыковки разных цветов. Фактически, эти «цвета» моделировали различные точки зрения на конструкцию объекта, не называя это явно. То же приходилось делать со свойствами объекта, которому были переданы свойства конструкции: у нас были «красные» значения свойств и «зеленые». Так мы выходили из положения до введения понятия «конструкция». Мне интересно, как моделируется подобный кейс в стандарте ИСО 15926?

Другой практический кейс: ЛЭП с одной стороны, может быть поделена на трассы, каждая трасса — на провода. С другой стороны, каждая трасса может быть поделена на участки трассы между опорами и тд.

Понятие системы и конструкции. Их место в проектировании информационных систем - 1

Таким образом, ЛЭП можно разобрать на части разными способами. И каждый способ решает конкретную практическую задачу. Как в данном случае должен смоделировать эти конструкции аналитик, руководствуясь стандартом ИСО 15926?

Есть интересный прием деления одного и того же объекта на части разными способами. Этот прием работает, когда объекты, на которые мы делим объект, относятся к разным предметным областям. Например, один и тот же объект мы можем назвать предприятие, а можем назвать функция. Это две разные парадигмы представления одного и того же. Тогда функции мы делим отдельно, предприятие – отдельно. В принципе, если можно добавлять новые типы объектов, то та часть проблем, которая связана с моделированием объектов в разных парадигмах, закрывается этим способом.

Моделирование конструкций при помощи связей «часть-целое» довольно распространено, потому что сильно сокращает объем модели и упрощает алгоритмы работы с ней. Поэтому часто, аналитики используют такой способ моделирования. Однако, этот способ накладывает ограничения на количество одновременно существующих версий конструкций, заставляет все отрасли предприятия работать с одной моделью конструкций, даже, если для кого-то эта модель является контрпродуктивной. При этом, если речь идет о конструкции объектов, то разные отрасли предприятия еще могут как-то договориться, то при моделировании функциональных структур, подобная договоренность становится, на мой взгляд, невозможной. Поэтому, возвращаясь к стандарту ИСО 15926, боюсь предположить, что он был заточен для моделирования только двух точек зрения на происходящее и существующее. Для этого в нем есть два типа объектов: физические и функциональные. При этом каждый раз при моделировании двух точек зрения модельеру приходится делать непростой выбор между тем, что назвать физическим, а что назвать функциональным объектом. Потому что и та и другая конструкции могут одновременно оказаться функциональными, или одновременно физическими объектами. Например, участок ЛЭП между опорами – это физический, или функциональный объект? Можно сказать, что физический, но, если заказчик скажет, что функция этого участка – перенос энергии на расстояние, то участок ЛЭП между опорами станет функциональным объектом, и смоделировать две разные конструкции одной ЛЭП не удастся. Или, более очевидный пример: молекула водорода, с одной стороны, состоит из атомов (одна система), а, с другой стороны – из ядер и электронов (другая система). Понятно, что природа этих систем одинаковая – физическая. Как ИСО 15926 будет моделировать эти две разные физические конструкции?

Проблема с ООП программированием та же: конструкция в ООП моделируется при помощи агрегации объектов, фактически, связей «часть-целое» Я не могу представить себе в ООП объект, который может быть представлен в виде разных конструкций. Потому что ООП также заточен под моделирование конструкций, но только с одной точки зрения. В ООП нельзя построить даже двух разных конструкций одного объекта. Как в ООП смоделировать тот факт, что ЛЭП состоит из трасс и одновременно состоит из участков ЛЭП между опорами?

Место конструкции в процессе мышления

Еще несколько слов о месте конструкции в нашем мышлении, а, следовательно, моделировании. Есть два пути достижения понимания – синтез и анализ. Когда мы делаем анализ, мы представляем себе объекты в виде обобщенных конструкций, когда синтез, наоборот, обобщенные конструкции представляем в виде объектов. Совершая анализ, мы пытаемся понять, как устроен объект, совершая синтез, мы пытаемся упростить модель, генерализируя ее. Получается цепочка: …объект – его конструкция – объект (элемент этой конструкции) – конструкция объекта – объект (элемент этой конструкции) – конструкция объекта… Далее я не буду повторять «обобщенная», потому что буду подразумевать всегда этот класс конструкций. Начинать моделирование можно как с объекта, так и с конструкции. Двигаться можно как вниз, так и вверх по иерархии объектов, совершая анализ, или синтез. По-другому это можно представить, как приближение к объектам или удаление от них. Приближаясь, мы делаем анализ, делая описание более подробным, удаляясь – синтез, или обобщение. Довольно забавно, но в современных стандартах моделирования я много читал про декомпозицию, но очень мало про композицию. Если встречается что-то, посвященное композиции, об этом пишется непонятными словами, которые довольно сложно трактовать. Например, когда мы собираем статистику по операциям в соответствии с методологией Шухарта, мы получаем параметры объектов (функций), но сами объекты при этом не называем. Когда мы моделируем процессы и декомпозируем операции, почему-то мы не можем делать обратной операции – композиции процессов в операции. Или сам процесс описания предметной области почему-то назван «анализ». Но почему не «синтез»? На мой взгляд, аналитик занимается и тем и другим процессом: и синтезом, и анализом. Строя статистические отчеты, мы занимаемся синтезом, разбирая объекты на части, — анализом.

Но даже с анализом, который вроде, должен быть хорошо описан в стандартах, возникают сложности при реализации.

  1. Зачастую типы объектов, на которые (объекты, а не типы) моделируемый объект может быть разделен, заданы жестко в стандарте, коде, структуре данных. Например, в стандарте может быть сказано, что ЛЭП делится на трассы. Но для других практических задач (например, для бригад, обслуживающих ЛЭП), этого деления недостаточно. Для них надо, чтобы для решения одних задач ЛЭП делились на трассы, а для решения других — на участки ЛЭП между опор. Если стандарт не позволяет это сделать, то при решении некоторых практических задач приходится обходиться костылями.
  2. Вторая сложность более тонкая и менее очевидная — это предел деления. Почти всегда находятся некие атомарные объекты, на основе которых происходит сборка комплексных объектов. При этом поделить атомарные объекты на части невозможно, потому что код или модель данных не позволяют это сделать. Впервые я столкнулся с этой проблемой при проектировании технического учета телекома. Витые пары были зашиты в код как неделимые сущности, для которых в коде был прописан алгоритм их поиска как конечных листочков в структуре. Когда же понадобилось смоделировать разножилку (это когда два провода берутся из разных пар), возникли большие сложности с алгоритмом поиска пар. Ведь теперь витая пара перестала быть конечным листочком в структуре и алгоритм ее поиска изменился. Второй раз я столкнулся с этим, когда моделировали договор. Договор – это модель договоренностей, достигнутых между контрагентами. Оказалось, что договор не является неделимой сущностью. Так же как договоренность может состоять из договоренностей, так и договор может состоять из договоров. Поскольку код был завязан на сущности типа «договор» как на атомарные сущности, необходимость разделить договор на части привела к переписыванию большой части кода. Количество подобных случаев бесчисленно и каждый найдет массу подобных примеров у себя в проектах.

Чтобы начать мыслить свободно и уйти от ограничений, накладываемых стандартами, инструментами и фреймворками, я предлагаю подумать, зачем мы используем конструкции в нашем мышлении? Как я говорил, анализ и синтез можно представить себе, как более дательное, или более генеральное описание предметной области. Можно предположить, что конструкция – это инструмент такого мышления, который позволяет двигаться в направлении более детального, или более генерального представления предметной области. Если посмотреть на конструкцию под таким углом, то конструкция оказывается средством моделирования в цикле синтеза и анализа (герменевтическом цикле), который мы используем для достижения понимания. Каждый раз, уточ детали объекта, фактически мы строим его конструкцию А раз так, то можно обобщить понятие конструкции и представить себе обобщенную конструкцию, состоящую из одного объекта. Например, мы можем сказать, что город – это объект с такими координатами: (…;…). Можно детализировать эту информацию и сказать, что город – это квадрат с вершинами и перечислить координаты вершин. Далее можно сказать, что город состоит из одного района квадратной формы с теми же координатами. В новой парадигме конструкции первый город состоит из второго города, который состоит из района. Пользуясь представлением о том, что конструкция – это более детальное представление об объекте, мы пришли к тому, что увидели конструкцию там, где раньше бы и не подумали. При моделировании карт, я думаю, задача более детального представления объектов, могла бы решаться именно так.

Конструкция должна помочь нам узнать об объекте что-то новое. Например, рассмотрим плоскую фигуру, частями которой тоже будут плоские фигуры. Возможность такого деления позволяет нам ввести понятие меры Жордана, которая, в свою очередь, позволяет нам ввести понятие площади. Благодаря делению объекта на себе подобные объекты, мы смогли ввести понятие меры. Таким образом, деление воды на воду позволяет нам узнать о воде что-то новое – ее объем. Поэтому деление воды на воду я бы тоже назвал конструкцией, а в определение конструкции зашил тезис о том, что она служит инструментом для достижения понимания.

Ограничения стандартов моделирования

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

Сейчас становится популярна задача создания единой информационной модели на основе единого онтологического базиса. При этом в качестве основы часто берут какой-то отраслевой стандарт и пытаются отмаппить решение всех задач на этот стандарт (то есть пытаются использовать его как базис, чтобы потом расширить). Но это невозможно, хотя бы потому что разные отрасли деятельности человека производят деление объектов разным способом. Поэтому добавление в единую информационную модель новых знаний связано с созданием новых конструкций и новых объектов, которые надо маппить на уже существующие объекты и конструкции.

Единство объекта, функции и операции.

В прошлой статье я не раз обращал внимание, что объект, операция, функция — это одно и то же, трактуемое субъектом по-разному. Этот тезис позволил мне ввести различные парадигмы конструкций. Однако, выяснилось, что модель активности и модель предметов, как считают многие, – это совершенно несмешивающиеся модели. Поясню, почему это неверно. Допустим, мы наблюдаем за течением реки. Наши глаза двигаются вправо и влево, следя за щепочками и пузырьками на поверхности воды. Это восприятие событий или операций. После недолгого наблюдения в таком режиме сознание устает и глаза останавливаются и сознание начинает видеть нечто целое – поток событий. Это совершенно иной тип восприятия, соответствующий восприятию реки как потока, или функции. Далее сознание продолжает наблюдение изо дня в день и, рано или поздно, перестает видеть поток, и начинает видеть объект. Река становится объектом, лишенным всякой подвижности. Иначе это можно представить, как если бы мы удалялись от реки. Рано или поздно она стала бы просто объектом. В моем определении объект – это нечто, что мы воспринимаем как неизменное, но, что на самом деле изменяется, поскольку в природе нет ничего неизменного. Еще пример: удары барабана, ритм барабанной дроби и произведение. Это описание одного и того же, но данное с разной степенью детализации. Если вы были внимательны, то заметили, что сознание производит обобщение по следующей схеме: операция, функция, объект. Эти три разных типа представления одного и того же, но с разной степенью детализации. Можно начать с объекта и двигаться в сторону детализации. Например, можно начать с моделирования предприятия, затем смоделировать функцию, а затем разбить ее на операции. Таким образом, одно и то же будет представлено сначала как объект, потом как функция, а затем как множество операций. То есть, функция — это конструкция объекта, операции — конструкция функции.

Автор: Марк Мельник

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js