Sự khác biệt giữa Phiên bản và Đối tượng là gì?


92

Sự khác biệt giữa Phiên bản và Đối tượng là gì? Có sự khác biệt hay không?


10
Có thể bạn có thể suy luận từ thông báo lỗi nổi tiếng "Tham chiếu đối tượng không được đặt thành một thể hiện của đối tượng ." : ->
herzmeister

Từ JVM spec: "Một đối tượng là một trong hai một trường hợp lớp cấp phát động hoặc một mảng." Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

Stackoverflow Tôi vừa được đưa ra một mô tả ngắn gọn về sự khác biệt giữa đối tượng và dụ tôi hy vọng nó giúp
Pushkarraj Pujari

1
Một đối tượng là một thể hiện của một lớp. Thats tất cả để có nó.
Marquis of Lorne

Câu trả lời:


49

Một cá thể là một đối tượng trong bộ nhớ. Về cơ bản, bạn tạo đối tượng và khởi tạo chúng khi bạn đang sử dụng chúng.

Đây là một bài viết hay về Classes Vs Objects Vs Instances, anh ấy đang nói Java nhưng nó áp dụng cho tất cả các OO.

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


27
Bài đăng trên blog này không giải thích gì.
Koray Tugay

vậy ý ​​bạn là lớp đối tượng ==? hoặc bạn có nghĩa là lớp được tải và trở thành đối tượng và đối tượng được khởi tạo để trở thành thể hiện? bạn trả lời có khó hiểu không?
p_champ

Hãy coi lớp học giống như một định nghĩa. Khi bạn khởi tạo lớp thì bạn có đối tượng sau đó có thể được sử dụng. Đối tượng đó được biểu diễn vật lý trong bộ nhớ.
Dustin Laine

@Dustin Laine sự khác biệt vẫn chưa rõ ràng. bạn có thể vui lòng giúp tôi không?
Pie

@DustinLaine Câu hỏi đặt ra sự khác biệt giữa 'instance' và 'object'. Tuy nhiên, trong câu trả lời này, điều đã được giải thích là quá trình 'khởi tạo' một lớp để lấy 'đối tượng'. Bài viết và bình luận của bạn không khớp. Trong bài đăng, nó được đề cập rằng một 'instance' là một đối tượng trong bộ nhớ. Tuy nhiên, trong nhận xét có đề cập rằng sau khi bạn khởi tạo lớp, bạn sẽ nhận được 'đối tượng', được biểu diễn trong bộ nhớ. Điều này là một chút mơ hồ.
Srishti

56

Phiên bản và Đối tượng là từ Lập trình hướng đối tượng .

Đối với một số ngôn ngữ lập trình như Java, C ++ và Smalltalk, điều quan trọng là phải mô tả và hiểu mã. Trong các ngôn ngữ khác được sử dụng trong Lập trình có cấu trúc, khái niệm này không tồn tại.

Đây là quan điểm từ Lập trình cấu trúc. Không có sự khác biệt đáng kể thực sự nào sẽ tiêu tốn quá nhiều thời gian của bạn. Có thể có một số ngôn ngữ ưa thích mà một số người có thể chiếm nhiều chỗ để viết, nhưng vào cuối ngày, đối với một lập trình viên, nhà phát triển, lập trình viên, kiến ​​trúc sư, có liên quan, một ví dụ của lớp và object có nghĩa giống nhau và thường có thể được sử dụng thay thế cho nhau. Tôi chưa bao giờ gặp bất kỳ ai trong sự nghiệp của mình mà sẽ kén chọn và dành nửa giờ để cố gắng chỉ ra sự khác biệt, bởi vì thực sự là không có. Thời gian có thể được dành tốt hơn cho các nỗ lực phát triển khác.

CẬP NHẬT Liên quan đến Swift, đây là điều mà Apple, người đã phát minh ra Swift ưa thích:

Một thể hiện của lớp theo truyền thống được biết đến như một đối tượng. Tuy nhiên, các lớp và cấu trúc Swift gần gũi hơn về chức năng so với các ngôn ngữ khác và phần lớn chương này mô tả chức năng có thể áp dụng cho các thể hiện của một lớp hoặc một kiểu cấu trúc. Do đó, ví dụ thuật ngữ chung hơn được sử dụng.


