Файл: Варианты построения интерфейса программ: особенности и эволюция ( Программные интерфейсы).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.07.2023

Просмотров: 273

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

На сегодняшний день редко встречаются программы, которые способны работать абсолютно закрыто, без какой-либо связи с другими программами. Поэтому разработчику программного обеспечения необходимо предусматривать возможность использования в создаваемом приложении других программ, для выполнения определенных функций [4]. Для этого применяется набор стандартизованных запросов (или прикладных программных интерфейсов), определенных для программы, к которой адресован запрос.

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

Предмет исследования – прикладные программные интерфейсы.

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

В первой главе даются определения программных интерфейсов, рассматриваются их основные особенности, и некоторые правила их создания.

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

Программные интерфейсы

1.1 Особенности программных интерфейсов

Согласно общему определению Интерфейс - это связь двух отдельных сущностей. Интерфейсы бывают: языковые, программные, аппаратные, пользовательские, цифровые и т. д. Например, аппаратный интерфейс (port) - это способ преобразования входных/выходных данных во время объединения компьютера с периферийным оборудованием. В языках программирования - это программа или часть программы, в которой определяются константы, переменные, параметры и структуры данных для передачи другим.

В программировании термин программный интерфейс приложения, интерфейс прикладного программирования (англ. application programming interface, API) - значит полное описание всех возможных способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.


API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована.

При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.

В современном мире большая часть программного обеспечения требует использования других программ для выполнения определенных функций [5]. Для этого применяется набор стандартизованных запросов (или прикладных программных интерфейсов), определенных для программы, к которой адресован запрос. Например, почти каждая программа обращается к API базовой операционной системы для выполнения таких основных функций, как доступ к файловой системе. Хотя существуют и абсолютно закрытые программы, которые вообще не предоставляют никакого API.

Существуют классификации интерфейсов программирования по уровню реализации, например по А.В. Гордееву [1] выделяется три варианта реализации:

- на уровне модулей операционной системы;

- на уровне системы программирования;

- на уровне внешних библиотек процедур и функций.

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

При реализации функций API на уровне системы программирования эти функции предоставляются пользователю в виде библиотеки функций RTL (Run Time Library) соответствующего языка программирования. RTL перенаправляет системный вызов соответствующим обработчикам программных прерываний, входящим в состав операционной системы.

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

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

1) Независимость от платформы. Любой клиент должен иметь возможность вызывать API, независимо от того, как API реализован внутренне [6].

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


В большинстве современного программного обеспечения программный интерфейс соответствует какому-либо стандарту, и сопровождается документацией [4,7,8]. Документация облегчает использование программы пользователями, кроме того, для качественной программы должна быть предусмотрена возможность внесения изменений и усовершенствований. Поэтому разработчики приложений и производители должны постоянно думать о том, будут ли их прикладные программные интерфейсы понятны последующим разработчикам. Но, несмотря на это, некоторые производители оставляют свои API недокументированными.

На данный момент общепринято правило, что любое серьёзное разрабатываемое приложение должно также удовлетворять следующим требованиям [8]:

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

- мобильность/переносимость: это возможность переноса программ, данных при модернизации или замене аппаратных платформ, и возможность работы с ними специалистов, пользующихся ИТ, без их переподготовки при изменениях программы;

- интероперабельность: способность к взаимодействию с другими программами;

- дружественность к пользователю.

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

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

Например, структура приложения может представляться состоящей из двух взаимодействующих частей:

- функциональной части, включающей прикладные программы, которые реализуют функции прикладной области;

- среды или системной части, обеспечивающей исполнение прикладных программ.

С этим разделением тесно связаны две группы вопросов стандартизации:


- стандарты интерфейсов взаимодействия прикладных программ со средой ИС (Application Program Interface - API);

- стандарты интерфейсов взаимодействия самой ИС с внешней для нее средой (External Environment Interface - EEI).

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

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

Развитие интерфейсов в языках программирования

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

В случае, когда один из элементов (программа, процедура или функция) были записаны на разных языках программирования и, кроме того, располагались на разных компьютерах, возникали проблемы неоднородности типов данных в этих языках программирования, структур памяти платформ компьютеров и операционных сред, где они выполнялись. Понятие интерфейса, как самостоятельного объекта, сформировалось в связи со сборкой или объединением разноязыковых программ и модулей в монолитную систему на больших ЭВМ.

Рисунок. 1. Схема вызова модулей А и В из С через интерфейсы А'и B'

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


На рис. 1 приведена схема программы C, в которой содержатся два вызова – CallA() и CallB(), с параметрами, которые через интерфейсные модули-посредники A’ и B’ производят преобразование данных и их передачу модулям A и B. После выполнения A и B результаты преобразуются обратно к виду программы C.

В современных средах используется объектно-ориентированный подход [4-8] ООП.

В ООП главным элементом является класс, включающий множество объектов с одинаковыми свойствами, операциями и отношениями. Класс имеет внутреннее (реализацию) и внешнее представление – интерфейс.

Структуру представления класса и интерфейса можно определить так:

Рисунок 2. Структура представления класса и интерфейса

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

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

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

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

2. Существующие стандарты программных интерфейсов

Приведём наиболее распространённые API:

Операционных систем:

Amiga ROM Kernel, Cocoa, Linux Kernel API, OS/2 API, POSIX, Windows API;

Графических интерфейсов:

DirectDraw/Direct3D (часть DirectX), GDI, GDI+, GTK+, SFML, Motif,

OpenGL, OpenVG, Qt, SDL, Tk, Vulkan, X11, wxWidgets, Zune;

Звуковых интерфейсов:

DirectMusic/DirectSound (часть DirectX), OpenAL