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


95

В чем разница между экземпляром и объектом? Есть разница или нет?


10
Может быть, вы сможете сделать вывод из хорошо известного сообщения об ошибке «Ссылка на объект не установлена ​​на экземпляр объекта ». : ->
herzmeister

Из спецификации JVM: «Объект - это либо динамически выделяемый экземпляр класса, либо массив». Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon 04

StackOverFlow Я только что дал краткое описание разницы между объектом и экземпляром. Надеюсь, это поможет
Пушкаррадж Пуджари

1
Объект - это экземпляр класса. Это все, что нужно сделать.
Marquis of Lorne

Ответы:


59

Экземпляр и объект взяты из объектно-ориентированного программирования .

Для некоторых языков программирования, таких как Java, C ++ и Smalltalk, важно описывать и понимать код. В других языках, используемых в структурированном программировании, этой концепции нет.

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

ОБНОВЛЕНИЕ Что касается Swift, то вот что предпочитает Apple, изобравшая Swift:

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


19

Отличный вопрос.

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

В терминах программирования у вас может быть класс под названием Apple, который имеет переменные size: big, shape: round, environment: растет на деревьях. Чтобы в вашей корзине было 5 яблок, вам нужно создать экземпляр 5 яблок. Apple apple1, Apple apple2, Apple apple3 etc....

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

Имеет ли это смысл?


62
Это не так. :) «Объекты - это определения чего-то» То, что вы здесь называете объектами, - это классы.
T-Gergely

11

Экземпляр: экземпляр означает просто создание ссылки (копии).

object: означает, что место в памяти связано с объектом (является исполняемой сущностью класса) с помощью оператора new.

Проще говоря, Instance относится к копии объекта в определенное время, тогда как object относится к адресу памяти класса.


1
сказав, что экземпляр - это ссылка на объект, я действительно многое прояснил.
John C

4
@JohnC Не должно, потому что это неверно. Объект - это экземпляр класса. Это все, что нужно сделать.
Marquis of Lorne

8

Допустим, вы строите стулья.

Схема, на которой показано, как построить стул и собрать его, соответствует классу программного обеспечения.

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

У каждого стула есть уникальный номер, нанесенный на дно сиденья, чтобы идентифицировать каждый конкретный стул. Стул 3 - это один из примеров выкройки стула. Аналогично, ячейка 3 памяти может содержать один экземпляр программного шаблона.

Итак, экземпляр (стул 3) - это единственное уникальное, конкретное проявление рисунка стула.


3
Объект - это экземпляр класса. Экземпляр не является экземпляром объекта. Ответ бессмысленный.
Marquis of Lorne

1
Вау, через девять лет кто-то наконец указал на ошибку в моем объяснении. Благодарность! Теперь лучше?
Брайан Шоуолтер

7

Объект :

Это общий термин, в основном это пакет программного обеспечения, который имеет состояние (переменные) и поведение (методы).

Класс :

Чертеж (шаблон) для экземпляра объекта - это уникальный объект, например, вы создаете объект два раза, что означает, что вы создали два экземпляра

Приведу пример

Class student()
{
   private string firstName;
  public student(string fname)
  {
    firstName=fname;
  }
  Public string GetFirstName()
  {
    return firstName;
  }
}

Пример объекта :

Студент s1 = новый студент («Мартин»); Студент s2 = новый студент («Кумар»);

S1, s2 имеют объект класса Student

Экземпляр :

s1 и s2 - экземпляры объекта student, они уникальны .

его также можно назвать ссылкой .

в основном s1 и s2 - это переменные, которым назначен объект


1
Объект - это экземпляр класса.
Marquis of Lorne

7

Объекты и экземпляры в основном одинаковы; но есть очень небольшая разница. Если Carэто класс, 3 Cars - это 3 разных объекта. Все эти объекты являются экземплярами. Итак, эти 3 машины являются объектами из экземпляров Carкласса.

Но слово «экземпляр» может также означать «экземпляр структуры». Но объект только для классов.

Все объекты являются экземплярами. Не все экземпляры должны быть объектами. Экземпляры могут быть «экземплярами структуры» или «объектами». Надеюсь, это поможет вам понять разницу.


3

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

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

Представьте себе продукт, похожий на компьютер.

Рабочая станция xw6400 - это объект

ВАША рабочая станция xw6400 (или рабочая станция xw6400 ВАШЕЙ ЖЕНЫ) является экземпляром объекта рабочей станции xw6400


1
Ваш первый и второй абзацы описывают классы, а не объекты.
Marquis of Lorne

2

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

Я думаю, что лучше всего это изображено в javascript:

let obj= {"poo":1} 
// "obj" is an object

стихи

Class Trash {
    constructor(){this.poo = 1;}
}

let i = new Trash();
// "i" is an instance

1

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


1

Если мы увидим определение объекта и объекта-экземпляра -

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

Давайте посмотрим определение экземпляра -

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

Теперь поймите значение любого выделения памяти во время выполнения, которое происходит в C также через Malloc, Calloc, Realloc, например:

struct p
{

}
p *t1
t1=(p) malloc(sizeof(p))

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


Где-то здесь скрывается правильный ответ, но язык нужно очистить и упростить.
Marquis of Lorne

1

Объект - экземпляр класса, который имеет собственное состояние и доступ ко всему поведению, определенному его классом.

