Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №6
Шрифт:

Компонент — это хранилище (в виде DLL или EXE файла) для одного или нескольких классов. Все, что знает клиент о классе, это его уникальный идентификатор и один или несколько интерфейсов, обеспечивающих доступ к реализованным данным классом методам. Допускается реализация компонента и использующего его клиента на различных языках (Visual C++, Visual Basic). В реестре системы хранится информация о местоположении компонента, содержащего данный класс (на локальном или удаленном компьютере). Это позволяет системе прозрачно для клиента перенаправлять вызовы методов к нужному компоненту и возвращать

результаты.

Таким образом, обеспечивается выполнение двух важных принципов компонентного программирования:

• независимость от языка программирования,

Основные особенности компонентного программирования можно коротко охарактеризовать следующим образом:

• Инкапсуляция

В СОМ инкапсуляция находится на более высоком уровне чем в ООП. Между клиентом и реализацией класса находятся интерфейсы. Интерфейс — абстрактный базовый класс, который не имеет элементов данных и который является прямым потомком не более чем одного другого интерфейса. Реализация методов данного интерфейса выполняется в классе, который является потомком данного и, возможно, еще других интерфейсов.

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

• Наследование интерфейсов

В отличие от ООП, технология компонентного программирования не поддерживает наследование реализации класса. Наследуются только интерфейсы. Каждый интерфейс получает свой уникальный идентификатор и может реализовываться в различных классах, включаемых в различные компоненты. Новый интерфейс может наследовать ранее описанным интерфейсам. Например, в СОМ, любой интерфейс должен наследовать стандартному интерфейсу IUnknown. Наследование интерфейса в частности означает, что при реализации методов нового интерфейса будут реализованы и все методы, описанные в наследуемом интерфейсе.

А как же быть с идеей повторного использования кода? В рамках технологии компонентного программирования разработчик нового компонента не использует исходный код ранее реализованного компонента. Но он (разработчик) может добавить функциональность старого компонента к функциональности нового. Это делается с помощью одного из двух методов:

? Контейнеризация

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

? Агрегация

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

и новый (агрегирующий) компонент не работает посредником — вызовы клиента, относящиеся к старому компоненту, направляются прямо ему. Но клиент этого не замечает, ему кажется, что он работает с одним новым компонентом.

• Полиморфизм

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

• Бинарное представление

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

• Инфраструктура для распределенных приложений

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

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

Эволюция распределенных систем

Коротко напомним напомним эволюцию, которую претерпели распределенные системы:

• Одноуровневая система

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

• Локальная вычислительная сеть персональных компьютеров

Пользователи работают на персональных машинах и совместно используют файловый сервер, принтер.

• Архитектура клиент/сервер

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

Еще один пример системы с такой архитектурой — поисковые системы типа Alta Vista, Google, Yandex. В отличие от традиционных клиентов для работы с сервером баз данных (как правило, "толстых" клиентов, требующих специальной процедуры установки на машине пользователя), упомянутые поисковые системы работают с "тонким" клиентом, например, с браузером Internet Explorer, не зависящим от конкретного приложения.

Поделиться:
Популярные книги

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Новый Рал 8

Северный Лис
8. Рал!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Новый Рал 8

Барон Дубов 2

Карелин Сергей Витальевич
2. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 2

Девочка для Генерала. Книга первая

Кистяева Марина
1. Любовь сильных мира сего
Любовные романы:
остросюжетные любовные романы
эро литература
4.67
рейтинг книги
Девочка для Генерала. Книга первая

Случайная жена для лорда Дракона

Волконская Оксана
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Случайная жена для лорда Дракона

Вампиры девичьих грез. Тетралогия. Город над бездной

Борисова Алина Александровна
Вампиры девичьих грез
Фантастика:
фэнтези
6.60
рейтинг книги
Вампиры девичьих грез. Тетралогия. Город над бездной

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

Темный Лекарь 7

Токсик Саша
7. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.75
рейтинг книги
Темный Лекарь 7

Вспомнить всё (сборник)

Дик Филип Киндред
Фантастика:
научная фантастика
6.00
рейтинг книги
Вспомнить всё (сборник)

Сумеречный Стрелок 10

Карелин Сергей Витальевич
10. Сумеречный стрелок
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Сумеречный Стрелок 10

Кодекс Охотника. Книга XXIII

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Никита Хрущев. Рождение сверхдержавы

Хрущев Сергей
2. Трилогия об отце
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Никита Хрущев. Рождение сверхдержавы

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь