Рівні абстракції - студопедія
Апаратні та програмні структури більшості сучасних комп'ютерів - багаторівневі. Деталі нижніх рівнів ховаються, щоб забезпечити більш прості моделі для верхнього рівня. Даний принцип абстракції - спосіб, завдяки якому проектувальники апаратних і програмних засобів справляються зі складністю обчислювальних систем.
Будь-яку сучасну програму або програмну технологію можна уявити як сукупність програмних "шарів". Кожен з цих шарів виробляє свою власну роботу, яка полягає в підвищенні рівня абстракції вироблених операцій. Так, найнижчий шар (шари) вводить поняття, які дозволяють абстрагуватися від використовуваного обладнання; наступний шар (шари) дозволяє програмісту абстрагуватися від складної послідовності викликів функцій, вводячи таке поняття як протокол і т.д. Практично в будь-якому сучасному програмному продукті можна виявити і виділити близько десятка послідовних шарів абстракції.
На верхньому рівні абстракції прикладні програми користувачів звертаються до інтерфейсу прикладного програмування (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. Необхідно пам'ятати про необхідність стежити за використанням пам'яті - звільненням, взяттям.