Рис. 12.3. Общий вид простого логического цикла активизации агента |
12.4.2.2. Стратегии логического вывода агента
Этот агент обладает способностями рассуждать, реализованными частично классом >proposition
и частично м етодо м >determineVacationAppropriate()
. Вспомните, что в классе >proposition
объявлен метод >operator() =0
в виде чисто виртуальной функции. Поэто м у в производно м к л ассе необходи м о реализовать м етод operator (). Мы используем этот оператор, чтобы объект предположения мог самостоятельно определить свою «суть», т. е. понять, истинно данное предположение или ложно. Это означает самодостаточность классов предположений. Именно в самодостаточности и состоит фундаментальный принцип объектно-ориентированного программирования: класс представляет собой самостоятельную конструкцию, инкапсулирующую его характеристики и поведение. Итак, одной из основных линий поведения класса предположений и его потомков является способность определять, истинно данное предположение или нет. Для реализации этого средства используется перегрузка операторов и объекты-функции. Рассмотри м фрагменты определения класса >proposition
и определений его потомков.
>//Листинг 12.6. Фрагменты определений класса
>// proposition и его потомков
>template bool proposition::operator&&(
>proposition &X)
>{
>return((*this)() &&X());
>template bool proposition::operator||(
>proposition &X)
>{
>return((*this)() || X());
>template proposition::operator void*(void) {
>return((void*)(TruthValue));
>bool trip__announcement::operator()(void) {
>list::iterator I; if(directTrip()){
> return(true);
>}
>I = UniverseOfDiscourse.begin();
>if(validTrip(I,Origin)){
> return(true);
>}
>return(false);
>}
Операторы "||" и "&&", используемые в классах предположений, позволяют определить, истинно данное предположение или ложно. В каждом из этих определений операторов в конечном счете вызывается метод >operator ()
, определенный в классе-потомке. Обратите внимание на определение оператора "||" (см. листинг 12.6). Этот оператор определен следующим образом.
>template bool proposition::operator||
>(proposition &X)
>{
>return((*this)() || X());
>}
Это определение позволяет использовать следующий код.
>trip_announcement А;
>performance_statement В;
>if (А || В) {
>// Какие-нибудь действия.
>}
При вычис л ении выражений А или В будет вызван оператор operator (). Каждый класс предположений определяет поведение оператора operator () по своему. Напри м ер, в классе trip_announcement