- •Теоретические основы объектно-ориентированного программирования
- •Объектная декомпозиция
- •Диаграмма обслуживания автомашин на бензоколонке
- •Диаграмма объектов имитационной модели бензоколонки
- •Объектная декомпозиция Блока колонок: 1 - когда освободится колонка? 3 - колонка свободна? 2 - освободить колонку 4 - занять колонку
- •Диаграмма объектов графического редактора
- •Диаграмма состояний интерфейса пользователя программы «Записная книжка»
- •Диаграмма объектов предметной области программы «Записная книжка»
- •Обозначение ассоциации: а - с указанием имени ассоциации и ее направления; б - с указанием имен ролей; в - с указанием множественности
- •Контекстная диаграмма классов программы «Записная книжка»
- •Объекты и сообщения
- •Типы отношений между объектами
- •Соответствие объекта-абстракции классу и объектам-переменным
- •Основные средства разработки классов
- •Иерархии классов при различных видах наследования
- •Иерархия классов Окно и Окно_меняющее_цвет
- •Иерархия классов Окно и Окно_с_текстом
- •Иерархия классов при сложном полиморфизме
- •Необходимость позднего связывания
- •Реализация механизма позднего связывания
- •Необходимость явного указания типа объекта, адресуемого указателем родительского класса
- •Вид окна сообщения
- •Структура полей класса Сообщение
- •Дополнительные средства и приемы разработки классов
- •Организация стека вызовов
- •Определение класса
- •Организация списка объектов с использованием статических компонентов класса
- •Конструкторы и деструкторы
- •Наследование
- •Иерархия классов Целое число - Вещественное число
- •Диаграмма классов с наследованием от двух классов и объектным полем
- •Иерархия с многократным наследованием
- •Исключения
- •1. Динамическая проверка типа объекта:
- •2. Динамическое переопределение типа объекта:
- •3. Динамическое определение типа объекта:
-
Диаграмма объектов имитационной модели бензоколонки
На Рис. 1.3. представлена диаграмма объектов имитационной модели бензоколонки. На этой диаграмме показаны объекты и сообщения, которые эти объекты передают друг другу. Полученную модель можно реализовать в виде объектно-ориентированной программы. При программировании модели блока колонок, очереди и генератора потока автомашин будут представлены в виде объектов некоторых специально разработанных классов, а управляющая модель - в виде основной программы, инициирующей процесс моделирования. Передача сообщений в системе будет программироваться как вызовы соответствующих методов объектов.
Объектная декомпозиция, так же, как и процедурная, может применяться многократно или быть многоуровневой. Это значит, что каждый объект может рассматриваться как система, которая состоит из элементов, взаимодействующих друг с другом через передачу сообщений.
При многоуровневой декомпозиции на каждом уровне мы получаем объекты с более простым поведением, что позволяет разрабатывать системы повышенной сложности по частям.
Покажем, как производят многоуровневую декомпозицию объекта Блок колонок из примера Пример 1.1.
-
Декомпозиция объекта (Блок колонок). Модель блока колонок должна включать модели колонок и некоторый управляющий объект, который назовем Монитором. Монитор, получив сообщение, интерпретирует его и при необходимости генерирует сообщения моделям колонок. Например, получив сообщение-запрос о времени освобождения колонки, монитор отправит сообщения-запросы колонкам и выберет минимальное время из сообщенных колонками. Это минимальное время он вернет модели в качестве ответа на ее запрос. Получив сообщение о наступлении времени освобождения колонки, Монитор отправит соответствующие сообщения модели очереди и освобождаемой колонке (Рис. 1.4.).
Модель колонки в этом случае должна по запросам менять состояние колонки (свободна или занята) и отвечать на вопросы о занятости.
-
Объектная декомпозиция Блока колонок: 1 - когда освободится колонка? 3 - колонка свободна? 2 - освободить колонку 4 - занять колонку
Безусловно, это не единственный вариант декомпозиции объекта Блок колонок. При необходимости можно найти другие механизмы реализации того же поведения. Выбор конкретного варианта в каждом случае осуществляется разработчиком.
Таким образом, становится понятно, что в процессе объектной декомпозиции имитационных моделей выделяют части предметной области, которые будут моделироваться как единое целое, обладающее собственным состоянием и поведением, и определяют характер взаимодействия этих частей.
Несколько сложнее дело обстоит с распространением идеи объектной декомпозиции на классы задач, напрямую не связанных с имитацией. По сути, в этом случае мы как бы программно имитируем поведение разрабатываемой системы.
Проиллюстрируем сначала на очень простом примере объектную декомпозицию для задач, не связанных с имитацией.
-
Простейший графический редактор (вариант 1). Выполним объектную декомпозицию программы, которая по запросу пользователя рисует одну из двух фигур: квадрат или круг. При желании пользователь должен иметь возможность изменить цвет контура, размер фигуры и координаты ее центра.
По правилам выполнения объектной декомпозиции разрабатываем имитационную модель системы. Для этого придется проанализировать все происходящие в имитируемой системе процессы и выделить элементы, обладающие собственным поведением, воздействующие на другие элементы и/или являющиеся объектами такого воздействия.
Основной процесс системы - управление рисованием фигур, указанных пользователем. Все команды пользователя должны интерпретироваться, и в результате интерпретации должны формироваться команды на рисование или изменение параметров фигур. Эти процессы можно моделировать, используя три объекта: Монитор (блок управления, который получает и интерпретирует команды пользователя) и два объекта - фигуры (Рис. 1.5.), каждый со своими параметрами.