Сайт Информационных Технологий

Конструктор для разработки вертикальных приложений Data mining на основе COM и ActiveX технологии

C.Б. Арсеньев, Ю.Н. Слынько

Компания “Мегапьютер Интеллидженс”

AbstractВ данной работе рассматриваются принципы построения data mining приложений на основе матема тических модулей системы PolyAnalyst и технологии Component Object Model (COM). Реализация базовых модулей PolyAnalyst в СОМ стандарте открывает новые возможности для быстрой разработки проблемно-ориентированных data mining программ, интеграции математи ческих модулей в уже существующие аналитические системы.

Введение

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

  1. Сегодняшние приложения становятся все более сложными - больше времени уходит на их разработку, их сложнее поддерживать и труднее расширять новыми возможностями.
  2. Приложения монолитны - они поступают пользователю уже снабженные широким спектром функциональности, но почти все реализованные в них возможности не могут быть удалены, обновлены или заменены на другие
  3. Приложения не готовы к интеграции с другими приложениями, даже если они были написаны на одном языке программирования
  4. Операционные системы также доставляют определенные хлопоты. Они недостаточно модульные, их трудно обновлять, заменять, или подменять в них предоставляемые сервисы.
  5. Модели программирования несовместимы. Даже если приложения могут работать вместе, услуги, предоставляемые друг другу используют собственные механизмы, отличные от предоставляемых операционной системой. Более того, модели пр ограммирования сильно разнятся если они обеспечивают взаимодействие приложений внутри одного адресного пространства (через динамическое связывание), в разных процессах на одном компьютере и по сети...” [1]

Именно так начинается введение в техническую спецификацию COM, первая редакция которой (draft) была выпущена 10/24/95. Все просто - мир переполняется программным обеспечением, и необходимо создать технологию, которая хоть как-то упорядочила процесс создания новых приложений. Практически все существующие сегодня приложения более чем наполовину состоят из функций, уже реализованных в десятках, а то и сотнях других программ. Приложения - электронные таблицы позволяют строить самые различные графики, в различных текстовых процессорах все равно реализованы функции пров ерки орфографии и тезаурусы.

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

Данная статья посвящена относительно новому классу приложений, которые стали появляться в последнее десятилетие и которые занимаются углубленным анализом больших объемов информации, с целью нахождения в них скрытых закономерностей. Так ие системы (data mining) до недавнего времени поступали на рынок либо перегруженные возможностями, которые в большинстве своем могли и не понадобиться пользователю, либо были достаточно просты, но универсальны, что зас тавляло пользователя проводить немало времени, подстраивая их под себя. На самом деле, учитывая отнюдь не низкие цены на продукты данного класса (причем основная часть цены приходится именно на математическое обеспечен ие), и то, что пользователи, покупающие их “хотят видеть только то, что они хотят”, следует, что наибольшим спросом должны пользоваться “вертикальные” приложения, решающие конкретные задачи.

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

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

Итак, пользователь хочет:

  1. платить деньги только за то, что ему нужно;
  2. использовать привычные для него приложения и не заниматься изучением нового интерфейса;
  3. иметь возможность обмениваться информацией между приложениями;
  4. иметь возможность запускать приложение на удаленном компьютере.

Разработчикам нужно:

  1. иметь возможность быстро и без особых затрат разрабатывать новые приложения, на основе уже существующих;
  2. в разработке своих приложений уметь использовать компоненты третьих фирм;
  3. разрабатывать и компоненты, и приложения в различных системах разработки, используя различные языки программирования;
  4. в создании новых приложений использовать самые простые и самые распространенные средства разработки (например, Visual Basic);
  5. иметь возможность легко и просто расширять возможности уже существующих систем при помощи создания новых компонент.

В качестве примеров в этой статье продемонстрирован подход к использованию технологии COM в новой версии программы PolyAnalyst компании Megaputer Intelligen ce.

Что такое СОМ

