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

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

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

в реляционная модель из база данных управления, объект может быть Таблица или столбец или связь между данными и объектом базы данных (например, связь возраста человека с конкретным человеком).[1]

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

Важным отличием языков программирования является разница между объектно-ориентированным языком и объектно-ориентированным языком. Язык обычно считается объектно-ориентированным, если он включает в себя базовые возможности объекта: идентификацию, свойства и атрибуты. Язык считается объектно-ориентированным, если он основан на объектах, а также имеет возможность полиморфизм и наследование. Полиморфизм относится к способности перегрузить имя функции несколькими поведениями в зависимости от того, какие объекты ей передаются. Обычная передача сообщений различает только первый объект и считает, что это «отправка сообщения» этому объекту. Однако некоторые языки ООП, такие как Ароматизаторы и Общая объектная система Lisp (ЗАКРЫТЬ) позволяет различать более первого параметра функции.[2] Наследование - это возможность создать подкласс объектного класса, создать новый класс, который является подклассом существующего и наследует все ограничения данных и поведение своих родителей, но также добавляет новые и / или изменяет один или несколько из них.[3][4]

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

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

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

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

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

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

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

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

Стандартный метод упаковки распределенных объектов - через язык определения интерфейса (IDL). IDL защищает клиента от всех деталей объекта распределенного сервера. Подробная информация, например, на каком компьютере находится объект, на каком язык программирования он использует, что Операционная система и другие проблемы, связанные с платформой. IDL также обычно является частью распределенной среды, которая предоставляет услуги, такие как транзакции и постоянство, для всех объектов единообразным образом. Два самых популярных стандарта для распределенных объектов - это Группа управления объектами с CORBA стандарт и Microsoft DCOM.[8]

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

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

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

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

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

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

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

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

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

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

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

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

использованная литература

  1. ^ Оппель, Энди (2005). Демистификация SQL. Макгроу Хилл. п. 7. ISBN  0-07-226224-9.
  2. ^ Габриэль, Ричард; Линда Дж. ДеМичи. "Объектная система Common Lisp: обзор" (PDF). Технический отчет Lucid Inc..
  3. ^ Вегнер, Питер (декабрь 1987 г.). Мейровиц, Норман (ред.). «Измерения объектно-ориентированного языкового дизайна». Материалы конференции OOPSLA'87. 22 (12): 168–182. Дои:10.1145/38807.38823.
  4. ^ Барби, S; М. Кемпе; А. Штромайер (1993). «Объектно-ориентированное программирование с помощью Ada 9X». Проект технического отчета. Швейцарский федеральный технологический институт в лаборатории программной инженерии Лозанны. Получено 15 декабря 2013. Сама Ada 83 обычно не считается объектно-ориентированной; скорее, согласно терминологии Вегнера [Weg 87], он называется объектно-ориентированным, поскольку обеспечивает только ограниченную форму наследования и в нем отсутствует полиморфизм.
  5. ^ Якобсен, Ивар; Магнус Кристерсон; Патрик Йонссон; Гуннар Овергаард (1992). Объектно-ориентированная разработка программного обеспечения. Эддисон-Уэсли ACM Press. ISBN  0-201-54435-0.
  6. ^ "Что такое объект?". oracle.com. Корпорация Oracle. Получено 13 декабря 2013.
  7. ^ Мартин, Роберт С. «Принципы дизайна и шаблоны дизайна» (PDF). Архивировано из оригинал (PDF) 6 сентября 2015 г.. Получено 28 апреля 2017.
  8. ^ Орфали, Роберт (1996). Основное руководство по выживанию клиент / сервер. Нью-Йорк: Wiley Computer Publishing. стр.399–403. ISBN  0-471-15325-7.
  9. ^ Островски К., Бирман К., Долев Д. и Анн Дж. (2008). «Программирование с живыми распределенными объектами», Материалы 22-й Европейской конференции по объектно-ориентированному программированию, Пафос, Кипр, 07–11 июля 2008 г., J. Vitek, Ed., Конспект лекций по информатике, т. 5142, Springer-Verlag, Берлин, Гейдельберг, 463-489, http://portal.acm.org/citation.cfm?id=1428508.1428536.
  10. ^ Бернерс-Ли, Тим; Джеймс Хендлер; Ора Лассила (17 мая 2001 г.). «Семантическая сеть Web. Новая форма веб-контента, значимая для компьютеров, откроет революцию новых возможностей». Scientific American. 284: 34–43. Дои:10.1038 / scientificamerican0501-34. Архивировано из оригинал 24 апреля 2013 г.
  11. ^ Knublauch, Holger; Оберле, Даниэль; Тетлоу, Фил; Уоллес, Эван (2006-03-09). «Учебник по семантической паутине для разработчиков объектно-ориентированного программного обеспечения». W3C. Получено 2008-07-30.
  12. ^ Таблица извлечена из таблиц в: http://www.w3.org/2001/sw/BestPractices/SE/ODSD/

внешняя ссылка