Объектно-ориентированного подхода

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ

Учебное пособие

Рекомендовано к внутривузовскому изданию

редакционно-издательским советом ЮРГУЭС

в качестве учебного пособия для студентов 2-3 курсов специальностей

080801 «Прикладная информатика (в сфере сервиса)»,

230201 «Информационные системы и технологии»

и направлений подготовки бакалавров

230400 «Информационные системы и технологии»

и 230700 «Прикладная информатика» всех форм обучения

 

 

Шахты

ФГБОУ ВПО «ЮРГУЭС»

2012

УДК 004.42(075.8)

ББК 32.973.26-018я73

Т384

Составитель:

к.т.н., доцент кафедры «Информационные системы и радиотехника» ФГБОУ ВПО «ЮРГУЭС»

Д.В. Медведев

Рецензенты:

д.т.н., профессор, заведующий кафедрой «МО» ФГБОУ ВПО «ЮРГУЭС»

С.П. Петросов

к.т.н., доцент кафедры «Информационные системы и радиотехника»

ФГБОУ ВПО «ЮРГУЭС»

В.Г. Манжула

директор ООО «Дайком»

М.В. Кулиниченко

Т384 Технология программирования : учеб. пособие / составитель Д.В. Медведев. – Шахты : ФГБОУ ВПО «ЮРГУЭС», 2012. – 158 с.

ISBN 978-5-93834-774-8

В пособии отражены основные принципы объектно-ориентирован-ного программирования – от проектирования до реализации современных программных продуктов.

Цель данного учебного пособия – введение в объектно-ориентиро-ванный подход к разработке и реализации прикладных программных систем с использованием современного инструментария.

Предназначено для студентов 2-3 курсов специальностей 080801 «Прикладная информатика (в сфере сервиса)», 230201 «Информационные системы и технологии» и направлений подготовки бакалавров 230400 «Информационные системы и технологии» и 230700 «Прикладная информатика» всех форм обучения.

 

УДК 004.42(075.8)

ББК 32.973.26-018я73

Режим доступа к электронному аналогу печатного издания: http://www.libdb.sssu.ru

 

 

ISBN 978-5-93834-774-8 © ФГБОУ ВПО «Южно-Российский государственный

университет экономики и сервиса», 2012

ОГЛАВЛЕНИЕ

Введение.................................................................................................. 6

1. Основные понятия объектно-ориентированного подхода. 7

1.1. Объектно-ориентированная разработка программ. 9

1.2. Объектно-ориентированные языки программирования. 10

1.3. Сквозной пример. 11

Контрольные вопросы......................................................................... 14

2. Первая фаза жизненного цикла – анализ требований и предварительное проектирование системы. Объектно-ориентированное моделирование. 15

2.1. Объектная модель системы.. 16

2.1.1. Объекты и классы.. 16

2.1.2. Атрибуты объектов. 18

2.1.3. Операции и методы.. 18

2.1.4. Зависимости между классами (объектами) 22

2.1.5. Атрибуты зависимостей. 25

2.1.6. Имена ролей, квалификаторы.. 27

2.1.7. Агрегация. 28

2.1.8. Обобщение и наследование. 30

2.1.9. Абстрактные классы.. 33

2.1.10. Множественное наследование. 34

2.1.11. Связь объектов с базой данных. 38

2.2. Построение объектной модели. 46

2.2.1. Определение классов. 46

2.2.2. Подготовка словаря данных. 47

2.2.3. Определение зависимостей. 48

2.2.4. Уточнение атрибутов. 49

2.2.5. Организация системы классов

с использованием наследования. 50

2.2.6. Дальнейшее исследование и усовершенствование модели. 51

2.3. Пример объектной модели. 52

2.3.1. Определение объектов и классов. 52

2.3.2. Подготовка словаря данных. 53

2.3.3. Определение зависимостей. 55

2.3.4. Уточнение атрибутов. 57

2.3.5. Организация системы классов с использованием наследования 58

2.3.6. Дальнейшее усовершенствование модели. 59

2.4. Выделение подсистем. 60

2.4.1. Понятие подсистемы.. 60

2.4.2. Интерфейсы и окружения. 63

2.5. Динамическая модель системы или подсистемы.. 64

2.5.1. События, состояния объектов и диаграммы состояний. 65

2.5.2. Условия. 68

2.5.3. Активности и действия. 69

2.5.4. Одновременные события. Синхронизация. 71

2.5.5. Вложенные диаграммы состояний. 73

2.5.6. Динамическая модель банковской сети. 73

2.6. Функциональная модель подсистемы.. 79

2.6.1. Диаграммы потоков данных. 79

2.6.2. Описание операций. 82

2.6.3. Ограничения. 84

2.6.4. Функциональная модель банковской сети. 84

2.7. Заключительные замечания к разделу. 88

Контрольные вопросы......................................................................... 89

3. Вторая фаза жизненного цикла – конструирование системы.. 91

3.1. Разработка архитектуры системы.. 91

3.1.1. Разбиение системы на модули. 92

3.1.2. Выявление асинхронного параллелизма. 96

3.1.3. Распределение модулей и подсистем по процессорам и задачам 96

3.1.4. Управление хранилищами данных. 97

