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