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