В чем разница между объектом и экземпляром? - PullRequest
5 голосов
/ 18 февраля 2010

Я хотел бы знать разницу между объектом и экземпляром класса. Я чувствую, что оба одинаковы, но почему мы называем с двумя именами. Кто-нибудь может объяснить на примере реальной жизни?

Ответы [ 10 ]

9 голосов
/ 18 февраля 2010

Это одно и то же в большинстве объектно-ориентированных языков. «Экземпляр класса» - это то, как определяется термин «объект».

5 голосов
/ 18 февраля 2010

Просто для полноты: В языках программирования, основанных на прототипах , не проводится никаких различий между классами и экземплярами / объектами .

Давайте сделаем шаг назад, если вы зададите этот вопрос, скорее всего, вы знаете только объектную ориентацию на основе классов.Это вроде как работает.

  1. Class говорит вам, что вы хотите иметь (схема данных) и как вы хотите работать с ней (методы).
  2. СоздатьObject заполните его необходимыми данными (данными) и используйте определенные с ним операции.

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

4 голосов
/ 19 февраля 2010

Термины «объект», «объект класса» и «экземпляр» имеют только исторические различия. В настоящее время в Wiki есть даже одна статья для всего этого:

Здесь дополнительные доказательства того, что термины «объект» и «экземпляр» являются квалами (из «Построения объектно-ориентированного программного обеспечения» Бертрана Мейера):

Объект, принадлежащий набору объектов, описанных в спецификации ADT, называется экземпляром ADT. Например, конкретный стек, который удовлетворяет свойствам абстрактного типа данных STACK, будет экземпляром STACK.

Как и ADT, класс является типом: он описывает набор возможных структур данных, называемых экземпляры класса. У абстрактных типов данных тоже есть экземпляры; разница в том, что экземпляр ADT является чисто математическим элементом (членом некоторых математических набор), тогда как экземпляр класса представляет собой структуру данных, которая может быть представлена ​​в память компьютера и управляется программной системой.

Определение «класс» дает в качестве побочного продукта определение «объекта». Объект просто экземпляр некоторого класса . Например, экземпляр класса STACK - данные структура, представляющая определенный стек - это объект; так же экземпляр класса POINT, представляющий конкретную точку в двумерном пространстве.

4 голосов
/ 18 февраля 2010

(Изменить: у этого вопроса изначально был тег "java". Таким образом, язык без классов был вне контекста.)

Объект

Шаблон (образец) класса. Класс Dog определяет всех возможных собак по список характеристик и поведение, которое они могут иметь; предмет Лэсси одна особая собака, с конкретные версии характеристики. У собаки есть мех; девчурка имеет коричнево-белый мех.

Экземпляр

Можно иметь экземпляр класса; экземпляр является фактическим объектом создан во время выполнения. В программист Жаргон, объект Лесси экземпляр класса Dog. Набор Значения атрибутов конкретный объект называется его состоянием. Объект состоит из государства и поведение, которое определено в класс объекта.

( Википедия, объектно-ориентированное программирование )

3 голосов
/ 18 февраля 2010

Они одинаковы. В контексте «экземпляр» подчеркивает тот факт, что он является экземпляром определения класса; «объект» подчеркивает тот факт, что это уникальная сущность.

2 голосов
/ 18 февраля 2010

Объект - более общий термин. C использует термин объект, хотя у него вообще нет классов - с его точки зрения любая переменная (например) является объектом.

Некоторые объектно-ориентированные языки также не имеют классов. Класс - это способ указания свойств объектов; все объекты данного класса разделяют эти свойства. Однако в некоторых языках (например, Javascript, Self) вам не нужно указывать эти свойства в классе. Вместо этого начните с одного объекта («образца»), с которого вы клонируете новый объект, и модифицируете его по своему усмотрению. Когда / если вы создаете несколько объектов без их изменения, вы можете получить «класс» в некотором смысле (объекты с одинаковыми свойствами), но это более или менее случайность.

2 голосов
/ 18 февраля 2010

Они практически одинаковы в этом контексте. «Объект» может использоваться как более общий / расплывчатый термин, «экземпляр» обычно используется более конкретно как «экземпляр класса».

1 голос
/ 18 февраля 2010

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

См. Этот пункт в Википедии :

На языке, где каждый объект создается из класса, объект называется экземпляром этого класса. Если у каждого объекта есть тип, два объекта с одним и тем же классом будут иметь одинаковый тип данных. Создание экземпляра класса иногда называется созданием экземпляра класса.

Реальным примером объекта может быть «моя собака», которая является экземпляром типа (класса) с именем «собака», который является подклассом класса «животное».

1 голос
/ 18 февраля 2010

Я могу лучше всего это проиллюстрировать на python, так что вот так: В Python вы можете создать класс. Давайте назовем это классом Person. Затем вы создаете экземпляр класса Person. Давайте назовем его Боб. Так что bob = Person(). Дело в том, что и bob, и Person являются объектами. Когда вы делаете Person(), вы фактически вызываете конструктор для объекта Person class , который дает вам экземпляр объект, а именно bob.

1 голос
/ 18 февраля 2010

То же самое: «объект» на самом деле является «экземпляром класса».

...