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

Лабораторна робота №1

Тема: Поняття інтерфейсу, види інтерфейсів програмних компонентів.

Мета: Ознайомитися з принципами побудови взаємодії між програмними компонентам. Навчитися проектувати інтерфейси програмних модулів.

Теоретичні відомості

Поняття інтерфейсу

Інтерфейс (англ. interface — поверхня, границя, перегородка) — в

самому узагальненому вигляді можна визначити як сукупність засобів, які забезпечують взаємодію системи з навколишнім середовищем. Цей термін використовується практично у всіх областях науки і техніки та у повсякденному житті. Крім вищезазначеного під інтерфейсом розуміють не тільки засоби, але і правила (протоколи) взаємодії. Інтерфейси є основою взаємодії всіх сучасних інформаційних систем.

Інтерфейс, хоч і є самодостатньою функціональною одиницею, не може функціонувати без системи до якої він належить. Тому інтерфейс завжди треба розглядати в контексті системи, зовнішньої середи та предметної області. Для формалізації структури і функцій інтерфейсу розглянемо його місце в системі. Система – це сукупність взаємозв'язаних елементів, які відособлені від середовища і взаємодіють з ним як ціле, таке, що має нові властивості, відсутні у елементів. Даний термін може використовуватися як для позначення конкретної системи (наприклад, економічна система України,

система безпровідної передачі інформації Wi-Fi), так і для абстрактної теоретичної моделі (наприклад, ринкова економічна система, безпровідна система передачі даних). Стосовно області інформаційних технологій можна

