Объект (информатика) - Object (computer science)

В информатике , объект может быть переменным , в структуру данных , а функция , или способ , и, таким образом , является значение в памяти ссылается на идентификаторе .

В объектно-ориентированном программировании парадигмы , объект может быть комбинацией переменных, функций и структуры данных; в частности , в основе классов вариаций парадигмы это относится к конкретному примеру из в классе .

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

Объектно-ориентированные языки

Важным отличием языков программирования является разница между объектно-ориентированным языком и объектно-ориентированным языком. Язык обычно считается объектно-ориентированным, если он включает в себя базовые возможности объекта: идентификацию, свойства и атрибуты. Язык считается объектно-ориентированным, если он основан на объектах, а также имеет возможность полиморфизма , наследования, инкапсуляции и, возможно, композиции. Полиморфизм относится к способности перегрузить имя функции несколькими поведениями в зависимости от того, какие объекты ей передаются. Обычная передача сообщений различает только первый объект и считает, что это «отправка сообщения» этому объекту. Однако некоторые языки ООП, такие как Flavors и Common Lisp Object System (CLOS), позволяют различать больше, чем первый параметр функции. Наследование - это возможность создать подкласс объектного класса, создать новый класс, который является подклассом существующего и наследует все ограничения данных и поведение своих родителей, но также добавляет новые и / или изменяет один или несколько из них.

Объектно-ориентированное программирование

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

Вместо того, чтобы структурировать программы в виде кода и данных, объектно-ориентированная система объединяет их, используя концепцию «объекта». У объекта есть состояние (данные) и поведение (код). Объекты могут соответствовать вещам, найденным в реальном мире. Так, например, графическая программа будет иметь такие объекты, как круг , квадрат , меню . Система онлайн-покупок будет иметь такие объекты, как корзина, покупатель, продукт . Система покупок будет поддерживать такие действия, как размещение заказа , оплата и предложение скидки . Объекты спроектированы как иерархии классов. Так, например , с покупками системы может существовать классы высокого уровня , такие как электроника продукт , кухонный продукт , и книга . Возможны дальнейшие уточнения, например, в отношении электронных продуктов : проигрыватель компакт-дисков, проигрыватель DVD и т. Д. Эти классы и подклассы соответствуют наборам и подмножествам в математической логике.

Специализированные объекты

Важным понятием для объектов является шаблон проектирования . Шаблон проектирования предоставляет шаблон многократного использования для решения общей проблемы. Следующие описания объектов являются примерами некоторых из наиболее распространенных шаблонов проектирования для объектов.

  • Функциональный объект : объект с единственным методом (в C ++ этот метод будет оператором функции «operator ()»), который действует во многом как функция (например, указатель C / C ++ на функцию).
  • Неизменяемый объект : объект, настроенный с фиксированным состоянием во время создания и который не изменяется впоследствии.
  • Первоклассный объект : объект, который можно использовать без ограничений.
  • Объект-контейнер : объект, который может содержать другие объекты.
  • Фабричный объект : объект, предназначенный для создания других объектов.
  • Метаобъект : объект, из которого могут быть созданы другие объекты (сравните с классом , который не обязательно является объектом).
  • Объект-прототип : специализированный метаобъект, из которого могут быть созданы другие объекты путем копирования
  • Бог возражает : объект, который знает или делает слишком много (это пример антипаттерна ).
  • Одноэлементный объект : объект, который является единственным экземпляром своего класса за время существования программы.
  • Объект фильтра : объект, который получает поток данных на входе и преобразует его в выходные данные объекта. Часто потоки ввода и вывода являются потоками символов, но они также могут быть потоками произвольных объектов. Обычно они используются в оболочках, поскольку они скрывают существующую реализацию с абстракцией, необходимой на стороне разработчика.

Распределенные объекты

Объектно-ориентированный подход - это не просто модель программирования. Его можно одинаково хорошо использовать в качестве языка определения интерфейсов для распределенных систем. Объекты в модели распределенных вычислений имеют тенденцию быть более крупными, долговечными и более сервис-ориентированными, чем объекты программирования.

