Каково различие между объектом и экземпляром?

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

5
задан Pascal Thivent 18 February 2010 в 17:03
поделиться

10 ответов

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

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

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

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

5
ответ дан 18 December 2019 в 05:36
поделиться

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

9
ответ дан 18 December 2019 в 05:36
поделиться

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

Вот дополнительные доказательства того, что термины "объект" и "экземпляр" являются квалами (из "Object-Oriented Software Construction" Bertran Meyer):

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

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

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

4
ответ дан 18 December 2019 в 05:36
поделиться

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

Объект

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

Экземпляр

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

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

4
ответ дан 18 December 2019 в 05:36
поделиться

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

3
ответ дан 18 December 2019 в 05:36
поделиться

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

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

2
ответ дан 18 December 2019 в 05:36
поделиться

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

1
ответ дан 18 December 2019 в 05:36
поделиться

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

1
ответ дан 18 December 2019 в 05:36
поделиться

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

2
ответ дан 18 December 2019 в 05:36
поделиться

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

См. Этот абзац в Википедии :

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

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

1
ответ дан 18 December 2019 в 05:36
поделиться