Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии программирования

..pdf
Скачиваний:
10
Добавлен:
05.02.2023
Размер:
2.88 Mб
Скачать

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

В.В. Кручинин

ТЕХНОЛОГИИ

ПРОГРАММИРОВАНИЯ

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

ТОМСК – 2013

Федеральное агентство по образованию

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра промышленной электроники

В.В. Кручинин

ТЕХНОЛОГИИ

ПРОГРАММИРОВАНИЯ

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

2013

Кручинин В.В.

Технологии программирования: Учебное пособие. — Томск: Томский государственный университет систем управления и радиоэлектроники, 2013.

— 271 с.

Кручинин В.В., 2013ТУСУР, 2013

 

 

3

 

 

 

 

 

 

 

СОДЕРЖАНИЕ

 

Глава 1.

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

8

1.1

Основные термины и определения...........................................................

8

1.2

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

9

1.3

Подходы к проектированию программ ..................................................

15

1.4

Модели компьютерных учебных программ ..........................................

17

1.4.1

Кадровые компьютерные учебные программы...............................

17

1.4.2

Модель интеллектуальной компьютерной учебной программы

 

обучения решения задач .............................................................................

20

1.4.3

Модель интеллектуальной системы контроля знаний ...................

24

Глава 2.

ПРОЦЕДУРНО-ОРИЕНТИРОВАННОЕ

 

ПРОГРАММИРОВАНИЕ.................................................................................

27

2.1

Для чего нужен язык программирования ..............................................

27

2.2

Способы описания языка .........................................................................

28

2.3

Описание лексических элементов ..........................................................

28

2.3.1 Понятие лексемы ................................................................................

28

2.3.2 Пространство между лексемами .......................................................

28

2.3.3 Запись длинных строк........................................................................

29

2.3.4 Комментарии.......................................................................................

29

2.4

Лексемы .....................................................................................................

30

2.4.1 Ключевые слова ..................................................................................

30

2.4.2 Идентификаторы.................................................................................

31

2.4.3 Константы............................................................................................

31

 

2.4.3.1 Десятичные константы.................................................................

32

 

2.4.3.2 Восьмеричные константы ............................................................

32

 

2.4.3.3 Шестнадцатеричные константы..................................................

32

 

2.4.3.4 Суффиксы для без знаковых и длинных целых чисел..............

33

 

2.4.3.5 Символьные константы................................................................

33

 

2.4.3.6 Использование обратной косой черты (\) ..................................

33

 

2.4.3.7 Константы с плавающей запятой ................................................

34

 

2.4.3.8 Типы данных констант с плавающей запятой ...........................

35

2.4.4 Перечисляемые константы (enum)....................................................

35

2.5

Синтаксические структуры С..................................................................

35

2.5.1 Объявления..........................................................................................

35

2.5.2 Объект..................................................................................................

35

2.5.3 Левое значение (Lvalue).....................................................................

36

2.5.4 Правое значение (Rvalue) ..................................................................

36

2.5.5 Тип и класс памяти.............................................................................

36

2.5.6 Область действия................................................................................

37

2.5.7 Блочная область действия..................................................................

37

2.5.8 Область действия — вся функция ....................................................

37

4

 

2.5.9 Область действия прототип функции...............................................

37

2.5.10 Область действия — файл ...............................................................

38

2.5.11 Пространство имен...........................................................................

38

2.5.12 Видимость .........................................................................................

38

2.5.13 Время существования ......................................................................

39

2.5.14 Статические объекты .......................................................................

39

2.5.15 Локальные объекты ..........................................................................

39

2.5.16 Динамические объекты ....................................................................

40

2.6 Объявления................................................................................................

40

2.6.1 Типы объявлений................................................................................

40

2.6.2 Объявление переменных....................................................................

40

2.6.3 Объявление массивов.........................................................................

41

2.6.4 Объявление строк символов..............................................................

42

2.6.5 Объявление структур .........................................................................

42

2.6.6 Объявления объединений ..................................................................

44

2.6.7 Объявление собственного типа (typedef) .........................................

44

2.6.8 Битовые поля.......................................................................................

45

2.7 Функции ....................................................................................................

46

2.8 Основные операции в Си .........................................................................

46

2.8.1 Унарные операции..............................................................................

46

2.8.2 Бинарные операции ............................................................................

47

2.8.3 Побитовые операции ..........................................................................

47

2.8.4 Операции сдвига .................................................................................

48

2.9 Выражения ................................................................................................

48

2.10 Операторы ...............................................................................................

49

2.10.1 Составной оператор..........................................................................

49

2.10.2 Условный оператор ..........................................................................

49

2.10.3 Оператор while ..................................................................................

52

2.10.4 Оператор for ......................................................................................

53

2.10.5 Оператор do while .............................................................................

54

2.10.6 Оператор continue .............................................................................

55

2.10.7 Оператор break..................................................................................

