SOM означает System Object Model фирмы IBM. Для большинства из вас это, вероятно, загадочный термин. Поэтому вы, возможно, зададите следующие вопросы:
- Я слышал о SOM, но действительно ли это так важно для меня?
- Чего такого особенного в этой технологии, названной SOM?
- Какие преимущества дает SOM мне как разработчику ПО?
Данная статья отвечает на все три вопроса и объясняет, почему SOM влияет на вас, независимо от того, являетесь ли вы разработчиком ПО или нет.
Что такое SOM?
Говоря наиболее обобщенно, SOM - это нейтральная к языку, объектно-ориентированная технология программирования для построения, упаковки и манипулирования двоичными библиотеками классов, обеспечивающая совместное использование объектов во всем адресном пространстве. Вот так! Позднее я разъясню это определение, дам обзор технических достоинств технологии SOM и объясню, для чего разработчики приложений могли бы ее применять. Но сначала я хочу продемонстрировать значение SOM, обозначив лишь некоторые новейшие технологии, использующие ее преимущества.
Workplace Shell операционной системы OS/2
Workplace Shell (WPS), интерфейс пользователя OS/2, использует технологию SOM. Каждый интерфейсный пользовательский объект в WPS - это настоящий SOM-объект, и многие динамические возможности WPS обусловлены технологическим фундаментом SOM.
Приложения и инструментальные средства Workplace Shell
Многие приложения работают с участием WPS, т. е. вы взаимодействуете с приложением, используя WPS-объекты (являющиеся SOM-объектами). При создании расширений и инструментов WPS разработчики используют технологию SOM.
OpenDoc
SOM, объектная модель, которую организация CILabs (Component Industry Laboratories) выбрала специально для технологии OpenDoc, обеспечивает технологию упаковки для компонентов OpenDoc. Ларри Лоукс, вице-президент по ПО в IBM Personal Software Products, заявил: "SOM просто выполнила для нас расчистку. Мы потратили много времени и выпустили пару версий для того, чтобы быть уверенными в хорошем понимании инфраструктуры, и только потом приступили к разработке "настоящего" приложения, т. е. компонентного ПО ... наш подход - это OpenDoc" - об этом написали Орфали, Харки и Эдвардс в своей книге The Essential Distributed Objects Survival Guide.*
Орфали, Харки и Эдвардс поведали об огромном потенциале SOM: "Являясь интегральной составляющей OpenDoc, SOM будет поставляться с каждой копией OS/2 Warp, Macintosh и AIX. Это означает, что SOM станет первым массовым ORB (посредник запросов к объектам) для CORBA (общая архитектура посредника запросов к объектам)". Авторы приходят к выводу: "Пройдет какое-то время, прежде чем программисты привыкнут к тому, что с каждым приложением OpenDoc поставляется полнофункциональный SOM ORB". Необходимо отметить, что количество платформ для SOM намного больше, чем первоначально для OpenDoc, что является положительным моментом для OpenDoc. Учитывая, что SOM поддерживается на дополнительных платформах (таких, как AS/400, MVS и других), OpenDoc-компоненты смогут пользоваться распределенными возможностями DSOM и взаимодействовать с распределенными объектами на этих дополнительных платформах.
SOM-совместимые продукты для OS/2
Просмотрев последние журналы по компьютерным технологиям, можно обнаружить множество рекламных объявлений о SOM-совместимых программах. В таблице 1 приведен список нескольких продуктов, использующих технологию SOM.
Независимо от того, интересуют ли вас изложенные далее технические аспекты, большое количество продуктов, в которых применяется технология SOM, надеемся, убедит вас в ее важности. А теперь давайте взглянем, почему же так много приложений используют технологию SOM.
Технические особенности SOM
Вы еще не забыли то впечатляющее определение SOM, которое я привел выше? Говоря наиболее обобщенно, SOM - это нейтральная к языку, объектно-ориентированная программная технология для построения, упаковки и манипуляции двоичными библиотеками классов, обеспечивающая совместное использование объектов во всем адресном пространстве. В зависимости от точки зрения это определение может либо драматически повлиять на ваше будущее, либо не иметь какого-либо особого смысла. Давайте рассмотрим каждую часть этого определения.
Нейтральность к языку
SOM нейтральна к языку. Это означает, что пользователи и создатели SOM-классов не обязаны пользоваться одним и тем же языком программирования. Например, для того чтобы создавать, манипулировать и удалять SOM-объекты, реализованные на Си++, клиентская программа не обязательно должна быть написана на этом языке.
SOM не заменяет существующие объектно-ориентированные языки; скорее она дополняет их, так что приложения, написанные на различных языках программирования, могут совместно использовать библиотеки SOM-классов.
Объектно-ориентированное программирование
По объектно-ориентированному программированию написаны целые тома. Большинство книг обозначает три ключевых достоинства объектно-ориентированного подхода: инкапсуляция, наследование и полиморфизм. SOM полностью поддерживает все эти три особенности. К проектированию многих оригинальных аспектов SOM подходили с точки зрения улучшения объектной технологии. У каждой программной среды есть свои недостатки, но SOM устраняет многие из них, например проблему хрупкости базового класса в Си++. Кроме того, SOM объединяет преимущества различных объектных технологий в одной среде. Как и Smalltalk, SOM поддерживает объекты классов и диспетчеризацию метода разрешения именований. Как и Си++, SOM поддерживает множественное наследование и обеспечивает строгий контроль типов. Если вы интересуетесь объектной технологией, я настоятельно рекомендую вам изучить технологию SOM.
Построение, упаковка и манипуляция
При использовании SOM для построения, упаковки и манипуляции библиотеками классов вы сможете обойти многие недостатки других объектных технологий. Например, SOM можно использовать совместно с Си++ для создания библиотек классов, совместимых снизу вверх.
Вы можете выпустить новую версию SOM-класса, и, если клиентский исходный код не требует модификации, его не нужно будет перекомпилировать. Предположим, на вас снизошло вдохновение и вы переписали ваш метод GrainsOfSandOnBeach() с использованием двух новых переменных объекта. Когда вы выпустите очередную версию вашей библиотеки классов Beach, никому из клиентов не потребуется перекомпиляция, поскольку открытый интерфейс останется тем же. (Как считается, именно так должно работать объектно-ориентированное программирование.)
SOM воспринимает изменения в деталях реализации, не нарушая бинарный интерфейс к библиотеке классов и не требуя перекомпиляции программ клиентов. В частности, вы можете делать следующие изменения в SOM-классах и при этом сохранять полную совместимость снизу вверх:
- добавлять новые методы;
- менять размеры объекта, добавляя или удаляя переменные;
- вставлять новые родительские классы выше класса в иерархии наследования;
- перемещать методы вверх по иерархии классов.
В противоположность этому большинство изменений в библиотеке классов Си++, в том числе добавление и удаление приватных переменных, потребует перекомпиляции кода клиентов. Заметьте, перекомпиляция требуется и при отсутствии изменений в открытом интерфейсе библиотеки. Требование перекомпиляции для Си++ может показаться несущественным, однако рассмотрим две следующие ситуации.
Ситуация 1: Ваше решение масштаба предприятия включает единственную библиотеку классов на Си++, которая содержит функции для восьми приложений, расположенных на 3000 настольных ПК. Ваш руководитель по информатизации требует обработки дополнительной информации, из чего следует необходимость добавления одной переменной в классе и соответствующих методов доступа. У вас незавидная участь, поскольку потребуется обновить библиотеку классов, перекомпилировать все восемь приложений и повторно распределить 17 Мб кода (восемь приложений по 2 Мб и библиотека классов на 1 Мб) по 3000 компьютеров. На самом деле, поскольку каждое из восьми приложений находится в своей стадии разработки, маловероятно, что все восемь приложений будут распределяться в одно и то же время, что еще более усложняет проблему.
Если же библиотека классов реализована с использованием SOM, нагрузка на вас заметно ослабнет. На всех рабочих станциях потребуется разместить только 1 Мб кода библиотеки, что намного проще и быстрее.
Ситуация 2: Вы поставщик библиотеки классов Valet и продали ее копии 1000 разработчиков приложений. Предположим, что эти разработчики создают приложения для управления парковкой в гаражах, расположенных по всему миру. У вас появилась новая версия библиотеки классов, содержащая исправление ошибок, улучшения производительности и дополнительные возможности, появившиеся после добавления множества новых классов для поддержки долгосрочной парковки.
Пусть 100 ваших клиентов являются лидерами среди разработчиков приложений. Они станут первыми, кто добавит в свои приложения поддержку долгосрочной парковки. Очевидно, что для получения дополнительных возможностей клиентские приложения потребуется перекомпилировать. Однако что можно сказать в отношении оставшихся 90% клиентов? Нужно ли им будет перекомпилировать свои приложения, если им не требуется дополнительная функциональность?
Если Valet-классы реализованы на Си++, ответом будет да. К сожалению, разработчики будут вынуждены перекомпилировать свои приложения, даже если им потребуются только исправления ошибок и улучшения производительности. Конечно, они могут проигнорировать новую версию (смирившись с известными ошибками).
В том случае, когда Valet-классы реализованы с использованием SOM, ответом на предыдущий вопрос будет нет. Другим 90% клиентов перекомпиляция не потребуется. Одна и та же библиотека классов будет поддерживать приложения с функциями долгосрочной парковки и существующие приложения, написанные в то время, когда библиотека Valet не имела поддержки долгосрочной парковки. Это обеспечивается совместимостью снизу вверх, которая обусловлена применением технологии SOM.
Двоичные библиотеки классов
SOM позволит вам поставлять ваши библиотеки в двоичном формате. Проще говоря, ваша частная информация сможет остаться частной. В поставку SOM-библиотеки будут входить два файла: DLL, содержащий вашу реализацию классов, и файл IDL, в котором описывается интерфейс. Используя эти два файла, с помощью языка, поддерживающего SOM, любой пользователь сможет создавать объекты, базирующиеся на библиотеке классов, или назначить новые классы в качестве подклассов и затем обеспечить специализацию! (Да, да, наш хороший друг, нейтральность к языку позволит расширять и наследовать классы SOM-библиотеки на Си++ с помощью совершенно другого языка.)
В противоположность этому программисты на Си++ вынуждены выбирать меньшее из двух зол и поставлять наряду с двоичной библиотекой классов ее исходный код. Немногие программные инженеры включают в поставку процедурной библиотеки ее исходный код, но такая практика обычна для библиотек классов на Си++. Альтернатива этому - административный кошмар. Если поставщик библиотеки классов решает не передавать исходный код, он столкнется с необходимостью разработки, тестирования и поставки вариантов библиотеки для каждого из имеющихся на сегодняшнем рынке компиляторов Си++. Если вы учтете необходимость поддержки множества версий для каждого варианта библиотеки классов, задача еще более усугубится.
Совместное использование объектов во всем адресном пространстве
Теперь давайте взглянем на последнюю часть определения SOM. В идеальных условиях программного вакуума объекты стали бы вездесущими и все бы наслаждались выгодами объектных технологий. Учитывая, что такого вакуума не существует, объектная система даже небольшой сложности должна время от времени пересекать устрашающие процедурные границы, касается ли это специфического для каждой операционной системы сервиса, коммуникационного API или какого-либо другого унаследованного интерфейса.
Для тех, кто верит в пользу объектов (или, по крайней мере, в потенциальную пользу объектов), приобрела значение задача расширения процедурной границы - это одна из причин, по которой мы наблюдаем быстрое распространение библиотек классов в сегодняшних средах. Поначалу основной акцент делался на объектно-ориентированном абстрагировании для программистов ГИП. Несоответствие возникло, когда элегантные пользовательские интерфейсы были разработаны, а программисты все еще кодировали связанные списки. Поэтому у нас появилась крепкая коллекция классов, которая должна освободить технические ресурсы от кодирования связанных списков. Медленно, но верно процедурные границы программных систем отодвигались все дальше и дальше. Переход к распределенным объектам - это естественное развитие стремления к раздвижению процедурных границ. Есть две причины, почему потребуется совместное использование объектов во всем адресном пространстве:
- объекты имеют смысл для клиентского ПО, поэтому они будут иметь смысл и для серверного ПО;
- объекты на клиенте должны быть способны к взаимодействию с объектами на сервере.
DSOM, "распределительная" составляющая SOM, позволяет совместно использовать объекты во всем адресном пространстве, как на одной машине, так и в сети. DSOM просто добавляет распределенные возможности к выгодам, присущим SOM-классам. DSOM также соответствует стандартам CORBA организации Object Management Group.
Для чего использовать SOM при разработке ваших приложений
Если вы все-таки еще сомневаетесь, я приведу свои 10 главных причин целесообразности применения SOM при разработке ваших приложений.
10. Чтобы разрабатывать WPS-приложения и инструментарий.
9. Если вы работаете в центре объектных технологий и поддерживаете две объектные модели: одну для разработчиков на Си++ и другую для разработчиков на Smalltalk.
8. Для понимания недостатков других ОО-сред.
7. Для разработки компонентного ПО, в особенности использующего OpenDoc.
6. Если вы хотите, чтобы объектно-ориентированный код был как на клиентах, так и на хост-машинах.
5. Если вы не желаете поставлять ваш исходный код.
4. Если вы устали от необходимости перекомпиляции для всех ваших клиентов при изменении класса.
3. Чтобы разработать библиотеку классов и раздвинуть потенциальные границы ее рынка за пределы единственного языка, компилятора и платформы.
2. Если вы заинтересовались обещаниями CORBA и хотите разрабатывать распределенные объектные системы.
1. Если вы хотите иметь настоящую модель системных объектов!
Выводы
В этой статье я пытался:
- познакомить с технологией SOM и показать, что она влияет на вас, независимо от того, являетесь вы разработчиком приложений или нет. Лучше поняв SOM, вы станете более информированным покупателем ПО;
- рассказать о технических особенностях и преимуществах SOM;
- помочь понять, когда вы должны использовать технологию SOM при разработке ваших приложений.
Если вы знакомы с Си++ и Smalltalk, то SOM выглядит по-другому. Но, когда я впервые увидел Си++ и Smalltalk, они выглядели совершенно по-другому. Так что придерживайтесь SOM - и вы освоите ее с минимумом усилий.
Литература
1. Edwards J., Orfali R., Harkey D. The Essential Distributed Objects Survival Guide. John Wiley & Sons. 1996. ISBN 0-471-12993-3.
2. Programmer’s Guide. Vol. I: SOM and DSOM. SOMobjects Developer Toolkit. SOMobjects Version 3.0 beta.
3. Programmer’s Guide. Vol. II: Object Services. SOMobjects Developer Toolkit. SOMobjects Version 3.0 beta.
Брайен Курран
Брайен Курран - руководитель маркетинговой поддержки в Personal Systems Competency Center (PSCC). Он получил степени BBA и MBA на факультете Business Computer Information Systems университета Северного Техаса. Начав работать в PSCC, Брайен сосредоточил свои усилия на разработке приложений OS/2, а с недавнего времени на объектных технологиях IBM, включая SOM и DSOM. С ним можно связаться по адресу: brian_curran@vnet.ibm.com.
Образцы продуктов, использующих технологию SOM
+------------------+--------------------------+
|Продукт |Производитель |
+------------------+--------------------------+
|JBA Guidelines |JBA International |
+------------------+--------------------------+
|ChipChat |ChipChat Technology Group |
+------------------+--------------------------+
|Object Desktop |Stardock Systems |
+------------------+--------------------------+
|Unite Objects |Cirrus Technology |
+------------------+--------------------------+
|KidProof/2 |Pinnacle Technology |
+------------------+--------------------------+
|HyperACCESS |Hilgraeve |
+------------------+--------------------------+
|DeskMan/2 |Development Technologies |
+------------------+--------------------------+
|VX-REXX |Watcom |
+------------------+--------------------------+
|VisualAge C++ |IBM |
+------------------+--------------------------+
|High C/C++ |MetaWare |
|Toolset | |
+------------------+--------------------------+
Найдите дополнительную информацию о SOM в World Wide Web!
IBM Object Technology http://www.software.hosting.ibm.com/objects/
Превосходная стартовая площадка для поиска информации. Этот сервер предлагает платформно-специфические сведения, содержит ссылки на партнеров IBM по объектной технологии, информацию о продуктах, обучении и сервисе.
IBM Solution Developer Operations http://www.austin.ibm.com/developer/objects/
Этот сервер предлагает разработчикам информацию о SOM, OpenDoc и CommonPoint из ОС Taligent плюс информацию о программах поддержки разработчиков, библиотеку объектной технологии, ссылки на соответствующие Web-серверы, новости ОО-технологии.
SOM Programming Forum (страница IBM Software) http://www.software.ibm.com/qa/www/
Место, где можно обменятся мнениями с экспертами по ОО-технологии из IBM.
Декабрьский, 1995 года, выпуск материалов форума SOM "Programming with Christina Lau" охватывает множество разнообразных тем.
SOMObjects Technical Support http://www.austin.ibm.com/somservice
Просмотрите часто задаваемые вопросы (FAQ), обновите вашу версию SOMObjects Developer Toolkit или SOMObjects Workgroup Enabler. Здесь можно задать вопрос команде технической поддержки и получить CSD (исправления ошибок в ПО).
Базовая страница Барта http://goban.austin.ibm.com
На этом сервере Барт Джакоб, старший разработчик из организации International Technical Support Organization (Остин), предлагает информацию об
ОО-проектах ITSO Center, доступ ко всем Красным книгам ITSO и Красным книгам по ОО.
OMG (Object Management Group) http://www.omg.org
Посетите базовую страницу некоммерческого консорциума. Здесь вы найдете информацию об организации и членстве в ней, просмотрите список ее членов. Вы получите также сведения о событиях, рекомендуемой литературе, группах пользователей ОО-технологии и ссылки на соответствующие серверы.