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

Я знаю, что этот вид вопроса был спрошенный прежде, но я все еще чувствую, что ответ слишком неоднозначен для меня (и, следовательно, некоторый/больше всего новички) для схватывания.

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

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

Кроме того, я борюсь с понятием "объекта" и "экземпляра". Много ресурсов, которые я считал (включая ответы в ТАК) говорит, что они - в основном то же и что различие находится в семантике. Другие люди говорят, что существует истинное концептуальное различие между двумя.

Могут эксперты здесь в ТАК справке, у новичка есть это "ага" момент для продвижения в мире ООП?

Еще раз спасибо.

Примечание: это не домашняя работа, я не иду в школу - однако, я думаю, что она помогла бы людям, которые ищут справку домашней работы.

76
задан Community 23 May 2017 в 11:55
поделиться

8 ответов

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

124
ответ дан 24 November 2019 в 11:09
поделиться

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

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

0
ответ дан 24 November 2019 в 11:09
поделиться

Давайте сравним яблоки с яблоками. Все мы знаем, что такое яблоко. На что это похоже. Какой у него вкус. Это класс. Это определение вещи. Это то, что мы знаем о предмете.

А теперь иди и найди яблоко. Это пример. Мы это видим. Мы можем попробовать это на вкус. Мы можем что-то с этим делать. Это то, что у нас есть.

Class = Что мы о чем-то знаем. Определение.

Объект / Экземпляр = Что-то, что соответствует тому определению, которое у нас есть, и с которым мы можем что-то делать.

0
ответ дан 24 November 2019 в 11:09
поделиться

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

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

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

Надеюсь, это проясняет ситуацию.

5
ответ дан 24 November 2019 в 11:09
поделиться

Объект - это экземпляр класса (для языков на основе классов).

Я думаю, что это самое простое объяснение, которое я могу придумать.

5
ответ дан 24 November 2019 в 11:09
поделиться

Я думаю, что важно отметить, что обычно есть две вещи. План и копии. Люди склонны называть эти разные вещи; классы, объекты, экземпляры - это лишь некоторые из названий, которые люди используют для них. Важно то, что есть чертеж и его копии - вне зависимости от названий. Если у вас уже есть понимание этих двоих, просто избегайте других вещей, которые вас сбивают с толку.

1
ответ дан 24 November 2019 в 11:09
поделиться

enter image description here

Объекты - это вещи в памяти, а экземпляры - это вещи, которые ссылаются на них. На рисунке выше:

  • std(instance) -> объект студент (справа)
  • std1(instance) -> объект студент (слева)
  • std2(instance) -> объект студент (слева)
  • std3(instance) -> нет объекта (null)
12
ответ дан 24 November 2019 в 11:09
поделиться

Мне всегда нравилась идея приравнять определение класса к определению "Абстрактного типа данных". То есть, когда вы определяете класс, вы определяете новый тип "чего-то", его представление типа данных в терминах примитивов и других "чего-то", и его поведение в терминах функций и/или методов. (Извините за общность и формализм)

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

Иногда термины объект и инстанс взаимозаменяемы. Некоторые пуристы ООП будут утверждать, что все является объектом, я не буду жаловаться, но в реальном мире ООП мы, разработчики, используем два понятия:

  1. Класс: Абстрактный образец типа данных, из которого можно выводить другие ADT и создавать объекты.
  2. Объекты: Также называемые экземплярами, представляют собой конкретные примеры структур данных и функций, представленных данным Абстрактным типом данных.
0
ответ дан 24 November 2019 в 11:09
поделиться