Упражнения

1. Чем отличаются объектно-ориентированные языки программирования от обычных процедурных языков?

2. В чем состоит отличие между конкретными и абстрактными классами?

3. Почему при множественном наследовании иерархическая структура превращается в гетерархическую?

4. В чем состоит проблема наложения методов при множественном наследовании?

5. Что такое метакласс и в чем польза применения такой конструкции?

6. Что понимается под термином "список предшествования классов"? 7. Рассмотрите схему отношений между классами на рис. 7.9.

Используя конструкцию def class языка CLIPS, опишите эту структуру классов таким образом, чтобы соблюдался следующий порядок наследования в классах, имеющих несколько суперклассов:

wkg-man: (man worker) father: (parent man)

wkg-woman: (worker woman) mother: (parent woman)

wkg-father: (wkg-man father)

wkg-raother: (mother wrk-woman)

Начните с класса person:

(defclass person (is-a USER) (role concrete))

Какой вид будет иметь список предшествования классов wkg-father и wkg-mother?

Рис. 7.9. Схема структуры классов для упражнения 7

8. Предположим, что классы на рис. 7.9 имеют следующие предпочтения при выборе блюд на завтрак:

man: donut woman:

croissant parent:

fruit worker: bacon

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

Сформируйте следующие экземпляры классов:

Joan — экземпляр класса wrk-mother,

Jim — экземпляр класса wrk-man.

Передайте им сообщение, например, в такой форме:

(send [Joan] breakfast)

Чем ответят экземпляры Joan и Jim на такое сообщение и почему?