Уровни абстракции

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

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

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

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

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

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

В Delphi используется очень мощная и сложная библиотека VCL (Visual Components Library), которая помимо непосредственных абстракций вводит также и множество своих функциональных классов. В этой библиотеке находятся компоненты для визуального отображения информации, работы с базами данных, с системными объектами, компоненты для работы с Internet-протоколами, классы для написания своих COM-объектов и многое другое. Модули библиотеки подключаются к компиляции по мере необходимости, однако базовый размер простейшего диалогового проекта с одной формой превышает 300кБ (со статически скомпонованной библиотекой). И такой размер во многих случаях может оказаться слишком большим, особенно если программа не требует большой функциональности в интерфейсе.

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

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

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

1. Быстрое написание программ (достаточно накидать кнопок на форму и написать их процедуры).

2. Удобство использования (это удобнее, чем описывать каждый шаг на низком уровне, не нужно заботиться о памяти).

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

1. Огромный размер приложений - «пустое» приложение на Delphi «весит» примерно300 кб.

2. Из-за огромного количества надстроек быстродействием приходится пренебречь, особенно в плане графики на Canvas.

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

1. Малый размер конечных файлов (между 30 кб и 300 кб есть большая разница);

2. Быстродействие на достаточно высоком уровне (быстрее получится только, если писать целиком на ассемблере).

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

1. Нет визуализации (труднее представить, что создать, что уничтожить, что где писать).

2. Для создания обычного окна потребуется примерно 50 строк кода (создать и зарегистрировать само приложение, создать окно, позаботиться обо всех параметрах).

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

Контрольные вопросы

1. Что представляет собой SDK? Приведите примеры SDK.

2. Что обычно входит в SDK?

3. Что можно разрабатывать с помощью SDK?

4. Что представляют собой DDK?

5. Что представляет собой API?

6. Как называется часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других?

7. Как называется описание того, что делает функция?

8. Что является главным API операционных систем?

9. Как называется обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции?

10. Что в современных операционных системах обеспечивает разделение времени между выполняющимися вычислительными процессами?

11. Что в современных операционных системах препятствует исполняемым программам обращаться к данным других программ и оборудованию?

12. Что существенно затрудняют перенос приложений между платформами? Что применяется для переноса приложений между платформами?

13. Какие основные сложности существуют у многоуровневых систем API?

14. Какие функции API Windows можно использовать для запуска приложений из программы в Delphi?

15. Что представляют собой динамически подключаемые библиотеки?

16. В чем заключается принцип абстракции аппаратной и программной структуры большинства современных компьютеров?

17. Что располагается на самом верхнем уровне абстракции? Что располагается на нижних уровнях абстракции?

18. Какие плюсы и минусы есть у визуального программирования?

19. Какие плюсы и минусы есть у низкоуровневого программирования на Win32 API?


 

Лекция 11

 

ТЕМА:Процедура физического проектирования – порядок, инструменты, ресурсы, документы.

Литература: 1. Марченко А.Л. C++. Бархатный путь.

2. Молчанов А. Ю. Системное программное обеспечение: Учебник для вузов. 3-е изд.

3. Фленов М.Е. Библия Delphi.- 3-е изд.








Дата добавления: 2015-09-07; просмотров: 4440;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.