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

СПО

.pdf
Скачиваний:
40
Добавлен:
31.05.2015
Размер:
2.9 Mб
Скачать

используемая библиотека удовлетворяет какому-то принятому стандарту, а система программирования поддерживает этот стандарт.

Например, библиотеки, удовлетворяющие стандарту POSIX, доступны в большинстве систем программирования для языка С. И если прикладная программа использует только библиотеки этого стандарта, то ее исходный код будет переносимым.

Для большинства специфических библиотек отдельных разработчиков это не так. Если пользователь использует ка- кую-то библиотеку, то она ориентирована на ограниченный набор доступных архитектур целевой вычислительной системы. Примерами могут служить библиотеки MFC (Microsoft foundation classes) фирмы Microsoft и VCL (Visual Components Library) фирмы Borland, жестко ориентированные на архитектуру ОС типа Windows.

Тем не менее, многие фирмы-разработчики сейчас стремятся создать библиотеки, которые бы обеспечивали переносимость исходного кода приложений между различными архитектурами целевой вычислительной системы. К ним можно отнести библиотеку CLX (Component Library for Cross Platform) производства фирмы Borland ориентированную на архитектуру ОС типа Linux и ОС типа Windows.

В целом развитие функций прикладного API идет в направлении попытки создать библиотеки API, обеспечивающие широкую переносимость исходного кода. Однако, учитывая корпоративные интересы различных производителей и сложившуюся ситуацию на рынке системного программного обеспечения, в ближайшее время вряд ли удастся достичь значительных успехов в этом направлении.

Поэтому разработчики системных программ вынуждены оставаться в довольно узких рамках ограничений стандартных библиотек языков программирования.

Что касается прикладных программ, то гораздо большую перспективу для них предоставляют технологии, связанные с

разработками в рамках архитектуры «клиент – сервер» или трехуровневой архитектуры создания приложений. В этом направлении ведущие производители ОС, СУБД и систем программирования скорее достигнут соглашений, чем в направлении стандартизации API.

Итак, нами были рассмотрены основные принципы, цели и подходы к реализации системных API. Отметим еще один очень важный момент: желательно, чтобы интерфейс прикладного программирования не зависел от системы программирования. Обычно базовые функции API не зависят от системы программирования и могут использоваться из любой системы программирования, хотя и с применением соответствующих правил построения вызывающих последовательностей. В то же время в ряде случаев система программирования может сама генерировать обращения к функциям API.

Как правило, API не стандартизированы. В каждом конкретном случае набор вызовов API определяется, прежде всего, архитектурой ОС и ее назначением. В то же время принимаются попытки стандартизировать некоторый базовый набор функций, поскольку это существенно облегчает перенос приложений с одной ОС в другую.

Таким примером может служить очень известный и, пожалуй, один из самых распространенных стандартов – стандарт POSIX. В этом стандарте перечислен большой набор функций, их параметров и возвращаемых значений.

Стандартизированными, согласно POSIX, являются не только обращения к API, но и файловая система, организация доступа к внешним устройствам, набор системных команд. Использование в приложениях этого стандарта позволяет в дальнейшем легко переносить такие программы с одной ОС в другую путем простейшей перекомпиляции исходного текста.

Частным случаем попытки стандартизации API является внутренний корпоративный стандарт компании Microsoft, известный как WinAPI. Он включает в себя следующие реализа-

ции: Win 16, Win32s, Win32, WinCE.

С точки зрения WinAPI (в силу ряда идеологических причин – обязательный графический «оконный» интерфейс пользователя), базовой задачей является окно. Таким образом, WinAPI изначально ориентирован на работу в графической среде. Однако базовые понятия дополнены традиционными функциями, в том числе частично поддерживается стандарт

POSIX.

6.4. Классификация системных вызовов

Во всех операционных системах, исходя из видов ресурсов, с которыми они связаны, функции интерфейса прикладного программирования можно разделить на несколько групп. Так, в Windows можно выделить следующие группы функций

API:

управление процессами, потоками и синхронизацией;

управление виртуальной и физической памятью;

управление вводом-выводом.

В API Windows также есть еще ряд групп:

графический интерфейс пользователя;

управление защитой;

управление реестром;

консольные функции

другие группы специальных функций.

Примеры функций API, относящихся к разным группам приведены в табл. 7 - 15.

Таблица 7 Основные функции управления процессами и потоками

Функция

Описание

Create Process

Создать новый процесс

CreateThread

Создать новый поток в существующем

 

процессе

ExitProcess

Завершить текущий процесс и все его по-

 

токи

 

 

 

Продолжение табл. 7

 

ExitThread

 

Завершить этот поток

 

SetPriorityClass

 

Задать класс приоритета для процесса

 

SetThreadPriority

