Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лекции 2010.doc
Скачиваний:
69
Добавлен:
17.03.2015
Размер:
954.37 Кб
Скачать
      1. Вид окна сообщения

Класс Сообщение -родитель:

класс Окно_с_текстом: поле Кнопка: Окно_с_текстом метод Инициализировать

(aX1, aY1, aX2, aY2, aColor, aXt, aYt, aText, bX1, bY1, bX2, bY2, bColor, bXt, bYt, bText) метод Изобразить Конец описания.

Метод Инициализировать при этом должен получить двойной набор параметров по сравнению с методом Инициализировать класса родителя. Первым набором инициализируются родительские поля, а вторым - аналогичные поля включенного объекта Кнопка (Рис. 2.9.).

Метод Изобразить должен выводить на экран оба окна: одно - используя родительский метод, второе - используя метод поля-объекта Кнопка. Метод рисования Кнопки при этом должен быть вызван после родительского, чтобы Кнопка была нарисована «поверх» окна.

      1. Структура полей класса Сообщение

Доступ к компонентам (полям и методам) объектного поля осуществляют с указанием имени объекта, имени объектного поля и имени компонента:

<имя объекта>.<имя объектного поля>.<имя поля> или

<имя объекта>.<имя объектного поля>.<имя методах

Количество вложенных объектных полей не ограничено.

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

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

1) «Конструировать» - в процессе конструирования должно строиться бинарное дерево вычисления выражения (8), переданного в списке параметров;

2 ) «Вычислить» - при обработке этого сообщения должно вычисляться значение функции по заданному значению аргумента.

В качестве элементов дерева будем использовать объекты класса Триада, содержащего поля Операция, Результат операции, а также адреса левого и правого поддеревьев бинарного дерева разбора выражения. Объявление класса Триада, реализующего элемент дерева вычислений, может выглядеть следующим образом:

  1. Дерево вычисления выражения

Класс Триада:

поле-адрес Левое_поддерево: ^Триада

поле-адрес Правое_поддерево: ^Триада

поле Операция

поле Результат

метод Инициализировать (строка-выражение) Конец описания.

При описании класса Функция также используется поле-адрес, которое содержит адрес дерева разбора, построенного из объектов класса Триада. Пока дерево разбора не создано, поле Корень_дерева должно содержать нулевой адрес (nil или NULL в зависимости от используемого языка):

Класс Функция:

поле-адрес Корень_дерева: ^Триада

метод Конструировать (строка-выражение)

метод Вычислить Конец описания.

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