Для того, чтобы ответить на вопрос, что такое СОМ (Component Object Model) прежде всего нужно понять, каким образом различные части программного обеспечения могут взаимодействовать между собой: к ак одна часть программного обеспечения должна получать доступ к сервисам, предоставляемым другой частью? Ответ на это прежде всего зависит от самих программных частей. Если, например, это модули одного программного приложения, то, скорее всего, обмен сер висами будет происходить при помощи вызовов функций. Если это различные запускаемые модули, то для их взаимодействия придется использовать специально разработанный протокол. Если же необходимо распределить функции приложения между несколькими компьютерам и, придется использовать такие возможности операционной системы, как обмен сообщениями с удаленным приложением и вызовы удаленных процедур.

Итак, проблема одна - наладить взаимодействие между различными программными компонентами, но в каждом отдельном случае приходится использовать различные механизмы. Не проще ли определить один общий способ доступа ко всем видам программ ных сервисов независимо от способа их реализации?

Именно этим и занимается COM. Она определяет стандартный механизм, с помощью которого одна часть программного обеспечения предоставляет свои сервисы другой и который работает во всех описанных выше с лучаях. Общая архитектура сервисов в библиотеках, приложениях, системном и сетевом программном обеспечении позволяет COM изменить подход к созданию программ [2].

Как работает СОМ

В COM любая компонента программного обеспечения реализована в виде объектов COM. Каждый такой объект предоставляет один или несколько интерфейсов, которые, в с вою очередь, состоят из методов. Метод - это процедура или функция, выполняющая определенные действия, которая может быть вызвана программным обеспечением, использующим данный объект (клиент объекта). Клиент может полу чить доступ к сервисам объекта только через методы интерфейса. Непосредственного доступа к данным объекта у него нет. В качестве иллюстрации к использованию технологии COM мы будем рассматривать систему PolyAnal yst. PolyAnalyst функционирует в архитектуре клиент/сервер. Вычислительная (серверная) часть, также называемая PolyAnalyst Knowledge Server, отделена от клиентской части, реализующей функци и пользовательского интерфейса и от компонент, обеспечивающих доступ к данным. Клиентское приложение (или компонента) настраивает компоненту доступа к данным, передавая ей массив данных для исследования или запрос к базе данных-источнику. Далее клиент вы зывает метод в серверной компоненте, осуществляющий запуск исследования и передает в качестве аргумента настроенную компоненту доступа к данным. PolyAnalyst Knowledge Server начинает исследование данных, доступ к которым он получает через компоненту доступа к данным, не задумываясь о природе источника этих данных. В настоящее время в PolyAnalyst Knowledge Server встроены пять основных методов иссл едования, но процесс создания новых методов не стоит на месте. Полученные промежуточные и конечный результат передаются в клиентское приложение, где они используются для визуализации и дальнейшей обработки. Все описанное выше можно представить на следующ ей схеме:

Рис. 1 Общая архитектура PolyAnalyst data mining приложения

Чтобы вызвать методы интерфейса объекта COM клиент должен получить указатель на этот интерфейс. Обычно COM объект предоставляет свои сервисы путем нескольких интерфейсов, и клиенту требуются отдельные указатели для каждого интерфейса, методы которого он намерен вызывать. Например, в нашем случае объект PolyAnalyst Knowledge Server предоставляе т интерфейсы “контроль подключений” и “управление исследованием”. В первом из них содержатся методы “подключиться” и “отключиться”; во втором - методы, управляющие ходом исследования. Также сервер предоставляет интерфейсы, содержащие методы, запускающие исследования и запрашивающие текущие результаты [2].

Компонента “клиент” является источником сервисов и для других приложений. Во-первых, клиентское приложение реализует внутреннюю структуру данных (проект), соответствующую обычному рабочему месту аналитика, работающего с данными. В такой структуре хранятся такие объекты как исходные массивы данных (таблицы), результаты исследований, графики, и т.п. “Клиент” может создать такую структуру из исходных “сырых” данных, записать ее в файл на диске или считать ее из файла. “Клиент” также реализует сервисы для работы с проектом: Вызывающее приложение может создавать производные наборы данных, создавать объекты-графики (диаграммы, графики функций и т.п.). Ну и, конечно, вызывающее приложение имеет доступ к сервисам , управляющими вычислительными процессами.

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

