Письмо 06 - Архитектура сложной системы

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

Иерархичность системы основана на подчинении более низких уровней более высоким уровням. Подчинение, как правило, подразумевает либо прямое включение, либо использование элементов более низкого уровня иерархии. Другими словами, существо иерархии системы отражает агрегация. Задачей именно агрегации является прямое или косвенное включение элементов, расположенных на нижнем уровне, и управление этими элементами в соответствии с логикой контейнера-владельца.
Применение агрегации позволяет сделать несколько важных заключений. Первое заключение состоит в том, что элементы нижнего уровня должны быть полностью независимы друг от друга и не должны самостоятельно вступать в какое-либо взаимодействие. Или, говоря другими словами, должна соблюдаться полная инкапсуляция. Любая логика взаимодействия между элементами является частью логики сущности, в которую вложены данные элементы или которой они подчинены. То есть, два объекта не должны иметь возможности обращаться друг к другу, если они принадлежат одному уровню. Логика взаимодействия этих объектов является частью логики более высокого уровня, логикой их контейнера.

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

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

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

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

Сайт Alexus Software Development