Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сильный искусственный интеллект и объектно-ориентированное программирование синтез парадигм

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
кто подходит под наш запрос – т. е. тех, кто умеет работать с пи­ломатериалами, умеет пользоваться электроинструментом, класть кровлю и т. д. Возможно, что подобранные нами работники спо­собны на многое другое, например варить металлоконструкции, управлять подъемным краном и прочее, но нас интересуют их способности только в контексте нашей конкретной задачи, остальной функционал нам не нужен. Также на этой самой бир­же труда, возможно, было представлено достаточно много ра­ботников и, соответственно, функционал самой биржи в этом смысле очень широк. Но нас весь этот функционал интересует не в целом, а только лишь в контексте наших актуальных по­требностей. И то, что мы делали, это и есть реализация паттерна «Фасад».
Осмысление структуры паттерна. Структура данного паттерна характеризуется как довольно простая. Взаимоотноше­ния между отдельными классами подсистем друг с другом на­личествуют вариабельного типа – они могут как строиться по типу наследования, так и быть агрегацией или композицией. Отношения же фасада с классами подсистем определяются как композиция с «целым» (классами подсистем) и «частью» этого «целого» (фасадом). Так происходит по той причине, что фасад создается в роли как бы помощника для отдельных групп ПК, облегчающего взаимодействие с ними со стороны клиента (до­полнительный элемент паттерна), а соответственно, фасад не существует без классов подсистем.
Значимость паттерна в контексте разработки систем сильного ИИ. Данный паттерн, если бы мы изначально задались
целью составления некой их классификации по какому-либо кри­терию, вошел бы в довольно большую группу паттернов, конкре­тизирующих смысл четвертого из принципов SOLID – принципа разделения интерфейсов. Паттерн «Фасад» предлагает разделе­ние функционала и, как следствие, интерфейса програм мной си­стемы по критерию актуальных потребностей клиента на две большие группы – «верхнего» интерфейса (функционала) и «ниж­него» интерфейса (функционала). Оба интерфейса различаются по удобству работы с ними, простоте достижения актуальной
251
цели (user experience – пользовательский опыт) и уровню аб­стракций (первый – высокоуровневый, второй – низкоуровневый). При большом желании «нижний» интерфейс также можно пре­вратить в «верхний», но для этого его надо донастроить вруч­ную, что не представляется простой задачей. Собственно гово­ря, резюмирование смысла паттерна «Фасад» в таком контексте уже начинает кое-что напоминать. А именно – разделение на со­знание и бессознательное у человека. Сразу оговоримся, что де­маркация человеческой психики на сознание и бессознательное была описана и подробно исследуется в рамках психоаналити­ческих традиций психотерапии и она имеет своих критиков, причем как в иных концепциях психологии и психотерапии, так и внутри самой традиции психоанализа. Но мы все же считаем, что абстрактный смысл этой демаркации может быть весьма продуктивен в рамках разработки систем сильного ИИ, так что оформим пока на данную концепцию некоторую «презумпцию истинности». К тому же нами полагается, что не раз упомянутое в данном исследовании технотропное сознание есть не просто цель всякого процесса разработки систем сильного ИИ, но более того – апофеоз этого процесса, его крайняя точка. Но эта точка не достигается сразу – процесс, конечно же, делится на этапы. И один из этапов – технотропное бессознательное, за которым непосредственно и следует технотропное сознание. В любом случае мы считаем, что рассматриваемый паттерн в абстрактном смысле несет в себе суть именно этого разделения. И именно в таком смысле, абстрагированном до уровня разделения тех­нотропной психики на технотропное сознание и технотропное бессознательное, в контексте разделения интеллектуальной си­стемы на низшее и высшее, на низкоуровневое и высокоуровне­вое абстрагированная суть «Фасада» нам видится целесообразной для ее интегрирования в контекст разработки систем сильного ИИ.
13.7. Структурный паттерн «Приспособленец»
Идентификатор. Приспособленец (Flyweight). Еще иногда используется название «Легковес» (по тому же принципу, как весовые категории в боксе).
252
Классические элементы. Приспособленец, конкретный при­способленец, фабрика приспособленцев. Еще к этим элементам можно опционально добавить двух «персонажей»: конкретный приспособленец, не используемый совместно, и клиент. Но так как их присутствие или отсутствие особо ничего не меняют, мы их опустим.
Назначение. В Design patterns указано, что паттерн «При­способленец» «использует разделение для эффективной поддерж­ки множества мелких объектов» [114, с. 191]. Использование пат­терна «Приспособленец» позволяет, можно сказать, «вынести за скобки» наиболее «тяжелые» составляющие ПК для того, чтобы существенно облегчить функционирование системы в плане многократного снижения затрат различных ресурсов (например, памяти). Также стоит отдельно заметить, что сам по себе данный паттерн является весьма узкоспециализированным и применя­ется только для специфически организованных программных систем, а поэтому его организация является несколько сложной и довольно сильно различается от реализации к реализации.
Проблема. К примеру, у нас наличествует некоторая систе­ма с определенным количеством ПК. Каждый ПК обладает определенными характеристиками. Компоненты делятся на раз­личные группы – по их ключевым характеристикам, классовой принадлежности и т. д. Система отличается наличием очень большого количества схожих ПК. Также в рамках данной систе­мы подразумевается высокая динамика, т. е. ПК постоянно ак­тивно функционируют и изменяют свое состояние. В моменты наиболее активного функционирования данной системы, в те моменты, когда задействовано очень большое количество раз­личных ПК, ее затраты в плане использования ресурсов стано­вятся настолько высоки, что далеко не на каждом аппаратном обеспечении наша система способна эффективно функциониро­вать. А нам же совершенно необходимо, чтобы система была вы­сокопроизводительной и эффективно функционировала. С дру­гой стороны, мы не можем также уменьшить количество ПК в рамках системы, так как буквально за каждым из них закрепле­на определенная ответственность и все они нужны для обеспе-
253
чения деятельности системы. В такой ситуации на помощь при­ходит паттерн «Приспособленец».
Концептуальное решение. Для решения проблемы, которая ставится перед данным паттерном, мы могли бы для начала вни­мательно исследовать нашу систему, в процессе чего, несомнен­но, заметили бы тот факт, что для каждой группы ПК некоторые из характеристик являются одинаковыми, т. е. общими для всей группы. Если бы мы стали исследовать этот момент еще глубже, то сумели бы заметить также то, что в процессе функциониро­вания системы и в наиболее активные моменты этого процесса эти самые характеристики ПК не просто остаются одинаковыми для всей группы, но и не меняются, являясь, по сути, определен­ными константами. Т. е. все остальные характеристики изменя­ются в ходе работы системы и являются разными для каждого ПК в рамках группы. Но также присутствуют некоторые харак­теристики, которые ведут себя как константы. И подобный фе­номен является общим и универсальным для всей системы. Бо­лее того, часто будет также обнаружено, что именно эти константы и являются наиболее «тяжелыми» характеристиками ПК. Тогда нам и приходит идея разделить состояние ПК на два отдельных состояния: внутреннее и внешнее. Во внутреннее со­стояние мы помещаем неизменяемые характеристики, а состоя­ние внешнее признаем зависящим от контекста и динамичным. Затем, соответственно, мы уже способны создать некоторый ПК (приспособленец) и объявить общий интерфейс всех компонен­тов отдельной группы (конкретных приспособленцев), что мы, собственно, и делаем. Те характеристики ПК, которые были определены нами как константы, мы теперь можем не помещать отдельно в каждый ПК, а просто сохранить в одном месте и из него доставать по требованию. Теперь мы разобрались с вну­тренним состоянием ПК нашей группы. Также нам необходимо каким-то образом изменять внешнее состояние компонентов группы. Если мы станем его хранить в самих компонентах, то они станут настолько «тяжелыми», что все наши предыдущие мероприятия не будут иметь никакого смысла. Поэтому мы дела­ем так, чтобы компоненты могли динамически подстраиваться
254
под изменяющийся контекст путем получения данных о специ­фике контекста и некоторого «вычисления» необходимого для данного контекста внешнего состояния, которое затем и прини­мается. Также мы формируем еще один общий ПК, который вы­полняет функции одновременно и «хранителя», и «производите­ля», т. е. ответственность данного ПК будет заключаться в том, чтобы проверять наличие необходимых для данного контекста ПК в подконтрольной ему структуре данных и затем, при их на­личии, возвращать их, а при их отсутствии – создавать. Теперь мы, кажется, учли все необходимые аспекты.
Таким образом, по итогу мы имеем следующую ситуацию. У нас есть в наличии система, в которой присутствует некото­рое количество ПК, объединенных в группы. Общие констант­ные характеристики каждого компонента каждой группы (вну­треннее состояние, общее для группы) вынесены в локальные для каждой конкретной группы точки доступа, и ими можно воспользоваться по требованию, но теперь ни один из компонен­тов «не таскает с собой тяжесть». Также ни один из ПК не хра­нит и «не носит с собой» и в себе все свои возможные внешние состояния, а просто имеет в себе потенциал их достичь за счет вычисления конкретной ситуации в контексте и последующей подстройки своего внешнего состояния непосредственно под конкретный контекст. Т. е. компоненты стали легче сразу и в плане внутреннего, и в плане внешнего состояний. Далее у нас присутствует общее для группы хранилище всех наличе­ствующих ПК, принадлежащих к данной группе. Это хранили­ще одновременно является также и фабрикой по производству ПК в том случае, если какой-либо компонент сейчас необходим в контексте, но отсутствует среди наличествующих – тогда та­кой компонент просто создается.
Система подобного рода будет функционировать гораздо бы­стрее, чем изначальная, и то, как именно мы формировали дан­ную систему, – один из множества примеров применения струк­турного паттерна «Приспособленец».
Предполагаемые результаты и преимущества. Основны­ми результатами применения данного паттерна является опти-
255
мизация (в первую очередь по памяти) функционирования си­стемы, содержащей большое количество ПК, а также существен­ное сокращение разрозненности ПК в рамках системы и сокра­щение количества различных компонентов в принципе.
Гипотетический пример реализации паттерна. Выше уже уточнялось, что данный паттерн является довольно-таки узкоспе­циализированным, так что наглядные примеры его применения связаны непосредственно со сферой его применения, а именно с функционированием больших систем, содержащих существен­ное количество компонентов. Однако мы попробуем пойти не­сколько иным путем и привести пример, вырванный из контекста. А именно – довольно грубый и несколько приближенный при­мер реализации паттерна в контексте функционального про­граммирования. Одна из самых популярных задач по програм­мированию называется FizzBuzz. Ее классическая суть следую­щая: дается некое число n, которое обозначает верхний предел диапазона от одного до n. В рамках этого предела мы должны вернуть все числа от одного до n, причем вернуть очень специ­фическим образом: если число делится без остатка на три, то мы должны вернуть Fizz, если число делится без остатка на пять – Buzz, если и на три, и на пять – FizzBuzz, если же число не де­лится ни на три, ни на пять, то мы возвращаем само число, но в виде строки. Предположим, что мы знаем заранее верхнюю границу, т. е. n, и мы бы хотели создать структуру данных, кото­рая содержит все числа от одного до n в правильном виде. Воз­никает вопрос о том, каким именно образом создать такую структуру. Мы могли бы сесть и начать писать вручную: прове­рять каждое число и вписывать его соответствующее значение в структуру. Однако же, если верхний предел очень большой, т. е. шанс просидеть так очень долгое время, так что нам бы хо­телось как-нибудь побыстрее, да и чтобы вычисления сами про­изводились. И тогда мы «выносим за скобки» принцип правиль­ного ответа, который приведен выше, и внедряем этот принцип, который константен для любого числа, в алгоритм проверки чи­сел в диапазоне. После чего запускаем этот алгоритм и получа­ем готовую структуру данных.
256
Пример приближенный, само собой, но все же принцип функ­ционирования паттерна он очень хорошо отражает. И суть этого отражения резюмируется в том, что несмотря на то, что прин­цип (внутреннее состояние) одинаков для всех чисел диапазона, по итогу каждое число приобретет свой собственный вид (внеш­нее состояние), который зависит от контекста, а контекст в дан­ном случае и есть целостная ситуация применения принципа к диапазону.
Осмысление структуры паттерна. Структура данного пат­терна может быть весьма запутанной и является довольно вариа­бельной. Поэтому мы предоставим один из вариантов. Конкрет­ные приспособленцы связаны с приспособленцем отношениями наследования, т. е. они являются его подкомпонентами. Фабри­ка приспособленцев же связана с приспособленцем двусторон­ними отношениями, причем со стороны фабрики – агрегация, так как приспособленец может существовать без фабрики, а со стороны приспособленца – композиция, так как она без него су­ществовать не сможет.
Значимость паттерна в контексте разработки систем сильного ИИ. Как уже говорилось выше, ключевым аспектом
данного паттерна является демаркация состояния каждого ПК на внутреннее, неизменяемое, и внешнее, зависящее от контекста. Теперь добавим еще два выявленных ключевых аспекта «При­способленца»: «вынесение за скобки» константных для группы данных и вычисление в противовес хранению. Выше также по­стулировалась специфичность данного паттерна и его узкая спе­циализация, что, к слову, для паттернов, в общем-то, абсолютно не характерно. Однако те абстракции, которые были обнаруже­ны в основе функционирования паттерна, имеют право на при­менение в контексте разработки систем сильного ИИ. Мы имеем в виду, что сама возможность проведения некой границы между внутренним состоянием и внешним состоянием точно должна быть заложена в основу интеллектуальной системы, а будет ли она использоваться – это зависит от самой системы и от того, покажется ли это ей целесообразным. Вычисление в противовес хранению же работает не во всех ситуациях, в чем мы убеди-
257
лись в процессе исследования некоторых других паттернов (на­пример, «Декоратора»), т. е. такая возможность тоже должна быть заложена в систему в качестве потенциально реализуемой операции, но вот само решение о реализации должна также при­нимать сама система. И таким же образом мы считаем целесо­образным использовать «вынесение за скобки» константных для группы данных. Резюмируя, принцип один и тот же: на ста­дии формирования системы в нее должно быть заложено как можно больше абстрактных вариантов реализации конкретного поведения, но, что именно из возможностей реализовывать и как конкретно себя вести, должна определить сама интеллектуаль­ная система.
Выводы по главе 13
Как и постулировалось в начале главы, структурные паттер­ны предназначены продемонстрировать то, как из некоторых ато­марных компонентов могут получиться компоненты составные – более крупные и обладающие возможностями к проявлению более сложных поведенческих форм. В ходе исследования было выявлено, что структурные ПП, как, впрочем, и порождающие с поведенческими, резюмируют собой практико-ориентирован­ные и прагматично направленные фундаментальные прин ципы организации вообще. За счет некоторого обобщения и абстраги­рования суть паттернов была преобразована в адаптированный для контекста разработки систем сильного ИИ вид. И в этом виде был рассмотрен каждый из паттернов данной группы.
Структурный паттерн «Адаптер» подразумевает приведение всей системы в специфическую форму организации, при кото­рой в рамках каждой группы ПК и каждого компонента в от­дельности наличествует потенциал для взаимодействия с каж­дой другой группой компонентов в системе. Т. е. вместо того, чтобы создавать некие «органы чувств» каждому ПК, эти самые «органы чувств» унифицируются за счет добавления в систему некоторого «переводчика» потребностей одной группы в дей­ствия другой вне зависимости от их конкретной локализации.
258
Таким образом, в систему изначально закладывается идея взаи­модействия по типу «все со всеми», что существенно повышает динамику развития и ускоряет реагирование на любые внешние и внутренние факторы.
Паттерн «Прокси» и вовсе предлагает весьма целесообразное с практической точки зрения замещение одного субъекта дру­гим субъектом, внешне от оригинала неотличимым, для того, чтобы оригинальный субъект активизировался только по неко­торым отфильтрованным запросам. В рамках рассмотрения дан­ного паттерна был обнаружен весьма показательный механизм, который при его адаптации к нуждам построения человекораз­мерных интеллектуальных систем предположительно способен сыграть очень важную роль, и это по той причине, что сей меха­низм был замечен только на уровне систем, обладающих созна­нием, – он определяется как притворство. Было упомянуто, что еще в «Государстве» Платона механизм притворства был обо­значен как одно из важнейших средств воспитания подрастаю­щего поколения, а также о трактате Хёйзинги – «Человек играю­щий». И нами было предположено, что возможная реализация феномена подобного уровня может каким-либо образом спрово­цировать качественные преобразования в рамках системы. Да­лее мы сопоставили это наше предположение со стараниями по разработке систем слабого ИИ и пришли к выводу о полной их тождественности. Однако же мы говорили о другом и, как по­стулировали далее, для того чтобы феномен такого рода смог привести к качественным преобразованиям в системе, опыт реа­лизации данного феномена должен быть затем органично инте­грирован в общий опыт системы и «осознан» ею. А подобное возможно только в контексте систем, способных к самооргани­зации, что мы и предлагаем реализовывать.
Паттерн «Мост» заключает в себе фундаментальную идею демаркации на абстракцию и реализацию, т. е. на абстрактное и конкретное, что сразу же напоминает категорию идеальное – реальное и, в общем-то, ей и соответствует. Эта идея далее раз­вивается в том ключе, что в контексте данного паттерна полага­ется необходимой и целесообразной независимая трансформация
259
ПК, относящихся к категории абстракции, и то же самое для компонентов категории реализации. Изначальное наличие связи между изменениями компонентов, относящихся к различным категориям, существенно усложняло функционирование систе­мы, и в рамках паттерна было предложено некоторое разделе­ние. Эту идею мы развили несколько далее и предположили, что простого разделения между абстракцией и реализацией недо­статочно для процесса самоорганизации в рамках системы и что совершенно необходимо предоставлять возможность независи­мой трансформации для каждого без исключения ПК.
В рамках паттерна «Компоновщик» предполагается созда­ние удивительно естественной структуры данных по древовид­ному типу. И так как структуры подобного типа были нами про­слежены в диапазоне от гигантских космических объектов до фракталов, нами было выдвинуто уникальное для актуального исследования предположение: в рамках разработки систем силь­ного ИИ паттерн «Компоновщик» совершенно не необходим к реализации, так как любая система, функционирующая по ти­пу самоорганизации, УЖЕ использует данный паттерн.
По итогу исследования паттерна «Декоратор», в основе кото­рого лежит идея обертывания одних ПК в другие для улучше­ния функционирования первых, нами было предложено просто заложить в основу, в ядро будущего сильного ИИ саму такую возможность практически в том же виде, в котором она реализу­ется в рамках паттерна, по причине ее простоты и естествен­ности.
В паттерне «Фасад» мы выявили идею разделения общего функционала системы в целом на высокоуровневый (сложный, верхний, составной) и низкоуровневый (константный, нижний, атомарный). Причем если в рамках паттерна подразумевается простой и удобный доступ к первому, то ко второму доступ хоть и сохраняется, но только после соответствующей его ручной настройки. И нами была сразу же проведена параллель между сознанием и бессознательным у человека и предполагаемыми нами технотропным сознанием и технотропным бессознатель­ным в контексте сильного ИИ с последующим выводом об ак­туальности применения паттерна именно в таком ключе.
260
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]