Lecture12 (1133569)
Текст из файла
Технологии программирования. Компонентный подходВ. В. КуляминЛекция 12. Компонентные технологии и разработка распределенногоПОАннотацияРассматриваются основные понятия компонентных технологий разработки ПО и понятиекомпонента. Рассказывается об общих принципах разработки распределенного ПО и оборганизации взаимодействия его компонентов в рамках удаленного вызова процедур итранзакций.Ключевые словаПрограммный компонент, интерфейс, программный контракт, компонентная модель,компонентная среда, базовые службы компонентной среды, распределенное ПО, прозрачность,открытость, масштабируемость, безопасность, синхронное и асинхронное взаимодействие,удаленный вызов процедур, транзакция.Текст лекцииОсновные понятия компонентных технологийПонятие программного компонента (software component) является одним из ключевых всовременной инженерии ПО.
Этим термином обозначают несколько различных вещей, часто неуточняя подразумеваемого в каждом конкретном случае смысла.• Если речь идет об архитектуре ПО (или ведет ее архитектор ПО), под компонентом имеетсяв виду то же, что часто называется программным модулем. Это достаточно произвольный иабстрактный элемент структуры системы, определенным образом выделенный средиокружения, решающий некоторые подзадачи в рамках общих задач системы ивзаимодействующий с окружением через определенный интерфейс.
В этом курсе для этогопонятия употребляется термин архитектурный компонент или компонент архитектуры.• На диаграммах компонентов в языке UML часто изображаются компоненты, являющиесяединицами сборки и конфигурационного управления, — файлы с кодом на каком-то языке,бинарные файлы, какие-либо документы, входящие в состав системы. Иногда там жепоявляются компоненты, представляющие собой единицы развертывания системы, — этокомпоненты уже в третьем, следующем смысле.• Компоненты развертывания являются блоками, из которых строится компонентноепрограммное обеспечение.
Эти же компоненты имеются в виду, когда говорят окомпонентных технологиях, компонентной или компонентно-ориентированной (componentbased) разработке ПО, компонентах JavaBeans, EJB, CORBA, ActiveX, VBA, COM, DCOM,.Net, Web-службы (web services), а также о компонентном подходе, упоминаемом вназвании данного курса. Согласно [1], такой компонент представляет собой структурнуюединицу программной системы, обладающую четко определенным интерфейсом, которыйполностью описывает ее зависимости от окружения.
Такой компонент может бытьнезависимо поставлен или не поставлен, добавлен в состав некоторой системы или удалениз нее, в том числе, может включаться в состав систем других поставщиков.Различие между этими понятиями, хотя и достаточно тонкое, все же может привести ксерьезному непониманию текста или собеседника в некоторых ситуациях.В определении архитектурного компонента или модуля делается акцент на выделениеструктурных элементов системы в целом и декомпозицию решаемых ею задач на более мелкиеподзадачи.
Представление такого компонента в виде единиц хранения информации (файлов, базданных и пр.) не имеет никакого значения. Его интерфейс хотя и определен, может быть уточнен ирасширен в процессе разработки.Понятие компонента сборки и конфигурационного управления связано со структурнымиэлементами системы, с которыми приходится иметь дело инструментам, осуществляющим сборкуи конфигурационное управление, а также людям, работающим с этими инструментами. Для этихвидов компонентов интерфейсы взаимодействия с другими такими же элементами системы могутбыть не определены.В данной лекции и в большинстве следующих мы будем иметь дело с компонентами в третьемсмысле.
Это понятие имеет несколько аспектов.• Компонент в этом смысле — выделенная структурная единица с четко определенныминтерфейсом. Он имеет более строгие требования к четкости определения интерфейса, чемархитектурный компонент. Абсолютно все его зависимости от окружения должны бытьописаны в рамках этого интерфейса. Один компонент может также иметь несколькоинтерфейсов, играя несколько разных ролей в системе.При описании интерфейса компонента важна не только сигнатура операций, которыеможно выполнять с его помощью. Становится важным и то, какие другие компоненты онможет задействовать при работе, а также каким ограничениям должны удовлетворятьвходные данные операций и какие свойства выполняются для результатов их работы.Эти ограничения являются так называемым интерфейсным контрактом илипрограммным контрактом компонента.
Интерфейс компонента включает наборопераций, которые можно вызвать у любого компонента, реализующего данный интерфейс,и набор операций, которые этот компонент может вызвать в ответ у других компонентов.Интерфейсный контракт для каждой операции самого компонента (или используемой им)определяет предусловие и постусловие ее вызова. Предусловие операции должно бытьвыполнено при ее вызове, иначе корректность результатов не гарантируется. Если этаоперация вызывается у компонента, то обязанность позаботиться о выполнениипредусловия лежит на клиенте, вызывающем операцию.
Если же эта операция вызываетсякомпонентом у другого компонента, он сам обязуется выполнить это предусловие. Спостусловием все наоборот — постусловие вызванной у компонента операции должно бытьвыполнено после ее вызова, и это — обязанность компонента. Постусловие операцииопределяет, какие ее результаты считаются корректными. В отношении вызываемыхкомпонентом операций выполнение их постусловий должно гарантироваться темикомпонентами, у которых они вызываются, а вызывающий компонент может на нихопираться в своей работе.Пример.
Рассмотрим сайт Интернет-магазина. В рамках этого приложения может работатькомпонент, в чьи обязанности входит вывод списка товаров заданной категории. Одна изего операций принимает на вход название категории, а выдает HTML-страничку в заданномформате, содержащую список всех имеющихся на складе товаров этой категории.Предусловие может состоять в том, что заданная строка действительно является названиемкатегории. Постусловие требует, чтобы результат операции был правильно построеннойHTML-страницей, чтобы ее основное содержимое было таблицей со списком товаровименно указанной категории, название каждого из которых представляло бы собой ссылку,по которой можно попасть на его описание, а в остальном — чтобы эта страница былапостроена в соответствии с принятым проектом сайта.Более аккуратно построенный компонент не требовал бы ничего в качестве предусловия(т.е. оно было бы выполнено при любом значении параметра), а в случае некорректногоназвания категории в качестве результата выдавал бы HTML-страницу с сообщением онеправильном названии категории товаров.При реализации интерфейса предусловия операций могут ослабляться, а постусловия —только усиливаться.
Это значит, что, реализуя данную операцию, некоторый компонентможет реализовать ее для более широкого множества входных данных, чем это требуется••предусловием, а также может выполнить в результате более строгие ограничения, чем этотребуется постусловием. Однако внешним компонентам нельзя опираться на это, пока ониработают с исходным интерфейсом, — реализация может поменяться. Точно так же, еслиинтерфейс компонента требует наличия в системе других компонентов с определеннымнабором операций, это не означает, что данная реализация этого интерфейса действительновызывает эти операции.Компонент в этом смысле — единица развертывания.
Он может быть присоединен костальной системе, когда она уже некоторое время работает, и должен после этоговыполнять все свои функции, если в исходной системе уже были все компоненты, откоторых он зависит. Он может быть удален из нее. Естественно, после этого могутперестать работать те компоненты, которые зависят от него. Он может быть встроен впрограммные продукты третьих партий и распространяться вместе с ними.
В то же времяникакая его часть не обладает этими свойствами.В идеале такой компонент может быть добавлен или полностью замещен другойреализацией тех же интерфейсов прямо в ходе работы системы, без ее остановки. Хотя и невсе разновидности компонентов обладают этим свойством, его наличие признается крайнежелательным.Все это означает, что такой компонент должен быть работоспособен в любой среде, гдеимеются необходимые для его работы другие компоненты. Это требует наличияопределенной инфраструктуры, которая позволяет компонентам находить друг друга ивзаимодействовать по определенным правилам.Набор правил определения интерфейсов компонентов и их реализаций, а также правил, покоторым компоненты работают в системе и взаимодействуют друг с другом, принятообъединять под именем компонентной модели (component model) [2]. В компонентнуюмодель входят правила, регламентирующие жизненный цикл компонента, т.е.
то, черезкакие состояния он проходит при своем существовании в рамках некоторой системы(незагружен, загружен и пассивен, активен, находится в кэше и пр.) и как выполняютсяпереходы между этими состояниями.Существуют несколько компонентных моделей. Правильно взаимодействовать друг сдругом могут только компоненты, построенные в рамках одной модели, посколькукомпонентная модель определяет «язык», на котором компоненты могут общаться друг сдругом.Помимо компонентной модели, для работы компонентов необходим некоторый наборбазовых служб (basic services).
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.