อะไรคือความแตกต่างระหว่าง Instance และ Object? มีความแตกต่างหรือไม่?
อะไรคือความแตกต่างระหว่าง Instance และ Object? มีความแตกต่างหรือไม่?
คำตอบ:
อินสแตนซ์และวัตถุจากโปรแกรมเชิงวัตถุ
สำหรับภาษาโปรแกรมบางภาษาเช่น Java, C ++ และ Smalltalk สิ่งสำคัญคือต้องอธิบายและทำความเข้าใจโค้ด ในภาษาอื่น ๆ ที่ใช้ในการเขียนโปรแกรมแบบมีโครงสร้างไม่มีแนวคิดนี้
นี่คือมุมมองจากการเขียนโปรแกรมโครงสร้าง ไม่มีความแตกต่างอย่างมีนัยสำคัญที่แท้จริงที่ควรใช้เวลาของคุณมากเกินไป อาจมีภาษาแปลก ๆ ที่บางคนอาจใช้พื้นที่มากในการเขียน แต่ในตอนท้ายของวันนี้เป็นเรื่องของ coder นักพัฒนาโปรแกรมเมอร์สถาปนิกตัวอย่างของคลาสและ วัตถุหมายถึงสิ่งเดียวกันและมักใช้แทนกันได้ ฉันไม่เคยเจอใครในอาชีพที่จู้จี้จุกจิกและใช้เวลาครึ่งชั่วโมงในการพยายามชี้ให้เห็นความแตกต่างเพราะมันไม่มีเลย สามารถใช้เวลากับความพยายามในการพัฒนาอื่น ๆ ได้ดีขึ้น
อัปเดตเกี่ยวกับ Swift นี่คือสิ่งที่ Apple ผู้คิดค้น Swift ชอบ:
อินสแตนซ์ของคลาสเป็นที่รู้จักกันในชื่อวัตถุ อย่างไรก็ตามคลาสและโครงสร้างของ Swift มีความใกล้เคียงในการทำงานมากกว่าภาษาอื่น ๆ และบทนี้ส่วนใหญ่จะอธิบายถึงฟังก์ชันการทำงานที่สามารถใช้ได้กับอินสแตนซ์ของคลาสหรือประเภทโครงสร้าง ด้วยเหตุนี้อินสแตนซ์คำทั่วไปจึงถูกใช้มากขึ้น
คำถามที่ยอดเยี่ยม
ฉันจะอธิบายอย่างง่ายที่สุด: สมมติว่าคุณมีแอปเปิ้ล 5 ลูกอยู่ในตะกร้า แอปเปิ้ลแต่ละชนิดเป็นวัตถุประเภทหนึ่งของ Apple ซึ่งมีลักษณะบางอย่าง (เช่นใหญ่กลมโตบนต้นไม้)
ในแง่การเขียนโปรแกรมคุณสามารถมีคลาสที่เรียกว่า Apple ซึ่งมีขนาดตัวแปร: ใหญ่รูปร่าง: กลมที่อยู่อาศัย: เติบโตบนต้นไม้ จะมี 5 แอปเปิ้ลในตะกร้าของคุณคุณต้องยกตัวอย่าง 5 แอปเปิ้ล Apple apple1, Apple apple2, Apple apple3 etc...
.
หรืออีกทางหนึ่ง: Objects เป็นคำจำกัดความของบางสิ่งบางอย่างอินสแตนซ์คือสิ่งที่มีอยู่จริง
สิ่งนี้สมเหตุสมผลไหม
อินสแตนซ์: อินสแตนซ์หมายถึงการสร้างข้อมูลอ้างอิง (สำเนา)
วัตถุ: หมายถึงเมื่อตำแหน่งหน่วยความจำเชื่อมโยงกับวัตถุ (เป็นเอนทิตีรันไทม์ของคลาส) โดยใช้ตัวดำเนินการใหม่
กล่าวง่ายๆว่าอินสแตนซ์หมายถึงสำเนาของวัตถุในช่วงเวลาใดเวลาหนึ่งในขณะที่วัตถุหมายถึงที่อยู่หน่วยความจำของคลาส
สมมติว่าคุณกำลังสร้างเก้าอี้
แผนภาพที่แสดงวิธีการสร้างเก้าอี้และประกอบเข้าด้วยกันสอดคล้องกับคลาสซอฟต์แวร์
สมมติว่าคุณสร้างเก้าอี้ห้าตัวตามรูปแบบในแผนภาพนั้น ในทำนองเดียวกันคุณสามารถสร้างซอฟต์แวร์ห้าชิ้นตามรูปแบบในคลาส
เก้าอี้แต่ละตัวมีหมายเลขเฉพาะที่เขียนไว้ที่ด้านล่างของที่นั่งเพื่อระบุเก้าอี้แต่ละตัว เก้าอี้ 3 เป็นหนึ่งในรูปแบบเก้าอี้ ในทำนองเดียวกันตำแหน่งหน่วยความจำ 3 สามารถมีรูปแบบซอฟต์แวร์หนึ่งอินสแตนซ์
ดังนั้นอินสแตนซ์ (เก้าอี้ 3) คือการแสดงรูปแบบเก้าอี้ที่ไม่เหมือนใคร
วัตถุ :
มันเป็นคำทั่วไปโดยทั่วไปแล้วมันเป็นชุดซอฟต์แวร์ที่มีสถานะ (ตัวแปร) และพฤติกรรม (วิธีการ)
ชั้น :
การพิมพ์สีน้ำเงิน (เทมเพลต) สำหรับอินสแตนซ์วัตถุ - เป็นสิ่งที่ไม่ซ้ำกันเช่นคุณสร้างวัตถุสองครั้งหมายความว่าคุณได้สร้างสองอินสแตนซ์
ผมขอยกตัวอย่าง
Class student()
{
private string firstName;
public student(string fname)
{
firstName=fname;
}
Public string GetFirstName()
{
return firstName;
}
}
ตัวอย่างวัตถุ :
นักเรียน s1 = นักเรียนใหม่ ("Martin"); นักเรียน s2 = นักเรียนใหม่ ("Kumar");
s1, s2 มีวัตถุของคลาส Student
อินสแตนซ์ :
s1 และ s2 กรณีของนักเรียนวัตถุทั้งสองจะไม่ซ้ำกัน
สามารถเรียกว่าอ้างอิงได้ด้วย
โดยพื้นฐานแล้ว s1 และ s2 เป็นตัวแปรที่กำหนดให้กับวัตถุ
ออบเจ็กต์และอินสแตนซ์ส่วนใหญ่เหมือนกัน แต่มีความแตกต่างเล็กน้อย ถ้าCar
เป็นคลาส 3 Car
วินาทีคือ 3 วัตถุที่แตกต่างกัน วัตถุทั้งหมดนี้เป็นอินสแตนซ์ ดังนั้นรถทั้ง 3 คันนี้จึงเป็นวัตถุจากอินสแตนซ์ของCar
คลาส
แต่คำว่า "อินสแตนซ์" อาจหมายถึง "โครงสร้างอินสแตนซ์" ได้เช่นกัน แต่วัตถุมีไว้สำหรับคลาสเท่านั้น
วัตถุทั้งหมดเป็นอินสแตนซ์ ไม่ใช่ทุกอินสแตนซ์ที่ต้องเป็นออบเจ็กต์ อินสแตนซ์อาจเป็น "อินสแตนซ์โครงสร้าง" หรือ "ออบเจ็กต์" ฉันหวังว่านี่จะทำให้คุณเห็นความแตกต่างอย่างชัดเจน
วัตถุคือโครงสร้างสิ่งที่คงที่ซึ่งมีคุณสมบัติและลักษณะเฉพาะบางอย่างเช่นคุณสมบัติและวิธีการซึ่งอาจเป็นอะไรก็ได้ (สตริงตัวควบคุมผู้ใช้ ฯลฯ )
อินสแตนซ์คือสำเนาเฉพาะของออบเจ็กต์นั้นที่คุณสามารถใช้และทำสิ่งต่างๆด้วย
ลองนึกภาพผลิตภัณฑ์เช่นคอมพิวเตอร์
เวิร์กสเตชัน xw6400 เป็นวัตถุ
เวิร์กสเตชัน xw6400 ของคุณ (หรือเวิร์กสเตชัน xw6400 ของ WIFE ของคุณ) เป็นอินสแตนซ์ของอ็อบเจ็กต์เวิร์กสเตชัน xw6400
คำตอบนี้อาจถูกมองว่าซ้ำซาก แต่การกังวลเกี่ยวกับความแตกต่างระหว่างอินสแตนซ์และอ็อบเจกต์นั้นเป็นเรื่องที่ซ้ำซากอยู่แล้ว
ฉันคิดว่าภาพที่ดีที่สุดในจาวาสคริปต์:
let obj= {"poo":1}
// "obj" is an object
โองการ
Class Trash {
constructor(){this.poo = 1;}
}
let i = new Trash();
// "i" is an instance
อินสแตนซ์คือการแสดงเฉพาะของวัตถุ วัตถุเป็นสิ่งทั่วไปในขณะที่อินสแตนซ์เป็นวัตถุชิ้นเดียวที่ถูกสร้างขึ้นในหน่วยความจำ โดยปกติอินสแตนซ์จะมีค่าที่กำหนดให้กับคุณสมบัติของมันซึ่งทำให้มันแตกต่างจากอินสแตนซ์อื่น ๆ ของประเภทของวัตถุ
หากเราเห็นนิยามของวัตถุและวัตถุอินสแตนซ์ -
หน่วยความจำที่จัดสรรให้กับสมาชิกของคลาสในขณะทำงานเรียกว่า object หรือ object คืออินสแตนซ์ของ Class
ให้เราดูคำจำกัดความของอินสแตนซ์ -
หน่วยความจำที่จัดสรรสำหรับทุก ๆเวลาที่รันเรียกว่าเป็นตัวแปรอินสแตนซ์
ตอนนี้เข้าใจความหมายของใด ๆจัดสรรหน่วยความจำเวลาทำงานเกิดขึ้นใน C ยังผ่าน Malloc, calloc, Realloc เช่น:
struct p
{
}
p *t1
t1=(p) malloc(sizeof(p))
ดังนั้นที่นี่เรากำลังจัดสรรการจัดสรรหน่วยความจำเวลาทำงาน แต่ที่นี่เราเรียกว่าอินสแตนซ์ดังนั้น t1 คืออินสแตนซ์ที่นี่เราไม่สามารถพูด t1 เป็นวัตถุได้ดังนั้นทุกออบเจ็กต์คืออินสแตนซ์ของคลาส แต่ทุกอินสแตนซ์ไม่ใช่วัตถุ
Object - อินสแตนซ์ของคลาสที่มีสถานะเป็นของตัวเองและเข้าถึงพฤติกรรมทั้งหมดที่กำหนดโดยคลาส
อินสแตนซ์ - การอ้างอิงถึงพื้นที่หน่วยความจำสำหรับคลาสนั้น ๆ
ฉันไม่อยากจะเชื่อเลยนอกจากผู้ชายคนหนึ่งที่ไม่มีใครใช้รหัสนี้เพื่ออธิบายเรื่องนี้ฉันขอลองดูด้วย!
// 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.
ข้อผิดพลาดนี้ระบุว่าค่าเฉพาะ (สำหรับตัวแปร \ คุณสมบัติ) คือ"INSTANCE"ตามที่ฉันพยายามอธิบายข้างต้นนี้! และวัตถุเช่น: "myClass" มีตำแหน่งหน่วยความจำ (ในขณะทำงาน)
เมื่อมีการประกาศตัวแปรประเภทที่กำหนดเอง (คลาส) เฉพาะการอ้างอิงเท่านั้นที่ถูกสร้างขึ้นซึ่งเรียกว่าอ็อบเจ็กต์ ในขั้นตอนนี้ไม่มีการจัดสรรหน่วยความจำให้กับวัตถุนี้ ทำหน้าที่เป็นเพียงตัวชี้ (ไปยังตำแหน่งที่จะจัดเก็บวัตถุในอนาคต) กระบวนการนี้เรียกว่า 'การประกาศ'
Employee e; // e is an object
ในทางกลับกันเมื่อมีการประกาศตัวแปรชนิดกำหนดเองโดยใช้ตัวnew
ดำเนินการซึ่งจัดสรรหน่วยความจำในฮีปให้กับวัตถุนี้และส่งกลับการอ้างอิงไปยังหน่วยความจำที่จัดสรร วัตถุนี้ซึ่งเรียกว่าในขณะนี้เป็นตัวอย่าง กระบวนการนี้เรียกว่า 'Instantiation'
Employee e = new Employee(); // e is an instance
ในทางกลับกันในบางภาษาเช่น Java อ็อบเจ็กต์เทียบเท่ากับอินสแตนซ์ดังที่เห็นได้ชัดจากบรรทัดที่เขียนในเอกสารของ Oracle บน Java :
หมายเหตุ: วลี "การสร้างอินสแตนซ์คลาส" หมายถึงสิ่งเดียวกับ "การสร้างอ็อบเจกต์" เมื่อคุณสร้างอ็อบเจ็กต์คุณกำลังสร้าง "อินสแตนซ์" ของคลาสดังนั้นจึง "อินสแตนซ์" คลาส
แต่ละออบเจ็กต์กล่าวว่าเป็นอินสแตนซ์ของคลาส แต่อินสแตนซ์ของคลาสแต่ละตัวมีค่าของตัวเองสำหรับแต่ละอินสแตนซ์แอ็ตทริบิวต์แชร์ชื่อแอ็ตทริบิวต์และการดำเนินการกับอินสแตนซ์ของคลาส แต่อ็อบเจ็กต์มีการอ้างอิงโดยนัยถึงคลาสของเขา
คลาส: คลาสคือการพิมพ์สีน้ำเงิน วัตถุ: เป็นสำเนาของคลาส อินสแตนซ์: เป็นตัวแปรที่ใช้เก็บที่อยู่หน่วยความจำของวัตถุ
ตัวอย่างการวิเคราะห์ขั้นพื้นฐาน
Class House -> พิมพ์เขียวของบ้าน แต่คุณไม่สามารถอยู่ในพิมพ์สีน้ำเงิน คุณต้องมีบ้านทางกายภาพซึ่งเป็นตัวอย่างของคลาสที่จะอาศัยอยู่กล่าวคือที่อยู่จริงของวัตถุคืออินสแตนซ์ อินสแตนซ์แสดงถึงออบเจ็กต์
เมื่อคุณสร้างอินสแตนซ์ของคลาส (โดยใช้ใหม่) สิ่งที่สร้างอินสแตนซ์นั้นจะกลายเป็นวัตถุ วัตถุคือสิ่งที่สามารถยึดติดกับการห่อหุ้ม, ความหลากหลาย, หลักการนามธรรมของการเขียนโปรแกรมเชิงวัตถุและของจริงที่โปรแกรมโต้ตอบเพื่อใช้สมาชิกอินสแตนซ์ที่กำหนดไว้ในคลาส ออบเจ็กต์มีสมาชิกอินสแตนซ์ (สมาชิกที่ไม่คงที่)
ดังนั้นตัวอย่างของคลาสจึงเป็นวัตถุ คำว่า 'อินสแตนซ์' ใช้เมื่อคุณอ้างถึงจุดเริ่มต้นจากที่ที่มันเกิดจะชัดเจนกว่าถ้าคุณพูดว่า 'อินสแตนซ์ของคลาส' เมื่อเทียบกับ 'อ็อบเจ็กต์ของคลาส' (แม้ว่าจะใช้คำหลังได้ก็ตาม)
ยังสามารถอ่านส่วน "ชั้นใน" ของเอกสาร java นี้ในคลาสที่ซ้อนกันได้ - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Java เป็นภาษาโปรแกรมเชิงวัตถุ (OOP) ซึ่งหมายความว่าทุกอย่างใน Java ยกเว้นประเภทดั้งเดิมเป็นวัตถุ
ตอนนี้วัตถุ Java คล้ายกับวัตถุในโลกแห่งความเป็นจริง ตัวอย่างเช่นเราสามารถสร้างวัตถุรถยนต์ใน Java ซึ่งจะมีคุณสมบัติเช่นความเร็วและสีปัจจุบัน และพฤติกรรมเช่นเร่งและจอด
ว่าวัตถุ
ตัวอย่างเช่นในด้านอื่น ๆ Car car = new Car()
ที่เป็นสำเนาเริ่มต้นได้โดยไม่ซ้ำกันของวัตถุที่มีลักษณะเหมือน
ตรวจสอบเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับคลาสและอ็อบเจ็กต์ Java
คำตอบที่ง่ายและรวดเร็ว
เกี่ยวกับความแตกต่างระหว่าง an object
และinstance
ฉันไม่คิดว่าจะมีความสอดคล้องกัน
สำหรับฉันแล้วดูเหมือนว่าผู้คนจะเปลี่ยนมันไปในทางเดียวกันในเอกสารโพสต์บล็อกหนังสือหรือการสนทนา
สำหรับฉันวิธีที่ฉันเห็นคือวัตถุเป็นเอนทิตีทั่วไปและมีชีวิตอยู่ในหน่วยความจำซึ่งระบุโดยภาษาที่ใช้เช่นเดียวกับObject
คลาสในJava
. เราไม่สนใจประเภทของมันมากนักหรือสิ่งอื่นใดที่เกี่ยวข้องไม่ว่าจะจัดการโดยคอนเทนเนอร์หรือไม่ก็ตาม
instance
เป็นobject
แต่เกี่ยวข้องกับชนิดเช่นเดียวกับในหรือthis method accepts Foo instances
you can not put Animal instances in an instance of
a List of Vehicles
object
ตัวอย่างเช่นมีlocks
ความเกี่ยวข้องกับพวกเขาไม่ใช่instance
s ในขณะที่instance
s มีวิธีการ objects
มีการเก็บขยะไม่instance
s
แต่อย่างที่บอกว่านี่เป็นเพียงวิธีที่ฉันเห็นเท่านั้นและฉันไม่คิดว่าจะมีองค์กรใดที่เราสามารถอ้างถึงคำจำกัดความมาตรฐานระหว่างพวกเขาและทุกคนจะมีความเข้าใจ / คำจำกัดความที่แตกต่างกันเล็กน้อย (แน่นอนอยู่ในขอบเขต) .
วัตถุเป็นสิ่งทั่วไปตัวอย่างเช่นใช้ฟังก์ชันเชิงเส้นในคณิตศาสตร์
ax + b เป็นวัตถุในขณะที่ 3x + 2 เป็นตัวอย่างของวัตถุนั้น
วัตถุ <<< อินสแตนซ์
ทั่วไป <<< เฉพาะ
ไม่มีอะไรมากไปกว่านี้
วัตถุสามารถเป็นคลาสได้เช่นคุณมีคลาสที่เรียกว่าบาสเก็ตบอล
แต่คุณต้องการมีบาสเก็ตบอลหลายตัวคุณจึงสร้างบาสเก็ตบอลมากกว่า 1 ตัวในโค้ดของคุณ
พูดว่า basketball1 และ basketball2 จากนั้นคุณเรียกใช้แอปพลิเคชันของคุณ ตอนนี้คุณมีออบเจ็กต์บาสเก็ตบอล 2 อินสแตนซ์
วัตถุหมายถึงคลาสและอินสแตนซ์หมายถึงวัตถุกล่าวอีกนัยหนึ่งเช่นอินสแตนซ์คือสำเนาของวัตถุที่มีค่าเฉพาะอยู่ในนั้น