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

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

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

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

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

ТЕХНОЛОГИИ

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

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

ТОМСК – 2006

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

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

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

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

ТЕХНОЛОГИИ

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

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

2006

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

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

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

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 представлены основные целеполагающие системы для КУП.

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

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

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

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