В информатике , объект может быть переменным , в структуру данных , а функция , или способ , и, таким образом , является значение в памяти ссылается на идентификаторе .
В объектно-ориентированном программировании парадигмы , объект может быть комбинацией переменных, функций и структуры данных; в частности , в основе классов вариаций парадигмы это относится к конкретному примеру из в классе .
В реляционной модели управления базой данных объектом может быть таблица или столбец , или связь между данными и сущностью базы данных (например, связь возраста человека с конкретным человеком). [1]
Объектно-ориентированные языки
Важным отличием языков программирования является разница между объектно-ориентированным языком и объектно-ориентированным языком. Язык обычно считается объектно-ориентированным, если он включает в себя базовые возможности объекта: идентификацию, свойства и атрибуты. Язык считается объектно-ориентированным, если он основан на объектах, а также имеет возможность полиморфизма , наследования, инкапсуляции и, возможно, композиции. Полиморфизм относится к способности перегрузить имя функции несколькими поведениями в зависимости от того, какие объекты ей передаются. Обычная передача сообщений различает только первый объект и считает, что это «отправка сообщения» этому объекту. Однако некоторые языки ООП, такие как Flavors и Common Lisp Object System (CLOS), позволяют различать больше, чем первый параметр функции. [2] Наследование - это возможность создать подкласс объектного класса, создать новый класс, который является подклассом существующего и наследует все ограничения данных и поведение своих родителей, но также добавляет новые и / или изменяет один или несколько из них. . [3] [4]
Объектно-ориентированное программирование
Объектно-ориентированное программирование - это подход к разработке модульных программных систем многократного использования. Объектно-ориентированный подход - это эволюция хороших методов проектирования, восходящих к самым истокам компьютерного программирования. Объектная ориентация - это просто логическое продолжение старых методов, таких как структурированное программирование и абстрактные типы данных . Объект - это абстрактный тип данных с добавлением полиморфизма и наследования .
Вместо того, чтобы структурировать программы в виде кода и данных, объектно-ориентированная система объединяет их, используя концепцию «объекта». У объекта есть состояние (данные) и поведение (код). Объекты могут соответствовать вещам, найденным в реальном мире. Так, например, графическая программа будет иметь такие объекты, как круг , квадрат , меню . Система онлайн-покупок будет иметь такие объекты, как корзина, покупатель, продукт . Система покупок будет поддерживать такие действия, как размещение заказа , оплата и предложение скидки . Объекты спроектированы как иерархии классов. Так, например , с покупками системы может существовать классы высокого уровня , такие как электроника продукт , кухонный продукт , и книга . Могут быть внесены дополнительные уточнения, например, в электронные продукты : проигрыватель компакт-дисков, проигрыватель DVD и т. Д. Эти классы и подклассы соответствуют наборам и подмножествам в математической логике. [5] [6]
Специализированные объекты
Важным понятием для объектов является шаблон проектирования . Шаблон проектирования предоставляет шаблон многократного использования для решения общей проблемы. Следующие ниже описания объектов являются примерами некоторых из наиболее распространенных шаблонов проектирования для объектов. [7]
- Функциональный объект : объект с единственным методом (в C ++ этот метод будет оператором функции «operator ()»), который действует во многом как функция (например, указатель C / C ++ на функцию).
- Неизменяемый объект : объект, настроенный с фиксированным состоянием во время создания и который не изменяется впоследствии.
- Первоклассный объект : объект, который можно использовать без ограничений.
- Объект-контейнер : объект, который может содержать другие объекты.
- Фабричный объект : объект, предназначенный для создания других объектов.
- Метаобъект : объект, из которого могут быть созданы другие объекты (сравните с классом , который не обязательно является объектом).
- Объект-прототип : специализированный метаобъект, из которого могут быть созданы другие объекты путем копирования
- Бог возражает : объект, который знает или делает слишком много (это пример антипаттерна ).
- Одноэлементный объект : объект, который является единственным экземпляром своего класса за время существования программы.
- Объект фильтра : объект, который получает поток данных на входе и преобразует его в выходные данные объекта. Часто потоки ввода и вывода являются потоками символов, но они также могут быть потоками произвольных объектов. Обычно они используются в оболочках, поскольку они скрывают существующую реализацию с абстракцией, необходимой на стороне разработчика.
Распределенные объекты
Объектно-ориентированный подход - это не просто модель программирования. Его можно одинаково хорошо использовать в качестве языка определения интерфейсов для распределенных систем. Объекты в модели распределенных вычислений имеют тенденцию быть более крупнозернистыми, долговечными и более ориентированными на службы, чем объекты программирования.
Стандартный метод упаковки распределенных объектов - через язык определения интерфейса (IDL). IDL защищает клиента от всех деталей объекта распределенного сервера. Подробная информация, например, на каком компьютере находится объект, какой язык программирования он использует, какая операционная система и другие проблемы, связанные с платформой. IDL также обычно является частью распределенной среды, которая предоставляет услуги, такие как транзакции и постоянство, для всех объектов единообразным образом. Два из наиболее популярных стандартов для распределенных объектов являются Object Group Management «s CORBA стандарт и Microsoft » s DCOM. [8]
В дополнение к распределенным объектам был предложен ряд других расширений базовой концепции объекта для обеспечения распределенных вычислений:
- Объекты протокола - это компоненты стека протоколов, которые заключают сетевое взаимодействие в объектно-ориентированный интерфейс.
- Реплицированные объекты - это группы распределенных объектов (называемых репликами ), которые запускают распределенный многосторонний протокол для достижения высокой согласованности между их внутренними состояниями и скоординированно отвечают на запросы. Примеры включают отказоустойчивыеобъекты CORBA .
- Живые распределенные объекты (или просто живые объекты ) [9] обобщаютконцепцию реплицированного объекта на группы реплик, которые могут внутренне использовать любой распределенный протокол, что, возможно, приводит только к слабой согласованности между их локальными состояниями.
Некоторые из этих расширений, такие как распределенные объекты и объекты протокола , являются предметными терминами для специальных типов «обычных» объектов, используемых в определенном контексте (например, вызов удаленного метода или состав протокола ). Другие, такие как реплицированные объекты и живые распределенные объекты , являются более нестандартными, поскольку они отказываются от обычного случая, когда объект находится в одном месте одновременно, и применяют концепцию к группам сущностей (репликам), которые могут охватывать в нескольких местах, может иметь только слабо согласованное состояние и членство в котором может динамически меняться.
Семантическая сеть
Semantic Web , по существу , основа распределенных объектов. Две ключевые технологии в семантической сети - это язык веб-онтологий (OWL) и структура описания ресурсов (RDF). RDF предоставляет возможность определять основные объекты - имена, свойства, атрибуты, отношения, - которые доступны через Интернет. OWL добавляет более богатую объектную модель, основанную на теории множеств, которая обеспечивает дополнительные возможности моделирования, такие как множественное наследование .
Объекты OWL не похожи на стандартные крупномасштабные распределенные объекты, доступ к которым осуществляется через язык определения интерфейсов. Такой подход не подходит для Интернета, потому что Интернет постоянно развивается, а стандартизация одного набора интерфейсов является труднодостижимой. Объекты OWL, как правило, похожи на типы объектов, используемые для определения моделей предметной области в таких языках программирования, как Java и C ++ .
Однако есть важные различия между объектами OWL и объектами традиционного объектно-ориентированного программирования. Традиционные объекты компилируются в статические иерархии обычно с единичным наследованием, но объекты OWL являются динамическими. Объект OWL может изменять свою структуру во время выполнения и может стать экземпляром новых или других классов.
Еще одно важное отличие состоит в том, как модель обрабатывает информацию, которой в настоящее время нет в системе. Объекты программирования и большинство систем баз данных используют « допущение замкнутого мира ». Если факт неизвестен системе, этот факт считается ложным. Объекты семантической паутины используют предположение об открытом мире , утверждение считается ложным только в том случае, если есть актуальная релевантная информация о том, что оно ложно, в противном случае оно считается неизвестным, ни истинным, ни ложным.
Объекты OWL на самом деле больше всего похожи на объекты в фреймовых языках искусственного интеллекта, таких как KL-ONE и Loom.
Следующая таблица противопоставляет традиционные объекты объектно-ориентированных языков программирования, таких как Java или C ++, объектам семантической сети: [10] [11]
Объекты ООП | Объекты семантической сети |
---|---|
Классы рассматриваются как типы для экземпляров. | Классы рассматриваются как наборы индивидов. |
Экземпляры не могут изменять свой тип во время выполнения. | Членство в классе может измениться во время выполнения. |
Список классов полностью известен во время компиляции и не может измениться после этого. | Классы можно создавать и изменять во время выполнения. |
Компиляторы используются во время сборки. Ошибки времени компиляции указывают на проблемы. | Reasoners можно использовать для классификации и проверки согласованности во время выполнения или сборки. |
Классы кодируют большую часть своего значения и поведения с помощью императивных функций и методов. | Классы делают свое значение явным в терминах операторов OWL. Никакой императивный код не может быть добавлен. |
Экземпляры анонимны постольку, поскольку к ним нельзя легко обратиться извне выполняющейся программы. | Все именованные ресурсы RDF и OWL имеют уникальный URI, по которому на них можно ссылаться. |
Закрытый мир: если недостаточно информации, чтобы доказать истинность утверждения, то оно считается ложным. | Открытый мир: если информации недостаточно, чтобы доказать истинность утверждения, оно может быть истинным или ложным. [12] |
Смотрите также
- Время жизни объекта
- Копия объекта
- Шаблон проектирования (информатика)
- Бизнес-объект (информатика)
- Актерская модель
Рекомендации
- ^ Оппель, Энди (2005). Разоблачение тайны SQL . Макгроу Хилл. п. 7. ISBN 0-07-226224-9.
- ^ Габриэль, Ричард; Линда Дж. ДеМичи. «Система объектов Common Lisp: обзор» (PDF) . Lucid Inc. Технический отчет .
- ^ Вегнер, Питер (декабрь 1987 г.). Мейровиц, Норман (ред.). «Измерения объектно-ориентированного языкового дизайна». Материалы конференции OOPSLA'87 . 22 (12): 168–182. DOI : 10.1145 / 38807.38823 .
- ^ Барби, S; М. Кемпе; А. Штромайер (1993). «Объектно-ориентированное программирование с помощью Ada 9X» . Проект технического отчета . Швейцарский федеральный технологический институт в лаборатории программной инженерии Лозанны . Проверено 15 декабря 2013 года .
Сама Ada 83 обычно не считается объектно-ориентированной; скорее, согласно терминологии Вегнера [Weg 87], он называется объектно-ориентированным, поскольку обеспечивает только ограниченную форму наследования и не имеет полиморфизма.
- ^ Якобсен, Ивар; Магнус Кристерсон; Патрик Йонссон; Гуннар Овергаард (1992). Объектно-ориентированная разработка программного обеспечения . Эддисон-Уэсли ACM Press. ISBN 0-201-54435-0.
- ^ "Что такое объект?" . oracle.com . Корпорация Oracle . Проверено 13 декабря 2013 года .
- ^ Мартин, Роберт С. «Принципы проектирования и шаблоны проектирования» (PDF) . Архивировано из оригинального (PDF) 6 сентября 2015 года . Проверено 28 апреля 2017 года .
- ^ Орфали, Роберт (1996). Основное руководство по выживанию клиент / сервер . Нью-Йорк: Wiley Computer Publishing. С. 399–403 . ISBN 0-471-15325-7.
- ^ Ostrowski, К., Бирман, К., Dolev, Д. и Ahnn, J. (2008). «Программирование с использованием динамических распределенных объектов», Труды 22-й Европейской конференции по объектно-ориентированному программированию , Пафос, Кипр, 7–11 июля 2008 г., под ред. Дж. Витека, Lecture Notes in Computer Science , vol. 5142, Springer-Verlag, Berlin, Heidelberg, 463-489, http://portal.acm.org/citation.cfm?id=1428508.1428536 .
- ^ Бернерс-Ли, Тим; Джеймс Хендлер; Ора Лассила (17 мая 2001 г.). «Семантическая паутина. Новая форма веб-контента, значимая для компьютеров, откроет революцию новых возможностей» . Scientific American . 284 : 34–43. DOI : 10.1038 / Scientificamerican0501-34 . Архивировано из оригинального 24 апреля 2013 года .
- ^ Knublauch, Holger; Оберле, Даниэль; Тетлоу, Фил; Уоллес, Эван (2006-03-09). «Учебник по семантической паутине для разработчиков объектно-ориентированного программного обеспечения» . W3C . Проверено 30 июля 2008 .
- ^ Таблица извлечена из таблиц в: http://www.w3.org/2001/sw/BestPractices/SE/ODSD/
Внешние ссылки
- Что такое объект? из Учебников по Java
- Как объединить два или более объекта php