![](/stc/img/evkova.png)
Технология СОМ
Содержание:
ВВЕДЕНИЕ
COM (Component Object Model – модель многокомпонентных объектов) – одна из базовых технологий MS Windows. Основная цель технологии COM – обеспечение возможности экспорта объектов. Идея экспорта состоит в том, что один модуль создает объект, а другой его использует, обращаясь к его методам и сервисам. Естественно рационально экспортировать сложные объекты, реализующие большие и трудоемкие задачи, неизвестные вам алгоритмы и тому подобное. Это к тому, что не стоит создавать COM объект, выполняющий чтение или запись файла, т.е. простую операцию. Это нецелесообразно, и вы потратите боль времени разрабатывая и отлаживая COM-объект, чем получите удовольствия от его использования.
Один из путей решения проблемы экспорта объектов это создание объекта в DLL, а вызов методов осуществить из основного приложения. Но! Существуют некоторые операторы, которые некорректно работают в DLL, например, оператор IS всегда возвращает false, а при использовании оператора AS генерится исключение. Также необходимо точно знать какую функцию и с какими параметрами необходимо вызвать, следовательно необходимо наличие у программиста качественной документации к библиотеке. У кого-нибудь была такая? У меня была, но она разрабатывалась крупной компанией и была очень дорогой. В принципе рядовому программисту иногда не под силу качественно составить документацию, ведь наличие одной ошибки приведет к невозможности использовать его разработку, а это сложна и рутинная работа. К тому же существует проблема с освобождением памяти. Память, выделенная в одном модуле, не может быть освобождена в другом.
Можно также выделить и несколько других проблем.
- передача параметров модулю (различные представления данных в двоичном виде для различных языков программирования могут стать серьезным препятствием для использования чужих библиотек);
- поиск установленной копии приложения, реализующего требуемые сервисы, инициализация его;
- обеспечение корректной работы для нескольких клиентов.
Эти проблемы решает COM. Вызов объектов и методов решается использованием интерфейсов, передача параметров решается маршалингом, описание параметров и методов с помощью библиотек типов, автоматического запуска сервера с помощью фабрики классов и ее регистрации в реестре.
Объект исследований – технология COM.
Предмет исследований - изучение основных методов и определений технологии COM.
Цель работы – получить знания по данной теме.
Для достижения цели необходимо решить следующие задачи:
1. Исследовать предметную область.
2. На основании теоретического анализа изучения проблемы, собрать требуемые данные по указанной теме.
3. Систематизировать и обобщить существующие в специальной литературе, научные подходы к данной проблеме.
Теоретическая значимость проведенного исследования состоит в обобщении научного знания по данной проблеме.
Практическая значимость работы выражается в получении навыков и умения программирования.
Успешность выполнения задач по написанию работы в наибольшей степени зависит от выбранных методов исследования.
В работе использовались методы как эмпирического исследования: сравнительно-сопоставительный, наблюдение, так и используемые как на эмпирическом, так и на теоретическом уровне исследования: абстрагирования, анализ и синтез.
Из всего многообразия литературы считаю наиболее приемлемыми для себя и работы следующих авторов Гагарина Л. Г. , Ездаков А. Л. , Карпенков С. Х. , Колдаев В. Д. , Кудинов Ю. И. , Лазарева И. М., Малявко А. А., Орлов С. А., Тузовский А. Ф. , Федорова Г. Н. , Черпаков И. В.
Структурно курсовая работа состоит из введения, трех глав, заключения и списка литературы.
Глава 1. Предпосылки возникновения COM
Технология СОМ является одной из базовых технологий Windows и для того, чтобы понять ее назначение, необходимо рассмотреть основные предпосылки ее возникновения[1]. Если попытаться кратко сформулировать ее цель – то это способ взаимодействия клиентских приложений и серверов или предоставление сервисов одним приложением другому. Таким образом, главной предпосылкой возникновения СОМ является именно взаимодействие приложений.
Проблема взаимодействия приложений Windows имеет две стороны: взаимодействие на одном компьютере и в сети Intranet или Internet[2]. Взаимодействие приложений, размещенных на удаленных компьютерах, обеспечивается технологией DCOM (Distributed COM – распределенная модель компонентных объектов), а также и технологией COM+. COM+ является следующим эволюционным шагом в развитии технологии СОМ. Технология COM+ не только включает в себя технологии COM и DCOM, но и имеет свои специфические особенности, облегчающие программирование взаимодействующих приложений Windows в рамках одного компьютера или в сети[3].
Чтобы яснее представить себе проблему взаимодействия приложений Windows, надо вспомнить следующее. Каждый процесс в 32-разрядной Windows имеет свое адресное пространство размером в 4Гб и, по этой причине, один процесс не имеет никакой возможности (и хорошо!) получить доступ к данным или функциям другого процесса, так как любой адрес в процессе ссылается на свое адресное пространство.
В логической и хронологической последовательности взаимодействие приложений Windows реализовалось с использованием следующих технологий:
1 Dynamic Link Libraries (DLL) – динамически подключаемые библиотеки.
2 Open DataBase Connectivity (ODBC) – открытый интерфейс доступа к базам данных, встроенный в Windows и Windows NT.
3 Dynamic Data Exchange (DDE) – динамический обмен данными.
4 Object Linking and Embedding (OLE1.0) – внедрение и связывание объектов.
5 OLE2.0 – OLE на базе COM.
6 Distributed COM (DCOM) – распределенная модель компонентных объектов.
7 COM+ – новейшая технология COM.
Зачем вообще приложениям необходимо взаимодействовать друг с другом? Если некоторому приложению необходимо, допустим, использовать электронные таблицы Excel, то почему бы ему не подключить соответствующую библиотеку DLL? Естественно, можно, и это уже было первым подходом к решению данной проблемы. Однако, такой подход имеет свои недостатки, главным из которых является проблема сопровождения и модификации ПП[4]. Если разрабатывалась новая версия какой-либо функции DLL, то перестают работать приложения, которые используют старую версию библиотеки[5]. Если новую версию функции снабдить новым именем, то необходимо разрабатывать новую документацию и включать в библиотеку обе версии функции[6]. Несложно себе представить, в какой конгломерат превратится библиотека в течение весьма небольшого промежутка времени и насколько сложно будет ориентироваться в многочисленных версиях функций!
Главную идею технологии ODBC можно проиллюстрировать все на той же Excel. Так как это приложение должно быть способно считывать данные из БД различных форматов, необходимо или разрабатывать различные версии Excel для каждой из БД (Excel для Access, Excel для Oracle и т.д.) или заблаговременно подключать все необходимые библиотеки к Excel. Microsoft выбрала другой путь, создав промежуточный программный слой, который определяет стандартный интерфейс для приложений. На уровне вызовов этот интерфейс использует язык SQL, а реализация взаимодействия с БД обеспечивается драйверами, поставляемые в форме DLL[7]. Таким образом, ODBC располагается между приложением и источниками данных различных форматов.
Технологию динамического обмена данными DDE можно рассматривать как попытку стандартизации обмена данными между приложениями[8]. Вся идеология Windows основана на обработке сообщений (messages) и любые приложения могут обмениваться друг с другом сообщениями, используя общую очередь сообщений. Проблема, однако, состоит в том, что каждое из приложений должно знать протокол обмена данными, т.е. формат сообщений, и собственно сообщения Windows не позволяют передавать сравнительно большие объемы данных[9]. Технология DDE как раз и предложила такой стандартный протокол, реализованный во многих приложениях. Главными недостатками DDE является сложность программирования, ненадежность и то обстоятельство, что приложения должны знать формат передаваемых данных.
Технологию внедрения и связывания объектов OLE1.0 фирма Microsoft представила в 1991г. как попытку реализации объектно-ориентированного механизма взаимодействия приложений. Главной идеей OLE является концепция составного документа, который может содержать объекты других приложений[10].
До OLE приложения могли обмениваться статическими снимками данных через буфер обмена Windows. Однако редактирование таких данных должно выполняться тем приложением, которое их породило, а после редактирования они вновь должны быть вставлены в другой документ. Если изменяются исходные данные, то, очевидно, должны изменяться данные и в составном документе. Однако, системный буфер обмена не имеет никаких средств поддержания таких связей. Более того, проблемы возникают и при перемещении исходных данных в новое место.
Внедренный с помощью OLE1.0 объект содержит статические данные (рисунок) и данные, необходимые для его редактирования. Для редактирования объекта пользователю приложения-контейнера необходимо щелкнуть по объекту, вследствие чего в отдельном окне запускается исходное приложение, породившее эти данные[11]. По окончании редактирования пользователь может сохранить данные и эти данные будут обновлены и в приложении-контейнере.
Недостатками технологии OLE1.0 являются:
1 Так как базовым механизмом OLE1.0 является DDE, который по своей природе асинхронен, то после вызова любой функции возврат управления происходит немедленно и требуется ожидать, в цикле, завершения требуемой операции.
2 Так как для передачи данных между приложениями используется разделяемая глобальная память, то данные сначала копируются в нее, откуда они тут же могут быть вытолкнуты Windows в файл подкачки, вследствие чего замедляется работа приложения[12].
3 Связи OLE1.0 легко разрываются при перемещении файлов.
4 Пользователю неудобно редактировать данные в отдельном окне.
Глава 2. Основные понятия и определения.
COM (Component Object Model) – модель компонентных объектов Microsoft[13]. Стандартный механизм, включающий интерфейсы, с помощью которых одни объекты предоставляют свои сервисы другим. Является основой многих объектных технологий, в том числе OLE и ActiveX. Другой перевод: многокомпонентная модель объектов.
DCOM (Distributed Component Object Model) – распределенная модель компонентных объектов[14]. Расширение модели COM фирмы Microsoft, ориентированное на поддержку и интеграцию распределенных объектных приложений, функционирующих в сети.
COM представляет собой основанную на объектах клиент-серверную модель, разработанную Microsoft для обеспечения взаимодействия между компонентами программного обеспечения и приложениями. Microsoft расширила эту технологию добавлением элементов ActiveX, которые представляют результат развития технологий OLE и OCX. OCX (OLE Custom eXtension) – это программируемые компоненты-приложения с интерфейсом на базе OLE, позволяющим легко включать их в другие приложения[15]. С 1996 года они стали называться ActiveX.
Сейчас Microsoft предлагает использовать термин Active technologies вместо ActiveX, включая в новые технологии такие составляющие:
- Active Documents (активные документы)
- ActiveX (управляющие элементы)
- Active Scripting controls
· Automation (автоматизация, прежде известная как OLE Automation)
Ключевым аспектом COM является то, что эта технология обеспечивает связь между клиентами и серверами посредством интерфейсов[16]. Именно интерфейс предоставляет клиенту способ "узнать" у сервера, какие именно возможности он поддерживает на этапе выполнения. Для расширения возможностей сервера необходимо просто добавить новый интерфейс к существующим.
Delphi предоставляет программисту мастеров (wizards) и классы, которые облегчают разработку приложений, основанных на технологиях COM[17]. Мастера позволяют создавать:
- простые COM–совместимые классы для использования в одном приложении;
- полновесные серверы COM;
- серверы автоматизации (Automation servers) и контроллеры автоматизации (Automation controller);
- управляющие элементы ActiveX;
- активные формы ActiveForms.
COM является одновременно и спецификацией и реализацией[18]. Спецификация COM определяет правила создания объектов и их взаимодействия, способ связи между объектами. В соответствии со спецификацией объекты COM могут быть написаны на различных языках, выполняться в адресном пространстве различных процессов и на разнообразных платформах. До тех пор, пока объекты полностью соответствуют спецификации, они могут взаимодействовать. Это позволяет объединять унаследованный код как компонент с новыми компонентами, разработанными в любом из объектно-ориентированных языков.
COM как реализация представляет собой библиотеку (файлы OLE32.dll OLEAut32.dll), которая предоставляет ряд основных служб, поддерживающих описанные спецификации. Библиотека COM содержит набор стандартных интерфейсов, определяющих основную функциональность объектов COM, и небольшой набор функций API, разработанных для целей создания и управления объектами COM[19].
Интерфейсы объектов Delphi, как и язык Object Pascal, соответствуют COM спецификации. Реализация COM в Delphi называется DAX (Delphi ActiveX framework – базовая структура (каркас) элементов ActiveX Delphi)[20]. Основная часть реализации этой структуры находится в модуле AxCtrls.
Когда программист использует мастеров Delphi или объекты библиотеки VCL в своем приложении, он использует реализацию COM спецификаций. Кроме того, Delphi предоставляет ряд упаковщиков (wrapper) для таких служб COM, которые не реализуются непосредственно, например, активные документы (Active Documents). Эти упаковщики включены в модуль ComObj
Так как COM является развивающейся технологией, она может быть расширена за рамки базисных служб[21]. COM является основой для других технологий, таких как автоматизация (Automation – вместо прежнего термина OLE Automation), элементы ActiveX и активные документы (Active Documents).
Кроме того, в настоящее время возможно создание таких объектов COM, которые могут взаимодействовать с Microsoft Transaction Server (MTS). MTS – это система обработки транзакций, предназначенная для построения, развертывания и управления большими Intranet и Internet приложениями-серверами. Хотя MTS архитектурно и не является частью COM, она разработана для расширения возможностей COM в большой, распределенной среде.
Delphi снабжает программиста мастерами, облегчающими разработку приложений, которые объединяют упомянутые выше технологии – Automation, ActiveX, Active Documents и MTS.
2.1. Составляющие приложений COM
При разработке приложений, использующих технологию COM, используются структурные элементы, приведенные в таблице1.
Таблица 1
Структурные элементы COM
Элемент |
Назначение |
COM Interface |
Средство, с помощью которого объект COM предоставляет свои функциональные возможности (службы) для внешних клиентов. Объект COM снабжает интерфейсом каждый набор методов и свойств. Любой объект COM имеет один или более интерфейсов |
COM server |
Некоторый модуль (EXE, DLL или OCX), который содержит код для объекта COM |
COM client |
Программный код, который получает требуемые услуги от сервера через интерфейс(ы) объекта COM. Клиент знает, что он хочет получить от сервера, но не знает как его запрос выполняется внутри сервера. В большинстве случаев клиент реализуется как Automation controller (то же, что и ActiveX-клиент) |
Type Library |
Библиотека типов, которая содержит описание COM объекта, его интерфейсов и методов, а также их GUID идентификаторы. Информация из библиотеки записывается в системный реестр и используется клиентским приложением. Delphi предоставляет специальный редактор библиотеки типов, а содержимое библиотеки типов представляет в виде обычного модуля на языке Object Pascal |
Class Factory |
Фабрика классов, экземпляр объекта которой создает COM объект. Сам объект фабрики классов создается COM сервером при запросе клиентским приложением первого интерфейса |
Интерфейсы COM. Клиент взаимодействует с объектом COM посредством интерфейса, который представляет собой набор функционально или семантически связанных подпрограмм, с помощью которых обеспечивается связь клиента с провайдером сервисов[22] (сервером). Стандартный способ изображения интерфейса приведен на рис.1.
Рис. 1. Изображение интерфейса
Например, каждый COM объект имеет базовый интерфейс IUnknown, который сообщает, какие интерфейсы объекта доступны клиенту. Любой интерфейс сообщает клиенту, какие возможности он предоставляет[23].
Ключевыми аспектами интерфейсов объектов COM являются следующие:
- будучи однажды опубликованным, интерфейс не должен изменяться ни при каких обстоятельствах. При необходимости расширение функциональности должно быть выполнено за счет добавления других интерфейсов[24];
- по соглашению, имя интерфейса должен начинаться с заглавной буквы I, например, IMalloc или IPersist;
- интерфейс имеет гарантированный уникальный идентификатор GUID (Globally Unique Identifier), который представляет собой 128-битное случайное число. Эти идентификаторы называют Interface Identifiers (IIDs). Использование таких идентификаторов ограничивает возможность конфликтов между разными версиями или продуктами[25];
- интерфейсы обладают языковой независимостью. Для реализации интерфейса может быть использован любой язык программирования, который поддерживает указатели и структуры и позволяет вызвать функцию по указателю на нее[26];
- сами по себе интерфейсы не являются объектами, а предоставляют способ получения доступ к объекту, а клиент получает доступ к данным объекта посредством вызова функций;
- любой интерфейс является наследником базового интерфейса IUnknown;
- обращения к интерфейсам могут перенаправляться между потоками, процессами и сетевыми компьютерами невидимо для клиента[27].
- Базовый интерфейс IUnknown. Этот интерфейс, который должны поддерживать все COM объекты, включает следующие подпрограммы:
- QueryInterface;
- AddRef;
- Release.
Метод QueryInterface, объявленный как
Function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
возвращает клиенту указатель на запрошенный интерфейс IID. С помощью полученного указателя клиент может вызвать любой из реализованных методов интерфейса. В качестве IID клиент может указать тип класса интерфейс – в этом случае компилятор самостоятельно извлекает соответствующий GUID.
Методы AddRef и Release используются для того, чтобы объект COM мог самостоятельно отслеживать продолжительность своего существования[28]. Эти методы просто изменяют число ссылок на объект. Когда число ссылок на объект становится равным нулю, объект удаляется из памяти COM сервером.
Указатели на интерфейсы COM объекта.
Указатель на интерфейс является 32-битным указателем, который ссылается на указатель на таблицу vtable[29] (рис. 2.). Эта таблица является массивом указателей, каждый из которых, в свою очередь, указывает на реализацию метода. Таблица vtable является общей для всех экземпляров объекта, но для каждого из экземпляров создается свой набор данных.
Рис. 2. Указатели на интерфейсы COM объекта
COM серверы. Сервер COM является приложением или библиотекой, которая предоставляет сервис клиентскому приложению (или библиотеке)[30]. Сервер включает по крайней мере один объект COM, который в свою очередь представляет собой совокупность методов и свойств. Клиент не обязан знать, где в памяти располагаются объекты COM.
Когда клиент запрашивает сервис у объекта COM, он (клиент) должен передать идентификатор класса CLSID (class identifier)[31]. Идентификатор класса CLSID создается на основе GUID интерфейса объекта COM.
По идентификатору класса CLSID COM определяет соответствующий сервер, загружает его в память и сервер создает экземпляр объекта COM. Экземпляры объектов COM создает фабрика классов (class factory), к которой обращается сервер. Фабрика классов имеет свой интерфейс IClassFactory.
Фабрика классов и класс CoClass. COM объект является экземпляром класса CoClass, в котором реализованы один или более интерфейсов COM[32]. Объект COM обеспечивает те сервисы, которые определены в интерфейсах класса CoClass.
Экземпляры класса CoClass создаются специальным типом объекта, который называется фабрикой класса. Когда клиент обращается к COM объекту, фабрика класса создает экземпляр объекта и регистрирует экземпляр объекта для этого конкретного клиента. Если в это время другой клиент обращается к объекту, фабрика классов для него также создает (другой) экземпляр объекта.
Любой класс CoClass должен иметь фабрику классов и идентификатор класса CLSID, так что экземпляр COM объекта этого класса может быть создан извне, т.е. из другого модуля[33]. Благодаря наличию у классов CoClass уникального идентификатора CLSID, они могут быть обновлены в любое время, как только для класса разработан новый интерфейс. Новый интерфейс может использовать модифицированные или новые методы и это не оказывает никакого влияния на прежние версии. В случае использования обычных библиотек DLL подобная ситуация прежде была типичной проблемой[34].
Мастера Delphi избавляют программиста от необходимости заниматься созданием объектов, которые обеспечивают функционирование фабрики классов.
2.2. Способы реализации СОМ серверов
При работе с объектами COM клиент не знает, где находится объект[35]. Он просто обращается к объекту посредством его интерфейса. Далее библиотека COM выполняет все необходимые шаги для удовлетворения вызова клиента.
Эти шаги зависят от конкретного местонахождения объекта COM: в том же процессе, что и клиент, в другом процессе на машине клиента или на другой машине в сети. В зависимости от этого различают три вида серверов COM.
Сервер в клиентском процессе (In-process server). Это библиотека DLL, которая выполняется в адресном пространстве процесса клиента[36]. Например, элемент ActiveX, внедренный в Web страницу, выполняется в Internet Explorer или другом браузере[37]. Это значит, что объект ActiveX загружается на машину клиента и выполняется в том же процессе, что и Web браузер. Клиент обращается к объекту COM путем прямого вызова интерфейса COM.
Рис. 4. Сервер в клиентском процессе
Локальный сервер (local server). Он представляет собой другое приложение (файл *.exe), которое выполняется в другом адресном пространстве, но на том же компьютере, что и клиентское приложение[38]. Например, обработка таблицы Excel, внедренной в документ Word, выполняется приложением Excel. Локальный сервер связывается с клиентом посредством COM библиотек.
Когда объект COM принадлежит другому процессу на том же компьютере, что и клиентское приложение, или вовсе на другом компьютере (в сети), COM использует так называемого "заместителя" (proxy) для того, чтобы инициировать удаленный вызов процедуры (remote procedure call – RPC)[39]. Так как заместитель находится в клиентском процессе, то с точки зрения клиента обращения к интерфейсам выглядят так же, как и для случая размещения сервера в клиентском процессе. Заместитель перехватывает вызовы клиента и отправляет их туда, где находится сервер. Механизм, который позволяет клиенту получить доступ к объекту, находящемуся в другом процессе или на другом компьютере (невидимо для клиента), называется маршалингом или маршализацией.
Рис. 6. Удаленный сервер
Удаленный сервер (remote server). Он представляет собой библиотеку (DLL или OCX) или другое приложение, которые выполняются на другом компьютере, а не на машине клиента[40]. Например, клиентское приложение, использующее базу данных, связывается с приложением, выполняемым на другом компьютере в сети. В этом случае удаленный сервер использует интерфейсы DCOM.
Различие между локальным и удаленным сервером состоит в применяемом способе (и инструментальных средствах) взаимодействия клиента и сервера: в первом случае используется COM, а во втором – DCOM[41].
Если сервер реализован как библиотека (а библиотека не может выполняться как самостоятельное приложение), то COM создает специальное приложение-суррогат (surrogate), в рамках которого и выполняется библиотека[42].
Маршалинг. Механизм маршалинга позволяет клиентскому приложению делать вызовы методов интерфейса для объекта COM, который находится в другом процессе или на другом компьютере.
При любом вызове функций посредством интерфейса клиентское приложение помещает фактические параметры функции в стек и выполняет ее вызов. Если функция не находится в клиентском процессе, то вызов передается заместителю. Заместитель упаковывает параметры в пакет и передает их удаленному объекту. Заглушка COM объекта распаковывает пакет, помещает аргументы в стек и вызывает объект COM. Таким образом объект COM обрабатывает запрос клиента в своем собственном адресном пространстве.
Какой именно маршалинг будет реализован, зависит от реализации COM объекта. Стандартный механизм реализован интерфейсом IDispatch. Кроме того, объекты могут самостоятельно выполнять маршалинг, однако это довольно сложно.
Необходимо отметить, что технология Microsoft Transaction Server (MTS) обеспечивает дополнительную поддержку для удаленных объектов[43].
2.3. Пример реализации и использования COM класса в С++
Рассмотрим весь процесс создания локального СОМ объекта, реализованного непосредственно в приложении.
Описание класса IUnknown в файле Unknwn.h:
struct IUnknown
{
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)=0 ;
virtual ULONG STDMETHODCALLTYPE AddRef( void) =0;
virtual ULONG STDMETHODCALLTYPE Release( void) =0;
};
Смысл использованных макросов:
HRESULT – long;
STDMETHODCALLTYPE – _stdcall
REFIID – const GUID &
В файле Unknwn.h можно найти также много других описаний, определяющих структуру таблицы vtable, заголовки функций для вызова proxy и stub и т.д.
Описание (базового) класса IAccount – наследника IUnknown – как абстрактного класса:
class IAccount : public IUnknown
{
public:
// IAccount methods
STDMETHOD(GetBalance)(int* pBalance) = 0;
STDMETHOD(Deposit)(int amount) = 0;
};
8. Здесь STDMETHOD – virtual HRESULT _stdcall.
Описание (конкретного) класса СAccount:
class CAccount : public IAccount
{
public:
CAccount() // конструктор
{
m_nRef = 0;
m_nBalance = 100;
}
// методы IUnknown
STDMETHOD(QueryInterface)(REFIID, void**);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// IAccount methods
STDMETHOD(GetBalance)(int* pBalance);
STDMETHOD(Deposit)(int amount);
protected:
ULONG m_nRef; // число ссылок
int m_nBalance; // счет в банке
};
Использованные макросы:
9. REFIID – GUID (структура из 16 байт);
10. STDMETHODIMP – HRESULT _stdcall.
11.
Реализация методов класса CAccount:
STDMETHODIMP
CAccount::QueryInterface(REFIID iid, void** ppv)
{
if (iid == IID_IUnknown)
*ppv = (IAccount*) this;
else if (iid == IID_IAccount)
*ppv = (IAccount*) this;
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
AddRef();
return NOERROR;
}
Метод QueryInterface в конечном итоге возвращает ссылку на таблицу vtable, которая создается компилятором С++ автоматически, если в классе определены виртуальные функции.
STDMETHODIMP_(ULONG) CAccount :: AddRef()
{
return ++m_nRef;
}
STDMETHODIMP_(ULONG) CAccount :: Release()
{
if(--m_nRef == 0)
{
delete this; // уничтожение экземпляра класса
// Trace("Object destroyed", "CAccount");
return 0;
}
return m_nRef;
}
STDMETHODIMP CAccount :: Deposit(int amount)
{
m_nBalance += amount;
return S_OK;
}
STDMETHODIMP CAccount::GetBalance(int* pBalance)
{
*pBalance = m_nBalance;
return S_OK;
}
Для практического использования класса CAccount требуется описать экземпляр класса IAccount:
IAccount * m_pAccount=NULL;
и получить ссылку на интерфейс. Эту задачу решает (обычная) функция CreateAccount.
BOOL CreateAccount(IAccount ** ppAccount)
{
HRESULT hr;
if (ppAccount == NULL)
return FALSE;
// Create object
CAccount* pAccount = new CAccount;
if (pAccount == NULL)
return FALSE;
// получить интерфейс. При этом в QueryInterface вызывается метод AddRef
hr = pAccount->QueryInterface(IID_IAccount, (void**) ppAccount);
if (SUCCEEDED(hr))
{
Trace("Object created", "CAccount");
return TRUE;
}
else
{
delete pAccount;
return FALSE;
}
}
Идентификатор интерфейса можно получить с помощью GuidGen и описать его как константу, например:
static const IID IID_IDisplay =
{ 0x5723b700, 0x2878, 0x11d1, { 0xa0, 0x1b, 0x0, 0xa0, 0x24, 0xd0, 0x66, 0x32 } };
Идентификатор для интерфейса IUnknown предопределен.
Невзирая на то, что в функции CreateAccount указатель pAccount на экземпляр класса создается локально, объект может быть разрушен, так как ссылка на него сохраняется в параметре ppAccount. Экземпляр СОМ класса уничтожается в методе Release.
Вызов этой функции целесообразно выполнить следующим образом:
if (m_pAccount)
{
m_pAccount->Release();
m_pAccount = NULL;
}
// создание экземпляра СОМ класса
if (!CreateAccount(&m_pAccount))
{
MessageBox("CreateAccount failed");
return;
}
После получения ссылки на интерфейс ею можно пользоваться для вызова методов класса, например, так:
int balance;
HRESULT hr = m_pAccount->GetBalance(&balance);
if (FAILED(hr))
{
MessageBox("GetBalance failed");
return;
}
Добавление других интерфейсов.
Для реализации дополнительных интерфейсов необходимо проделать следующие шаги:
- объявить новый (абстрактный) класс как производный от IUnknown;
- сгенерировать для него идентификатор IID с помощью GuidGen.exe;
- объявить конкретный класс как производный от всех поддерживаемых объектом СОМ интерфейсов.
Например:
class IDisplay : public IUnknown
{
public:
// IDisplay methods
STDMETHOD(Show)() = 0;
};
Теперь используем множественное наследование и описываем класс конкретный:
class NewCAccount : public IAccount, IDisplay
{
…
}
Так как появился дополнительный интерфейс, необходимо изменить реализацию QueryInterface так, чтобы он позволял получать любой из интерфейсов IAccount и IDisplay. Пример реализации этого метода:
STDMETHODIMP
CAccount::QueryInterface(REFIID iid, void** ppv)
{
if (iid == IID_IUnknown)
*ppv = (IAccount*) this;
else if (iid == IID_IAccount)
*ppv = (IAccount*) this;
else if (iid == IID_IDisplay)
*ppv = (IDisplay*) this;
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
AddRef();
return NOERROR;
}
COM с самого начала проектировалась для того, чтобы обеспечить функциональность взаимодействия приложений и предоставить возможность дальнейшего развития этой функциональности за счет расширений[44]. Основной идеей, заложенной в COM, является использование наборов интерфейсов, предназначенных для достижения специфических целей.
Расширения COM продолжают развиваться. OLE технологии и сервисы были разработаны для предоставления различных сервисов приложениям Windows. Далее, Microsoft объединила технологии OLE и OCX, назвав их компонентами ActiveX[45]. Технология ActiveX делает объекты COM более компактными и эффективными, что крайне необходимо для приложений, функционирующих в больших сетях.
Вскоре, возможно, Microsoft включит некоторые MTS технологии для разработки комплексных Intranet и Internet приложений на основе COM технологии. Список реализованных в настоящее время расширений приведен в таблице 3.
Таблица 3
Список расширений
Серверыавтоматизации(Automation servers) |
Автоматизация – это способность приложения управлять объектами другого приложения программным образом. Серверы автоматизации – это объекты, которые могут программироваться на этапе выполнения |
Контролерыавтоматизации (Automation controllers) |
Это клиенты серверов автоматизации, предоставляющие среду, в которой разработчик или пользователь может писать сценарии (scripts) управления серверами автоматизации |
Элементы ActiveX (ActiveX controls) |
Это специализированные COM объекты для компонентов Windows. Они более компактны по сравнению с устаревшими серверами OLE документов, что обеспечивает эффективность их применения в таких масштабных сетевых средах, как Internet или сети Intranet больших предприятий. Элементы ActiveX должны находиться в библиотеке |
Библиотекитипов (Type libraries) |
Представляет собой набор структурированных данных, часто сохраняемый как ресурс, содержащий подробную информацию об объекте и его интерфейсах. Клиенты серверов автоматизации и элементов ActiveX получают из этой библиотеки информацию о типах |
Активные документы (Active Documents) |
Это объекты, которые поддерживают связывание и внедрение, перемещение, визуальное редактирование и активизацию на месте. Документы Word и таблицы Excel являются примерами активных документов |
Визуальные межпроцессные объекты (Visual cross-process objects) |
Объекты, которыми можно управлять из различных процессов |
На рисунке 7 показана взаимосвязь расширений COM.
Рис. 7. Взаимосвязь расширений COM
Серверы и контролеры автоматизации.
Термин "автоматизация" означает способность приложения управлять объектами другого приложения программным образом, подобно макросам, способным манипулировать несколькими приложениями одновременно[46]. Клиента объекта автоматизации называют контроллером автоматизации (Automation controller), а объект сервера – объектом автоматизации (Automation object) .
Автоматизация может использоваться для всех трех видов серверов[47]. Для нее характерны два ключевых момента:
- объект автоматизации должен иметь возможность определить множество (набор) свойств и команд и описать их возможности посредством описаний типа. Для того чтобы это (описание) реализовать на практике, должен быть способ провести его через описания интерфейсов, методов и их параметров. Обычно эта информация содержится в библиотеках типов (type libraries)[48]. В Delphi сервер автоматизации может также генерировать информацию о типах оперативно – "на лету" – когда она будет затребована;
- объекты автоматизации должны так реализовать свои методы, чтобы другие приложения могли их использовать. Для этого объекты должны реализовать интерфейс IDispatch. Посредством этого интерфейса объект показывает все свои методы и свойства. Теперь посредством первичного метода этого интерфейса можно вызывать другие методы, которые идентифицируются информацией о типах[49].
Разработчики, которые хотят создавать и использовать не визуальные OLE объекты, которые могут выполняться в любом адресном пространстве, могут использовать объекты автоматизации. Одной из причин для такого решения является то, что интерфейс IDispatch обеспечивает маршалинг. Однако, автоматизация накладывает некоторые ограничения на доступные для использования типы.
ЗАКЛЮЧЕНИЕ
COM – это метод разработки программных компонентов – небольших двоичных исполняемых файлов, которые предоставляют необходимые сервисы приложениям, операционным системам и другим интерфейсам.
COM – это спецификация. Она указывает как создавать динамически взаимозаменяемые компоненты.
На основе COM построены технологии Active X,DirectX, OLE (2 версия). OLE 1 была реализована с использованием DDE (динамический обмен данными). DDE в свою очередь построен на основе архитектуры передачи сообщений Windows.
Технология Com позволяет выполнить разделение монолитного приложения на отдельные компоненты, что делает приложение
- более динамичным;
- облегчает обновление частей приложения;
- позволяет собирать новые приложения из имеющихся частей – библиотеки компонентов;
- легче выполнить адаптацию приложения к уонкретным требованиям;
- позволяет заменять компоненты во время работы приложения;
- упрощает процесс разработки распределенных приложений.
Компоненты COM должны:
- подключаться динамически;
- инкапсулировать (скрывать) детали своей реализации.
Клиент – это программа или компонент, использующий другой компонент.
Клиент подсоединяется к компоненту через интерфейс.
Если компонент изменяется без изменения интерфейса, то изменения в клиенте не требуются.
Изоляция клиента (предоставляемого ему интерфейса) от реализации накладывает на компоненты следeдующие ограничения:
1. Компонент должен скрывать используемый язык программирования.
2. Компонент должен распространятся в двоичной форме.
3. Новые версии компонента должны работать как с новыми, так и со старыми клиентами.
4. Компоненты должны быть (прозрачно) перемещаемы по сети. Удаленный компонент для клиента рассматривается также, как и локальный (иначе это бы вызывало перекомпиляцию клиента при перемещении компонента).
5. Компонент должен одинаково выполняться :
– внутри одного процесса
– в разных процессах – на разных машинах.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
- Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / И. Г. Акперов, А. В. Сметанин, И. А. Коноплева. - Москва : ИНФРА-М, 2013. – 399 с.
- Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. - 397 с.
- Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] / Л. Г. Гагарина, А. Р. Федоров, П. А. Федоров. - Москва : ФОРУМ : ИНФРА-М, 2017. - 319 с.
- Гвоздева В. А. Базовые и прикладные информационные технологиих : [учебник для студентов высших учебных заведений, обучающихся по техническим специальностям] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / В. А. Гвоздева. - Москва : Форум : ИНФРА-М, 2014. - 382 с.
- Ездаков А. Л. Функциональное и логическое программирование : учебное пособие / А. Л. Ездаков. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – 118 с.
- Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] / И. М. Лазарева ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. – 97 с.
- Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям] / Б. Е. Одинцов, А. Н. Романов, С. М. Догучаева ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – 371 с.
- Онокой Л. С. Компьютерные технологии в науке и образовании : [учебное пособие для студентов высших учебных заведений, обучающихся в магистратуре по направлению подготовки ВПО 040100 "Социология"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / Л. С. Онокой, В. М. Титов. - Москва : ФОРУМ : ИНФРА-М, 2014. - 223 с.
- Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] / И. В. Черпаков ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – 218 с.
- Шишов О. В. Современные технологии и технические средства информатизации : учебник : [для студентов вузов, обучающихся по направлению "Сервис"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / О. В. Шишов. - Москва : ИНФРА-М, 2014. – 460 с.
-
Шишов О. В. Современные технологии и технические средства информатизации : учебник : [для студентов вузов, обучающихся по направлению "Сервис"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2014. – С. 46. ↑
-
Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2013. – C. 62. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 36. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 38. ↑
-
Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2013. – C. 63 ↑
-
Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] / И. М. Лазарева ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. – С. 12. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] / Л. Г. Гагарина, А. Р. Федоров, П. А. Федоров. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 82. ↑
-
Онокой Л. С. Компьютерные технологии в науке и образовании : [учебное пособие для студентов высших учебных заведений, обучающихся в магистратуре по направлению подготовки ВПО 040100 "Социология"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ФОРУМ : ИНФРА-М, 2014. – С. 49. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 79. ↑
-
Гвоздева В. А. Базовые и прикладные информационные технологиих : [учебник для студентов высших учебных заведений, обучающихся по техническим специальностям] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : Форум : ИНФРА-М, 2014. – С. 106. ↑
-
Шишов О. В. Современные технологии и технические средства информатизации : учебник : [для студентов вузов, обучающихся по направлению "Сервис"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2014. – С. 98. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 81 ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 38. ↑
-
Гвоздева В. А. Базовые и прикладные информационные технологиих : [учебник для студентов высших учебных заведений, обучающихся по техническим специальностям] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : Форум : ИНФРА-М, 2014. – С. 109. ↑
-
Шишов О. В. Современные технологии и технические средства информатизации : учебник : [для студентов вузов, обучающихся по направлению "Сервис"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2014. – С. 99. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 39 ↑
-
Онокой Л. С. Компьютерные технологии в науке и образовании : [учебное пособие для студентов высших учебных заведений, обучающихся в магистратуре по направлению подготовки ВПО 040100 "Социология"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ФОРУМ : ИНФРА-М, 2014. – С. 86. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 41. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")]. - Москва : ФОРУМ : ИНФРА-М, 2017. –С. 121. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 42. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 82. ↑
-
Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2013. – С. 98. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")]. - Москва : ФОРУМ : ИНФРА-М, 2017. –С. 122. ↑
-
Онокой Л. С. Компьютерные технологии в науке и образовании : [учебное пособие для студентов высших учебных заведений, обучающихся в магистратуре по направлению подготовки ВПО 040100 "Социология"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ФОРУМ : ИНФРА-М, 2014. – С. 141. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 43. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 43 ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям]; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 162. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 44. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям]; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 163 ↑
-
Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2013 – С. 101. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 45. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям]; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – С. 164. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] /. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 100. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 39. ↑
-
Гагарина Л. Г. Введение в архитектуру программного обеспечения : учебное пособие : [для студентов, обучающихся по направлениям подготовки 09.03.04 "Программная инженерия" (профиль бакалавриата "Программные технологии распределенной обработки информации"), 09.04.04 "Программная инженерия" (программа магистратуры "Программное обеспечение автоматизированных систем и вычислительных комплексов")] /. - Москва : ФОРУМ : ИНФРА-М, 2017. – С. 101. ↑
-
Одинцов Б. Е. Современные информационные технологии в управлении экономической деятельностью : теория и практика : учебное пособие : [для студентов высших учебных заведений, обучающихся по экономическим направлениям и специальностям] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Вузовский учебник : ИНФРА-М, 2017. – C. 132. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 46. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 156. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 46. ↑
-
Шишов О. В. Современные технологии и технические средства информатизации : учебник : [для студентов вузов, обучающихся по направлению "Сервис"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2014 – С. 168. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 47. ↑
-
Акперов И. Г. Информационные технологии в менеджменте : учебник : [для студентов высших учебных заведений, обучающихся по направлению "Менеджмент" и по специальности "Менеджмент организаций"] : соответствует Федеральному государственному образовательному стандарту 3-го поколения. - Москва : ИНФРА-М, 2013. – С. 152. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 42. ↑
-
Бокс Дональд. Сущность технологии СОМ / Д. Бокс ; [Пер. с англ. А.Шкадова]. - СПб. и др. : Питер: Питер Бук, 2001. – С. 42. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 43. ↑
-
Ездаков А. Л. Функциональное и логическое программирование : учебное пособие. - 2-е изд. - Москва : БИНОМ. Лаборатория знаний, 2017. – С. 52. ↑
-
Лазарева И. М. Теория языков программирования и методы трансляции : учебное пособие : [по дисциплине "Теория языков программирования и методы трансляции" по направлению подготовки 01.03.02 "Прикладная математика и информатика: Системное программирование и компьютерные технологии"] ; М-во образования и науки Рос. Федерации, Мурм. аркт. гос. ун-т. - Мурманск : Мурманский арктический государственный университет, 2018. – С. 121. ↑
-
Черпаков И. В. Основы программирования : учебник и практикум для СПО : [для студентов образовательных учреждений среднего профессионального образования] ; Финансовый ун-т при Правительстве Рос. Федерации. - Москва : Юрайт, 2017. – С. 47. ↑
-
Гвоздева В. А. Базовые и прикладные информационные технологиих : [учебник для студентов высших учебных заведений, обучающихся по техническим специальностям] : соответствует Федеральному государственному образовательному стандарту 3-го поколения / В. А. Гвоздева. - Москва : Форум : ИНФРА-М, 2014. – С. 98. ↑
- «Разработка регламента выполнения процесса «Управление документооборотом»»
- Обзор языков гипертекстовой разметки
- Особенности развития европейской валютной системы
- Мотивация в управлении на примере реально существующей организации
- Анализ факторов и резервов улучшения использования трудовых ресурсов коммерческого банка
- Анализ стратегического положения компании по А. Томпсону и А. Стрикленду
- Правовые основы организации нотариата
- Средства создания программ, выполняемых на стороне сервера
- «Менеджмент человеческих ресурсов»
- Органы опеки и попечительства
- Сущность приватизации
- Профилактика угрозы переманивания кадров