Технологии программирования
..pdfТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
В.В. Кручинин
ТЕХНОЛОГИИ
ПРОГРАММИРОВАНИЯ
Учебное пособие
ТОМСК – 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 представлены основные целеполагающие системы для КУП.
Это прежде всего «обучаемый» — конечный пользователь КУП. Требования со стороны обучаемого можно разделить на три группы:
–психолого-педагогические;
–инженерно-психологические;
–медицинские.