Экземпляр - ссылка на область памяти для этого конкретного класса.


1

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

// Design Class
class HumanClass {
    var name:String
    init(name:String) {
        self.name = name
    }
}

var humanClassObject1 = HumanClass(name: "Rehan") 

Теперь левая сторона, то есть: «humanClassObject1» - это объект, а правая сторона, например: HumanClass (имя: «Rehan») - это экземпляр этого объекта.

var humanClassObject2 = HumanClass(name: "Ahmad") // again object on left and it's instance on the right.

Таким образом, экземпляр содержит определенные значения для этого объекта, а объекты содержат местоположение в памяти (во время выполнения).

Помните известное утверждение «ссылка на объект не установлена ​​на экземпляр объекта», это означает, что у неинициализированных объектов нет экземпляра. В некоторых языках программирования, таких как swift, компилятор не позволит вам даже создать класс, у которого нет возможности инициализировать все его члены (переменные, например: имя, возраст и т. Д.), Но на некоторых языках вы можете сделать это:

// Design Class
class HumanClass {
    var name:String // See we don't have any way to initialise name property.
}

И ошибка будет отображаться только во время выполнения, когда вы попытаетесь сделать что-то вроде этого:

var myClass = HumanClass()
print(myClass.name) // will give, object reference not set to an instance of the object.

Эта ошибка указывает на то, что конкретные значения (для переменных \ свойства) - это «ЭКЗЕМПЛЯР», как я пытался объяснить это выше! И объект, то есть: «myClass», содержит ячейку памяти (во время выполнения).


1

Когда объявляется переменная пользовательского типа (класса), создается только ссылка, которая называется объектом. На этом этапе этому объекту не выделяется память . Он действует как указатель (на место, где объект будет храниться в будущем). Этот процесс называется «Декларация».

Employee e; // e is an object

С другой стороны, когда переменная настраиваемого типа объявляется с использованием newоператора, который выделяет память в куче этому объекту и возвращает ссылку на выделенную память. Этот объект, который теперь называется экземпляром . Этот процесс называется «создание экземпляра».

Employee e = new Employee(); // e is an instance

С другой стороны, в некоторых языках, таких как Java, объект эквивалентен экземпляру, как видно из строки, написанной в документации Oracle по Java :

Примечание. Фраза «создание экземпляра класса» означает то же самое, что и «создание объекта». Когда вы создаете объект, вы создаете «экземпляр» класса, следовательно, «инстанцируете» класс.


0

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


0

Класс: Класс - это предварительный план. Объект: это копия класса. Экземпляр: это переменная, которая используется для хранения адреса памяти объекта.

Очень простой аналитический пример

Классный дом -> План дома. Но вы не можете жить на свету. Вам нужен физический дом, который является экземпляром класса, в котором вы будете жить. Т.е. фактический адрес объекта - это экземпляр. Экземпляры представляют собой объекты.


Экземпляр относится к объекту, а не к переменной.
Marquis of Lorne

0

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

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

Также можно прочитать раздел «Внутренние классы» этого java-документа о вложенных классах - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Java - это объектно-ориентированный язык программирования (ООП). Это означает, что все в Java, кроме примитивных типов, является объектом.

Теперь объекты Java похожи на объекты реального мира. Например, мы можем создать объект автомобиля в Java, который будет иметь такие свойства, как текущая скорость и цвет; и поведение вроде: ускоряйся и паркуйся.

Это Объект .

введите описание изображения здесь

С другой стороны, экземпляр - это уникально инициализированная копия того объекта, который выглядит так Car car = new Car().

Ознакомьтесь с ним, чтобы узнать больше о классах и объектах Java.


Объект - это экземпляр класса.
Marquis of Lorne

0

Быстрый и простой ответ

  • Класс : спецификация, чертеж объекта
  • Объект : физическое присутствие класса в памяти
  • Экземпляр : уникальная копия объекта (та же структура, разные данные)

-1

Что касается разницы между an objectи an instance, я не думаю, что существует какой-либо консенсус.

Мне кажется, что люди меняют это в значительной степени взаимозаменяемо в статьях, сообщениях в блогах, книгах или разговорах.

На мой взгляд, объект - это общая и живая сущность в памяти, заданная языком, на котором он используется. Точно так же, как Objectкласс в Java. Нас не очень заботит его тип или что-либо еще, что с ним связано, независимо от того, управляется ли он контейнером или нет.

An instance- это objectно, связанное с типом, например this method accepts Foo instances, или you can not put Animal instances in an instance of a List of Vehicles.

objects, например, locksсвязаны с ними, а не instances, тогда как instances имеют методы. objectsсобираются мусором, а не instanceс.

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


-1

Объект - это общая вещь, например, возьмите линейную функцию в математике.

ax + b - это объект, а 3x + 2 - это экземпляр этого объекта

Объект <<< Экземпляр

Общие <<< Особые

Больше в этом нет ничего


-2

Объект может быть классом, скажем, у вас есть класс под названием баскетбол.

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

скажем, баскетбол1 и баскетбол2. Затем вы запускаете свое приложение. Теперь у вас есть 2 экземпляра объектного баскетбола.


Это означало бы, что объект является экземпляром конструктора классов?
уличный парад

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

@Darxval, тогда что такое класс
Чианит Сингх

-3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.