20

Câu hỏi hay.

Tôi sẽ giải thích điều đó theo cách đơn giản nhất có thể: Giả sử bạn có 5 quả táo trong giỏ. Mỗi quả táo đó là một đối tượng của loại Táo, có một số đặc điểm (tức là to, tròn, mọc trên cây).

Theo thuật ngữ lập trình, bạn có thể có một lớp gọi là Apple, có các biến kích thước: to, shape: tròn, môi trường sống: mọc trên cây. Để có 5 quả táo trong giỏ của bạn, bạn cần phải nhanh chóng 5 quả táo. Apple apple1, Apple apple2, Apple apple3 etc....

Cách khác: Đối tượng là định nghĩa của cái gì đó, cá thể là những thứ vật chất.

Điều này có nghĩa không?


60
Nó không. :) "Đối tượng là định nghĩa của một cái gì đó" Cái mà bạn gọi các đối tượng ở đây là các lớp.
T-Gergely

11

Instance: instance có nghĩa là chỉ tạo một tham chiếu (bản sao).

đối tượng: nghĩa là khi vị trí bộ nhớ được liên kết với đối tượng (là một thực thể thời gian chạy của lớp) bằng cách sử dụng toán tử new.

Nói một cách đơn giản, Instance đề cập đến bản sao của đối tượng tại một thời điểm cụ thể trong khi đối tượng đề cập đến địa chỉ bộ nhớ của lớp.


1
nói rằng một thể hiện là một tham chiếu đến một đối tượng thực sự làm sáng tỏ mọi thứ đối với tôi.
John C

2
@JohnC Không nên, vì nó không chính xác. Một đối tượng là một thể hiện của một lớp. Thats tất cả để có nó.
Marquis of Lorne

8

Giả sử bạn đang chế tạo một số chiếc ghế.

Sơ đồ chỉ ra cách xây dựng một chiếc ghế và đặt nó lại với nhau tương ứng với một lớp phần mềm.

Giả sử bạn đóng năm chiếc ghế theo mẫu trong sơ đồ đó. Tương tự như vậy, bạn có thể xây dựng năm đối tượng phần mềm theo mẫu trong một lớp.

Mỗi ghế có một số duy nhất được đốt vào đáy ghế để xác định từng ghế cụ thể. Ghế 3 là một ví dụ của mẫu ghế. Tương tự như vậy, vị trí bộ nhớ 3 có thể chứa một phiên bản của mẫu phần mềm.

Vì vậy, một ví dụ (ghế 3) là một biểu hiện cụ thể, duy nhất của một mẫu ghế.


2
Một đối tượng là một thể hiện của một lớp. Một cá thể không phải là một thể hiện của một đối tượng. Câu trả lời là vô nghĩa.
Marquis of Lorne

1
Chà, sau chín năm cuối cùng ai đó đã chỉ ra lỗ hổng trong lời giải thích của tôi. Cảm ơn! Tốt hơn rồi?
Brian Showalter

7

Đối tượng :

Về cơ bản, nó là một thuật ngữ giá chung, nó là một gói Phần mềm có trạng thái (biến) và hành vi (phương thức)

Lớp :

Bản in màu xanh lam (mẫu) cho một cá thể đối tượng - đó là một đối tượng duy nhất, chẳng hạn như bạn tạo một đối tượng hai lần, điều đó có nghĩa là bạn đã tạo hai phiên bản

để tôi lấy một ví dụ

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

Ví dụ đối tượng :

Student s1 = new student ("Martin"); Student s2 = new student ("Kumar");

Các s1, s2 đang có đối tượng của lớp Student

Phiên bản :

s1 và s2 là các thể hiện của sinh viên đối tượng mà cả hai là duy nhất .

nó cũng có thể được gọi là tài liệu tham khảo .

về cơ bản s1 và s2 là các biến được gán một đối tượng


1
Một đối tượng là một thể hiện của một lớp.
Marquis of Lorne

7

Các đối tượng và cá thể hầu hết giống nhau; nhưng có một sự khác biệt rất nhỏ. Nếu Carlà một lớp thì 3 Cars là 3 đối tượng khác nhau. Tất cả các đối tượng này đều là cá thể. Vì vậy, 3 chiếc xe này là các đối tượng từ các thể hiện của Carlớp.