Задать приоритет для потока

 

 

 

 

Таблица 8

 

Основные функции управления синхронизацией

 

 

 

 

 

Функция

 

Описание

 

CreateSemaphore

 

Создать новый семафор

 

OpenSemaphore

 

Открыть существующий семафор

 

ReleaseSemaphorc

 

Увеличить на единицу счетчик сема-

 

 

 

 

фора

 

EnterCriticalSection

 

Захватить блокировку для критиче-

 

 

 

 

ской секции

 

LeaveCriticalSection

Освободить блокировку для критиче-

 

 

 

 

ской секции

 

Таблица 9 Основные функции управления виртуальной и физической

памятью

Функция

Описание

VirtualAlloc

Зарезервировать или фиксировать область в

 

ВП

VirtualFree

Освободить область или отменить фикса-

 

цию области

VirtualProtect

Изменить режим доступа к области ВП

VirtualQuery

Узнать состояние области ВП

VirtualLock

Зафиксировать страницы ВП

VirtualUnlock

Расфиксировать страницы ВП

HeapCreate

Создать пул в памяти

HeapAllocate

Выделить блок памяти в пуле

HeapReAllocate

Изменить размер блока памяти в пуле

 

 

 

Продолжение табл. 9

HeapFree

Освободить блок памяти в пуле

GetProcessHeap

Получить дескриптор пула

 

 

 

Таблица 10

Основные функции для файлового ввода-вывода

 

 

 

 

Функция

 

 

Описание

CreateFile

 

Создать или открыть файл; вернуть деск-

 

 

риптор файла

DeleteFile

 

Удалить существующий файл

ReadFile

 

Прочитать данные из файла

WriteFile

 

Записать данные в файл

SetFilePointer

 

Установить указатель в файле в опреде-

 

 

ленную позицию

GetFileSize

 

Определить размер файла

SetEndOfFile

 

Изменить размер файла по текущему зна-

 

 

чению указателя

GetFileAttributes

 

Вернуть атрибуты файла

CopyFile

 

Копировать файл

LockFile

 

Заблокировать область файла для обеспе-

 

 

чения взаимного исключения

UnlockFile

 

Отменить блокировку области файла

 

 

 

Таблица 11

Основные функции управления каталогами

 

 

 

 

Функция

 

 

Описание

CreateDirectory

 

 

Создать новый каталог

RemoveDirectory

 

 

Удалить пустой каталог

FindFirstFile

 

 

Инициализация, чтобы начать чтение

 

 

 

каталога

FindNextFile

 

 

Прочитать следующую запись каталога

Продолжение табл. 11

MoveFile Переместить файл из одного каталога в другой

SetCurrent Directory Изменить текущий рабочий каталог

Насчитывается несколько сотен функций графического интерфейса пользователя (GUI). Поэтому следует ограничиться названиями групп этих функций (табл. 12)

Таблица 12 Группы API-функций, реализующий графический

интерфейс пользователя

Группа API

Описание

Управление окнами

Создание, уничтожение окон,

 

управление окнами

Меню

Создание, уничтожение и до-

 

бавление пунктов меню

Диалоговые окна

Отображение диалоговых

 

окон и сбор информации

Рисование и черчение

Отображение точек, линий и

 

геометрических фигур

Текст

Вывод текста с использовани-

 

ем определенного шрифта,

 

размера и цвета

Растровые изображения,

Отображение на экране рас-

курсоры и значки

тровых изображений, курсо-

 

ров и значков

Цвета и палитры

Управление набором доступ-

 

ных цветов

Буфер обмена

Передача информации от од-

 

ного приложения другому

Ввод

Получение информации от

 

мыши и клавиатуры

 

 

 

Таблица 13

Основные функции управления защитой

 

 

 

 

Функция

 

 

Описание

InitializeSecurity Descriptor

Подготовить новый дескриптор

 

 

 

защиты

LookupAccountSid

 

 

Найти SID по заданному имени

 

 

 

пользователя

SetSecurityDescriptorOwner

Ввести SID владельца в деск-

 

 

 

риптор защиты

SetSecurityDescriptorGroup

Ввести SID группы в дескриптор

 

 

 

защиты

 

 

 

Таблица 14

Основные функции управления реестром

 

 

 

 

Функция

 

 

Описание

RegCreateKeyEx

 

Создать новый ключ реестра

RegDeleteKey

 

Удалить ключ реестра

RegOpenKeyEx

 

Открыть ключ и получить его дескриптор

RegEnumKeyEx

 

Перенумеровать подключи, подчиненные

 

 

ключу дескриптора

RegQueryValueEx

 

Искать данные по значению в ключе

 

 

 

Таблица 15

Основные функции управления консолью

 

 

 

 

Функция

 

 

Описание

SetConsoleTitle

 

