Шаг 110.
Объектно-ориентированная система FLAVOR. Свойства и методы

    На этом шаге мы рассмотрим описание свойств и методов.

    Содержащиеся в объекте данные находятся в переменных, которые называются переменными экземпляра (Instance Variables) или свойствами (Attribute). Переменные экземпляра являются локальными переменными каждого объекта; у них есть имя и значение. У объектов одного типа переменные экземпляра имеют одинаковые имена, но их значения, разумеется, могут отличаться.

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

    Предусмотренные в объекте действия называются методами (Method). Методы - это функциональные свойства, определяющие использование объекта в виде функции или процедуры с побочным эффектом. Набор методов не фиксирован, поэтому его можно расширять, определяя новые методы.

    Определение метода флэйвера производится при помощи формы DEFMETHOD:

   (DEFMETHOD (FLAV . METH) ARGS . BODY)

    Форма связывает определение флэйвера FLAV с методом METH, который вызывается с аргументами ARGS, задаваемыми лямбда-списком. Телом метода BODY является произвольное выражение языка LISP.

    Например:

   ; Определение метода :ВРАЩАЙСЯ
   (DEFMETHOD
      (ТЕЛО :ВРАЩАЙСЯ)                     ; Флэйвер и метод
      ; ----------------------------------------------------
      (ОТНОСИТ-УГОЛ ПЕРЕМЕЩЕНИЕ OLDX OLDY) ; Аргументы метода
      ; ----------------------------------------------------
      (SETQ ОТНОСИТ-УГОЛ                   ;
            СКОРОСТЬ ПЕРЕМЕЩЕНИЕ)          ;
      (LOOP                                ;
          ( (= ОТНОСИТ-УГОЛ 0) )           ;    Т е л о
                 ...                      ...
          )                                ;  м е т о д а
      )                                    ;
   )                                       ;

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

    Методы-демоны (Daemon Method), или короче, демоны, - это вспомогательные методы, которые объявляются вместе с определением основного метода. Если основной метод получит сообщение, то без упоминания вычисляется и демон.

    Демоны бывают двух сортов [1, с.115-116]: пред- и постдемоны. Преддемон (Befor-Daemon) - это метод, который выполняется всегда перед выполнением основного метода. Постдемон (After-Daemon) выполняется соответственно после выполнения основного метода.

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

    Тип демона выражается ключевыми словами :BEFORE и :AFTER (пред- и постдемоны).

    Например:

   (DEFMETHOD
      (ПЛАНЕТА :AFTER :ВРАЩАЙСЯ)        ; Флэйвер и метод
                                        ; с постдемоном
      ; --------------------------------------------------
      (ОЧЕРЕДНОЙ-СПУТНИК)               ; Аргументы метода
      ; --------------------------------------------------
      (SETQ S СПИСОК-СПУТНИКОВ)         ;
      (LOOP                             ;
          ( (NULL S) )                  ;      Т е л о
          (SETQ ОЧЕРЕДНОЙ-СПУТНИК       ;
                (POP S))                ;     м е т о д а
              ...                      ...
                                        ;
      )
   )

    Композицию методов можно осуществлять не только по времени через пред- и постдемоны, но и другими средствами. Способ композиции методов можно выражать, например, функцией, на основе которой определяется вычисление методов, связанных с известным сообщением или ситуацией. Например, композиция методов с помощью функции AND вычисляется до тех пор, пока не встретится первый метод, значение которого NIL.

   


(1) Хювенен Э., Сеппянен Й. Мир Лиспа. В 2-х т. Т.2: Методы и системы программирования. - М.: Мир, 1990. - 319 с.

    На следующем шаге мы рассмотрим обмен сообщениями.




Предыдущий шаг Содержание Следующий шаг