Nhưng từ "instance" cũng có thể có nghĩa là "cấu trúc thể hiện". Nhưng đối tượng chỉ dành cho các lớp.

Tất cả các đối tượng là cá thể. Không phải tất cả các trường hợp đều phải là đối tượng. Các thể hiện có thể là "thể hiện cấu trúc" hoặc "đối tượng". Tôi hy vọng điều này làm cho sự khác biệt rõ ràng với bạn.


3

Đối tượng là một cấu trúc, một cái gì đó tĩnh có các tính năng và đặc điểm nhất định, chẳng hạn như thuộc tính và phương thức, nó có thể là bất kỳ thứ gì (một chuỗi, một điều khiển người dùng, v.v.)

Một phiên bản là một bản sao duy nhất của đối tượng đó mà bạn có thể sử dụng và làm mọi việc với nó.

Hãy tưởng tượng một sản phẩm giống như một chiếc máy tính.

Máy trạm THE xw6400 là một đối tượng

Máy trạm xw6400 CỦA BẠN, (hoặc máy trạm xw6400 của VỢ CỦA BẠN) là một phiên bản của đối tượng máy trạm xw6400


1
Đoạn đầu tiên và thứ hai của bạn mô tả các lớp, không phải đối tượng.
Marquis of Lorne

2

Câu trả lời này có thể được xem là sáo mòn, nhưng lo lắng về sự khác biệt giữa một thể hiện và đối tượng đã là thành phố sáo mòn.

Tôi nghĩ nó được mô tả tốt nhất bằng javascript:

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

câu thơ

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

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

1

Một thể hiện là một đại diện cụ thể của một đối tượng. Một đối tượng là một thứ chung chung trong khi một cá thể là một đối tượng duy nhất đã được tạo trong bộ nhớ. Thông thường một cá thể sẽ có các giá trị được gán cho các thuộc tính của nó để phân biệt nó với các trường hợp khác của loại đối tượng.


1

Nếu chúng ta thấy Định nghĩa đối tượng và đối tượng Instance -

Bộ nhớ được cấp phát cho thành viên của lớp tại thời điểm chạy được gọi là đối tượng hoặc đối tượng là thể hiện của Lớp.

Hãy để chúng tôi xem Định nghĩa của trường hợp -

Bộ nhớ được cấp phát cho Bất kỳ tại thời điểm chạy được gọi là biến thể hiện.

Bây giờ hiểu ý nghĩa của bất kỳ phân bổ bộ nhớ thời gian chạy nào xảy ra trong C cũng thông qua Malloc, Calloc, Realloc như:

struct p
{

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

Vì vậy, ở đây chúng ta cũng đang phân bổ cấp phát bộ nhớ thời gian chạy nhưng ở đây chúng ta gọi là thể hiện nên t1 là thể hiện ở đây chúng ta không thể nói t1 là đối tượng nên Mọi đối tượng là thể hiện của Lớp nhưng mọi Đối tượng không phải là Đối tượng.


Có một câu trả lời đúng nằm ở đâu đó ở đây nhưng ngôn ngữ cần được làm sạch và đơn giản hóa.
Marquis of Lorne

1

Đối tượng - Một thể hiện của lớp có trạng thái riêng và quyền truy cập vào tất cả các hành vi được định nghĩa bởi lớp của nó.

Phiên bản - Tham chiếu đến một vùng bộ nhớ cho lớp cụ thể đó.


1

Tôi không thể tin được, ngoại trừ một tên không ai dùng mật mã để giải thích điều này, hãy để tôi thử một lần nữa!

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

var humanClassObject1 = HumanClass(name: "Rehan") 

Bây giờ bên trái tức là: "humanClassObject1" là đối tượng và bên phải tức là: HumanClass (tên: "Rehan") là thể hiện của đối tượng này.

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

Vì vậy, về cơ bản, instance chứa các giá trị cụ thể cho đối tượng đó và các đối tượng chứa vị trí bộ nhớ (tại thời điểm chạy).

Hãy nhớ câu lệnh nổi tiếng "object reference not set to a instance of a object", điều này có nghĩa là các đối tượng không khởi tạo không có bất kỳ thể hiện nào. Trong một số ngôn ngữ lập trình như swift, trình biên dịch sẽ không cho phép bạn thiết kế một lớp thậm chí không có bất kỳ cách nào để khởi tạo tất cả các thành viên của nó (biến ví dụ: tên, tuổi, v.v.), nhưng trong một số ngôn ngữ, bạn được phép làm điều này:

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

Và lỗi sẽ chỉ được hiển thị tại thời điểm chạy khi bạn cố gắng thực hiện điều gì đó như sau:

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

Lỗi này chỉ ra rằng, các giá trị cụ thể (cho các biến \ thuộc tính) là "INSTANCE" như tôi đã cố gắng giải thích điều này ở trên! Và đối tượng tức là: "myClass" chứa vị trí bộ nhớ (tại thời điểm chạy).


1

Khi một biến được khai báo thuộc loại tùy chỉnh (lớp), chỉ một tham chiếu được tạo, được gọi là đối tượng. Ở giai đoạn này, không có bộ nhớ nào được cấp cho đối tượng này . Nó hoạt động như một con trỏ (tới vị trí mà đối tượng sẽ được lưu trữ trong tương lai). Quá trình này được gọi là 'Khai báo'.

Employee e; // e is an object

Mặt khác, khi một biến kiểu tùy chỉnh được khai báo bằng newtoán tử, toán tử này sẽ cấp phát bộ nhớ trong heap cho đối tượng này và trả về tham chiếu đến bộ nhớ được cấp phát. Đối tượng này bây giờ được gọi là thể hiện . Quá trình này được gọi là 'Instantiation'.

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

Mặt khác, trong một số ngôn ngữ như Java, một đối tượng tương đương với một thể hiện, như rõ ràng từ dòng được viết trong tài liệu của Oracle về Java :

Lưu ý: Cụm từ "khởi tạo lớp" có nghĩa giống như "tạo một đối tượng". Khi bạn tạo một đối tượng, bạn đang tạo một "thể hiện" của một lớp, do đó "khởi tạo" một lớp.


0

mỗi đối tượng được cho là một thể hiện của lớp nó nhưng mỗi thể hiện của lớp có giá trị riêng cho từng nội dung thuộc tính chia sẻ tên thuộc tính và thao tác với các nội dung của lớp nhưng một đối tượng chứa một tham chiếu ngầm định đến lớp của nó.


0

Lớp: Một lớp là chữ in màu xanh lam. Đối tượng: Nó là bản sao của lớp. Instance: Là một biến được sử dụng để giữ địa chỉ bộ nhớ của đối tượng.

Một ví dụ phân tích rất cơ bản

Class House -> Bản thiết kế của ngôi nhà. Nhưng bạn không thể sống trong bản in xanh. Bạn cần một Ngôi nhà vật lý là thể hiện của lớp để sống, tức là địa chỉ thực của đối tượng là thể hiện. Thể hiện đại diện cho các đối tượng.


Phiên bản đề cập đến đối tượng, không phải biến.
Marquis of Lorne

0

Khi bạn khởi tạo một lớp (sử dụng new), thứ được khởi tạo đó sẽ trở thành một đối tượng. Đối tượng là một thứ có thể tuân theo các nguyên tắc đóng gói, đa hình, trừu tượng của lập trình hướng đối tượng và thứ thực mà một chương trình tương tác để sử dụng các thành viên thể hiện được định nghĩa trong lớp. Đối tượng chứa các thành viên thể hiện (thành viên không tĩnh).

Vì vậy, thể hiện của một lớp là một đối tượng. Từ 'instance' được sử dụng khi bạn đề cập đến nguồn gốc từ nơi nó sinh ra, sẽ rõ ràng hơn nếu bạn nói 'instance của một lớp' so với 'đối tượng của một lớp' (mặc dù sau này có thể được sử dụng).

Cũng có thể đọc phần 'Lớp bên trong' của tài liệu java này trên các lớp lồng nhau - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Java là một ngôn ngữ lập trình hướng đối tượng (OOP). Điều này có nghĩa là mọi thứ trong Java, ngoại trừ các kiểu nguyên thủy đều là một đối tượng.

Bây giờ, các đối tượng Java tương tự như các đối tượng trong thế giới thực. Ví dụ, chúng ta có thể tạo một đối tượng xe hơi trong Java, đối tượng này sẽ có các thuộc tính như tốc độ và màu sắc hiện tại; và hành vi như: tăng tốc và đỗ xe.

Đó là đối tượng .

nhập mô tả hình ảnh ở đây

Ví dụ , ở phía bên kia, là một bản sao khởi tạo duy nhất của đối tượng đó trông giống như Car car = new Car().

Hãy xem nó để tìm hiểu thêm về các lớp và đối tượng Java


Một đối tượng là một thể hiện của một lớp.
Marquis of Lorne

0

Câu trả lời nhanh chóng và đơn giản

