Вводная лекция Введение в современные технологии программирования План лекции • Понятие технологии программирования. • Требования к современным технологиям программирования. • Введение в СОМ, ActiveX и OLE. • Цели и задачи технологии СОМ. • Функционирование СОМ. • Базовые понятия COM. Под технологией программирования понимается совокупность обобщенных и систематизированных знаний, или наука, об оптимальных способах (приемах и процедурах) проведения процесса программирования, обеспечивающего в заданных условиях получение программной Технологии программирования – это некоторое общее базовое понятие, компоненты которого могут использоваться по разному, в разных сочетаниях, в зависимости от условий их применения. Требования к современным технологиям программирования • Технология программирования должна обеспечить отторжимость программного изделия от его разработчика, т.е. человеческий фактор в программировании должен быть сведен к минимуму. • Технология программирования и средства ее поддержки (автоматизации) должны обеспечивать целенаправленную работу прежде всего коллектива программистов, а не отдельных личностей. • Технология программирования должна быть безбумажной. • Средства автоматизации технологии должны охватывать все этапы работы коллектива программистов. • Технология программирования не должна быть связана с языком программирования, так как по современным представлениям он не является определяющим звеном в технологии программирования. • Технология программирования должна быть простой в освоении, с автоматически включаемыми средствами подсказки и обучения универсального применения. • Технология программирования должна иметь средства автоматической фиксации всех действий, выполняемых в процессе коллективного изготовления программного изделия – должны вестись и храниться в системе журналы (протоколы, дневники Введение в СОМ, ActiveX и OLE Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться. Языки (C++, Visual Basic, Java), библиотеки (MFC, ATL, STL), архитектуры (COM, CORBA), которые стали вехами в развитии программирования за последние годы, постепенно уходят в тень лучших или по крайней мере более молодых программных технологий. Вне зависимости от того, нравится это программистам или нет, этот процесс неизбежен. Модель компонентных объектов (Component Object Model, COM) лежит в основе технологии Microsoft ActiveX. Она стала неотъемлемой частью Microsoft Windows, и поэтому изучение ее – обязательная часть дисциплины «Технология программирования». Общеязыковая среда исполнения .NET компании Microsoft — новая мощная среда разработки, обеспечивающая уникальные возможности по межпрограммной и межплатформенной интеграции программных средств. Для ее реализации была разработана единая концепция использования управляемого кода. Технология программирования ActiveX и OLE на основе СОМтехнологии фирмы Microsoft еще один шаг к более совершенным, т. е. более надежным и эффективным программам. Но не только более совершенные программы должны делать то, что раньше было невозможно, но и решать новые проблемы. В основе ActiveX и OLE лежит очень простая идея, но, как оказалась, она позволяет существенно повысить эффективность программирования. Терминология меняется столь же стремительно, как и технология, и даже внутри Microsoft нет единства относительно того, как использовать термины ActiveX и OLE. Считайте, что ActiveX — это нечто, возникшее при столкновении «старого» OLE и Интернета. ActiveX включает в себя не только те возможности Windows, основанные на СОМ, которые мы рассмотрим при изучении дисциплины, но и семейство Microsoft Internet Information Server и программный интерфейс WinInet При использовании кода, сгенерированного MFC Application Wizard, вы можете заметить упоминания о «сервере» (server). Теперь Microsoft резервирует этот термин только для серверов баз данных и Интернет-серверов. В отношении OLE-серверов применяется новый термин — компонент (component). COM приносит столько же проблем, сколько решает. Большую часть этой технологии в настоящее время заменяет компонентная модель .NET со своими сборками (assembly) и CLR-средой (common language runtime). Тем не менее СОМ пока в силе, и поэтому первая часть нашего курса будет посвящена изучению СОМ. Назначение СОМ СОМ - это сокращение от Component Object Model (модель составных объектов). СОМ создавалась для решение двух проблем: • Эта модель предоставляет в распоряжение программиста спецификацию, на основе которой он может создавать объекты, способные функционировать в различной языковой и операционной средах. • Модель определяет способы взаимодействия клиентских приложений, работающих на одной машине, с приложением-сервером, Краткая история СОМ Технология СОМ предоставила общую парадигму взаимодействия программ любых типов: библиотек, приложений, системного программного обеспечения и тому подобного. Вот почему подход, предложенный СОМ, можно использовать при реализации практически любой программной технологии, и его применение дает немало существенных преимуществ. Таким образом, если придерживаться точности в терминологии, то СОМ - это техническая реализация OLE, хотя четкой границы между этими терминами не существует и большинство пользователей полагает, что это одно и то же. Цели и задачи технологии СОМ Основная цель технологии СОМ — обеспечение возможности экспорта объектов. Идея экспорта объектов заключается в том, что один модуль создает объект, а другой его использует посредством обращения к методам или сервисам. Проблемы при использовании DLL: • Программисту, использующему эту библиотеку, потребуется документация — список методов со списком их формальных параметров. • Сложности использование памяти различными модулями. Например, если в одном из модулей зарезервирована память для хранения данных, то в другом модуле без специальных мер нельзя ни освободить ее, ни изменить ее размер. • Еще одна проблема возникает при обращении к объекту, созданному другим приложением. • Очередная проблема возникает при передаче двоичных данных от одного приложения к другому. Многие языки программирования имеют разное внутреннее представление переменных (например строки, логические значения), и при получении данных от заранее неизвестного приложения их интерпретация подчас невозможна. Другие проблемы традиционного программировании: • поиск установленной копии приложения, реализующего требуемые сервисы, и корректная его инициализация; • обеспечение корректной работы приложения-сервера одновременно с несколькими клиентами; • управление памятью, выгрузка из памяти приложения-сервера, когда необходимость в нем отпадет и, наоборот, предотвращение несвоевременной выгрузки. Проблемы, решаемые с помощью СОМ • Проблемы вызова методов объектов, освобождения и резервирования памяти решаются с помощью интерфейсов. • Проблема предоставления среде разработки информации о названиях методов объектов и списков формальных параметров решается при помощи библиотек типов. • Проблема передачи данных из адресного пространства одного приложения в адресное пространство другого приложения и унифицированного представления данных решается путем маршалинга. • Проблем автоматического запуска сервера решается использованием фабрики классов и ее регистрации в системном реестре. Дальнейшее развитие СОМ Сейчас Microsoft работает над следующим поколением этой технологии - СОМ+. В новой версии будут реализованы два наиболее существенных усовершенствования: • автоматическая обработка подсчета ссылок; • СОМ - объекты можно будет инспектировать во время выполнения. Сейчас Microsoft вовсю работает над .NET. Пару лет назад для создания сайта нужно было лишь установить сервер, приобрести IP-адрес и «выложить» на сайт какую-то информацию. После этого сайт становился доступен всем — достаточно было знать URL-адрес. Коммерческие предприятия использовали Web для размещения данных, которые могли пригодиться клиентам. Web-среда также оказалась ценным исследовательским инструментом и средством распространения информации В ИТ-мире ближайшего будущего Web будет играть первую скрипку. Однако ситуация изменится: до этого содержимое Web-сайтов предназначалось пользователям, теперь же с этой информацией будут работать другие компьютеры. То есть доступ к содержимому Webсайтов станет возможен из программ — благодаря Web-сервисам. Согласно концепциям .NET ответственность за организацию многофункционального пользовательского интерфейса возлагается на сервер. В условиях эйфории относительно Web-сервисов и пользовательских интерфейсов, поддерживаемых сервером, может показаться, что автономные приложения и клиентские сценарии — прерогатива таких средств, как библиотека MFC. (Microsoft Foundation Class Library), — окажутся за бортом истории. Однако вряд ли исчезнет потребность в полнофункциональном пользовательском интерфейсе. Многие полагали, что «персоналки» и распределенные технологии естественным путем вытеснят мейнфреймы и миникомпьютеры, а оказалось, что ПК и распределенные вычисления лишь дополнили общую картину ИТ-мира. Принципы Webсервисов в .NET и поддерживаемые сервером многофункциональные пользовательские интерфейсы стали еще одним вариантом, доступным разработчикам. MFC — зрелый, хорошо изученный инструмент, обеспеченный обширной поддержкой сторонних компаний. Какое-то время эта библиотека останется одним из самых производительных способов создания полнофункциональных автономных приложений. А что будет с СОМ? Эта технология позволила решить массу проблем организации распределенных вычислений, но у нее есть ряд серьезных недостатков, как правило, связанных с поддержкой версий и информации о типах. Работа .NET основана на общеязыковой среде исполнения, или CLR (Common Language Runtime). Она берет на себя функции СОМ по обеспечению совместимости. И .NET и CLRсреда будут рассмотрены во второй части курса. СОМ и CLR-среда основаны на различных компонентных архитектурах, и все же Microsoft позаботилась о механизмах «мирного сосуществования» этих технологий. Обычно удается без проблем обеспечить совместимость СОМ и CLR. Маловероятно, что в мире .NET вы станете использовать СОМ в качестве компонентной архитектуры, однако вряд ли откажетесь от ATL (Active Template Library) Server — высокопроизводительного инструмента создания Web-сайтов. Понятие о СОМ Приложение1 Вызовы функций Библиотека Сообщения через механизм межпроцессо рных связей Приложение Операционная система Операционная система Приложение2 В этой схеме для доступа к сервисам, предоставляемых библиотеками, локальными процессами, операционной системой или удаленными процессами применяются разные механизмы. СОМ предоставляет стандартный механизм, с помощью которого одна часть программного обеспечения предоставляет свои сервисы другой во всех описанных выше Общая архитектура сервисов в библиотеках, приложениях, системном и сетевом программном обеспечении позволяет СОМ (Component Object Model Модель многокомпонентных объектов) изменить подход к созданию программ. Функционирование СОМ В СОМ любая часть программного обеспечения реализует свои сервисы как один или несколько объектов СОМ. Каждый такой объект поддерживает один или несколько интерфейсов, состоящих из Метод - это функция, или процедура, которая выполняет некоторое действие и может быть вызвана программным обеспечением, использующим данный объект (клиентом объекта). Методы, составляющие каждый из интерфейсов, обычно определенным образом взаимосвязаны. Клиенты могут получить доступ к сервисам объекта СОМ только через вызовы методов интерфейсов объекта - у них нет непосредственного доступа к Корректор орфографии, реализованный в виде объекта СОМ может поддерживать интерфейс, включающий методы типа: •LookUpWord (НайтиСлово); •AddToDictionary(ДобавитьКСловарю); •RemoveFromDictionary (УдалитьИзСловаря). Если позднее разработчик объекта СОМ захочет добавить к этому объекту поддержку словаря синонимов, то объекту потребуется еще один интерфейс, возможно, с единственным методом, вроде ReturnSynonym (НайтиСиноним). Первый интерфейс объекта СОМ, представляющий счет в банке, содержит методы: • Deposit (ПоложитьНаСчет). • Withdraw (СнятьСоСчета). • CheckBalance(ПроверитьОстаток ). Второй интерфейс объекта СОМ, представляющий счет в банке, содержит методы: • ChangeAccountNumber (ИзменитьНомерСчета). • CloseAccount(ЗакрытьСчет). Интерфейс Интерфейсы Объект СОМ Сервер LookUpWord() AddToDictionary() RemoveFromDictionary() Объект СОМ ReturnSynonym() Клиент Любой СОМ-объект — это экземпляр определенного класса. Объекты одного класса могут, например, реализовывать сервисы корректировки орфографии и словаря синонимов, тогда как объекты другого класса — представлять банковские Обычно знать класс объекта необходимо для запуска экземпляра этого объекта, выполняемого с помощью библиотеки СОМ. Эта библиотека присутствует на любой системе, поддерживающей СОМ, и имеет доступ к справочнику всех доступных на данной машине классов СОМ-объектов. Приложение 1 Приложение Операционная система Библиотека Приложение 2 Операционная система Базовые понятия СОМ В технологии СОМ приложение предоставляет для использования свои сервисы, применяя для этого объекты СОМ. Одно приложение содержит как минимум один объект. Каждый объект имеет один или несколько интерфейсов. Каждый интерфейс объединяет методы объекта, которые обеспечивают доступ к свойствам (данным) и выполнение операций. Обычно в интерфейсе объединяются все методы, выполняющие операции одного типа или работающие с однородными свойствами. Клиент получает доступ к сервисам объекта только через интерфейс и его методы. Этот механизм является ключевым. Клиенту достаточно знать несколько базовых интерфейсов, чтобы получить исчерпывающую информацию о составе свойств и методов объекта. Объект всегда работает в составе сервера СОМ. Сервер может быть динамической библиотекой или исполняемым файлом. Объект может иметь собственные свойства и методы или использовать данные и сервисы сервера. Для доступа к методам объекта клиент должен получить указатель на соответствующий интерфейс. Для каждого интерфейса существует собственный указатель. После этого клиент может использовать сервисы объекта, просто вызывая его методы. Доступ к свойствам объектов осуществляется только через его методы. Интерфейс IUnknown Интерфейс ILinear Интерфейс IAggreate Сервер Объект СОМ Взаимодействие между клиентом и объектом обеспечивается базовыми механизмами СОМ. При этом от клиента скрыто, где именно расположен объект: в адресном пространстве того же процесса, в другом процессе или на другом компьютере. Поэтому с точки зрения разработчика клиентского программного обеспечения использование функций электронной таблицы выглядит как обычное обращение к методу объекта. Механизм обеспечения взаимодействия между удаленными элементами СОМ называется маршалингом (marshalling). Схема взаимодействия клиента и объекта СОМ Указатель на интерфейс IAggregatte объекта СОМ Интерфейс IUnknown Интерфейс ILinear Клиент Интерфейс IAggreate Объект СОМ Сервер Объект Центральным элементом СОМ является объект. Приложения, поддерживающие СОМ, имеют в своем составе один или несколько объектов СОМ. Каждый объект представляет собой экземпляр соответствующего класса и содержит один или несколько интерфейсов Каждый интерфейс имеет два атрибута: • имя, составленное из символов. Каждое имя должно начинаться с символа “I”; • глобальный уникальный идентификатор (Globally Unique IDentifier, GUID), который представляет собой гарантированно уникальное Любой объект является экземпляром некоторого класса, то есть представляет собой переменную объектного типа. Поэтому объект обладает набором свойств и методов, которые работают с этими свойствами. К объектам применимы три основные характеристики: инкапсуляция, наследование и полиморфизм. Объекты СОМ всем этим требованиям удовлетворяют Интерфейс Интерфейсы являются центральным звеном идеологии СОМ. Интерфейс — это не класс. Интерфейс строго типизирован. Интерфейс является неизменным контрактом. Формат интерфейса СОM Клиент Указатель 1 Указатель 2 Указатель 2 Метод 1 Метод 2 Указатель N Метод N Указатель на интерфейс Внутренний указатель на виртуальную таблицу Объект СОМ Интерфейс lUnknown состоит из трех методов: •QueryInterface. •AddRef. • Release. Сервер Сервер СОМ представляет собой исполняемый файл: приложение или динамическую библиотеку, который может содержать один или несколько объектов одного или разных классов. Различают три типа серверов. Различают три типа серверов: • Внутренний сервер (inprocess server). • Локальный сервер (local server). • Удаленный сервер (remote server). После получения указателя клиент обращается к интерфейсу Объект СОМ Объект СОМ Клиент Указатель на IID2_A CoCreateIstance(CLSID_2, IID2_A) Библиотека СОМ Библиотека обращается к реестру CLSID_1 C:\SERVER1.EXE CLSID_2 C:\SERVER2.DLL По записи из реестра СОМ запускается сервер