Разница между объектом и экземпляром - PullRequest
74 голосов
/ 24 июля 2010

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

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

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

Помимо этого, я борюсь спонятия «объект» и «экземпляр».Многие ресурсы, которые я читал (включая ответы в SO), говорят, что они в основном одинаковы, и что разница заключается в семантике.Другие люди говорят, что между этими двумя понятиями есть реальная концептуальная разница.

Могут ли эксперты из SO, помогающие новичку, иметь этот «ага» момент для продвижения вперед в мире ООП?

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

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

Ответы [ 18 ]

0 голосов
/ 24 января 2013

Объект: когда мы создаем объект, некоторая память занята этим объектом. Ex: Test t = new Test (); // здесь t - объект класса Test

Экземпляр: когда мы объявляемотдельная память экземпляра не занята этим экземпляром. Ex: Test t; // здесь t - экземпляр класса Test

0 голосов
/ 27 сентября 2015

Расширение одного из приведенных ранее примеров в этой теме ...

Рассмотрим сценарий. Требуется построить 5 домов по соседству для жилых целей.Все 5 домов имеют общую строительную архитектуру.Архитектура строительства: класс .Дом является объектом .Каждый дом, в котором находятся люди, является экземпляром .

0 голосов
/ 26 февраля 2015

Для меня Существует небольшая разница между объектом и экземпляром

Например:

class1 obj;

здесь obj является экземпляром class1, который занимаетстековая память

class1 obj = new class1 ();

в этом случае obj является объектом класса1 и занимает кучу памяти

0 голосов
/ 25 января 2014

Просто скажите, что объект - это единственное объявление, которое не выделяет память.а instance - это объект класса, который выделяет память.

0 голосов
/ 24 июля 2010

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

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

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

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

0 голосов
/ 07 июля 2012

Объектно-ориентированное программирование - это системная метафора , которая помогает вам систематизировать знания, необходимые вашей программе, таким образом, чтобы вам было легче разрабатывать вашу программу.Когда вы выбираете программирование с использованием ООП, вы выбираете свои ООП-Google, и вы решаете, что вы увидите проблему реального мира, заключающуюся в том, что многие объекты взаимодействуют между собой, отправляя сообщения.Вместо того, чтобы видеть, как Парень ведет машину, вы видите, как Парень посылает сообщение машине с указанием того, что он хочет, чтобы машина делала.Автомобиль - это большой объект, и он ответит на это сообщение, отправив сообщение своему двигателю или колесу, чтобы иметь возможность правильно реагировать на то, что водитель сказал ему сделать в сообщении, и т. Д. *

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

  • Все эти парни ведут себя одинаково, поэтому я создам класс с именем Driver, который будет указывать, с кем будут вести себя все Драйверы в мире, потому что все они ведут себя одинаково.(И вы используете ООП на основе классов)
  • Или вы могли бы сказать, Эй!Второй водитель ведет себя так же, как и первый водитель, за исключением того, что ему нравится двигаться немного быстрее.И третий водитель ведет себя так же, как и первый водитель, за исключением того, что ему нравится зигзагообразно двигаться.(И вы используете основанный на прототипе ООП).

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

0 голосов
/ 24 июля 2010

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...