Portable Distributed Objects ( PDO ) — это интерфейс прикладного программирования (API) для создания объектно-ориентированного кода, который может быть выполнен удаленно в сети компьютеров. Он был создан NeXT Computer, Inc. с использованием их системы OpenStep , чье использование Objective-C сделало пакет очень простым в написании. Он характеризовался очень малым весом и высокой скоростью по сравнению с аналогичными системами, такими как CORBA .
Версии PDO были доступны для Solaris , HP-UX и всех версий системы OPENSTEP, хотя было также объявлено о соглашении о создании версии для Digital Unix , тогда еще известной как OSF/1, с ожидаемой поставкой после выпуска версий для SunOS и Solaris. Цены на лицензии на продукт для этих платформ варьировались от 2500 долларов за использование на «малом сервере» до 10 000 долларов за использование на «большом сервере». [1] Также была доступна версия, работающая с Microsoft OLE , называемая D'OLE , [2] позволяющая представлять распределенный код, написанный с использованием PDO на любой платформе, в системах Microsoft, как если бы они были локальными объектами OLE.
С другой стороны, PDO полагался на небольшое количество функций в среде выполнения Objective-C для обработки как переносимости, так и распространения. Ключевой особенностью была поддержка языком метода «второго шанса» во всех классах; если вызов метода для объекта не удавался, поскольку объект его не поддерживал (обычно не допускается в большинстве языков из-за строгой типизации ), среда выполнения затем упаковывала сообщение в компактный формат и передавала его обратно в метод объекта forwardInvocation
. [3]
Нормальным поведением для forwardInvocation
было возвращение ошибки, включая детали, взятые из сообщения («вызов»). [ необходимо пояснение ] PDO вместо этого предоставил ряд новых объектов с forwardInvocation
методами, которые передавали объект вызова на другую машину в сети, с различными версиями для поддержки различных сетей и платформ. Вызов методов на удаленных объектах был почти невидим; после некоторой настройки сети (обычно несколько строк) объекты PDO были созданы локально и вызваны так же, как и любой другой объект в системе. Затем объект PDO пересылал вызов на удаленный компьютер для обработки и разделял результаты, когда они возвращались.
По сравнению с CORBA , программы PDO обычно были размером 1/10 или меньше; для сотрудников NeXT было обычным делом писать в журналы, показывая, как повторно реализовать многостраничную статью CORBA, используя, возможно, 15 строк кода. [4] С точки зрения программирования, не было ничего более простого в использовании, чем PDO.
Однако PDO также полностью зависел от Objective-C в своей работе. Это была цена, которую большинство не хотели платить, так как в то время C++ использовался более широко, а усилия по переносу кодовых баз на совершенно новый язык и парадигму считались слишком обременительными. [5] PDO так и не нашел широкого применения, и в 1995 году акцент NeXT сместился на свой новый фреймворк WebObjects .
Возможность создания экземпляра любого объекта, известного локальному процессу, из любого другого процесса является известной уязвимостью безопасности, и по этой причине Apple настоятельно не рекомендует использовать PDO.
Помимо платформы OS X, существует GNUstep , которая имеет собственную реализацию распределенных объектов. [6]