  • Lớp : một đặc điểm kỹ thuật, bản thiết kế cho một đối tượng
  • Đối tượng : sự hiện diện vật lý của lớp trong bộ nhớ
  • Phiên bản : một bản sao duy nhất của đối tượng (cấu trúc giống nhau, dữ liệu khác nhau)

-1

Về sự khác biệt giữa an objectvà an instance, tôi không nghĩ rằng có bất kỳ sự đồng thuận nào.

Đối với tôi, có vẻ như mọi người thay đổi nó khá nhiều thay thế cho nhau, trong các bài báo, bài đăng trên blog, sách hoặc cuộc trò chuyện.

Đối với tôi, theo cách tôi thấy, một đối tượng là một thực thể chung và sống động trong bộ nhớ, được chỉ định bởi ngôn ngữ mà nó được sử dụng. Cũng giống như Objectlớp trong Java. Chúng tôi không quan tâm nhiều đến loại của nó, hoặc bất kỳ thứ gì khác liên quan đến nó, cho dù nó có được quản lý bởi một vùng chứa hay không.

An instancelà một objectnhưng được liên kết với một loại, như trong this method accepts Foo instanceshoặc you can not put Animal instances in an instance of a List of Vehicles.

objectví dụ s có locksliên kết với chúng, không phải instances, trong khi instances có các phương thức. objectslà rác được thu gom, không phải instances.

Nhưng như tôi đã nói, đây chỉ là cách tôi thấy và tôi không nghĩ có bất kỳ tổ chức nào mà chúng tôi có thể tham khảo để đưa ra định nghĩa chuẩn giữa họ và mọi người sẽ có cách hiểu / định nghĩa hơi khác nhau (tất nhiên là trong giới hạn) .


-1

Một đối tượng là một thứ chung chung, ví dụ, lấy một hàm tuyến tính trong toán học

ax + b là một đối tượng, trong khi 3x + 2 là một thể hiện của đối tượng đó

Đối tượng <<< Phiên bản

Chung <<< Cụ thể

Không có gì hơn thế này


-2

Một đối tượng có thể là một lớp, giả sử bạn có một lớp gọi là bóng rổ.

nhưng bạn muốn có nhiều quả bóng rổ vì vậy trong mã của bạn, bạn tạo nhiều hơn 1 quả bóng rổ

nói bóng rổ1 và bóng rổ2. Sau đó, bạn chạy ứng dụng của mình. Bây giờ bạn có 2 phiên bản của đối tượng bóng rổ.


Điều đó có nghĩa là một đối tượng là một thể hiện của một cấu trúc lớp?
streetparade

nghĩ về đối tượng như một bản thiết kế. nói rằng chúng tôi có một kế hoạch chi tiết cho bóng rổ, đó là lớp học. khi quả bóng rổ được tạo ra và hiện tại nó đã tồn tại, điều đó có nghĩa là chúng ta có 1 thể hiện của quả bóng rổ đối tượng. nếu chúng tôi xây dựng một quả bóng rổ khác từ đối tượng (bản thiết kế). bây giờ chúng ta có 2 trường hợp của bóng rổ. Luôn luôn chỉ có 1 đối tượng, nhưng chúng ta có thể tạo nhiều phiên bản của đối tượng đó.
Darxval

@Darxval thì lớp học là gì
Chyanit Singh

-3

Đối tượng đề cập đến lớp và cá thể đề cập đến một đối tượng, nói cách khác, đối tượng là bản sao của một đối tượng với các giá trị cụ thể trong đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.