Рівні абстракції - студопедія

Апаратні та програмні структури більшості сучасних комп'ютерів - багаторівневі. Деталі нижніх рівнів ховаються, щоб забезпечити більш прості моделі для верхнього рівня. Даний принцип абстракції - спосіб, завдяки якому проектувальники апаратних і програмних засобів справляються зі складністю обчислювальних систем.

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

На верхньому рівні абстракції прикладні програми користувачів звертаються до інтерфейсу прикладного програмування (application programming interface - API), який представляє собою набір бібліотечних функцій. API структурований по підсистемах. причому набір підсистем розширюємо. Нижні рівні абстракції реалізують ядро ​​ОС, яке виконує функції управління пам'яттю, диспетчеризації завдань і управління пристроями. Нарешті, на найнижчому рівні абстракції реалізовані драйвери пристроїв.

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

Абстракцію, яка доступна програмісту у вигляді бібліотек API можна назвати базовою. Це найнижчий рівень абстракції, який доступний для прикладного програмування. На рівні ядра системи доступні і більш низькі рівні абстракції, проте для їх використання необхідно розробляти спеціалізовані програми (драйвера, модулі). Базовий рівень абстракції (API) надає максимально широкі можливості для прикладного програмування і є найбільш гнучким. Однак, програмування з використанням API є набагато більш трудомістким і призводить до значно більших обсягів вихідного коду програми, ніж програмування з використанням додаткових бібліотек.

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

У Delphi використовується дуже потужна і складна бібліотека VCL (Visual Components Library), яка крім безпосередніх абстракцій вводить також і безліч своїх функціональних класів. У цій бібліотеці знаходяться компоненти для візуального відображення інформації, роботи з базами даних, з системними об'єктами, компоненти для роботи з Internet-протоколами, класи для написання своїх COM-об'єктів і багато іншого. Модулі бібліотеки підключаються до компіляції в міру необхідності, проте базовий розмір найпростішого діалогового проекту з однією формою перевищує 300кб (з статично скомпонована бібліотекою). І такий розмір у багатьох випадках може виявитися занадто великим, особливо якщо програма не вимагає великої функціональності в інтерфейсі.

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

Плюси візуального програмування:

1. Швидке написання програм (досить накидати кнопок на форму і написати їх процедури).

2. Зручність використання (це зручніше, ніж описувати кожен крок на низькому рівні, не потрібно піклуватися про пам'ять).

Мінуси візуального програмування:

1. Величезний розмір додатків - «порожнє» додаток на Delphi «важить» прімерно300 кб.

2. Через величезної кількості надбудов швидкодією доводиться знехтувати, особливо в плані графіки на Canvas.

Плюси низкоуровневого програмування на Win32 API:

1. Мінімальний розмір кінцевих файлів (між 30 кб і 300 кб є велика різниця);

2. Швидкодія на досить високому рівні (швидше вийде тільки, якщо писати цілком на асемблері).

Мінуси низкоуровневого програмування на Win32 API:

1. Ні візуалізації (важче уявити, що створити, що знищити, що де писати).

2. Для створення звичайного вікна буде потрібно приблизно 50 рядків коду (створити і зареєструвати сам додаток, створити вікно, подбати про всі параметри).

3. Необхідно пам'ятати про необхідність стежити за використанням пам'яті - звільненням, взяттям.