Программирование на языках высокого уровня

advertisement
Программирование на
языках высокого уровня
Вичугов Владимир Николаевич
доцент каф. АиКС АВТФ ТПУ
Томск 2010
Языки программирования
Язык программирования – набор правил
(лексических, синтаксических и семантических)
для составления компьютерной программы.
Машинный язык
Язык ассемблера
Мнемонические команды вместо машинных команд
Языки программирования высокого
уровня
ЯВУ имитируют естественные языки, используя некоторые слова
разговорного языка и общепринятые математические символы
FORTRAN (1954 г.) – первый ЯВУ
Структурное программирование
Управляющие структуры, подпрограммы (функции, процедуры), рекурсия,
локальные переменные, отсутствие GOTO
Алгол(1958), Паскаль(1970), Си(1972).
Объектно-ориентированное программирование
(ООП)
Классы, объекты, инкапсуляция, полиморфизм, наследование
Object Pascal, C++, Java, C#, … .
ООП позволяет оптимально организовывать программы, разбивая
проблему на составные части, и работая с каждой по отдельности.
Класс представляет собой тип данных, объединяющий поля
(свойства) и методы (функции).
Класс
Экземпляр (объект)
Экземпляр (объект)
«Человек»
класса «Человек»
класса «Человек»
Поле «Имя»
Поле «Имя» = Вася
Поле «Имя» = Петя
Метод «Получить имя»
Метод «Получить имя»
Метод «Получить имя»
Метод «Отправить
сообщение»
Метод «Отправить
сообщение»
Метод «Отправить
сообщение»
Объектно-ориентированное программирование
(ООП)
Инкапсуляция – свойство объекта скрывать некоторые свои
свойства и методы. Внешний пользователь может
взаимодействовать с объектом только через предоставленный
интерфейс.
Пример: в классе «Человек» поле «Имя» скрыто от внешнего
пользователя. Интерфейс для внешнего пользователя при
взаимодействии с объектами класса «Человек» состоит из методов
«Получить имя» и «Отправить сообщение».
Класс «Человек»
Поле «Имя»
Метод «Получить имя»
Метод «Отправить
сообщение»
Объектно-ориентированное программирование
(ООП)
Наследование позволяет описать новый класс на основе существующего,
при этом свойства и функциональность родительского класса
наследуются новым классом (потомок, наследник, производный класс).
Класс «Преподаватель»
Производный класс
Класс «Человек»
Родительский класс
Класс «Студент»
Производный класс
Поле «Имя»
Поле «Имя»
Поле «Зарплата»
Метод «Получить имя»
Метод «Отправить
сообщение»
Поле «Имя»
Поле «Группа»
Метод «Получить имя»
Метод «Получить номер
группы»
Метод «Поставить оценку»
Метод «Отправить
сообщение»
Метод «Получить имя»
Метод «Увеличить
зарплату»
Метод «Отправить
сообщение»
Объектно-ориентированное программирование
(ООП)
Класс
«Группа»
Класс «Кафедра»
Класс
«Университет»
Поле «Студенты» - массив
объектов класса
«Студенты»
Поле «Преподаватели» массив объектов класса
«Преподаватель»
Поле «Кафедры» - массив
объектов класса «Кафедра»
Метод «Получить список
группы»
Метод «Получить список
преподавателей»
Поле «Группы» - массив
объектов класса «Группа»
Отправить сообщение
старосте группы
Отправить сообщение
зав.кафедрой
Метод «Получить список
кафедр»
Объявить о проведении
конференции
Языки программирования
Компилируемые ЯП
Интерпретируемые ЯП
интерпретатор
компилятор
Intel
машинный код
интерпретатор
Intel
+ скорость выполнения
– скорость выполнения
– переносимость
машинного кода
+ переносимость программы
PowerPC
Смешанные ЯП (Java, C#)
компилятор
байт-код
байт-код: машинно-независимый код низкого уровня
Виртуальная машина – JIT-компилятор (just in time – «на лету»)
виртуальная
машина
Intel
PowerPC
+ сборка
«мусора»
+ переносимость
программы
виртуальная
машина
PowerPC
Особенности программирования в многозадачной
ОС
Однозадачная ОС (Dos)
Многозадачная ОС (Windows, Linux)
сообщения системы
последовательное выполнение команд
Цикл обработки
сообщений системы
Процедура обработки
нажатия на клавишу
Процедура обработки
нажатия на кнопку
Процедура обработки
событий системного таймера
Процедура обработки
перемещения курсора мыши
Особенности программирования в многозадачной
ОС
Программирование в ОС семейства
Windows
Программирование в ОС семейства Unix
Приложение
FindFirstFile
GetFileAttributes
GetComputerName
GetWindowsDirectory
CreateWindow
Сообщение WM_MOVE
Сообщение
WM_CLOSE
Сообщение
WM_MBUTTONDBLCLK
Приложение
open
pipe
kill
Сигнал SIGTERM
Сигнал SIGHUP
Сигнал SIGINT
Сигнал SIGCHLD
Windows API
Unix API - POSIX
(Application Programming Interface –
интерфейс программирования приложений)
(Portable Operating System Interface for uniX)
Особенности программирования в многозадачной ОС
Выполнение Windows-приложения в ОС семейства Unix
Приложение
FindFirstFile
GetFileAttributes
GetComputerName
GetWindowsDirectory
CreateWindow
Сообщение WM_MOVE
Сообщение
WM_CLOSE
Сообщение
WM_MBUTTONDBLCLK
Wine – альтернативная свободная
кроссплатформенная реализация Windows API
open
pipe
kill
Сигнал SIGTERM
Сигнал SIGHUP
Сигнал SIGINT
Сигнал SIGCHLD
Оконная система стандарта X Windows System
(например, XOrg или XFree86)
Unix API - POSIX
WINE = Wine Is Not Emulator
Особенности программирования в многозадачной
ОС
Выполнение Windows-приложения в ОС семейства Unix
Запуск приложения в ОС Windows XP
Запуск приложения в ОС ASP Linux
Свободное ПО и закрытое ПО. GNU GPL.
GNU General Public License (Универсальная
общедоступная лицензия GNU или Открытое
лицензионное соглашение GNU) — популярная лицензия
на свободное программное обеспечение, созданная в
рамках проекта GNU в 1988 г.
GNU - (GNU’s Not Unix — «GNU — это не Unix») — проект
по созданию свободной UNIX-подобной операционной
системы, начатый Ричардом Столлмэном в 1983 году.
ОС GNU/Linux = системные утилиты проекта GNU + ядро
Linux.
Свободное ПО и закрытое ПО. GNU GPL.
Права (свободы) для пользователя компьютерной
программы:
- доступ к исходному коду;
- свобода изучения того, как программа работает, и её
модификации;
- свобода распространения копий;
- свобода улучшения программы, и выпуска улучшений в
публичный доступ.
Пользователи производных программ получат
вышеперечисленные права («copyleft» - принцип
«наследования» прав)
Язык C++, среда разработки Borland Turbo C++
Turbo C++ - программный продукт фирмы Borland, предназначенный для
быстрой разработки приложений (RAD – rapid application development) на
языке С++.
Turbo С++ - это интегрированная среда разработки приложений (IDE –
Integrated Development Environment).
Возможно создание как консольных приложений Win32, так и GUIприложений (GUI – Graphical User Interface – графический интерфейс
пользователя).
Версия Explorer является бесплатной.
Язык C++, среда разработки Borland Turbo C++
Создание консольного приложения: File – New – Other – Console Application
Язык C++, среда разработки Borland Turbo C++
Создание консольного приложения
Пример консольного приложения:
Количество компьютеров: N
1 - Добавить компьютер
2 - Минимальная длина имени компьютера
3 - Выход
Язык C++, среда разработки Borland Turbo C++
Поиск необходимой функции в библиотеке (например, conio.h)
Список функций
Язык C++, среда разработки Borland Turbo C++
Поиск информации об используемых функциях
Нажать правой кнопкой мыши по названию функции
и выбрать Find Declaration («Найти объявление»)
Другие функции библиотеки
Описание функций
Ctrl + Space = список вариантов кода
Язык C++, среда разработки Borland Turbo C++
Создание нового оконного приложения: File – New – VCL Form Application
Панель управления
Дизайнер форм
Менеджер проекта
Дерево объектов
Палитра компонентов
Инспектор объектов
Компонент – класс, который описывает
Проект
– набор
файлов,
необходимых
некоторый
элемент
управления
Форма
–
объект,
который
представляет
для(видимый
компиляции
приложения
или
невидимый
в окне
одно окно приложения.
приложения).
При перетаскивании на форму
становится объектом (экземпляром
класса)
Язык C++, среда разработки Borland Turbo C++
Создание нового оконного приложения: менеджер проекта
Файл
ресурсов
Первая
форма для приложения
(картинка
запускаемого
файла,
В процесседля
компиляции
объектный
картинки
меню
и т.п.) Все объектные
файл формы
Unit1.obj.
файл объединяются в исполняемый
файл Project1.exe
Язык C++, среда
разработки Borland Turbo C++
Заголовочный файл формы
Создание нового оконного приложения: менеджер проекта
Исходный файл формы
Язык C++, среда разработки Borland Turbo C++
Классы и объекты
Язык C++, среда разработки Borland Turbo C++
Добавление компонентов
Язык C++, среда разработки Borland Turbo C++
Динамическое создание элементов управления
Язык C++, среда разработки Borland Turbo C++
Свойства и события
Язык C++, среда разработки Borland Turbo C++
Изменение свойств объектов
Язык C++, среда разработки Borland Turbo C++
Создание обработчиков событий
Язык C++, среда разработки Borland Turbo C++
Создание обработчиков событий
Язык C++, среда разработки Borland Turbo C++
Добавление обработчика события
Язык C++. Библиотеки классов
Библиотека OWL (Object Window Library) фирмы Borland
Библиотека MFC (Microsoft Foundation Class Library) фирмы Microsoft
Библиотека VCL (Visual Component Library) фирмы Borland
концепция PME – свойства, методы, события
Библиотека dotNET фирмы Microsoft
Код для работы с WinAPI для вывода картинки в окно
Аналогичный код для работы с OWL
Использование VCL
VCL. Свойства компонентов.
Свойства относятся к специальной категории членов класса:
• К свойствам можно обращаться как к полям класса, но часто (не
всегда) при чтении свойства или при записи значения в свойство
выполняются специальные методы (пример: изменение свойства
Left объекта класса TForm).
• Свойства могут иметь тип read-only, write-only, runtime-only.
• Обычно (не всегда) имеют значение по умолчанию.
• Свойства могут быть следующих типов:
- простые типы данных;
- перечисления;
- наборы;
- объекты.
Иерархия классов VCL
TObject
TPersistent
TComponent
Невизуальные
компоненты
Визуальные
компоненты
TControl
TTimer, etc
TGraphicControl
TWinControl
TSpeedButton, etc
TPanel, etc
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Название
свойства
Тип
Описание свойства
Раздел Miscellaneous – разное
Name (Имя)
AnsiString
Имя объекта в программе.
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Название
свойства
Тип
Описание свойства
Раздел Visual – видимый
Color (Цвет)
TColor
Цвет фона элемента управления.
enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Название
свойства
Тип
Описание свойства
Раздел Visual – видимый
Font (Шрифт)
TFont *
Свойства шрифта.
Form1->Label1->Font->Size = 50;
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Название
свойства
Тип
Описание свойства
AnsiString
Видимый на экране заголовок компонента.
Для формы - строка заголовка формы.
Раздел Action
Caption
(Заголовок)
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Enabled
(Доступный)
bool
true – элемент доступен;
false – элемент недоступен (не реагирует ни
на какие действия со стороны пользователя,
но программно можно изменить свойства
недоступного объекта и вызвать обработчики
событий).
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Visible
(Видимый)
bool
true – элемент отображается;
false – элемент не отображается.
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Hint
(Подсказка)
AnsiString
Текст подсказки, который появляется, если
пользователь задержит курсор мыши на
данном элементе.
Подсказа будет выводиться только в том
случае, если свойство ShowHint (раздел Help
and Hints) установлено в true, либо если
данный раздел наследует это свойство от
родительского
элемента
(свойство
ParentShowHint = true) и в родительском
элементе разрешен показ подсказки.
Язык C++, среда разработки Borland Turbo C++
Свойства, события, компоненты
Align
(Выравнивание)
TAlign
Способ выравнивания элемента относительно
родительского элемента.
Язык C++, среда разработки Borland Turbo C++
Основные события
Название события
Описание события
OnClick
Событие возникает при нажатии на левую кнопку мыши по
данному элементу.
OnChange
Событие возникает, когда в элементе управления происходят
какие-либо события (например, ввод нового символа в поле
ввода текста).
OnDblClick
Событие возникает при двойном нажатии на левую кнопку
мыши по данному элементу.
OnEnter
Событие происходит в том случае, когда элемент управления
получает фокус (активизируется).
OnExit
Событие происходит, когда элемент управления теряет фокус
(в пределах окна).
OnKeyDown
Событие возникает при нажатии на любую клавишу на
клавиатуре (в том учитываются служебные клавиши Ctrl, Alt,
Shift). Параметр Key типа WORD содержит код нажатой
клавиши.
OnKeyUp
Событие возникает при отжатии любой клавиши на клавиатуре
(в том учитываются служебные клавиши Ctrl, Alt, Shift).
Параметр Key типа WORD содержит код отжатой клавиши.
Язык C++, среда разработки Borland Turbo C++
Основные события
Название события
Описание события
OnKeyPress
Событие возникает при нажатии на алфавитно-цифровую
клавишу, на Tab, Backspace, Esc или Enter на клавиатуре.
Параметр Key типа char содержит нажатую клавишу.
OnMouseDown
Событие возникает при нажатии на любую кнопку мыши.
Параметр Button содержит информацию о том, какая кнопка
была нажата: левая, правая или средняя. Параметр Shift
содержит информации о том, какие служебные клавиши на
клавиатуре были нажатии (Alt, Shift, Ctrl). Параметры X и Y
содержат координату точки, в которой был курсор во время
нажатия кнопки, относительно левой верхней границы
текущего элемента управления.
OnMouseUp
То же самое, только при отпускании клавиши мыши
OnMouseMove
Событие возникает при движении курсора мыши по
поверхности данного элемента управления.
OnResize
Для формы: событие, которое возникает при изменении
размеров окна.
OnPaint
Событие возникает, когда необходимо перерисовать компонент.
Язык C++, среда разработки Borland Turbo C++
Приведение типов
Язык C++, среда разработки Borland Turbo C++
Приведение типов
Язык C++, среда разработки Borland Turbo C++
Приведение типов
Язык C++, среда разработки Borland Turbo C++
Сравнение вещественных величин
Язык C++, среда разработки Borland Turbo C++
Сравнение вещественных величин
Панель управления →
Язык и региональные стандарты →
Региональные параметры →
Настройка
Язык C++, среда разработки Borland Turbo C++
Сравнение вещественных величин
float – 4 байта – 7 значащих цифр
double – 8 байт – 15 значащих цифр
long double – 10 байт – 19 значащих цифр
Язык C++, среда разработки Borland Turbo C++
Сравнение вещественных величин
Язык C++, среда разработки Borland Turbo C++
Операция присваивания и выражение присваивания
Операция присваивания: a = b
a - адресное выражение (l-value), b – любое выражение
Адресные выражения: x, *py, Lines.Count,
Form1->Caption
Неадресные выражения: x+y, a+1, 132, "MainForm"
В C++ операция присваивания образует выражение
присваивания, значением которого является левый
операнд после присваивания. Значение выражения
присваивания является адресным.
a = b = 10;
соответствует b = 10; a = b;
(a = b+1) = 20; соответствует a = b+1; a = 20;
(res = 0) = a/b;
Язык C++, среда разработки Borland Turbo C++
Операция присваивания и выражение присваивания
int a=0, b=0, c=0, d=0;
d = c = b = a = 10;
Результат: все переменные равны 10
int a=0, b=0, c=0, d=0;
d = (c = b = a) = 10;
Результат: a = 0, b = 0, c = 10, d = 10
int a=0, b=0, c=0, d=0;
d = c = (b = a) + (a = 10) + 1;
Результат 1: a = 10, b = 0, c = 11, d = 11
Результат 2: a = 10, b = 10, c = 21, d = 21
Язык C++, среда разработки Borland Turbo C++
Приоритеты и ассоциативность операций
Приоритет: a+b*c→a+(b*c)
Ассоциативность: a+b+c→(a+b)+c
a=b=c→ a=(b=c)
(слева направо)
(справа налево)
Язык C++, среда разработки Borland Turbo C++
Приоритеты и ассоциативность операций
Задача: выводить новые значения на экран, пока
не будет получено значение -1
---------------------------------------int val;
while ((val = GetNextValue()) != -1)
cout << val <<endl;
---------------------------------------while (val = GetNextValue() != -1)
эквивалентно
while (val = (GetNextValue() != -1))
т.к. приоритет != выше, чем у операции
присваивания
Язык C++, среда разработки Borland Turbo C++
Операция следования (запятая)
Выражения, разделённые запятой, вычисляются слева
направо.
Результатом операции является последнее выражение.
Результат может быть адресным выражением.
a = 10, b = 20; соответствует а = 10; b = 20;
a = (10, b = 20); соответствует b = 20; a = b;
(10, a++, b = 20) = 30; соответствует a++;
b = 20; b = 30;
for (i=4, j=10; i<j; i++, j--) a[i]=a[j];
Язык C++, среда разработки Borland Turbo C++
Тернарная операция выбора (или условная операция)
Тернарная операция – это операция с тремя операндами.
Тернарная операция выбора:
операнд1?операнд2:операнд3
Если операнд1 не равен нулю (условие истинно), то операция принимает
значение второго операнда, иначе операция принимает значение третьего
операнда.
max = a>b?a:b; //нахождение максимального
значения
b?(res=a/b,count++):(ShowMessage("На ноль
делить нельзя!"),1);
(a>b?a:b)=100; //максимальное значение заменить
на 100
Язык C++, среда разработки Borland Turbo C++
Пустой оператор «;» используется в том
случае, когда по правилам языка должен быть
оператор, но в программе не должно быть
никаких вычислений.
Язык C++, среда разработки Borland Turbo C++
Условный оператор
Блок else относится к самому последнему
оператору if, с которым ещё не сопоставлен ни
один блок else.
Язык C++, среда разработки Borland Turbo C++
Оператор выбора
При передаче управления по какой-либо метке
дальнейшие операторы выполняются подряд до
конца оператора выбора или до оператора
выхода break.
Язык C++, среда разработки Borland Turbo C++
Массивы
Имя массива – указатель на
первый элемент: mas == &mas[0]
Приоритет у операции разадресации
(разыменовывания) выше, чем у
сложения.
mas[2] эквивалентно *(mas+2), что
соответствует третьему элементу в
массиве mas: mas+2 == &mas[2]
Язык C++, среда разработки Borland Turbo C++
Массивы
mas[3] = 2.0
mas[3]+1 = 3
3[mas] = *(3+mas) – 4-ый элемент
массива mas
Язык C++, среда разработки Borland Turbo C++
Массив как аргумент функции
Язык C++, среда разработки Borland Turbo C++
Массив как аргумент функции
Язык Object Pascal, среда разработки Borland Turbo Delphi
Массив как аргумент функции
Язык Object Pascal, среда разработки Borland Turbo Delphi
Массив как аргумент функции
Язык C++, среда разработки Borland Turbo C++
Массив как аргумент функции
Язык C++, среда разработки Borland Turbo C++
Массив как аргумент функции
Язык C++, среда разработки Borland Turbo C++
Функции. Аргументы по умолчанию.
Язык C++, среда разработки Borland Turbo C++
Переопределение функций
Download