Я знаю, что этот вид вопроса был спрошенный прежде, но я все еще чувствую, что ответ слишком неоднозначен для меня (и, следовательно, некоторый/больше всего новички) для схватывания.
Я пытался преподавать мне более широкое понятие программирования, чем процедурное и основное ООП. Я понимаю конкретное понятие ООП (Вы делаете класс, который имеет данные (участники) и функции (методы), и затем инстанцируйте того класса во время выполнения, чтобы на самом деле сделать материал, такую вещь).
Я думаю, что у меня есть дескриптор на том, что класс (вид проекта дизайна экземпляра, который будет создан в его сходстве во время компиляции). Но если это так, что такое объект? Я также знаю, что на основанных на прототипе языках, это может испачкать вещи еще больше, но возможно это - то, почему должно быть ясное различие между объектом и экземпляром в моем уме.
Кроме того, я борюсь с понятием "объекта" и "экземпляра". Много ресурсов, которые я считал (включая ответы в ТАК) говорит, что они - в основном то же и что различие находится в семантике. Другие люди говорят, что существует истинное концептуальное различие между двумя.
Могут эксперты здесь в ТАК справке, у новичка есть это "ага" момент для продвижения в мире ООП?
Еще раз спасибо.
Примечание: это не домашняя работа, я не иду в школу - однако, я думаю, что она помогла бы людям, которые ищут справку домашней работы.
Чертеж проекта дома похож на описание класса. Все дома, построенные по этому чертежу, являются объектами этого класса. Данный дом является экземпляром.
В некоторых случаях термин «объект» может использоваться для описания экземпляра, но в других случаях он используется для описания ссылки на экземпляр. Термин «экземпляр» относится только к фактическому экземпляру.
Например, список можно описать как набор объектов, но на самом деле он содержит ссылки на экземпляры объектов.
Давайте сравним яблоки с яблоками. Все мы знаем, что такое яблоко. На что это похоже. Какой у него вкус. Это класс. Это определение вещи. Это то, что мы знаем о предмете.
А теперь иди и найди яблоко. Это пример. Мы это видим. Мы можем попробовать это на вкус. Мы можем что-то с этим делать. Это то, что у нас есть.
Class = Что мы о чем-то знаем. Определение.
Объект / Экземпляр = Что-то, что соответствует тому определению, которое у нас есть, и с которым мы можем что-то делать.
Класс определяет объект. Во многих языках можно пойти еще дальше и сказать, что интерфейс определяет общие атрибуты и методы между объектами.
Объект - это то, что может представлять что-то в реальном мире. Если вы хотите, чтобы объект на самом деле представлял что-то в реальном мире, этот объект должен быть создан. Создание экземпляра означает, что вы должны определить характеристики (атрибуты) этого конкретного объекта, обычно через конструктор.
После того, как вы определили эти характеристики, у вас теперь есть экземпляр объекта.
Надеюсь, это проясняет ситуацию.
Объект - это экземпляр класса (для языков на основе классов).
Я думаю, что это самое простое объяснение, которое я могу придумать.
Я думаю, что важно отметить, что обычно есть две вещи. План и копии. Люди склонны называть эти разные вещи; классы, объекты, экземпляры - это лишь некоторые из названий, которые люди используют для них. Важно то, что есть чертеж и его копии - вне зависимости от названий. Если у вас уже есть понимание этих двоих, просто избегайте других вещей, которые вас сбивают с толку.
Объекты - это вещи в памяти, а экземпляры - это вещи, которые ссылаются на них. На рисунке выше:
Мне всегда нравилась идея приравнять определение класса к определению "Абстрактного типа данных". То есть, когда вы определяете класс, вы определяете новый тип "чего-то", его представление типа данных в терминах примитивов и других "чего-то", и его поведение в терминах функций и/или методов. (Извините за общность и формализм)
Всякий раз, когда вы определяете класс, вы открываете новую возможность для определения определенных сущностей с его свойствами и поведением, когда вы инстанцируете и/или создаете из него конкретный объект, вы фактически материализуете эту возможность.
Иногда термины объект и инстанс взаимозаменяемы. Некоторые пуристы ООП будут утверждать, что все является объектом, я не буду жаловаться, но в реальном мире ООП мы, разработчики, используем два понятия: