У чому різниця між Екземпляром та Об’єктом?


92

У чому різниця між Екземпляром та Об’єктом? Є різниця чи ні?


10
Можливо, ви можете зробити висновок із відомого повідомлення про помилку "Посилання на об'єкт не встановлено як екземпляр об'єкта ". : ->
herzmeister

З специфікації JVM: "Об'єкт є або динамічно виділеним екземпляром класу, або масивом." Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

StackOverFlow Я щойно дав короткий опис різниці між об’єктом та екземпляром, сподіваюся, це допоможе
Пушкаррай Пуджарі

1
Об'єкт - це екземпляр класу. Це все.
Маркіз

Відповіді:


49

Екземпляр - це об’єкт у пам’яті. В основному ви створюєте об'єкт і створюєте їх за допомогою примірника.

Ось хороший опис класів проти об’єктів проти екземплярів, він говорить про Java, але це стосується всіх ОО.

http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/


27
Цей допис у блозі нічого не пояснює.
Корай Тугай,

ви маєте на увазі об'єкт == клас? або ви маєте на увазі клас, який завантажується і стає об'єктом, а об'єкт створюється з інстанції, щоб стати екземпляром? ти не відповідаєш заплутано?
p_champ

Думайте про клас як про визначення. Коли ви створюєте екземпляр класу, у вас є об'єкт, який потім можна використовувати. Цей об’єкт фізично представлений у пам’яті.
Дастін Лейн

@Dustin Laine різниця досі не ясна. Чи можете ви допомогти мені?
Пиріг

@DustinLaine Питання задає різницю між "екземпляром" та "об'єктом". Однак у цій відповіді пояснено процес "створення екземпляра" класу для отримання "об'єкта". Ваш допис та коментар не збігаються. У дописі згадується, що "екземпляр" - це об'єкт у пам'яті. Однак у коментарі згадується, що після створення екземпляра класу ви отримуєте "об'єкт", який представлений у пам'яті. Це дещо неоднозначно.
Шрішті

56

Екземпляр та Об’єкт - це об’єктно-орієнтоване програмування .

Для деяких мов програмування, таких як Java, C ++ та Smalltalk, важливо описувати та розуміти код. В інших мовах, що використовуються у структурованому програмуванні, цього поняття не існує.

Це виглядає із структурного програмування. Не існує реальної суттєвої різниці, яка повинна забирати занадто багато вашого часу. Можливо, є якась химерна мова, про яку деякі люди можуть зайняти багато місця, щоб писати, але в кінці кінців, що стосується кодера, розробника, програміста, архітектора, це екземпляр класу та Об'єкт означає одне і те ж і часто може використовуватися як взаємозамінні. У своїй кар’єрі я ніколи не зустрічав нікого, хто був би прискіпливим і витрачав півгодини, намагаючись вказати на відмінності, бо насправді таких немає. Час можна краще витратити на інші зусилля з розвитку.

ОНОВЛЕННЯ Що стосується Swift, то воліє Apple, яка винайшла Swift:

Екземпляр класу традиційно називається об'єктом. Однак класи та структури Swift набагато ближчі за функціональністю, ніж в інших мовах, і більша частина цього розділу описує функціональність, яка може застосовуватися до екземплярів класу або типу структури. Через це використовується більш загальний термін екземпляр.


20

Відмінне запитання.

Я поясню це найпростішим можливим способом: скажімо, у вас у кошику 5 яблук. Кожне з цих яблук є об'єктом типу Яблуко, який має деякі характеристики (тобто великий, круглий, росте на деревах).

З точки зору програмування, ви можете мати клас під назвою Apple, який має змінні величина: великий, форма: круглий, середовище проживання: росте на деревах. Щоб у вашій кошику було 5 яблук, вам потрібно створити екземпляр 5 яблук. Apple apple1, Apple apple2, Apple apple3 etc....

В якості альтернативи: об’єкти - це визначення чогось, екземпляри - це фізичні речі.

Це має сенс?


60
Це не так. :) "Об'єкти - це визначення чогось" Те, що ви тут називаєте об'єктами, - це класи.
T-Gergely

11

Екземпляр: екземпляр означає просто створення посилання (копії).

object: означає, що розташування пам'яті пов'язане з об'єктом (є суттю виконання класу) за допомогою нового оператора.

Простими словами, Instance посилається на копію об’єкта в певний час, тоді як об’єкт посилається на адресу пам’яті класу.


1
кажучи, що екземпляр - це посилання на об’єкт, для мене це справді прояснило.
Джон С,

2
@JohnC Не повинно, бо це неправильно. Об'єкт - це екземпляр класу. Це все.
Маркіз

8

Скажімо, ви будуєте кілька стільців.

Діаграма, яка показує, як побудувати стілець і скласти його разом, відповідає класу програмного забезпечення.

Скажімо, ви побудували п’ять стільців за зразком на цій схемі. Подібним чином, ви можете побудувати п’ять об’єктів програм за шаблоном у класі.

Кожен стілець має унікальний номер, випалений внизу сидіння для ідентифікації кожного конкретного стільця. Стілець 3 є одним із прикладів шаблону стільця. Подібним чином, розташування пам'яті 3 може містити один екземпляр програмного шаблону.

Отже, екземпляр (стілець 3) - це єдиний унікальний, специфічний прояв візерунка стільця.


2
Об'єкт - це екземпляр класу. Екземпляр не є екземпляром об’єкта. Відповідь безглузда.
Маркіз