Определить текст заголовка для консоли

WriteConsole

 

Вывести текст в консоль

ReadConsole

 

Ввод из консоли

ReadConsoleInput

Обработка событий мыши и клавиатуры

6.5. Интерфейс пользователя

Интерфейс пользователя - это совокупность средств, предоставляемая разработчиком программы для взаимодействия пользователя с этой программой. Существуют приложения, которые во время своего выполнения не взаимодействуют с пользователем, но такие случаи встречаются редко.

Изучение программы, по сути дела, сводится к изучению ее интерфейса. Интерфейс программ формируется из тех элементов, которые предоставляют система программирования и операционная система. Например, MS DOS работает в текстовом режиме и не поддерживает мышь, поэтому основным типом интерфейса является называемая командная строка. Разработчикам ПО MS DOS не предоставляли графические средства для построения меню, элементов управления и т. д., поэтому программисты вынуждены были сами вести разработку подобных элементов интерфейса, что приводит к большим накладным расходам при программировании и к появлению огромного количества разномастных элементов интерфейса, не всегда одинаково функционирующих. В современных операционных системах элементы интерфейса поддерживаются самими системами.

Поскольку с операционной системой могут взаимодействовать различные категории пользователей – администраторы, системные программисты, операторы, программисты и конечные пользователи, то каждой из этих категорий предоставляется свой интерфейс.

Вид интерфейса взаимодействия пользователя с ОС исторически определялся возможностями технических средств общения пользователя с системой.

Изначально пользователь общался с системой, вводя в

командную строку консоли информацию по принципу «приглашение/вопрос – ввод – обработка – ответ». С развитием операционных систем были разработаны графические интер-

фейсы, представляющие собой надстройки над операционными системами.

ВWindows такая надстройка, называемая также графической средой, является неотъемлемой частью ОС. Она реализуется с помощью драйвера видеосистемы, функций интерфейса графических устройств (GDI) и графического интерфейса пользователя (GUI).

ВUNIX-подобных системах (UNIX , Linux) графический интерфейс строится основе стандарта X Window System. Система X Window построена на модели «клиент/сервер». Основой подсистемы является так называемый Х-сервер, который работает на компьютере пользователя и обеспечивает вывод изображения на экран монитора, а также ввод данных от пользователя (через клавиатуру, мышь и т. п.). Приложения выступают в роли клиентов. Для общения с сервером клиентам предоставляется библиотека XLib, содержащая функции низкоуровневого взаимодействия.

Следующий уровень в реализации интерфейсных возможностей в UNIX-подобных системах представлен интегри-

рованными графическими средам. В состав этих сред помимо служебных программ входит множество прикладных программ для решения различных задач. Интегрированные графические среды расширяют и дополняют перечисленные выше компоненты системы X Window. Так, исходная библиотека Xlib является довольно бедной, и интегрированные графические среды добавляют к ней свою библиотеку графических функций. Существует большой список интегрированных графических сред разных производителей.

6.6.Пользовательский интерфейс приложений

Вкаждом Windows-приложении реализация графического пользовательского интерфейса составляет большую часть ее программного кода. При работе с приложениями обращает на себя внимание стандартизация интерфейса. Во-первых, все

окна имеют рамку, которая определяет их границы; рамка используется также для изменения размеров окна. В верхнем левом углу окна находится значок системного меню. Щелчок мыши на этот значок открывает системное меню. Справа от значка системного меню находится заголовок окна. В правом верхнем углу окна расположены кнопки минимизации, полноэкранной развертки (полноэкранного представления) и закрытия окна. Ниже находится рабочая область – это часть окна, в которой отображается выполнение программы. Стандартными элементами пользовательского интерфейса стали главное меню программы, контекстные меню, горячие клавиши, панели инструментов, строка состояния, вертикальные и горизонтальные линейки прокрутки, различные элементы управления и т. д.

Современные визуальные среды программирования предлагают десятки (или сотни) элементов управления. Поскольку эти элементы встречаются почти во всех Windowsприложениях, то знакомство с этими элементами, их назначением и способами управления является важной задачей. К наиболее часто используемым стандартным и общим элементам управления относятся кнопки, флажки, переключатели, окна ввода, списки, полосы прокрутки, окна открытия файлов, инструменты, закладки (страницы), подсказки и другие.

Следует отметить, что почти все элементы управления являются полноценными окнами. Кроме главного окна и элементов управления Windows поддерживает и другие виды окон: модальные и немодальные диалоговые окна, окна сообщений, диалоговые окна общего пользования и др. Познакомившись с каким-либо новым элементом управления, пользователь может быть уверен, что в другом приложении этот элемент будет иметь то же самое назначение. В этом и заключается основной смысл стандартизации пользовательского интерфейса.