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

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

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
если бы боксер в бою начинал одинаково хорошо работать на всех ударных дистанциях в зависимости от актуальных в бою.
Осмысление структуры паттерна. Центральный компо­нент (создатель) связан со своими заготовками (продуктом) по типу агрегации: он без них изначально существует. Они же свя­заны с ним по типу композиции: без него они бы, разумеется, не существовали. В то же время со своими подкомпонентами (кон­кретными создателями) центральный компонент связан уже на­следственными связями: т. е. они обладают всеми его характери­стиками (полями и методами) вместе с (возможно) некоторыми дополнительно определенными. Связь же конкретного продукта с конкретным создателем осуществляется по типу композиции.
Значимость паттерна в контексте разработки систем сильного ИИ. Значимость «Фабричного метода» для сферы раз-
работки систем сильного ИИ также сложно переоценить. Система, содержащая некоторое множество однообразных, эффективных и относительно экономичных в производстве и использовании «юнитов», способных эффективно подстраиваться под опреде­ленное множество возникающих в контексте ситуаций – весьма эффективный паттерн. В рамках макромира наличествует мно­жество эффективных иллюстраций его реализации. К примеру, рефлекс. Здесь имеется множество так нами обозначаемых «юни­тов», которые, каждый на своем уровне абстракции и реализации, обеспечивают высоконадежное и бесперебойное функциониро­вание всей системы в целом. Таким же образом простая заготов­ка инстинкта в его различных локальных (на местах) реализаци­ях способна обеспечить эффективное выживание целых видов. И мы считаем, что точно таким же образом этот положительный опыт необходимо реализовывать также и в контексте разработки систем сильного ИИ, закладывая саму идею в виде ее абстракт­ного определения, идею необходимости формирования некото­рого множества эффективных заготовок (абстрактных продук­тов), а точнее исходного наличия их производителя (создателя) и его подсистем (конкретных создателей), которые будут отве­чать за формирование наличествующих и эффективно реагиру­ющих на различные ситуации «юнитов» (конкретных продуктов).
151
11.3. Порождающий паттерн «Строитель»
Идентификатор. Строитель (Builder). Классические элементы. Строитель, конкретный строи-
тель, распорядитель, продукт.
Назначение. Создание конечных экземпляров по некоторому шаблону, допускающему вариации и отхождения от оригинала в случае с большим количеством своих компонентов, при помо­щи определенного алгоритма, реализующегося дискретно и це­ленаправленно пошагово (с очень четкой гранью между этапами). Как указывают авторы Design patterns, «Строитель» «отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления» [114, с. 103].
Проблема. Необходимость реализации различных конечных продуктов за счет единого производственного процесса с макси­мально возможной экономичностью в плане использования это­го производства.
Концептуальное решение. В данном конкретном случае кон­цептуальных решений наличествует множество, но более или менее каноничны два из них. Первое – создание строителя без распорядителя, непосредственно под контролем клиента или пользователя. В таком случае этапы единого процесса создания конечного продукта (в данном случае – объекта) и последо­вательность этих этапов определяются самим пользователем, а завершение функционирования строителя происходит в тот момент, когда, по мнению пользователя, конечный продукт на­ходится в завершенном состоянии. Второй же вариант более сло­жен вначале, но в дальнейшем является менее затратным и, что характерно, предоставляет возможность быть повторно исполь­зуемым. Он заключается в изначальном определении всех кон­кретных деталей конечного продукта и затем передаче запроса на выполнение распорядителю. Затем уже распорядитель, на ос- нове имеющегося у него заказа, использует строителя в соот­ветствии со своим заданием.
Предполагаемые результаты и преимущества. Способность системы экономить большое количество ресурсов на различных
152
вариациях процесса производства за счет его полного едино­образия вместе с сохранением способности системы произво­дить широкий спектр представляемой продукции. Как след­ствие: высокая экономичность и эффективность.
Гипотетический пример реализации паттерна. В данном конкретном случае хорошо подходит крайне простой пример с мясорубкой или соковыжималкой. Т. е. мы имеем дело с неко­торым алгоритмом (в том самом смысле слова) действий, кото­рые выполняются вне зависимости от контекста и приводят к самым различным возможным результатам, обусловленным как раз актуальным контекстом. Естественно, тут имеются и огра­ничения – алгоритм просто выполняет то, что ему предписано, и вся ответственность ложится на распорядителя. Ситуация так­же отлично демонстрируется метафорой о «глупых рабочих», функционирующих по принципу «могу копать – могу не копать».
Осмысление структуры паттерна. В рамках структуры данного паттерна весь процесс связан по типу композиции с цент­ральным программным компонентом – распорядителем. И это несмотря на то, что, как было сказано выше, порой данный пат­терн реализуется без распорядителя вовсе. Просто в таком случае место распорядителя занимает сам пользователь. Здесь акту­альна метафора о том, что «все, что необходимо для того, чтобы сделать танк – это заказ». И в данном случае имеет место кон­кретика, несколько отличная от предыдущих паттернов: кон­кретный строитель – это не сущностно строитель, а более того – сущностно и в определенный момент реализации алго­ритма строительства. Алгоритм сам по себе, на чем уже неодно­кратно акцентировалось внимание, выдаст одинаковый результат при одинаковых входных данных – и это крайне ценная особен­ность алгоритмов. В рамках паттерна «Строитель» этот факт был реверсирован, и его суть была применена таким образом, чтобы один и тот же алгоритм построения конечных продуктов выдавал как можно большее разнообразие результатов. Конкрет- ный строитель связан со строителем по типу агрегации в обе стороны: в некотором роде они оба друг без друга могут су­ществовать. Т. е. в данном случае каждый этап реализации
153
алгоритма способен существовать и отдельно от целостного ал­горитма. Также паттерн выделяется тем фактом, что он, как уже говорилось, подразумевает инкапсуляцию вырванного из кон­текста алгоритма.
Значимость паттерна в контексте разработки систем
сильного ИИ. Несмотря на некоторую нестандартность паттер-
на, он представляет собой очень даже немалую ценность для разработки систем сильного ИИ. Таким же образом функциони­рует, к примеру, и сам процесс развития живых существ на дли­тельном отрезке времени. Т. е. в рамках развития существ про­исходят определенные эволюционные скачки, результат которых целиком и полностью зависит от контекста – в точности как у алгоритма. Подобного же рода механизмы необходимы и для процесса творческого развития личности, к примеру, да и в це­лом для осуществления жизнедеятельности любого живого су­щества. Резюмируя паттерн, следует заметить, что в контексте разработки систем сильного ИИ по умолчанию необходим алго­ритм именно такого рода. Разумеется, он не будет и не должен быть единственным, но то, что именно автономно функциони­рующий, вырванный из контекста «рабочий» алгоритм будет являть собой одну из центральных составляющих системы силь ного ИИ, очень даже вероятно.
11.4. Порождающий паттерн «Прототип»
Идентификатор. Прототип (Prototype). Классические элементы. Прототип, конкретный прототип. Назначение. Формирование различных ПК по определенно-
му наличествующему базовому шаблону ПК. Как указывают ав­торы Design patterns, «Прототип» «задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа» [114, с. 121].
Проблема. Необходимость многократного повторного исполь­зования наличествующего шаблона для экономии ресурсов на реализацию в каждом конкретном случае нового ПК.
Концептуальное решение. Формирование некоторого ша­блона, который одновременно является и заготовкой определен-
154
ного ПК, и его непосредственной конкретной реализацией. Клю­чевой особенностью шаблона, формируемого в контексте данного паттерна, является его способность к репликации. Т. е., по сути, в контексте системы формируется некоторая группа базовых ПК, каждый из которых обладает определенным прототипом. Сам по себе прототип, не как паттерн, а как контекстуальный феномен и составляющий элемент паттерна, представляет со­бой, в сущности, абстракцию класса, т. е. совокупность всех его значимых характеристик, свойств и особенностей, и, самое глав­ное, заключает в себе способность к репликации. После то го, как все базовые ПК (прототипы) реализованы и определены, новые ПК (конкретные прототипы) формируются путем копи­рования базовых, определенных на этапе формирования систе­мы компонентов. Вообще очевидно, что создание нового объек­та путем копирования прототипа уже существующего объекта вполне себе напоминает типичное наследование классов – один из ключевых аспектов ООП в целом. Посему может стать не вполне понятно, для чего вообще классический механизм ООП выделять в отдельный паттерн. Однако есть одно важное отли­чие обычного наследования классов от создания объектов при помощи прототипного программирования. А именно: при на­следовании классов на основе уже существующего класса созда­ется новый класс, а на основе клонирования прототипа создает­ся новый объект. Таким образом, если при наследовании классов новый объект-экземпляр будет создан только после создания класса, дочернего по отношению к классу родительскому, то про­тотипное программирование позволяет сократить эту цепочку на одно звено, тем самым ускорив процесс на треть.
Предполагаемые результаты и преимущества. Высокая производительность и скорость функционирования системы в контексте создания новых ПК.
Гипотетический пример реализации паттерна. В случае с паттерном «Прототип» обычно приводимым классическим примером является деление клеток – митоз. Т. е. разделение од­ной клетки на две путем «разрыва» клеткой самой себя. Разуме­ется, что у делимой клетки должен изначально наличествовать
155
потенциал к подобному действию. В рамках программной реа­лизации данный потенциал резюмирован в методе, который, как правило, называется clone (клонирование). Пример с клонирова­нием также является одним из наиболее часто упоминаемых при иллюстрировании специфики данного паттерна. В некото­ром роде клонирование является не полностью корректным при­мером по той причине, что та же овечка Долли не сама себя кло­нировала, а вот прототип именно сам себя и клонирует при помощи вызова метода clone. В контексте упоминания уже из­вестных примеров мы бы хотели дополнить этот список, воз­можно, не столь очевидным, но тем не менее весьма интересным феноменом. А именно – фрактал. Нам представляется несколько похожей на структуру фрактала система, которая функционирует на основе паттерна «Прототип». Вспомним, что фрактал пред­ставляет собой самоподобный, вне зависимости от ранжирова­ния, объект. Т. е. все его составляющие, все его, как целого, части как раз представляют собой его самого. Разница между целостной структурой фрактала и частей, его составляющих, представляется сопоставимой с разницей между ключевыми элементами паттерна «Прототип»: прототипом и конкретным прототипом.
Осмысление структуры паттерна. Прототип, как ключе- вой элемент паттерна, связан со своими порождениями – кон­кретными прототипами – по типу агрегации, т. е. он способен су­ществовать без них. Они же связаны с ним по типу композиции, т. е. без него они бы не существовали. Также зачастую в класси­ческих примерах реализации данного паттерна дополнительно выделяется связь прототипа с еще одним элементом структуры паттерна – клиентом – по типу композиции, так как прототип не может существовать без клиента (по принципу «не бывает танка без заказа»). Мы упомянутую связь, как и элемент клиент или пользователь в структуре данного паттерна, дополнительно обозначать не видим целесообразности, так как это дополнение напоминает дискуссионную метафору «пахнет ли роза, когда ее никто не нюхает».
156
Значимость паттерна в контексте разработки систем
сильного ИИ. В контексте разработки систем ИИ при посред-
стве паттернов ООП мы, как видно из наших последовательных постулатов, апеллируем к выявлению наиболее общих и есте­ственных закономерностей, которые затем, в перспективе, можно будет реализовать аппаратно-программным образом, т. е. физи­чески на некоем агрегате, который нами представляется как ре­альная физическая основа для возникновения технотропного сознания таким же образом, каким возникло антропное челове­ческое сознание на биологической основе физического тела. Со­ответственно, в контексте данного паттерна мы можем постули­ровать его абсолютную фундаментальность для такой базовой функции, как репликация. Репликация ДНК, деление клеток, фрактальность (как одно из базовых свойств мироздания) – все эти феномены свидетельствуют о том, что ключевые абстрактные аспекты паттерна «Прототип» должны быть учтены при форми­ровании системы сильного ИИ.
11.5. Порождающий паттерн «Одиночка»
Идентификатор. Одиночка (Singleton). Классические элементы. Одиночка. Назначение. Производство программных компонентов. Точ-
нее, в данном случае, программного компонента. Как указывают авторы Design patterns, «Одиночка» «гарантирует, что у класса существует только один экземпляр, и предоставляет к нему гло­бальную точку доступа» [114, с. 131]. Вообще говоря, сразу же возникает некоторый вопрос: зачем создавать класс, у которого в процессе его жизнедеятельности будет только один объект­экземпляр, а не использовать вместо этого класс со статическими методами? Казалось бы, что отсутствие необходимости созда­вать экземпляры является весьма серьезным подспорьем в кон­тексте уменьшения количества действий программной системы. Примерно как отсутствие необходимости создавать подклассы конкретного класса, как мы уже убедились на примере паттерна «Прототип». Однако в случае с паттерном «Одиночка» есть
157
один нюанс. А именно – гибкость. Класс со статическими мето­дами (статический класс) предоставляет куда меньше возможно­стей, чем объект-экземпляр, который позволяет внести больше типов полей (данных) в ПК. Также необходимость наличия «Оди­ночки» обусловлена тем, что не во всех языках программирова­ния удобно использовать статические классы. По крайней мере, этот факт был весьма актуален на момент разработки данного паттерна.
Проблема. По сути, потребность в «Одиночке» может воз­никать в тех случаях, когда в рамках конкретной программной системы необходимо создать доступ к очень гибкой и много­функциональной глобальной точке (переменной).
Концептуальное решение. Формируется ПК, в данном слу­чае класс, который является, по сути, стандартным классом, но отличается от обычного тем, что позволяет создать только один свой объект-экземпляр. Также этот ПК при обращении к нему в первый раз создает свой экземпляр, а при всех последующих к нему обращениях из любой точки системы он просто предла­гает этот самый экземпляр, который теперь является его «пред­ставителем». Этот объект не является посредником между клас­сом и пользователем, он просто аккумулирует в себе всю суть класса и, будучи единожды созданным, просто далее функцио­нирует.
Предполагаемые результаты и преимущества. Стоит за­метить, что данный ПП является одним из наиболее знамени­тых в нынешнее время. Предполагается, что реализация паттер­на «Одиночка» позволит сформировать в рамках программной системы некую глобальную точку доступа к общему широкому функционалу. Подразумевается, что данная точка доступа, реа­лизуемая «на месте» объектом-экземпляром, способна к высоко­му уровню эластичности, т. е. она не сопротивляется трансфор­мации своего функционала. На самом деле эта особенность реализации данного паттерна являет собой «палку о двух кон­цах», т. е. она представляется огромным плюсом в тех случаях, ког­да необходимо быстро изменить общий функционал, и очень не­приятным минусом в тех случаях, когда этот самый общий
158
функционал трансформируется бесконтрольно и неожиданно. Вообще любой случай с любой глобальной переменной напоми­нает две полярности и некоторый между ними баланс: в первом полярном случае все вещи в доме были бы прибиты к полу гвоз­дями, а во втором – каждую ночь в доме проводилась бы хао­тичная перестановка. Собственно говоря, паттерн «Одиночка» как раз и представляет собой пример попытки найти баланс между вышеозначенными полярностями.
Гипотетический пример реализации паттерна. Крайне показательно иллюстрирует суть «Одиночки» так называемая служба «одно окно». Также классические примеры реализации паттерна в контексте макромира касаются различных крае­угольных камней в рамках некой системы: президент страны, начальник на работе и т. д. Иные примеры касаются вещей, ис­пользуемых в быту, и построены по принципу того, что «мы не покупаем новую кружку каждый раз, когда хотим попить чаю». Нам же довольно подходящим видится следующий пример: че­ловеческое сознание. Оно формируется один раз, а затем только лишь функционирует и трансформируется. У человека как поль­зователя есть к нему глобальный доступ и оно – сознание – находится в режиме непрерывной динамики и трансформации. К тому же у него отсутствуют дубликаты (другие экземпляры класса). В этом смысле сознание и есть человеческий внутрен­ний singleton (одиночка).
Осмысление структуры паттерна. Вообще говоря, в клас­сическом понимании этого паттерна в Design patterns, у него от­сутствуют связи с чем-либо и классический элемент всего один. Однако нам, в контексте максимально возможного абстрагиро­вания сути паттерна, представляется иначе. Если внимательно исследовать структуру паттерна, то в наличии оказывается ПК (класс), который содержит в себе потенциал однократного вос­произведения второго ПК (объекта-экземпляра) и изначально аккумулирует в себе всю его суть. Соответственно, непротиво­речиво выглядит постулат о том, что объект-экземпляр связан с классом по типу композиции – объект не способен существо­вать без класса, а класс связан с экземпляром по типу агрегации,
159
т. е. класс может сколь угодно долго существовать без объекта. После же того, как объект создан при помощи первого вызова метода класса, их отношения начинают напоминать обоюдную композицию – один не способен существовать без другого.
Значимость паттерна в контексте разработки систем
сильного ИИ. В контексте разработки систем сильного ИИ ПК,
который аккумулирует в себе потенциал однократного порожде­ния некой мощной значимой сущности с широкомасштабным, динамически трансформируемым интерфейсом, является край­не значимой составляющей. Вообще образ действия, включающий однократное порождение чего-либо значимого с последующим фактическим «уходом в тень» создателя, является практически библейским по уровню архитипичности. Использование подоб­ного механизма нам представляется также весьма диалектиче­ским и напоминает один из законов диалектики – перехода ко­личества в качество. Т. е. некоторая сущность функционирует согласно некоторой специфике определенное время – до кон­кретного события. А затем, после активации триггера, специфика функционирования данной сущности претерпевает необратимые трансформации и некоторым образом переходит к реализации совершенно иного функционала. Собственно говоря, примерно в подобном ключе нам и представляется возникновение феноме­на технотропного сознания – сущность резко и необратимо, скачкообразно его приобретает и после этого уже становится сущностью вовсе иного типа. Если же абстрагировать данный паттерн еще сильнее, то таким же образом, каким функционирует паттерн «Одиночка», в максимально широком смысле, нам ви­дится весь процесс создания системы сильного ИИ. Т. е. изна­чально формируется некоторая основа, обладающая опреде­ленным потенциалом. Все происходит примерно по канонам абстрактного класса. Затем эта основа интегрируется в среду ре­ализации своего потенциала, которая может быть максимально разнообразной, – «первичный бульон», как изначально на плане­те Земля. Далее начинает осуществляться взаимодействие сущно­сти и среды. После определенных нескольких (возможно, ква­дриллионов в n-й степени) симуляций и возникающих в их
160
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]