В информатике объектом может быть переменная , структура данных , функция или метод . Являясь областями памяти , объекты содержат значение и на них ссылаются идентификаторы .
В парадигме объектно-ориентированного программирования объект может представлять собой комбинацию переменных, функций и структур данных ; в частности, в вариантах парадигмы, основанных на классах , объект относится к конкретному экземпляру класса .
В реляционной модели управления базой данных объектом может быть таблица или столбец или связь между данными и объектом базы данных (например, связь возраста человека с конкретным человеком). [1]
Важным различием языков программирования является разница между объектно-ориентированным языком и объектно-ориентированным языком. Язык обычно считается объектно-ориентированным, если он включает в себя основные возможности объекта: идентичность, свойства и атрибуты. Язык считается объектно-ориентированным, если он объектно-ориентирован, а также обладает возможностью полиморфизма , наследования , инкапсуляции и, возможно, композиции . Полиморфизм означает возможность перегружать имя функции несколькими вариантами поведения в зависимости от того, какие объекты ей передаются. Обычная передача сообщений различает только первый объект и считает, что это «отправка сообщения» этому объекту. Однако некоторые объектно-ориентированные языки программирования, такие как Flavors и Common Lisp Object System (CLOS), позволяют различать больше, чем первый параметр функции. [2] Наследование — это возможность создать подкласс объектного класса, создать новый класс, который является подклассом существующего и наследует все ограничения данных и поведение своих родителей, но также добавляет новые и/или изменяет один или несколько из них. . [3] [4]
В объектно-ориентированном программировании объект представляет собой абстрактный тип данных с добавлением полиморфизма и наследования . Вместо того, чтобы структурировать программы как код и данные, объектно-ориентированная система объединяет их, используя концепцию «объекта». Объект имеет состояние (данные) и поведение (код). Объекты могут соответствовать вещам, найденным в реальном мире. Так, например, графическая программа будет иметь такие объекты, как круг , квадрат , меню . Система онлайн-покупок будет иметь такие объекты, как корзина покупок, клиент, продукт . Система покупок будет поддерживать такие действия, как размещение заказа , оплата и предложение скидок . Объекты спроектированы как иерархии классов. Так, например, в системе покупок могут быть классы высокого уровня, такие как электроника , кухонные товары и книги . Могут быть дополнительные усовершенствования, например, в электронных продуктах : проигрыватель компакт-дисков, проигрыватель DVD и т. д. Эти классы и подклассы соответствуют наборам и подмножествам в математической логике. [5] [6]
Важным понятием для объектов является шаблон проектирования . Шаблон проектирования предоставляет шаблон многократного использования для решения распространенной проблемы. Следующие описания объектов являются примерами некоторых наиболее распространенных шаблонов проектирования объектов. [7]
Объектно-ориентированный подход — это не просто модель программирования. Его можно с тем же успехом использовать в качестве языка определения интерфейсов для распределенных систем. Объекты в модели распределенных вычислений, как правило, более детализированы, долговечны и более ориентированы на обслуживание, чем объекты программирования.
Стандартным методом упаковки распределенных объектов является использование языка определения интерфейса (IDL). IDL скрывает от клиента все детали объекта распределенного сервера. Подробные сведения о том, на каком компьютере находится объект, какой язык программирования он использует, какую операционную систему и другие проблемы, специфичные для платформы. IDL также обычно является частью распределенной среды, которая единообразным образом предоставляет такие услуги, как транзакции и сохранение, для всех объектов. Двумя наиболее популярными стандартами для распределенных объектов являются стандарт CORBA Object Management Group и DCOM Microsoft . [8]
Помимо распределенных объектов, был предложен ряд других расширений базовой концепции объекта для обеспечения распределенных вычислений:
Некоторые из этих расширений, такие как распределенные объекты и объекты протокола , представляют собой специфичные для предметной области термины для специальных типов «обычных» объектов, используемых в определенном контексте (например, при удаленном вызове метода или композиции протокола ). Другие, такие как реплицированные объекты и живые распределенные объекты , являются более нестандартными, поскольку они отказываются от обычного случая, когда объект одновременно находится в одном месте, и применяют эту концепцию к группам объектов (репликам), которые могут охватывать в нескольких местах, могут иметь лишь слабо согласованное состояние и членство в них может динамически меняться.
Семантическая сеть, по сути, представляет собой структуру распределенных объектов. Двумя ключевыми технологиями семантической сети являются язык веб-онтологий (OWL) и структура описания ресурсов (RDF). RDF предоставляет возможность определять базовые объекты — имена, свойства, атрибуты, отношения — которые доступны через Интернет. OWL добавляет более богатую объектную модель, основанную на теории множеств, которая предоставляет дополнительные возможности моделирования, такие как множественное наследование .
Объекты OWL не похожи на стандартные крупномасштабные распределенные объекты, доступ к которым осуществляется через язык определения интерфейса. Такой подход не подходит для Интернета, поскольку Интернет постоянно развивается и стандартизации одного набора интерфейсов добиться сложно. Объекты OWL, как правило, похожи на объекты, используемые для определения моделей предметной области приложения в таких языках программирования, как Java и C++ .
Однако существуют важные различия между объектами OWL и традиционными объектами объектно-ориентированного программирования. Традиционные объекты компилируются в статические иерархии, обычно с одинарным наследованием, но объекты OWL являются динамическими. Объект OWL может изменить свою структуру во время выполнения и стать экземпляром новых или других классов.
Еще одним важным отличием является то, как модель обрабатывает информацию, которой в данный момент нет в системе. Объекты программирования и большинство систем баз данных используют « предположение о закрытом мире ». Если факт не известен системе, этот факт считается ложным. Объекты семантической сети используют предположение открытого мира : утверждение считается ложным только в том случае, если существует реальная соответствующая информация о том, что оно ложно, в противном случае оно считается неизвестным, ни истинным, ни ложным.
Объекты OWL на самом деле больше всего похожи на объекты в языках фреймов искусственного интеллекта , таких как KL-ONE и Loom.
В следующей таблице традиционные объекты объектно-ориентированных языков программирования, таких как Java или C++, сравниваются с объектами семантической сети: [10] [11]
Сама Ада 83 обычно не считается объектно-ориентированной;
скорее, согласно терминологии Вегнера [Weg 87], его называют объектно-ориентированным, поскольку он обеспечивает лишь ограниченную форму наследования и лишен полиморфизма.