![](/user_photo/2706_HbeT2.jpg)
- •Технология программирования
- •Режим доступа к электронному аналогу печатного издания: http://www.Libdb.Sssu.Ru
- •Оглавление
- •Введение
- •1. Основные понятия объектно-ориентированного подхода
- •1.1. Объектно-ориентированная разработка программ
- •1.2. Объектно-ориентированные языки программирования
- •1.3. Сквозной пример
- •Контрольные вопросы
- •2. Первая фаза жизненного цикла – анализ требований и предварительное проектирование системы. Объектно-ориентированное моделирование
- •2.1. Объектная модель системы
- •2.1.1. Объекты и классы
- •2.1.2. Атрибуты объектов
- •2.1.3. Операции и методы
- •2.1.4. Зависимости между классами (объектами)
- •2.1.5. Атрибуты зависимостей
- •Зарегистрирован
- •2.1.6. Имена ролей, квалификаторы
- •2.1.7. Агрегация
- •2.1.8. Обобщение и наследование
- •2.1.9. Абстрактные классы
- •2.1.10. Множественное наследование
- •2.1.11. Связь объектов с базой данных
- •2.2. Построение объектной модели
- •2.2.1. Определение классов
- •2.2.2. Подготовка словаря данных
- •2.2.3. Определение зависимостей
- •2.2.4. Уточнение атрибутов
- •2.2.5. Организация системы классов с использованием наследования
- •2.2.6. Дальнейшее исследование и усовершенствование модели
- •2.3. Пример объектной модели
- •2.3.1. Определение объектов и классов
- •2.3.2. Подготовка словаря данных
- •2.3.3. Определение зависимостей
- •2.3.4. Уточнение атрибутов
- •2.3.5. Организация системы классов с использованием наследования
- •2.3.6. Дальнейшее усовершенствование модели
- •2.4. Выделение подсистем
- •2.4.1. Понятие подсистемы
- •2.4.2. Интерфейсы и окружения
- •2.5. Динамическая модель системы или подсистемы
- •2.5.1. События, состояния объектов и диаграммы состояний
- •2.5.2. Условия
- •2.5.3. Активности и действия
- •2.5.4. Одновременные события. Синхронизация
- •2.5.5. Вложенные диаграммы состояний
- •2.5.6. Динамическая модель банковской сети
- •2.6. Функциональная модель подсистемы
- •2.6.1. Диаграммы потоков данных
- •2.6.2. Описание операций
- •2.6.3. Ограничения
- •2.6.4. Функциональная модель банковской сети
- •2.7. Заключительные замечания к разделу
- •Контрольные вопросы
- •3. Вторая фаза жизненного цикла – конструирование системы
- •3.1. Разработка архитектуры системы
- •3.1.1. Разбиение системы на модули
- •3.1.2. Выявление асинхронного параллелизма
- •3.1.3. Распределение модулей и подсистем по процессорам и задачам
- •3.1.4. Управление хранилищами данных
- •3.1.5. Управление глобальными ресурсами
- •3.1.7. Пограничные ситуации
- •3.1.8. Обзор архитектур прикладных систем
- •3.2. Архитектура системы управления банковской сетью
- •3.3. Разработка объектов
- •3.3.1. Совместное рассмотрение трёх моделей
- •3.3.2. Разработка алгоритмов, реализующих полученные операции
- •3.3.3. Оптимизация разработки
- •3.3.4. Реализация управления
- •3.3.5. Уточнение наследования классов
- •3.3.6. Разработка зависимостей
- •Контрольные вопросы
- •4. Сравнительный анализ объектно-ориентированных методологий разработки программных систем
- •4.1. Методология omt
- •4.2. Методология sa/sd
- •4.3. Методология jsd
- •4.4. Методология osa
- •Аналитические возможности сравниваемых методологий объектно-ориентированного анализа
- •Возможности сравниваемых методов объектно-ориентированного анализа, используемые на этапе разработки системы
- •5. Третья фаза жизненного цикла – реализация объектно-ориентированного проекта
- •5.1. Объектно-ориентированный стиль программирования
- •5.2. Объектно-ориентированные системы программирования
- •5.3.1. Реализация классов
- •5.3.2. Порождение объектов
- •5.3.3. Вызов операций
- •5.3.4. Использование наследования
- •5.3.5. Реализация зависимостей
- •5.4. Другие объектно-ориентированные системы программирования
- •5.4.1. Реализация классов
- •5.4.2. Порождение объектов
- •5.4.3. Вызов операций
- •5.4.4. Реализация наследования
- •5.4.5. Реализация зависимостей
- •5.5. Не объектно-ориентированные системы программирования
- •5.5.1. Преобразование классов в структуры данных
- •5.5.2. Передача параметров методам
- •5.5.3. Размещение объектов в памяти
- •5.5.4. Реализация наследования
- •5.5.5. Выбор методов для операций
- •5.5.6. Реализация зависимостей
- •5.5.7. Объектно-ориентированное программирование на Фортране
- •5.5.8. Чем неудобны не объектно-ориентированные системы программирования
- •Контрольные вопросы
- •Библиографический список
- •Учебное издание
5.5. Не объектно-ориентированные системы программирования
Прикладную программную систему, спроектированную по методологии OMT, совсем не обязательно реализовывать на объектно-ориенти-рованном языке. Рассмотрим, как объектно-ориентированный проект можно реализовать на языке C (как известно, он не является объектно-ориентированным). Проще всего это сделать, отобразив объектно-ориенти-рованные конструкции на язык C (для объектно-ориентированных языков такое отображение автоматически реализуется компилятором). Реализация состоит в выполнении следующих шагов:
Представить классы с помощью других структур данных (если языком реализации является C, то классы удобно представлять как структуры языка C).
Обеспечить передачу параметров методам.
Реализовать наследование.
Обеспечить механизм выбора нужного метода.
Реализовать зависимости.
Реализовать синхронизацию параллельных процессов.
Обеспечить упрятывание (инкапсуляцию) внутренних деталей реализации классов.
Рассмотрим, как можно выполнить перечисленные шаги при реализации на языке C, на примере реализации графического редактора (п. 5.2).
5.5.1. Преобразование классов в структуры данных
В языке C класс можно рассматривать как тип структуры, определённый в этом языке: поля структуры соответствуют атрибутам класса (при этом каждый атрибут может иметь простой либо составной тип, т.е. тип структуры или массива). В таком случае каждый объект некоторого класса будет представлен конкретной структурой, экземпляром соответствующего типа структуры.
Методы реализуются в виде набора функций, описания которых можно указать в комментарии при определении типа структуры, определяющего описываемый класс. Программист должен сам следить за тем, чтобы при работе с экземплярами этого типа структуры использовались для доступа к её полям только функции, перечисленные в указанном комментарии. В языке C++ это автоматически отслеживается компилятором и его подсистемой поддержки выполнения программ. Все функции, соответствующие методам, имеют дополнительный параметр, определяющий экземпляр структуры (объект), к которому применяется метод. В языке C++ этот параметр автоматически подставляется компилятором.
Например, класс Window можно представить как следующую структуру (struct) языка C:
struct Window
{
/* структура соответствует классу
* class Window
* для которого определены следующие методы (все методы имеют
* дополнительный параметр, Window* this, определяющий экземпляр
* структуры (объект), к которому применяется метод):
* public:
* Window(Length x0, Length y0, Length width, Length height,
* Window* this);
* D_Window (Window* this); -- соответствует деструктору ~Window()
* void add_box (Length x, Length y, Length width, Length height,
* Window* this);
* void add_circle (Length x, Length y, Length radius, Window* this);
* void clear_selections (Window* this);
* void cut_selections (Window* this);
* Group* group_selections (Window* this);
* void move_selections (Length deltax, Length deltay, Window* this);
* void redraw_all (Window* this);
* void select_item (Length x, Length y, Window* this);
* void ungroup_selections (Window* this);
* private:
* void add_to_selections (Shape* shape, Window* this);
*/
Length xmin;
Length ymin;
Length xmax;
Length ymax;
};
При этом предполагается, что тип Length введён через
typedef floast Length;
Ссылки на объекты класса Window реализуются как указатели языка C:
struct Window* window;
Length x1 = window->xmin;
Объект может быть при этом размещён статически, автоматически (в стеке) или динамически (в куче).