- •Теоретические основы объектно-ориентированного программирования
- •Объектная декомпозиция
- •Диаграмма обслуживания автомашин на бензоколонке
- •Диаграмма объектов имитационной модели бензоколонки
- •Объектная декомпозиция Блока колонок: 1 - когда освободится колонка? 3 - колонка свободна? 2 - освободить колонку 4 - занять колонку
- •Диаграмма объектов графического редактора
- •Диаграмма состояний интерфейса пользователя программы «Записная книжка»
- •Диаграмма объектов предметной области программы «Записная книжка»
- •Обозначение ассоциации: а - с указанием имени ассоциации и ее направления; б - с указанием имен ролей; в - с указанием множественности
- •Контекстная диаграмма классов программы «Записная книжка»
- •Объекты и сообщения
- •Типы отношений между объектами
- •Соответствие объекта-абстракции классу и объектам-переменным
- •Основные средства разработки классов
- •Иерархии классов при различных видах наследования
- •Иерархия классов Окно и Окно_меняющее_цвет
- •Иерархия классов Окно и Окно_с_текстом
- •Иерархия классов при сложном полиморфизме
- •Необходимость позднего связывания
- •Реализация механизма позднего связывания
- •Необходимость явного указания типа объекта, адресуемого указателем родительского класса
- •Вид окна сообщения
- •Структура полей класса Сообщение
- •Дополнительные средства и приемы разработки классов
- •Организация стека вызовов
- •Определение класса
- •Организация списка объектов с использованием статических компонентов класса
- •Конструкторы и деструкторы
- •Наследование
- •Иерархия классов Целое число - Вещественное число
- •Диаграмма классов с наследованием от двух классов и объектным полем
- •Иерархия с многократным наследованием
- •Исключения
- •1. Динамическая проверка типа объекта:
- •2. Динамическое переопределение типа объекта:
- •3. Динамическое определение типа объекта:
-
Вид окна сообщения
Класс Сообщение -родитель:
класс Окно_с_текстом: поле Кнопка: Окно_с_текстом метод Инициализировать
(aX1, aY1, aX2, aY2, aColor, aXt, aYt, aText, bX1, bY1, bX2, bY2, bColor, bXt, bYt, bText) метод Изобразить Конец описания.
М
етод
Инициализировать при этом должен
получить двойной набор параметров по
сравнению с методом Инициализировать
класса родителя. Первым набором
инициализируются родительские поля, а
вторым - аналогичные поля включенного
объекта Кнопка (Рис. 2.9.).
Метод Изобразить должен выводить на экран оба окна: одно - используя родительский метод, второе - используя метод поля-объекта Кнопка. Метод рисования Кнопки при этом должен быть вызван после родительского, чтобы Кнопка была нарисована «поверх» окна.
-
Структура полей класса Сообщение
Доступ к компонентам (полям и методам) объектного поля осуществляют с указанием имени объекта, имени объектного поля и имени компонента:
<имя объекта>.<имя объектного поля>.<имя поля> или
<имя объекта>.<имя объектного поля>.<имя методах
Количество вложенных объектных полей не ограничено.
Наполнение. Включение объектов в некоторый класс можно реализовать и с использованием указателей на эти объекты. В отличие от объектного поля, которое включает в класс точно указанное количество объектов (один или более - при использовании массива объектов) конкретного класса, использование указателей позволяет включить ноль или более объектов, если они собраны в массив или списковую (линейную или нелинейную) структуру.
Наполнение (класс Функция). В качестве примера рассмотрим класс, объекты которого должны осуществлять разбор заданного алгебраического выражения (выражение представляет собой запись функции от одной переменной - х). Данный объект должен обрабатывать следующие сообщения:
1) «Конструировать» - в процессе конструирования должно строиться бинарное дерево вычисления выражения (8), переданного в списке параметров;
2
)
«Вычислить» - при обработке этого
сообщения должно вычисляться значение
функции по заданному значению аргумента.
В качестве элементов дерева будем использовать объекты класса Триада, содержащего поля Операция, Результат операции, а также адреса левого и правого поддеревьев бинарного дерева разбора выражения. Объявление класса Триада, реализующего элемент дерева вычислений, может выглядеть следующим образом:
-
Дерево вычисления выражения
Класс Триада:
поле-адрес Левое_поддерево: ^Триада
поле-адрес Правое_поддерево: ^Триада
поле Операция
поле Результат
метод Инициализировать (строка-выражение) Конец описания.
При описании класса Функция также используется поле-адрес, которое содержит адрес дерева разбора, построенного из объектов класса Триада. Пока дерево разбора не создано, поле Корень_дерева должно содержать нулевой адрес (nil или NULL в зависимости от используемого языка):
Класс Функция:
поле-адрес Корень_дерева: ^Триада
метод Конструировать (строка-выражение)
метод Вычислить Конец описания.
Механизм наполнения в основном используется для подключения объекта или некоторой совокупности объектов к классу, реализующему управление сразу всей структурой.