1
Ого, через дев'ять років хтось нарешті вказав на недолік мого пояснення. Дякую! Краще зараз?
Brian Showalter

7

Об'єкт :

Це загальний термін, в основному це пакет програм, що має стан (змінні) та поведінку (методи)

Клас :

Синій відбиток (шаблон) для екземпляра об’єкта - це унікальний об’єкт, наприклад, ви створюєте об’єкт два рази, що це означає, що ви створили два екземпляри

Наведу приклад

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

Приклад об'єкта :

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

S1, s2 мають об'єкт класу Student

Екземпляр :

s1 та s2 є екземплярами об'єкта студента, два унікальні .

його можна також назвати довідковим .

в основному s1 та s2 є змінними, яким присвоюється об'єкт


1
Об'єкт - це екземпляр класу.
Маркіз

7

Об'єкти та екземпляри в основному однакові; але є дуже мала різниця. Якщо Carце клас, 3 Carс - це 3 різні об’єкти. Всі ці об'єкти є екземплярами. Тож ці 3 машини є об’єктами з екземплярів Carкласу.

Але слово "екземпляр" може означати також "екземпляр структури". Але об'єкт призначений лише для класів.

Всі об'єкти є екземплярами. Не всі екземпляри повинні бути об'єктами. Екземпляри можуть бути "екземплярами структури" або "об'єктами". Сподіваюся, це зрозуміло для вас.


3

Об'єкт - це конструкція, щось статичне, що має певні особливості та риси, такі як властивості та методи, це може бути що завгодно (рядок, елемент керування користувачем тощо)

Екземпляр - це унікальна копія цього об’єкта, з якою ви можете використовувати і робити щось.

Уявіть собі такий виріб, як комп’ютер.

Робоча станція xw6400 - це об’єкт

ВАША робоча станція xw6400 (або робоча станція вашої дружини xw6400) є екземпляром об'єкта робочої станції xw6400


1
Перший і другий абзаци описують класи, а не об’єкти.
Маркіз

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 як об'єкт, тому кожен об'єкт є екземпляром класу, але кожен екземпляр не є об'єктом.


Тут десь ховається правильна відповідь, але мова потребує очищення та спрощення.
Маркіз

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

кожен об'єкт, який називається екземпляром свого класу, але кожен екземпляр класу має своє значення для кожного атрибута, інстанції поділяє ім'я атрибута та операцію зі своїми інстанціями класу, але об'єкт містить неявну посилання на свій клас


0

Клас: Клас - це синій відбиток. Об’єкт: Це копія класу. Екземпляр: Це змінна, яка використовується для зберігання адреси пам'яті об'єкта.

Дуже базовий аналітичний приклад

Класний будинок -> План будинку. Але ви не можете жити на блакитному принті. Вам потрібен фізичний будинок, який є екземпляром класу для проживання. Тобто фактична адреса об’єкта - екземпляр. Екземпляри представляють об'єкти.


Екземпляр відноситься до об'єкта, а не до змінної.
Маркіз

0

Як тільки ви створили екземпляр класу (використовуючи new), ця екземплярна річ стає об’єктом. Об'єкт - це те, що може дотримуватися інкапсуляції, поліморфізму, принципів абстрагування об'єктно-орієнтованого програмування та реальної речі, з якою програма взаємодіє для споживання членів екземпляра, визначених у класі. Об'єкт містить члени екземпляра (нестатичні члени).

Таким чином, екземпляр класу є об'єктом. Слово "екземпляр" використовується, коли ви маєте на увазі походження, звідки воно народилося, більш зрозуміло, якщо ви кажете "екземпляр класу" порівняно з "об'єктом класу" (хоча останній може бути використаний).

Також може прочитати розділ "Внутрішні класи" цього документа Java про вкладені класи - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Java - це об'єктно-орієнтована мова програмування (ООП). Це означає, що все в Java, крім примітивних типів, є об'єктом.

Тепер об’єкти Java схожі на об’єкти реального світу. Наприклад, ми можемо створити автомобільний об'єкт на Java, який матиме такі властивості, як поточна швидкість та колір; та поведінка типу: прискорення та паркування.

Це Об’єкт .

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

Екземпляр , з іншого боку, є унікально ініціалізованою копією цього об’єкта, який виглядає Car car = new Car().

Перевірте це, щоб дізнатись більше про класи та об’єкти Java


Об'єкт - це екземпляр класу.
Маркіз

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 баскетболу

скажімо баскетбол1 та баскетбол2. Потім ви запускаєте свою програму. Тепер у вас є 2 екземпляри об’єкта баскетбол.


Це означало б, що об’єкт є екземпляром конструктора класу?
вуличний парад

думайте про об’єкт як про креслення. скажімо, у нас є план баскетболу, це клас. коли баскетбол створений і зроблений, він зараз існує, то це означало б, що у нас є 1 екземпляр об’єкта баскетбол. якщо ми побудували ще один баскетбольний м'яч з об'єкта (план). тепер у нас є 2 екземпляри баскетболу. Завжди є лише 1 об’єкт, але ми можемо зробити багато екземплярів цього об’єкта.
Дарксвал,

@Darxval тоді що це за клас
Chyanit Singh

-3

Об'єкт відноситься до класу, а екземпляр - до об'єкта. Іншими словами, екземпляр - це копія об'єкта з певними значеннями в ньому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.