виділити два основні типи систем – штучні (комп'ютер) і природні (людина).

Ці системи об’єднуються між собою за допомогою людино-машинних інтерфейсів і створюють нові – змішані системи. Виділимо поняття середовища в теорії систем. Середовище – це всі об'єкти, не включені в систему, з якими система обмінюється речовиною, енергією і інформацією.

Розгляд одних об'єктів як частин системи, а інших як частин середовища є умовним і залежить від цілей дослідження.

Модель відкритої детермінованої системи можна уявити у вигляді

«чорного ящика»(рис.1).

Середовище

Вхідніодныеданіданные

Вихідні дані

Система

Інтерфейс системи

Рисунок 1 – Модель системи у вигляді «чорного ящика»

Оскільки дана система детермінована, то середовище впливає на систему тільки за допомогою вхідних сигналів, а система впливає на середовище за допомогою вихідних сигналів. При цьому значення цих сигналів відоме.

Інтерфейс забезпечує взаємодію системи з зовнішнім середовищем.

Інформація може потрапити в систему чи вийти із системи тільки засобами інтерфейсу. Тому при проектуванні будь якої системи розробка інтерфейсу є важливою складовою, оскільки від його якості буде залежати продуктивність взаємодії системи з навколишніми об’єктами.

Для проектування структури інтерфейсу дуже важливо враховувати характеристики та особливості всіх учасників взаємодії – їх цілі, методи роботи, сильні та слабкі сторони, тощо. Це дозволить зменшити конфлікти при подальшій роботі та призведе до підвищення продуктивності взаємодії.

Види інтерфейсів програмних компонентів

Кожний програмний продукт складається з різних модулів, які взаємодіють між собою за рахунок власних інтерфейсів. Для прикладу розглянемо структуру програмного продукту представленого на рис.2:

Рис.2 – Приклад структури програмного продукту

В приведеній структурі програми присутні наступні функціональні блоки:

1.C - Класи;

2.M – Відкриті методи класів;

3.F – функції;

4.GUI – Графічний користувацький інтерфейс;

5.API – Інтерфейс доступу до програми;

6.Lib/dll – Зовнішні бібліотеки;

7.Database – База даних;

8.Resources – Ресурси програми (зображення, файли конфігурації,

тощо).

9.І також не можна забувати про те що сучасні програми, як правило, виконуються в декількох потоках (thread) одночасно.

Кожен з наведених компонентів представляє собою довершений блок, який виконує певні функції в системі. Взаємодія між блоками відбувається за рахунок програмних інтерфейсів.

Інтерфейс Функцій

Для прикладу розглянемо семантику функцій у мові програмування С++.

Функцією називають логічно відособлений блок коду який виконує певні дії.

Розглянемо прототип функції:

тип_функції ім’я_функції (параметри)

{

..

return Х;

}

де:

тип_функції – тип значення функції;

параметри – аргументи функції;

return - оператор завершення виконання функції;

Х – змінна, або вираз того ж типу що і тип функції.

Аргументами функції називаються значення, які можна передати їй при виклику. У повертаному значенні указується результат, який функція повертає після закінчення роботи. Функції можуть повертати значення будь-

якого стандартного або похідного типу. Якщо функція нічого не повертає, то повертаний тип позначається як void, і в такому разі оператор return

викликається без аргументів. Кожен аргумент функції – це змінна, вираз або константа, які передаються в тіло функції, для подальшого використання в обчислювальному процесі. Мова С++ допускає при виклику функцій опускати деякі параметри, це досягається вказівкою в прототипі функцій

аргументів за умовчанням. Функція може викликати інші функції, а так само може викликати сама себе (рекурсія).

Одним з важливих аспектів мови С++ є - перевантаження функцій, тобто декілька функцій може мати одне і те ж ім'я. Перенавантажувати можна лише ті функції, які відрізняються або типом, або кількістю аргументів. Функції які відрізняються типом повертаного значення перенавантажувати не можна.

Всі перераховані вище компоненти прототипу утворюють інтерфейс функції. За допомогою імені програма може викликати функцію, через

параметри передати у функцію данні для опрацювання, та за рахунок повернутого значення отримати результат роботи функцій.

Інтерфейс ООП (Класи та відкриті методи)

Об’єктно-орієнтоване програмування (ООП) — парадигма програмування, в якій основними концепціями є поняття об'єктів і класів.

Модель ООП заснована на декількох основоположних концепціях:

1.Абстракція даних.

2.Інкапсуляція.

3.Спадкоємство.

4.Поліморфізм.

Методологія ООП представляється у вигляді сукупності об'єктів різних класів які обмінюються запитами. Об'єкт, що отримав запит, відповідає на нього за допомогою виклику відповідної функції члена.

Про концепцію інтерфейсів в ООП можна говорити дуже багато. Кожна з мов по своєму реалізує даний підхід. Так в мові Java э ключове слово interface, за допомогою якого можна задекларувати класс-інтерфейс. В мові С++ роль класу-інтерфейсу виконує абстрактний клас – тобто клас в якому всі методи – віртуальні. В обох випадках метою такого класу є декларування методів який має реалізовувати клас-спадкоємець. Клас-інтерфейс сам не реалізує жодного методу.

Окрім концепції інтерфейсів, в ООП кожен клас має свій власний інтерфейс – це набір його відкритих методів та змінних-членів. Сам за їх рахунок інші модулі програми можуть звертатися до об’єкту (що реалізує певний клас). Приведемо приклад опису класу на мові С++:

class Point

{

public:

 

 

Point( int inX, int inY );

public:

 

void

get_X();

void

set_X( int inX );

void

get_Y();

void

set_Y( int inY );

private:

 

int

mX;

int

mY;

};

 

Інтерфейсом даного класу будуть – ім’я класу, яке визначає новий тип,

методи get_X(), set_X(), get_Y(), set_Y(); і конструктор класу. Закриті будуть недоступні іншим компонентам програми і щоб дізнатися їх значення або змінити його необхідно буде звернутися до інтерфейсу об’єкта.

Інтерфейс програмування додатків

Інтерфейс програмування додатків (англ. Application Programming

Interface, API ) — набір методів (функцій), який програміст може використовувати для доступу до функціональності програмного компоненту

(програми, модуля, бібліотеки). API є важливою абстракцією, що описує функціональність «в чистому вигляді», безвідносно того, як реалізована ця функціональність.

Програмні компоненти взаємодіють один з одним за допомогою API.

При цьому зазвичай компоненти утворюють ієрархію — високорівневі

компоненти використовують API низькорівневих компонентів, а ті, у свою чергу, використовують API ще більш низькорівневих компонентів.

API бібліотеки функцій і класів включає опис сигнатур і семантики функцій.

Сигнатура функції — частина загального оголошення функції, що дозволяє засобам трансляції ідентифікувати функцію серед інших.

Семантика функції — це опис того, що дана функція робить. По функціональному призначенню API можна класифікувати згідно таблиці 1.

Так у приведеній на рис.1 програмі, за допомогою API реалізована взаємодія між:

1.Програмою та клієнтською програмою - за рахунок API програми.

2.Програмою та бібліотеками - за рахунок API бібліотек.

3.Програмою та базою даних - за рахунок API БД.

4.Програмою та користувацьким інтерфейсом - за рахунок API GUI.

Як бачимо застосування API в програмних продуктах використовується повсякчас. Ось невеликий перелік API різних програмних систем:

Таблиця 1 – Приклади API

Система

Назва API

 

 

API операційних систем

Windows API, POSIX, Linux Kernel API,

 

OS/2 API, Amiga ROM Kerne

 

 

API графічних інтерфейсів

GDI, GDI+, Direct3D, DirectDraw,

 

OPENGL, OPENVG, X11, Qt, GTK,

 

Motiff, Tk, Zune, SDL

 

 

API звукових інтерфейсів

DirectSound, DirectMusic, OPENAL

 

 

API аутентифікаційних систем

BIOAPI, PAM

 

 

Інтерфейс взаємодії задач і потоків

На сьогоднішній день робота майже всіх сучасних програмних продуктів виконується в декількох розподілених потоках. Це призводить до підвищення ефективності роботи системи та дозволяє одночасно виконувати різноманітні дії – розрахунки, обслуговування клієнтських запитів, моніторинг стану,

виконання окремих завдань не в головному потоці, тощо.

Принципи роботи розподілених систем зручно розглядати на прикладі паралельного мереженого серверу (рис.3). Особливість такої системи полягає в тому, що вона обробляє декілька запитів від клієнтів одночасно. Залежно від апаратної платформи, архітектури чи ОС паралельний сервер може реалізовувати свої сервіси, використовуючи або декілька потоків або декілька процесів.

Поток 1

Поток 2

Поток N

`

`

`

`

Рис.3 – Структура паралельного сервера

На рис.4 схематично зображено структуру реалізації процесів та потоків.

 

 

 

 

 

 

 

 

 

Загальне адресний простір процесу

 

 

 

 

 

 

 

 

 

 

 

 

 

Загальна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процес

 

 

 

Процес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пам'ять

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Потоки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Багатозадачність

 

 

 

 

 

 

 

Багатопоточність

Рис.4 – Варіанти паралелізму

Процес – елемент ОС, що забезпечує контекст для виконання програми.

Кожен процес має в своєму розпорядженні деякі ресурси, такиі як віртуальна пам'ять, дескриптори вводу/виводу, обробники сигналів, тощо. Процес захищений від інших процесів ОС на апаратному рівні за допомогою блока управління пам'яттю.

Потік (задача) – це деяка послідовностей команд, яка виконується в контексті захищеного простору процесу. Задача може мати власну область пам’яті та породжувати (запускати) інші задачі. Більшість ОС підтримують виконання декількох потоків в рамках одного процесу (багатопоточність).

Розподілені системи добре підходять службам, пов'язаним з вводом/виводом даних, розрахунком, а також для обслуговування запитів з різним за часом обслуговування. В процесі роботі таких систем можуть виникнути ситуації. коли необхідно отримати доступ до одного адресного простору. В такому випадку, коли два потоки одночасно намагаються отримати доступ, чи змінити один блок даних, можуть виникнути непередбачувані наслідки, включаючи повний відказ системи. Для уникнення подібних ситуацій застосовуються різні механізми синхронізації доступу до загальної пам’яті, пов'язані з блокуванням, такі як семафори або мьютекси.

Ці структури використовуються для гарантування надійності взаємодії і сумісне використання даних процесами і потоками.

Семафор — це об'єкт синхронізації, який визначає кількість користувачів (завдань, процесів), що мають одночасний доступ до деякого ресурсу. З кожним семафором пов'язаний лічильник (значення семафора) і

черга очікування (процесів, задач) які очікують доки лічильник не набуде певного значення. Розрізняють двійкові (булеві) семафори та рахункові семафори.

Мьютекс (mutex) складається з пари: булевого семафора і ідентифікатора потока — поточного власника семафора (тобто того потока, який успішно викликав функцію захвату і став власником розподіленого). При цьому сама

ця пара зберігається в розподіленій між потоками пам'яті. Для доступу до об'єкту mutex визначено три примітивні операції:

Lock(m) — блокувати mutex m;

Unlock(m) — розблоковувати mutex m;

TryLock(m) — спробувати блокувати mutex m.

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

Індивідуальні завдання

1. Написати програму в якій реалізовується взаємодія згідно до

варіанту.

Варіанти

 

завдання

 

Варіанту

 

 

 

 

 

1

Між функціями

 

 

 

 

2

Між класами

 

 

 

 

3

Між програмою та зовнішньою бібліотекою за рахунок API

 

 

 

 

4

Між програмою та зовнішньою базою даних за рахунок API

 

 

 

 

5

Між потоками (багато поточна програма з розподіленою

 

 

пам'ятю )

 

 

 

 

 

6

З елементами GUI ( програма з графічним користувацьким

 

 

інтерфейсом)

 

 

 

 

 

7

Написати програму-білбіотеку в власним API.

 

 

 

Соседние файлы в папке HCI_Labs