Интеллектуальные агенты. Конкретные архитектуры интеллектуальных агентов. Языки программирования агентов., страница 6

1.2.3 Агенты и объекты.

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

Кроме этих объективных сходств существуют также существенные различия между агентами и объектами. Первое отличие в уровне автономности агентов и объектов. Вспомним, что основной характеристикой объектно-ориентированного программирования является инкапсуляция, – заключающаяся в том, что объекты могут осуществлять контроль над своим внутренним состоянием. В языках программирования, таких как Ява можно объявлять переменные и методы как private, означающие, что они доступны только изнутри объекта. (Мы можем также объявить их public, означающие, что они могут быть доступны везде, и на самом деле мы должны делать так для методов, которые должны быть доступны из других объектов. Но использование  public переменных считается плохим стилем программирования.)  Таким образом, объект может быть представлен как показывающий автономность над своим состоянием: он его контролирует. Но объект не выказывает контроля над своим поведением. Так что  если метод m сделан доступным для выполнения другими объектами, то они могут это делать когда захотят, так как объект объявил метод как public, так что соответственно он не имеет контроля над выполнением или не выполнением этого метода. Конечно, объект должен объявлять методы доступными для других объектов или мы не сможем построить из них систему. Это обычно не  является решением, потому что если мы строим систему, то мы конструируем объекты, которые входят в нее, и, таким образом, могут считаться разделяющими общую цель. Но во многих типах мультиагентных систем (в частности тех, которые содержат агентов построенных различными организациями или людьми) агенты не могут считаться преследующими общую цель. Нельзя ожидать, что агент i выполнит действие (метод) a только потому, что агент j ожидает этого – i может быть не заинтересован в выполнении a. Так что мы не можем представить агентов, выполняющих методы один другого, можно представить, как запрашивающих действия, которые должны быть выполнены. Если j запросит i выполнить a, тогда i может быть выполнит действие, а может и не выполнит. Ключевая точка контроля над решением выполнять или не выполнять действие, таким образом, различна для агентных и объектных систем. В объектно-ориентированном случае это решение лежит на объекте вызывающем это метод. В агентном случае решение зависит целиком от агента, получившего запрос. Это различие между объектами и агентами можно суммировать в следующем слогане: объекты делают это бесплатно, агенты делают за деньги.

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

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

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