Системная объектная модель IBM
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2013 г. ) |
![]() | |
Разработчик(и) | ИБМ |
---|---|
Стабильная версия | 3.0 / декабрь 1996 г. |
Операционная система | OS/2 , Windows , AIX , Classic Mac OS , Copland , OS/390 , NonStop OS , OS/400 |
Тип | объектно-ориентированная общих библиотек система |
В вычислительной технике системная объектная модель ( SOM ) представляет собой объектно-ориентированную систему общих библиотек, разработанную IBM . DSOM , распределенная версия, основанная на CORBA , позволяла объектам на разных компьютерах взаимодействовать.
SOM определяет интерфейс между программами или между библиотеками и программами, так что интерфейс объекта отделен от его реализации. SOM позволяет определять классы объектов на одном языке программирования и использовать их на другом, а также позволяет обновлять библиотеки таких классов без необходимости перекомпиляции клиентского кода.
Библиотека SOM состоит из набора классов, методов, статических функций и элементов данных. Программы, использующие библиотеку SOM, могут создавать объекты типов, определенных в библиотеке, использовать методы, определенные для типа объекта, и создавать подклассы из классов SOM, даже если язык программы, обращающейся к библиотеке SOM, не поддерживает типизацию классов. Библиотека SOM и программы, использующие объекты и методы этой библиотеки, не обязательно должны быть написаны на одном и том же языке программирования. SOM также сводит к минимуму влияние изменений в библиотеках. Если библиотека SOM изменена для добавления новых классов или методов или для изменения внутренней реализации классов или методов, все равно можно запустить программу, использующую эту библиотеку, без перекомпиляции. Это не относится ко всем другим библиотекам C++ , которые в некоторых случаях требуют перекомпиляции всех программ, которые их используют, при каждом изменении библиотек, что известно как проблема хрупкого двоичного интерфейса .
SOM предоставляет интерфейс прикладного программирования (API), который предоставляет программам доступ к информации о классе SOM или объекте SOM. Любой класс SOM наследует набор виртуальных методов, которые можно использовать, например, для поиска имени класса объекта или для определения доступности данного метода для объекта.
Приложения [ править ]
SOM предназначался для универсального использования — от мэйнфреймов IBM до настольных компьютеров в OS/2 , позволяя писать программы, которые будут работать на настольных компьютерах, но использовать мэйнфреймы для обработки и хранения данных. IBM выпустила версии SOM/DSOM для OS/2, Microsoft Windows и различных разновидностей Unix от IBM (в частности, собственной AIX ). Некоторое время после образования альянса AIM SOM/DSOM также использовалась Apple Computer для аналогичных целей. Наиболее широко он использовался в их среде OpenDoc , но и в других целях использовался ограниченно.
Вероятно, наиболее широкое применение SOM в IBM наблюдалось в более поздних версиях OS/2, в которых он использовался для большей части кода, включая Workplace Shell . Объект REXX для OS/2 может работать с классами и объектами SOM, включая WPS. [1]
IBM не полностью закрыла SOMobjects. Они были портированы на OS/390 и до сих пор доступны в этой ОС. Документацию можно прочитать на сайте IBM. [2] В 1996 году компания Tandem Computers Inc. приобрела технологию SOMobjects. [3] Tandem был продан Compaq, Compaq был продан Hewlett-Packard. NonStop DOM и некоторые другие технологии в конечном итоге объединились в NonStop CORBA, но текущая документация продуктов NonStop не содержит признаков того, что технология SOM все еще используется в продуктах NonStop.
Угасание [ править ]
![]() | Возможно, этот раздел содержит оригинальные исследования . ( Июль 2013 г. ) |
Со «смертью» OS/2 в середине 1990-х годов смысл существования SOM/DSOM в значительной степени исчез; если бы пользователи не использовали OS/2 на настольных компьютерах, в любом случае не было бы универсальной библиотеки объектов. В 1997 году, когда Стив Джобс вернулся в Apple и завершил многие разработки, включая Copland и OpenDoc , SOM был заменен на Objective-C. [4] уже используется в OPENSTEP (позже станет Mac OS X). Разработка SOM/DSOM сошла на нет и больше не развивается активно, хотя продолжает включаться и использоваться в системах на базе OS/2, таких как ArcaOS . [5]
Несмотря на фактическую смерть OS/2 и OpenDoc, у SOM может быть еще одна ниша: Windows и кроссплатформенная разработка. SOM 3.0 для WinNT стала общедоступной в декабре 1996 года. Причины отсутствия продвижения в этих направлениях выходят за рамки проблем внедрения на рынке. Они связаны с возможностями, упущенными IBM . [6] и деструктивные несовместимые изменения:
- Первой версией VisualAge C++ для Windows была 3.5. Это была первая и последняя версия, поддерживающая SOM. В него была встроена SOM 2.1 и поддержка Direct-to-SOM в компиляторе. В версиях 3.6.5 и более поздних версиях SOM не было.
- SOMobjects во многом полагался на make-файлы . В VisualAge C++ 4.0 представлены проекты .icc и удалены из поставки компилятор и компоновщик командной строки icc.exe и ilink.exe. Невозможно собрать какой-либо образец SOM DTK «из коробки» с VAC++ 4.0. VisualAge C++ поставляется со своими собственными образцами, но образцов SOM .icc нет даже в VAC++ 4.0 для OS/2. vacbld.exe, единственный инструмент компиляции командной строки, не поддерживает SOM.
- Встроенная библиотека объектных компонентов VisualAge C++ (OCL) не основана на SOM. Вероятно, его планировалось портировать на SOM с использованием режима C++ Direct-to-SOM, но в VAC v3.6.5 от этого режима отказались, а у OCL до сих пор нет интерфейса SOM.
- Ближе к концу 1990-х годов IBM закрыла сайты загрузки SOMobjects и больше никогда их не открывала. SOM 3.0 DTK для WinNT невозможно найти на IBM FTP, несмотря на то, что множество других устаревших материалов лежит свободно. Несмотря на общедоступность SOM 3.0 для WinNT, до конца 2012 года ее было практически невозможно найти.
- Наконец, IBM никогда не открывала исходный код SOM (как это было с Object REXX ), несмотря на несколько статей. [7] [8] и петиции. [9]
Альтернативные реализации [ править ]
Существуют два проекта реализации SOM с открытым исходным кодом. Одна из них — объектная модель Netlabs (NOM), которая технически одинакова, но несовместима на уровне двоичного кода. Другой — somFree, представляющий собой версию IBM SOM для чистых помещений и совместимый на уровне двоичных файлов. [ нужна ссылка ]
Сравнение поддержки скомпилированных библиотек классов [ править ]
Microsoft сравнивала SOM с моделью компонентных объектов Исторически сложилось так, что IBM (COM). Однако с некоторых точек зрения COM вообще не место. С точки зрения преобразований между выпусками, COM находится на процедурном уровне, поэтому таблица 1 в статье RRBC ( двоичная совместимость между выпусками, упомянутая ранее) вообще не содержит столбца COM. Вместо этого SOM сравнивается с:
- скомпилированный Smalltalk
- скомпилированная объектная система Common Lisp (CLOS)
- универсальный С++
- SGI Дельта/C++
- Двоичный интерфейс объекта Солнца
- Цель-C
- Ява
Большая часть информации в этой таблице по-прежнему применима к современным версиям (по состоянию на 2015 год), за исключением того, что Objective-C 2.0 получает так называемые нехрупкие переменные экземпляра. Некоторые решения остались экспериментальными: SGI Delta/C++ или Sun OBI. Большинство подходов, основанных на одном языке программирования, были постепенно выведены из употребления или никогда не использовались активно таким же образом. Например, плагины браузера Netscape Plugin Application Programming Interface ( NPAPI ) изначально были написаны с использованием Java API (LiveConnect), но позже виртуальная машина Java (JVM) была исключена из цепочки. Это можно рассматривать как замену Java кросс-платформенной объектной моделью компонентов ( XPCOM ). Common Lisp Object System (CLOS) и Smalltalk не являются звеньями цепочки, как Java в LiveConnect. Objective-C также мало известен в этой роли и не продается таким образом, но его среда выполнения является одним из наиболее дружественных к аналогичным вариантам использования.
Общий C++ до сих пор используется в Qt и K Desktop Environment ( KDE ). Qt и KDE известны тем, что описывают усилия, необходимые для поддержания двоичной совместимости без специальной поддержки в инструментах разработки. [10]
GObject Целью было избежать зависимости от компилятора C++, но проблемы с RRBC такие же, как и в обычном C++.
Без специальной среды выполнения многие другие языки программирования будут иметь те же проблемы, например, Delphi , Ada . Это можно проиллюстрировать так называемым беспрецедентным подходом , который использовался для создания версии Delphi 2007, совместимой с двоичным кодом Delphi 2006: Как добавить «опубликованное» свойство, не нарушая совместимости с DCU. Архивировано 8 декабря 2015 г. на Wayback Machine.
Objective-C является наиболее многообещающим конкурентом SOM (хотя он и не позиционируется активно как многоязычная платформа), и SOM предпочтительно следует сравнивать с Objective-C, а не с COM, как это было исторически. Благодаря нехрупким переменным экземпляра в Objective-C 2.0 это лучшая альтернатива среди активно поддерживаемых.
COM , XPCOM активно используются, но они управляют только интерфейсами, а не реализациями, и поэтому не находятся на одном уровне с SOM, GObject и Objective-C . Среда выполнения Windows при более пристальном рассмотрении ведет себя очень похоже на COM. Его описание метаданных основано на .NET, но поскольку WinRT не содержит специальной среды выполнения для решения проблем RRBC, как в Objective-C или SOM, пришлось применить несколько ограничений, которые ограничивают WinRT на процедурном уровне:
- Класс ссылки, имеющий открытый конструктор, должен быть объявлен как запечатанный, чтобы предотвратить дальнейшее наследование.
Компоненты среды выполнения Windows — компоненты среды выполнения Windows в мире .NET
- Другое ограничение заключается в том, что нельзя предоставлять общие общедоступные классы или интерфейсы. Полиморфизм недоступен для типов WinRT, и самое близкое к этому — реализация интерфейсов WinRT; вы должны объявить запечатанными все классы, которые общедоступны вашим компонентом среды выполнения Windows.
Сравнение с COM [ править ]
SOM по своей концепции аналогичен COM. Обе системы решают проблему создания стандартного формата библиотеки, который можно вызывать более чем из одного языка. SOM можно считать более надежным, чем COM. COM предлагает два метода доступа к методам объекта, и объект может реализовать либо один из них, либо оба. Первый из них — динамическое и позднее связывание ( IDispatch ) и не зависит от языка, подобно тому, что предлагает SOM. Второй, называемый пользовательским интерфейсом, использует таблицу функций, которая может быть построена на C, но также напрямую совместима с двоичной структурой виртуальной таблицы объектов C++ в компиляторе Microsoft C++. Таким образом, с помощью совместимых компиляторов C++ пользовательские интерфейсы могут быть определены непосредственно как чистые виртуальные классы C++. Полученный интерфейс затем может быть вызван языками, которые могут вызывать функции C через указатели. Пользовательские интерфейсы обменивают надежность на производительность. После публикации интерфейса в выпущенном продукте его нельзя изменить, поскольку клиентские приложения этого интерфейса были скомпилированы с использованием определенного двоичного макета этого интерфейса. Это пример проблема хрупкого базового класса , которая может привести к DLL-аду , поскольку устанавливается новая версия общей библиотеки, и все программы, основанные на более старой версии, могут перестать работать должным образом. Чтобы предотвратить эту проблему, разработчики COM должны помнить, что никогда не следует изменять интерфейс после его публикации, а новые интерфейсы необходимо определять, если требуются новые методы или другие изменения.
SOM предотвращает эти проблемы, предоставляя только позднее связывание, что позволяет компоновщику во время выполнения перестроить таблицу на лету. Таким образом, изменения в базовых библиотеках разрешаются при их загрузке в программы, хотя это приводит к снижению производительности.
SOM также гораздо более надежен с точки зрения полной поддержки широкого спектра объектно-ориентированных языков. В то время как базовый COM по существу определяет урезанную версию C++ для программирования, SOM поддерживает почти все распространенные функции и даже некоторые более экзотические. Например, SOM поддерживает множественное наследование , метаклассы и динамическую диспетчеризацию . Некоторые из этих функций отсутствуют в большинстве языков, что привело к тому, что большинство систем, подобных SOM/COM, стали проще за счет поддержки меньшего количества языков. Однако полная гибкость многоязычной поддержки была важна для IBM, поскольку они прилагали большие усилия для поддержки как Smalltalk ( единое наследование и динамическая диспетчеризация ), так и C++ ( множественное наследование и фиксированная диспетчеризация ).
Наиболее заметное различие между SOM и COM — это поддержка наследования — в COM его нет. Может показаться странным, что Microsoft создала систему объектных библиотек, которая не могла поддерживать одну из самых фундаментальных концепций объектно-ориентированного программирования; Основная причина этого заключается в том, что трудно определить, где находится базовый класс в системе, где библиотеки загружаются в потенциально случайном порядке. COM требует, чтобы программист указал точный базовый класс во время компиляции, что делает невозможным вставку других производных классов в середину (по крайней мере, в других библиотеках COM).
Вместо этого SOM использует простой алгоритм, который ищет потенциальные базовые классы, следуя дереву наследования и останавливаясь на первом подходящем; в большинстве случаев это основная идея наследования. Недостатком этого подхода является то, что новые версии этого базового класса могут перестать работать, даже если API останется прежним. Такая возможность существует в любой программе, не только в той, которая использует общую библиотеку, но проблему может стать очень трудно отследить, если она существует в чужом коде. В SOM единственным решением является обширное тестирование новых версий библиотек, что не всегда легко.
Хотя IBM противопоставляла SOM и COM, они не были взаимоисключающими. В 1995 году Novell представила ComponentGlue. [11] технологию OpenDoc для Windows. Эта технология предоставила различные средства для интеграции компонентов на основе COM и SOM. В частности, объекты SOM могут быть доступны приложениям OLE2 либо с помощью моста позднего связывания (на основе IDispatch), либо с помощью COM-интерфейсов, имеющих более высокую производительность. По сути, классы SOM таким образом реализуют COM-интерфейсы.
Почти все считали, что гибкость, предлагаемая SOM, стоит затраченных усилий. [ нужна ссылка ] , но подобные системы, такие как Sun Microsystems от Distributed Objects Everywhere , также поддерживают полное наследование. позволили NeXT Портативные распределенные объекты избежать этих проблем благодаря надежной системе управления версиями, позволяя авторам библиотек поставлять новые версии вместе со старыми, тем самым гарантируя обратную совместимость при небольших затратах на дисковое пространство.
См. также [ править ]
Ссылки [ править ]
- ^ SOM и Object REXX доктора Уиллиса Боутона (август 2004 г.)
- ^ «Документация по SOMobjects для OS/390» .
- ^ «Tandem использует технологию IBM SOMobjects для вычислений с распределенными объектами» . Архивировано из оригинала 05 марта 2016 г. Проверено 2 мая 2015 г.
- ^ Ира Р. Форман и Скотт Дэнфорт (1999). Использование метаклассов в работе . Аддисон-Уэсли. ISBN 0-201-43305-2 .
Глава 11 «Двоичная совместимость между версиями», страница 246
Статью с идентичным названием и похожим содержанием того же автора можно найти в Интернете: Двоичная совместимость между выпусками. Архивировано 3 октября 2015 г. на Wayback Machine. - ^ «Список классов WPS ArcaOS 5.0» . Проверено 3 сентября 2020 г.
- ^ Затерянные в саду Роджера Сешнса (август 1996 г.)
- ^ Небольшая вещь SOM для разработчиков Linux от Эстер Шиндлер (февраль 2008 г.)
- ^ Стивен Дж. Воган-Николс (8 февраля 2008 г.). «Возрождение лучших возможностей OS/2 для настольных компьютеров Linux» . Архивировано из оригинала 17 апреля 2010 г.
- ^ Петиция OS/2 , второй тур (2007–2010 гг.)
- ^ «Политики/проблемы двоичной совместимости с C++ — Wiki сообщества KDE» . сообщество.kde.org .
- ^ «Novell выпустит новую версию разработчика OpenDoc™ | Micro Focus» . www.novell.com .