Project.CreateFromExcelRange(ActiveSheet.Selection) Project.Dataset("World").StartLinearRegression("lr", 1) While Project.ProcessIsRunning("lr") Project.Sleep(1000) Wend ActiveSheet.Range("$A$1") = Project.Rule("lr").Text Project.Save("C:\TEMP\DMPROJECT.PRJ")

Рис.2 Схема приложения PolyAnalyst

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

Из схемы видно, что все вычислительные алгоритмы также реализованы отдельными компонентами. Не каждый алгоритм подходит для решения всех классов задач. Поэтому компонентный подход позволит пользователю выбрать только те вычислительные модули, которые будут нужны ему в работе. Этот же компонентный подход позволяет разработчикам создавать новые математические алгоритмы и встраивать их в PolyAnalyst Knowledge Server.

Data mining для разработчиков

Как уже было сказано, и компонента “клиент”, и “сервер” могут быть использованы разработчиками других приложений. Окружив программные сервисы этих компонент свои пользовательским меню и окнами, добавив кое-какую дополнительную логи ку, специфичную для предметной области заказчика, можно быстро построить новое, мощное по своим возможностям, приложение data mining.

Вот типичный код программы, составляющий тело процедуры на Excel Basic, при помощи которого можно использовать сервисы компоненты “клиент” для исследования содержимого ак тивного листа: Dim Project As New PALIB.PAProject

В первой строке программы описывается и создается переменная Project класса PAProject. PALIB.PAProject - пример программног о идентификатора (program identifier, ProgID). Программный идентификатор предоставляет удобный, легко воспринимаемый человеком синоним для внутреннего, уникального, идентификатора класса (CLSID). Информация о программных идентификаторах и об идентификаторах класса хранится в системном реестре Windows. Информация же обо всех интерфейсах и методах объектов данного класса хранится в так называемой би блиотеке типов (type library). Далее у созданного объекта вызывается метод CreateFromExcelRange, которому передается COM объект класса Rang e приложения Microsoft Excel. При помощи сервисов, предоставляемых этим объектом, объект Project получает доступ к данным, хранящимся в текущем выделенно м фрагменте активного листа Microsoft Excel. После того, как проект будет создан, в нем появляется объект Dataset, который содержит в себе ссылку на исходные данные. У этого объекта вызывается метод, инициирующий запуск вычислительного процесса, который находит линейную регрессионную зависимость первого столбца от остальных. После запуска исследования (которое выполняется асинхронно вычислительной компонентой) процедура периодически 1 раз в секунду проверяет наличие работающего процесса в списке объектов. После окончания исследования процедура присваивает текст найденного правила ячейке $A$1 и сохраняет проект с этим правилом в файле.

Диалог языка Visual Basic (т.н. Visual Basic for Applications, VBA), используемый в настоящее время в приложениях Microsoft Office, становится все более популярным среди разработчиков небольших офисных систем. Основное применение VBA находит в области автоматизации бизнес процессов. И сегодня, когда владение и умение пользоваться информацией о пределяет коммерческий успех любой компании, возможность встраивания в бизнес процессы автоматических процедур по сбору и анализу информации интересует все большее количество пользователей и разработчиков.

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

Прощай, программирование

Ну а что, если пользователь вообще не хочет прибегать к программированию, пусть даже и на Visual Basic for Applications? Все, что ему нужно - это использовать PolyAnalyst непосредственно в тех приложениях, с которыми он уже работает. Перед тем, как рассказать о том, как будет решена эта проблема в последующей версии PolyAnalyst, нужно сказать, что сама COM послужила основой для гораздо в большей степени ориентированных на пользователя технологий - OLE и ActiveX. Не сильно вдаваясь в технические подробности, скажем, чт о объекты OLE и ActiveX - это объекты COM, расширенные новыми возможностями. Первые позволяют отобразить объекту самого себя в окне вызывающего пр иложения (контейнере), вызывать свои методы из всплывающего меню, встраивать свое содержимое в документ, открытый в контейнере и многое другое. Вторые позволяют использовать себя в сетях Intranet и Internet.

