
- •Проверил ______________________ Беляков с.Л.
- •Тема №1 «Тождество, качество программ»
- •Тема №2 «Основные этапы технологии разработки программ»
- •Тема №3 «Исполнение программ вычислительными устройствами»
- •Лекция №5 «Поразрядные операции над числами»
- •Лекция №6 «Передача параметров функциям по значению или по указателю»
- •Лекция №7 «Классы»
- •Лекция №8 «Ввод-вывод информации в файлы».
- •Лекция №9 «Перемещение указателя файла».
- •Лекция №10 «Технология поиска информации»
- •Лекция №11 «Технология поиска»
- •Лекциия №12 «Сортировка»
- •Лекция №13 «Обработка ошибок в работе программ»
- •Лекция №14 «Управление памятью»
- •Лекция №15 «Кодирование и отображение информации»
- •Лекция №16 «Глобальные переменные и пространства имен»
- •Лекция №18 «Тестирование программного кода»
Лекция №16 «Глобальные переменные и пространства имен»
Глобальные переменные в программах доступны для чтения и модификации во всех функциях исполняемой программы. Это создает определенные проблемы в том случае, когда программа использует библиотеки функций. Объявления переменных и функций в программах могут дублировать имена переменных и функций в библиотеке. Для исключения этого многие языки используют пространство имен.
В языке С++ ключевое слово namespace определяет имя пространства имен, внутри которого локализуются объявления переменных и функций. Программе может быть объявлено произвольное число пространств имен. Все пространства изолированы.
Для указания на прямую принадлежность к пространству имен синтаксически используется :: (двойное двоеточие).
Кроме явного указания пространства имен, можно указывать неявно. Оператор Using namespace указывает имя пространства, из которого неявно будут извлекаться переменные и функции.
Под перегрузкой функций понимается замена вызова функции в программном коде ”подходящим” вариантом ее описания. Варианты описания представляют собой одинаково именованные функции с разным числом и типом входных параметров. При компиляции кода срока вызова функции сопоставляется по набору типов с описанными вариантами функции. Если такой вариант
найден, вызов перегружается, т.е. в его точку будет загружено функция с соответствующей сигнатурой.
Сигнатура – это перечисление типов параметров функции.
Не допускается в качестве перегружаемых функций использовать функции с одинаковой сигнатурой, либо отличающиеся только типом возвращаемого значения.
Перегрузка функций позволяет повысить понятность и читаемость программного кода. Часто библиотеки содержат наборы перегружаемых функций, что позволяет упростить код использующий библиотеку, уменьшить вероятность ошибки.
Лекция №17 «Использование API Windows в программах на С++»
API – это прикладной программный интерфейс. Данный термин используют для перечисления функции, которая напрямую обращается к ОС либо любой другой системе способной обслуживать запрос. Всякая ОС предоставляет свои функции прикладным программам через API адрес. В отличие от библиотек программирования, вызов функции напрямую является более быстрым. Объясняется это тем, что библиотечные функции добавляют программный код, обеспечивающий более высокую надежность исполнения заданного действия. Кроме того в библиотеке программирования создают структуры данных более высокого смыслового уровня, что снижает сложность программного кода и повышает его надежность. API OC Windows имеет реализацию в виде функций на языке С++. В общем случае API может реализоваться на любых языках программирования.
Функции манипулирования файлами API Windows позволяют создавать, копировать, переименовывать и удалять файлы. В качестве параметров эти функции используют специальные типов определённые в заголовочном файле windows.h. Каждый из них связан и отображает абстракции, которые используются на уровне ОС. Например, тип HANDLE является дескриптором, который ОС сопоставляет всякому системному объекту. Каждая функция API имеет набор параметров, которые точно определяют все детали выполнения любого действия. Функции стандартной библиотеки С++ многие детали скрывают. Например, функция CreateFile позволяет создавать файл и при этом требует 7 конкретных параметров. Библиотечная функция аналог содержит два параметра.
Среди
файловых функций существует функция
поиска (Find). Функция называется FindFirst и
имеет два параметра. Первый параметр
это шаблон имени файла. Второй параметр
это структурная переменная, в которую
загружается информация о первом найденном
файле.
Функция FindFirstFile() возвращает признак того, что поле завершилось нахождением файла.
При программировании не следует делать предположения о том, какой из файлов будет первым. Повторные вызовы этой функции возвращают тот же результат.
Вся информация о найденном файле сохраняется в структурной переменной WIN32_FIND_DATA. Эта структура включает поля, которые содержат имя файла, даты создания и модификации, длину байта и т.д.
Каждое из ролей имеет специфический тип объявленный для API.
Для обработки содержимого полей их необходимо преобразовать к типам принятым в С++. Например, тип DWORD является двойным словом ОС, которая чаще всего преобразуется в целое число (int).
Поле TCHAR cFileName[MAX_PATH] содержит имя найденного файла. Следует обратить внимание, что длинна имени ограниченна константой [MAX_PATH]. А символы являются «широкими»(2 байта). Эти особенности должны учитываться при обработке вызова API.
Тип TCHAR в тип char не может быть преобразован принципиально.
Функция FindNextFile позволяет продолжить поиск дальше. Дает следующий за найденным файл.
Последовательные вызовы функции FindNextFile позволяют получить данные о следующим файле, соответствующем шаблону, заданному функцией FindFirstFile.
Параметром FindNextFile является структурная переменная WIN32_FIND_DATA и дескриптор, возвращенный предыдущим вызовом FindNextFile или FindFirstFile.
Функция CopyFile копирует существующий файл в новый. Один из параметров функции указывает, можно ли копировать, если файл с таким именем уже существует. В качестве параметров строк указываются длинные указатели. Например, LPSTR. Любая ссылка на строку должна быть явно приведена к данному типу указателя.
Функция DeleteFile() позволяет удалить файл с указанным именем.
При обработке файла используется понятие текущего каталога, по умолчанию текущем считается каталог, из которого запущен исполняемый файл программы.
Получить наименование этого каталога программа может, вызвав функцию API GetCurrentDirrectory(MAX_PATH, Buffer). Первый параметр – длина, второй – указание на строку, буфер.
Использование данной функции позволяет обеспечить работоспособность программ, которые запускаются из произвольных каталогов.
Функция GetCurrentDirrectory(Buffer) позволяет установить в качестве текущего каталога любой другой каталог.
Функции для создания и удаления каталогов имеют особые названия несмотря на то, сто на низком уровне каталоги – это файлы для регистрации других файлов.