- •Теоретические основы объектно-ориентированного программирования
- •Объектная декомпозиция
- •Диаграмма обслуживания автомашин на бензоколонке
- •Диаграмма объектов имитационной модели бензоколонки
- •Объектная декомпозиция Блока колонок: 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 в зависимости от используемого языка):
Класс Функция:
поле-адрес Корень_дерева: ^Триада
метод Конструировать (строка-выражение)
метод Вычислить Конец описания.
Механизм наполнения в основном используется для подключения объекта или некоторой совокупности объектов к классу, реализующему управление сразу всей структурой.