55

2.10.8 Оператор switch ................................................................................

56

2.10.9 Оператор return.................................................................................

57

2.10.10 Метки и оператор goto ...................................................................

58

2.11 Указатели.................................................................................................

58

2.11.1 Что такое указатель ..........................................................................

58

2.11.2 Указатели на массивы ......................................................................

61

2.11.3 Указатели и динамическое распределение памяти.......................

62

2.11.4 Указатели на структуры...................................................................

64

2.11.5 Указатели на функции......................................................................

66

2.11.6 Указатели и константы ....................................................................

67

2.12 Программы и подпрограммы ................................................................

68

 

5

 

2.12.1 Функции в Си....................................................................................

70

2.13 Препроцессор..........................................................................................

74

2.13.1 Директива #include ...........................................................................

75

2.13.2 Директива #define .............................................................................

75

2.13.2 Условная компиляция ......................................................................

77

2.3

Механизм реализации языков программирования ...............................

78

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

80

2.3.2 Механизм выделения локальной памяти под переменные ............

82

2.3.3 Использование ассемблерных вставок.............................................

83

2.3.4 Использование регистров ..................................................................

83

2.3.5 Связь с операционной системой .......................................................

84

2.3.6 Описание наиболее часто используемых функций

 

из системных библиотек .............................................................................

85

2.4

Технология создания исполняемой программы....................................

89

2.4.1 Текстовый редактор ...........................................................................

89

2.4.2 Компилятор .........................................................................................

89

2.4.3 Редактор связей...................................................................................

90

2.4.4 Отладчик..............................................................................................

90

2.4.5 Помощь ................................................................................................

91

2.4.6 Вспомогательные средства................................................................

91

2.4.7 Средства управления проектом ........................................................

91

Глава 3. СОБЫТИЙНО-ОРИЕНТИРОВАННОЕ

 

ПРОГРАММИРОВАНИЕ.................................................................................

92

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

92

3.1

Графический интерфейс пользователя (GDI)........................................

93

3.2

Программирование функциональности окна ........................................

97

3.3

Создание, идентификация и удаление объектов Windows ..................

98

3.4

Основные типы Windows.........................................................................

99

3.5

Структура приложение ..........................................................................

100

3.6

Главная функция (WinMain) .................................................................

100

3.7

Оконная процедура ................................................................................

102

3.7.1 Процесс создания окна.....................................................................

104

3.7.2 Процесс отображения окна..............................................................

104

3.7.3 Процесс завершения работы приложения .....................................

105

3.7.4 Процесс обработки сообщений по умолчанию .............................

105

3.7.5 Процесс перерисовки окна ..............................................................

107

3.8

Контекст устройства ..............................................................................

107

3.8.1 Контекст устройства дисплея..........................................................

109

3.8.2 Контекст устройства для работы с принтером..............................

110

3.8.3 Контекст устройства для работы с памятью..................................

111

3.9

Шрифты и вывод текста ........................................................................

111

3.9.1 Компьютерное представление текста.............................................

112

3.9.2 Шрифт................................................................................................

112

6

 

3.9.3 Вывод текста в Windows..................................................................

120

3.10 Вывод фигур и линий...........................................................................

122

3.10.1 Функции вывода фигур..................................................................

124

3.10.2 Вывод линий ...................................................................................

125

3.10.3 Вывод кривых (curves) ...................................................................

126

3.11 Битовые карты (bitmap)........................................................................

127

3.12 Работа с клавиатурой ...........................................................................

130

3.13 Работа с мышкой ..................................................................................

132

3.13.1 Пример рисование линий (эффект резиновой нити) ..................

133

3.14 Ресурсы ..................................................................................................

135

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

135

3.14.2 Язык описания ресурса ..................................................................

136

3.14.3 Использование ресурсов ................................................................

144

3.15 Процесс обработки WM_COMMAND ...............................................

147

3.16 Стандартные элементы управления (Control) ...................................

148

3.16.1 Кнопки (Buttons) .............................................................................

149

3.16.2 Статические поля............................................................................

150

3.16.3 Редактируемые поля (Edit) ............................................................

151

3.16.4 Перечни ...........................................................................................

152

3.16.5 Линейки прокрутки ........................................................................

153

3.17 Диалоговые панели ..............................................................................

157

Глава 4. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

 

ПРОГРАММИРОВАНИЕ...............................................................................

159

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

159

4.1 Объектно-ориентированное программирование на С++....................

170

4.1.1 Простейший ввод/вывод ..................................................................

170

4.1.2 Понятие ссылки ................................................................................

171

4.1.3 Операторы new и delete....................................................................

176

4.1.4 Операция разрешения видимости ::................................................

179

4.1.5 Понятие класса..................................................................................

180

4.1.6 Указатель this ....................................................................................

182

4.1.7 Объект................................................................................................

182