3.1.5. Управление глобальными ресурсами. 98

3.1.6. Реализация управления программным обеспечением............. 98

3.1.7. Пограничные ситуации. 99

3.1.8. Обзор архитектур прикладных систем. 99

3.2. Архитектура системы управления банковской сетью.. 102

3.3. Разработка объектов. 103

3.3.1. Совместное рассмотрение трёх моделей. 104

3.3.2. Разработка алгоритмов, реализующих полученные операции. 105

3.3.3. Оптимизация разработки. 106

3.3.4. Реализация управления. 108

3.3.5. Уточнение наследования классов. 109

3.3.6. Разработка зависимостей. 111

Контрольные вопросы......................................................................... 113

4. Сравнительный анализ объектно-ориентированных методологий разработки программных систем. 114

4.1. Методология OMT. 115

4.2. Методология SA/SD.. 115

4.3. Методология JSD.. 116

4.4. Методология OSA.. 118

Контрольные вопросы......................................................................... 124

5. Третья фаза жизненного цикла – реализация

объектно-ориентированного проекта. 125

5.1. Объектно-ориентированный стиль программирования. 125

5.2. Объектно-ориентированные системы программирования. 126

5.3. Реализация на языке C++. 127

5.3.1. Реализация классов. 127

5.3.2. Порождение объектов. 128

5.3.3. Вызов операций. 130

5.3.4. Использование наследования. 131

5.3.5. Реализация зависимостей. 132

5.3.6. Шаблоны в языке C++.. 134

5.4. Другие объектно-ориентированные системы программирования. 135

5.4.1. Реализация классов. 135

5.4.2. Порождение объектов. 137

5.4.3. Вызов операций. 138

5.4.4. Реализация наследования. 140

5.4.5. Реализация зависимостей. 142

5.5. Не объектно-ориентированные системы программирования. 144

5.5.1. Преобразование классов в структуры данных. 145

5.5.2. Передача параметров методам. 146

5.5.3. Размещение объектов в памяти. 147

5.5.4. Реализация наследования. 148

5.5.5. Выбор методов для операций. 149

5.5.6. Реализация зависимостей. 151

5.5.7. Объектно-ориентированное программирование на Фортране 152

5.5.8. Чем неудобны не объектно-ориентированные системы программирования. 156

Контрольные вопросы............................................................................ 156

Библиографический список..................................................................... 157

 


ВВЕДЕНИЕ

Учебное пособие по курсу «Технология программирования» написано на основе одноимённого курса лекций, читаемых в ЮРГУЭС. Следует отметить, что, несмотря на огромное количество книг по программированию, руководств, посвящённых именно технологии программирования, практически нет. С одной стороны, элементы курса есть в любой программистской литературе, а с другой – множество вопросов, взаимосвязей и особенностей программирования именно в свете технологии нигде не освещается, и каждый программист по мере развития вновь находит всё множество приёмов и методов. Это хорошо, когда он попал в крепкую команду программистов, где есть чему и у кого учиться, но гораздо чаще начинающий специалист оказывается в положении человека, обучаемого плаванию «методом бросания в холодную воду». Всякий, кто пытался на Basic реализовать серьёзную задачу, а не одноразовую программу, понимает, к чему приводит подобное обучение.

Технология появляется тогда, когда появляется производство. Производство находится где-то между искусством и ремеслом. Ремесло не обладает технологией в силу ограниченности решаемых задач, хотя имеет множество способов и приёмов. Искусство не обладает технологией в силу уникальности каждой решаемой задачи, а потому набор способов и методов решения поставленной задачи часто точно также уникален и малоприменим, нередко совершенно не применим, при решении другой задачи.

Развитие технологии программирования нужно рассматривать с точки зрения увеличения производительности труда как отдельных программистов, так и коллективов программистов. Только тогда, когда происходило увеличение производительности труда, новые методы вытесняли старые. Не следует забывать, что увеличивать можно производительность труда как программиста, так и пользователя.


1. Основные понятия

объектно-ориентированного подхода

 

Объектно-ориентированный подход основан на систематическом использовании моделей для языково-независимой разработки программной системы, на основе из её прагматики.

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

Рис. 1.1. Семантика (смысл программы с точки зрения выполняющего

её компьютера) и прагматика

(смысл программы с точки зрения её пользователей)

 

Модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой программной системы. Тем самым модель «беднее», а следовательно, проще представляемого ею предмета (понятия). Но главное даже не в этом, а в том, что модель является формальной конструкцией: формальный характер моделей позволяет определить формальные зависимости между ними и формальные операции над ними. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. В частности, формальный характер моделей позволяет получить формальную модель разрабатываемой программной системы как композицию формальных моделей её компонентов.

Таким образом, объектно-ориентированный подход помогает справиться с такими сложными проблемами, как:

- уменьшение сложности программного обеспечения;

- повышение надёжности программного обеспечения;

- обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

- обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надёжные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.

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

 

 

 

Рис. 1.2. Жизненный цикл программной системы

 

Объектно-ориентированный подход имеет два аспекта:

- объектно-ориентированная разработка программного обеспечения;

- объектно-ориентированная реализация программного обеспечения.