2010-02-18 3 views
5

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

+1

К сожалению, большинство этих ответов неверны. Так что прочитайте их все. –

+1

@ Еван Кэрролл - Кажется, я вижу вашу точку зрения, но это будет зависеть от языка, не так ли? Можно ли сказать, что «экземпляр» является подмножеством «объекта»? –

+0

@ Паскаль, заменяющий тег «java» «language-agnostic», добавил к этому вопросу новый уровень сложности. К сожалению, большинство ответов не соответствуют этой сложности. См. Комментарии к ответу Билла, например. – sfussenegger

ответ

2

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

1

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

9

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

+2

Нет, это не так. В противном случае javascript и все другие языки без классов (lua и т. Д.) Не будут иметь объектов. И они это делают. См. Ответ Дарио для самого правильного ответа здесь. –

+3

@Evan Carroll: Проверьте историю изменений вопроса. Когда я ответил, у меня был тэг 'java'. –

2

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

4

(Edit:. Этот вопрос изначально имел "Java" тег Так язык без классов были из области видимости.)

Объект

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

Instance

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

(Wikipedia, Object-oriented programming)

1

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

+1

И добавить в удовольствие - Лицо класса тоже объект. :) –

1

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

См этот пункт на Wikipedia:

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

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

+1

+1. Все остальные говорят, что «объект - это экземпляр класса», который является истинным; но они также говорят: «Так они и есть одно и то же». Не совсем. * класса * говорит нам, что «экземпляр» имеет отношения коннотации, отсутствующие в «объекте», хотя каждый объект * является * экземпляром одного (или на некоторых языках более) класса (ов). –

+0

На самом деле это не так. Некоторые языки реализуют объекты без классов. –

+0

@evan "на языке, где каждый объект создан из класса" – sfussenegger

2

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

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

5

Только для полноты: В prototype-based programming languages не проводится никаких различий между классами и экземплярами/объектами.

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

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

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

+0

Это необходимо для понимания вопроса и исключено из других ответов. Я думаю, что если бы ваш ответ по существу немного поправился, вы бы стали очевидным победителем. Большинство этих ответов ошибочны или удалены. Я тоже был прав, чтобы опубликовать эту ссылку. Вы можете создавать экземпляр объекта без объекта. Было бы бессмысленно говорить, что A - это экземпляр A и A - объект, но мы говорим, что A является экземпляром B и B является классом. –

+0

Не стесняйтесь редактировать – Dario

4

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

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

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

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

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

Смежные вопросы