4.1.8 Конструктор ......................................................................................

183

4.1.9 Деструктор ........................................................................................

184

4.1.10 Конструктор копирования .............................................................

186

4.1.11 Определение прав доступа к членам объектов класса ...............

188

4.1.12 Статические члены класса .............................................................

189

4.1.13 Наследование ..................................................................................

191

4.1.14 Дружественные функции и классы...............................................

198

4.1.15 Полиморфизм..................................................................................

198

4.1.16 Перегрузка операций......................................................................

203

4.1.17 Импорт объектов ............................................................................

224

4.1.18 Идентификация объектов во время выполнения (RTTI)............

226

7

 

4.1.19 Контейнеры .....................................................................................

229

4.1.20 Списки .............................................................................................

232

4.1.21 Шаблоны..........................................................................................

234

4.1.22 Обработка исключительных ситуаций.........................................

240

4.1.23 Потоки ввода/вывода .....................................................................

243

4.2 Реализация классов средствами Си ......................................................

263

4.3 Реализация объктно-ориентированного подхода для создания

 

приложения в Windows...............................................................................

266

ЛИТЕРАТУРА .................................................................................................

269

8

Глава 1. ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

1.1 Основные термины и определения

Программирование это процесс создания программ для ЭВМ [1]. На заре компьютерной эры программирование воспринималось как искусство [2]. Однако, по мере развития систем программирования этот процесс становится все более изученным. Появляются термины методология про-

граммирования [3], технология программирования [4–6], наука программирования [7–9] инженерия программного обеспечения [10,11]. Однако, в

споре о том, что программирование это искусство или наука нет окончательного решения.

Основным, определяющим элементом современных систем программирования является методология. Методология, как философская категория, это система принципов и основ организации и построения творческой и практической деятельности [12]. Таким образом, методология программирования есть система принципов, основ организации и построения программного обеспечения. В настоящее время уже разработано достаточно большое количество методологий. Ниже перечислены наиболее известные:

1)модульное программирование [13,14];

2)структурное программирование [15–17];

3)логическое программирование [18–20];

4)событийно-ориентированное программирование;

5)объектно-ориентированное программирование [21–24];

6)визуальное программирование [25–27].

7)функциональное программирование [28–30];

8)концептуальное программирование [31];

9)доказательное программирование [32];

10)мобильное программирование [33, 34];

11)экстремальное программирование [35–37].

Исторически, многие методологии развивались параллельно и воплощались в различных технологиях программирования и соответственно в системах программирования. Кроме того, методологии модульного, структурного, объектно-ориентированного и визуального программирования — развитие одной ветви, которая имеет универсальный характер применения. Другие, такие как концептуальное, функциональное, логическое программирование также носят универсальный характер, но применение нашли только в области искусственного интеллекта.

Важно разграничить методологию и технологии программирования. Методология программирования больше отвечает за идейную сторону и философский аспект создания программ, в то время как технология базируется на той или иной методологии и несет больше практическую нагруз-

9

ку по созданию программного обеспечения. В рамках одной методологии может быть большое количество технологий. Таким примером является методология объектно-ориентированного программирования. Технологий, поддерживающих объектно-ориентированное программирование, огромное количество. Например, OLE, COM, RUP и др. [38–43].

Кроме того, методологии программирования можно разделить на два класса [44]: тяжелые и гибкие (облегченные). В первом классе разработчик воспринимается как элемент методологии, который может быть заменен. Поэтому каждый шаг в таких методологиях должен быть подробно описан. Во втором классе, человек воспринимается как существеннонелинейный элемент методологии [45], а программный код является исходной документацией. В настоящее время наблюдается переход от тяжелых методологий к гибким.

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

Компьютерные учебные программы можно отнести к сложным программным системам. Это объясняется тем, что, во-первых, учебный процесс слабо формализуем, во-вторых, сама предметная область может быть достаточно сложной для обучения и соответственно для реализации ее модели в компьютерной учебной программе, в-третьих, сложность может представлять направленность КУП для определенной группы обучаемых.

Известно [46], что для сложных программных систем жизненный цикл можно представить в виде шести этапов:

1.Выявление и анализ требований, предъявляемых к компьютерным учебным программам.

2.Определение спецификаций.

3.Проектирование.

4.Кодирование.

5.Тестирование и отладка.

6.Эксплуатация и сопровождение.

Рассмотрим каждый этап этого цикла.

Выявление и анализ требований, как правило, производится с помощью системного анализа. Возьмем за основу методику системного анализа, представленную в работе [47, 48].

Эта методика первоначально предполагает выявление всех «заинтересованных сторон» — участников проблемной ситуации. На рис. 1 представлены основные целеполагающие системы для КУП.

Это прежде всего «обучаемый» — конечный пользователь КУП. Требования со стороны обучаемого можно разделить на три группы:

психолого-педагогические;

инженерно-психологические;

медицинские.