Итак, во первых, пользователь может продолжать использовать PolyAnalyst как самостоятельное приложение, но при этом у пользователя появляется возможность встраивать любые объекты PolyAnalyst в другие приложения. При работе с PolyAnalyst пользователь может проводить различные исследования, создавать отчеты и графики. При помощи clipboard или операций drag-and-drop эти объекты могут быть перенесены в любое другое приложение, которое является контейнером объектов. (Как правило, в главном меню таких приложения присутствует команда Insert/Object). Примерами могут служить приложения Microsoft Office. Помещенные в контейнер объекты могут сохранять свою связь с файлом проектом PolyAnalyst, тогда при любом внешнем изменении проекта их содержимое и внешний вид изменится. Или же пользователь может вшить (embed) данные непосредственно в документ приложения-контейнера, сделав данные документа незав исимыми от данных проекта. Кроме того, все помещенные объекты обладают своим всплывающем меню, из которого можно вызывать сервисы PolyAnalyst.

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

Независимость от приложений

Одной из необходимых черт хорошо написанной компоненты OLE/COM является возможность встраивать ее в любые приложения, поддерживающие OLE. Если компонента не по лучает извне практически никаких данных - обеспечивать это условие достаточно просто. В случае с PolyAnalyst мы видим, что ему необходимо “уметь” забирать данные из самых разных источников. Многие из приложений (и Microsoft Excel) могут предоставлять свои данные другим компонентам в виде параметров, типы которых описаны в спецификации на COM. Однако, как правило, эти интерфейсы слишком низкоуровне вые. Основные объекты данных в Excel - это лист (Sheet) и фрагмент (Range). Однако сами они являются объектами COM и для того, чтобы прочитать данные из этих объектов PolyAnalyst должен “знать”, какими методами этих объектов он может пользоваться. Другими словами, он должен знать про Microsoft Excel. Точно также, как он должен знать про огромное множество других программ, с которыми работают пользователи.

В PolyAnalyst эта проблема решена следующим образом. Во первых, из компонент PolyAnalyst выделены компоненты определенного вида, которые отвечают за импорт данных. Это небольшие, платформо-зависимые компоненты, имеющие унифицированный интерфейс, который позволяет программе обмениваться данными с другими приложениями. Всего в PolyAnalyst входит сейчас пять таких компонент - для с вязи с Microsoft Excel, файлами CSV, базами данных, поддерживающими протокол ODBC, хранилищем данных IBM Visual Warehouse и многомерной СУБД ORACLE Express. Планируется также добавить в пакет компоненту, обеспечивающую интерфейс с провайдерами OLE DB (относительно новый стандарт интерфейса д ля работы с различными СУБД и теми системами, в которых этот интерфейс реализован). При необходимости обмена данными с другими системами, разработчики-интеграторы могут быстро создать подобную компоненту и использовать ее вместе с PolyAnalyst.