Стандартный метод упаковки распределенных объектов - через язык определения интерфейса (IDL). IDL защищает клиента от всех деталей объекта распределенного сервера. Подробная информация, например, на каком компьютере находится объект, какой язык программирования он использует, какая операционная система и другие проблемы, связанные с платформой. IDL также обычно является частью распределенной среды, которая предоставляет услуги, такие как транзакции и постоянство, для всех объектов единообразным образом. Два из наиболее популярных стандартов для распределенных объектов являются Object Group Management «s CORBA стандарт и Microsoft » s DCOM.

В дополнение к распределенным объектам был предложен ряд других расширений базовой концепции объекта для обеспечения распределенных вычислений:

  • Объекты протокола - это компоненты стека протоколов, которые заключают сетевое взаимодействие в объектно-ориентированный интерфейс.
  • Реплицированные объекты - это группы распределенных объектов (называемых репликами ), которые запускают распределенный многосторонний протокол для достижения высокой согласованности между их внутренними состояниями и которые координированно отвечают на запросы. Примеры включают отказоустойчивыеобъекты CORBA .
  • Живые распределенные объекты (или просто живые объекты ) обобщаютконцепцию реплицированного объекта на группы реплик, которые могут внутренне использовать любой распределенный протокол, что, возможно, приводит только к слабой согласованности между их локальными состояниями.

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

Семантическая сеть

Semantic Web , по существу , основа распределенных объектов. Две ключевые технологии в семантической сети - это язык веб-онтологий (OWL) и структура описания ресурсов (RDF). RDF предоставляет возможность определять основные объекты - имена, свойства, атрибуты, отношения, - которые доступны через Интернет. OWL добавляет более богатую объектную модель, основанную на теории множеств, которая предоставляет дополнительные возможности моделирования, такие как множественное наследование .

Объекты OWL не похожи на стандартные крупномасштабные распределенные объекты, доступ к которым осуществляется через язык определения интерфейсов. Такой подход не подходит для Интернета, потому что Интернет постоянно развивается, а стандартизация одного набора интерфейсов является труднодостижимой. Объекты OWL, как правило, похожи на типы объектов, используемые для определения моделей предметной области в таких языках программирования, как Java и C ++ .

Однако есть важные различия между объектами OWL и объектами традиционного объектно-ориентированного программирования. Традиционные объекты компилируются в статические иерархии обычно с единичным наследованием, но объекты OWL являются динамическими. Объект OWL может изменять свою структуру во время выполнения и может стать экземпляром новых или других классов.

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

Объекты OWL на самом деле больше всего похожи на объекты в фреймовых языках искусственного интеллекта, таких как KL-ONE и Loom.

Следующая таблица противопоставляет традиционные объекты объектно-ориентированных языков программирования, таких как Java или C ++, объектам семантической сети:

Объекты ООП Объекты семантической сети
Классы рассматриваются как типы для экземпляров. Классы рассматриваются как наборы индивидов.
Экземпляры не могут изменять свой тип во время выполнения. Членство в классе может измениться во время выполнения.
Список классов полностью известен во время компиляции и не может измениться после этого. Классы можно создавать и изменять во время выполнения.
Компиляторы используются во время сборки. Ошибки времени компиляции указывают на проблемы. Reasoners можно использовать для классификации и проверки согласованности во время выполнения или сборки.
Классы кодируют большую часть своего значения и поведения с помощью императивных функций и методов. Классы делают свое значение явным в терминах операторов OWL. Никакой императивный код не может быть добавлен.
Экземпляры анонимны постольку, поскольку к ним нельзя легко обратиться извне выполняющейся программы. Все именованные ресурсы RDF и OWL имеют уникальный URI, по которому на них можно ссылаться.
Закрытый мир: если недостаточно информации, чтобы доказать истинность утверждения, то оно считается ложным. Открытый мир: если информации недостаточно, чтобы доказать истинность утверждения, оно может быть истинным или ложным.

Смотрите также

Рекомендации

Внешние ссылки