Вообще говоря, вышеописанный способ обмена данными сложной структуры между уже написанными приложений достаточно распространен. Разработчикам нужно всего лишь написать “стыковочный” модуль, подобно тому, ко торый был использован при стыковки “Шаттла” и станции “Мир” [3].Перед тем как описать процедуру работы с нашими компонентами, сделаем несколько комментариев о самих компонентах:

  1. PolyAnalyst Excel Range Data Source - компонента, обеспечивающая доступ проекта к исходным данным из открытого листа Excel. Вообще гово ря, компоненты, обеспечивающие доступ к данным придется создавать для самых различных источников. Примеры таких компонент: PolyAnalyst ODBC Data Source, PolyAnalyst Oracle Express Data Source и т.п.
  2. PolyAnalyst Project - компонента проекта из нашего предыдущего примера. На самом деле, сама внутренняя структура проекта хранится внутри невидимого для пользовател я объекта (он называется PAProject), а PolyAnalyst Project - это всего лишь визуальное представление ссылающееся на этот объект.
  3. PolyAnalyst Dataset - внешнее представление исходных данных в проекте. Эта, и последующие компоненты ссылаются на объект PolyAnalyst Project и эту связь настраивает пользователь при помощи диалога свойств объекта.
  4. PolyAnalyst Rule - внешнее представление объекта “правила”, то есть регрессионной формулы в нашем случае.
  5. PolyAnalyst Chart, PolyAnalyst Report - представления других объектов нашей системы.

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

  1. Пользователь последовательно при помощи пункта меню Insert/Object… помещает на лист Excel объекты PolyAnalyst Excel Range Data Source
  2. , PolyAnalyst Project и PolyAnalyst Dataset. Все три объекта изображены в виде пиктограмм;

  3. При помощи диалога Properties объекта PolyAnalyst Excel Range Data Source пользователь связывает этот объект с содержим ым листа Excel. В этом диалоге пользователь указывает фрагмент листа (Range) и дает имя объекту, например – Range1;
  4. При помощи диалога Properties объекта PolyAnalyst Project пользователь дает имя объекту, например, Project1, и связывает его с объектом Range1. В момент связывания происходит фактическое создание проекта;
  5. Далее пользователь точно также связывает объект PolyAnalyst Dataset с объектом Project1 и из списка доступных таблиц выбирает “World”. Кроме этого пользователь может указать, каким образом данный объект будет отображать себя на листе Excel – как пиктограмма, как таблица или же как некоторое другое представление, например общие статистики д анных;
  6. Теперь пользователь может из всплывающего меню объекта PolyAnalyst Dataset вызвать пункт Start Linear Regression. В появившемся диалоге он должен указать иссле дуемый столбец, назвать исследование (например “lr”) и нажать OK.
  7. После того, как исследование будет завершено, пользователь может поместить на лист Excel объекты PolyAnalyst Rule и PolyAna lyst Report, связав их с объектом Project1 и выбрав из списков существующих объектов “lr”;
  8. Полученный лист может быть сохранен и впоследствии считан из файла. Все свойства объектов, которые мы поместили на лист и сам проект также будут храниться в том же файле.

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

Что же такое новый PolyAnalyst?

Итак, что же ждет пользователей PolyAnalyst в ближайшем будущем? Какие же выгоды принесет им эта система, на кого (пользователи, разработчики, сотрудники отделов авто матизации) будут ориентированы новые версии? В настоящий момент PolyAnalyst существует в двух различных формах - самостоятельное приложение (работающее как на отдельном компьютере, так и в архитектуре клиент-сервер) и библиотеки API. Последние реализованы в системе программирования Microsoft Visual C++, имеют классовый интерфейс и используются сейчас рядом крупных заказчиков.

Новый PolyAnalyst будет “выходить” на рынок в три этапа. Сначала компаниям разработчикам и отделам автоматизации станет доступна версия, состоящая из набора компонент COM, при помощи которой можно будет разрабатывать “вертикальные” приложения и осуществлять автоматизацию бизнес процессов. Эта версия будет прежде всего набором компонент, предоставляющих доступ к сложным математическим алгоритмам, осуществляющим пои ск закономерностей в больших объемах данных. Сразу же перед разработчиками появится возможность создавать новые вычислительные модули и встраивать их в архитектуру клиент-сервер PolyAnalyst. Все эти вычислительные моду ли будут работать и в последующих версиях системы.

Затем появится версия, использующая в своей работе объекты OLE и которая позволит пользователям работать с PolyAnalyst как с самостоятельным приложением, так и исп ользовать его объекты в других приложениях. Хотя сама она будет законченным пользовательским приложением, ее внутренняя логика может быть использована разработчиками “вертикальных” систем, сотрудниками отделов автоматизации, да и просто “продвинутыми” (advanced) пользователями. Ну, и наконец, следом выйдет версия, представляющая собой набор компонент ActiveX, и которая даст возможность распределит ь вычислительную мощь PolyAnalyst в сетях Intranet и Internet.

Литература:

  1. The Component Object Model Specification 0.9
  2. Chappel. David. Understanding ActiveX and OLE, Microsoft Press 1996
  3. Rogerson, Dale. Inside COM, Microsoft Press 1997

Site of Information Technologies
Designed by  inftech@webservis.ru.