Instance và object khác nhau gì không?

ý mình là nó không phức tạp ở ngôn ngữ, còn tùy thuật toán độ phức tạp sẽ khác nhau

“An object is an instance of a class”, tức một object là 1 thể hiện của 1 class. Có nhiều cách nói, có thể nói instance là một mối quan hệ, ví dụ “Huy là con của Bố Già”, tương đương “Object Huy là instance của Class Godfather” (đại loại vậy ^^). Một class có nhiều instance, ví dụ Huy, Nam, Lan (Object) là con (instance) của Bố Già (Class) hay Bố Già (class) có nhiều con (instance) là Huy, Nam, Lan (Object), hay con (instance) của Bố Già (Class) là Huy, Nam, Lan (Object).

3 Likes

Việc dùng từ “Bố” và “con” ở đây dễ gây nhầm lẫn về mối quan hệ giữa “instance” và “class”, và nhầm lẫn với mối quan hệ kế thừa trong các ngôn ngữ hướng đối tượng.
Theo mình không nên dịch instance và class ra tiếng việt.

Về câu hỏi của chủ bài viết, mình có thể cung cấp góc nhìn của mình như sau:

  • Khi nói về thiết kế hệ thống, thì ta dùng từ Object. Ví dụ thiết kế một cơ sở dữ liệu lưu trữ thông tin khách hàng. Như vậy thông tin khách hàng có thể được xem là 1 Object.
  • Khi nói về cấu trúc dữ liệu, có thể đặc tả Object thông tin khách hàng ở trên dưới dạng 1 hoặc nhiều class. Trong class có đặc tả các đặc tính của thông tin khách hàng, và các phương thức có thể tác động lên đặc tính đó. Ví dụ phương thức thêm, xóa, sửa.
  • Khi nói về quản lý bộ nhớ, thực thi chương trình, thì instance là một bản sao, hay bản hiện thực của Class trên memory.

Về class và instance thì mình nghĩ mọi ngôn ngữ lập trình OOP đều có ví dụ khá dễ hiểu:

public class Dog{

  int legs=4;
  int nose_sensitive = 1000;
  ...
}

Dog LuLu = new Dog(); 
Dog KiKi = new Dog();

Ở đây LuLu và KiKi là 2 instance của class Dog , class Dog mô tả 1 con dog là như thế nào :smiley:

6 Likes

2 cái là 1, tiếng Anh dỏm. Ví dụ thịt heo chúng nó ko nói là pig meat mà nói là pork, thì ở đây instance của class ko gọi là instance of class dài dòng mà gọi đơn giản là object.

6 Likes

Tiếng anh dỏm là sao bạn? ở đây mình nói theo nguyên văn của trang này hay wiki: https://www.javatpoint.com/object-and-class-in-java
https://en.wikipedia.org/wiki/Instance_(computer_science)

Chắc mình k để link ref nên bạn nghĩ là tiếng anh dỏm??? :smiley:

2 Likes

dỏm là vì nó gây hiểu lầm cho nhiều người tưởng object và instance khác nhau trong khi 2 cái là 1.

như trong cái link wiki kia :V

Formally, “instance” is synonymous with “object” as they are each a particular value (realization), and these may be called an instance object

lại chêm thêm instance object nữa bó tay tiếng Anh luôn =]]

còn cái link javatpoint kia lại đẻ thêm từ “entity” vào coi chừng lại hỏi sự khác nhau giữa object vs instance vs entity đó =]]]]]
nó viết câu này cũng được rồi viết thêm entity vào chi cho rối :V

An object is an instance of a class. A class is a template or blueprint from which objects are created. So, an object is the instance(result) of a class.

A là B thì A, B là như nhau, là 1. Tiếng gì mà gây hiểu lầm ngay từ mới bắt đầu học thì ko phải dỏm thì là gì :V :V

à đây Phân biệt Instance - Object - Entity - Class =]

7 Likes

wow, từ khi nào A là B thì 2 cái là 1 vậy bạn? hình vuông là hình chữ nhật vậy hình chữ nhật và hình vuông là 1?

3 Likes

hình vuông là hình tứ giác/hcn có 4 cạnh bằng nhau. Hình vuông là trường hợp đặc biệt của hcn. Thiếu 4 chữ trường hợp đặc biệt hay 4 cạnh bằng nhau rồi :V :V

chắc mình phải edit lại, A định nghĩa là B thì A, B là 1. Object định nghĩa là instance của class thì obj và ins là 1.

7 Likes

Không ngờ chỉ có instance và object mà tốn nhiều thời gian, tiền điện và tiền mạng như thế

7 Likes

Link 1:


Link 2:

Link 3:
https://www.quora.com/What-is-the-difference-between-object-and-instance/answer/Amandeep-Verma-16?ch=10&share=6aa6e138&srid=uDtR9L
Có vẻ như vấn đề này được tranh luận ở khá nhiều diễn đàn và hầu hết đề cho rằng instance và obj là 2 thứ gần như là giống nhau, có thể sử dụng như nhau nhưng khác về bản chất và sử dụng khác môi trường. Nghe có vẻ giống iterator với pointer nhỉ.

Như trên đây thì chỉ là almost thôi
Em cũng chưa có nhiều kiến thức về OOP bằng mọi người ở đây nhưng hầu hết các nguồn em tìm hiểu đều nói như thế. Tất nhiên là vẫn rất nhiều nguồn nói chúng là 1 nhưng em nghĩ cũng không quan trọng lắm vì là 1 hay không thì khi sử dụng nó cũng chỉ coi như là cái tên gọi thôi. Có từ gần nghĩa mà. Đối tượng là 1 ví dụ thực tế của class.

1 Like

Object thì có thể đứng một mình được, còn instance phải là instance của 1 class nào đó. Nghĩa là, object có thể thuộc hay không thuộc class, nhưng instance thì bắt buộc phải thuộc 1 class nào đó.

Ví dụ như ngôn ngữ sida JavaScript đi, JS không có class, nên nó chỉ có object thôi. Sẵn cà khịa JS. :v

7 Likes

Kiểu như function với method đúng không ạ??

4 Likes

Hmm, cũng có thể giống như vậy đó. :thinking:

5 Likes

Cái này còn thiếu Lua và các ngôn ngữ lập trình prototype-based nói chung :V

4 Likes

vạch lá tìm sâu vạch tất cả các NNLT tìm sự khác biệt giữa obj và ins :expressionless:

4 Likes

trong cái link quora:

Nobita = Males(“blank”,0)
Here when you write Males(…) , an object is created and the name which refers to that object (Nobita) is called an instance of that object .

bậy bạ, ko biết Python định nghĩa thế nào nhưng reference to object mà gọi là instance thì là giải thích bậy bạ. Nó gọi là reference.

cái link wp thì bó tay, đâu ra đẻ ra khái niệm instance tách riêng object và class thành khái niệm thứ 3 >_>
https://docs.oracle.com/javase/tutorial/java/concepts/object.html
https://docs.oracle.com/javase/tutorial/java/concepts/class.html
Java doc class và object, ko có cái thứ 3 gọi là instance. Trong 2 link này thì chỉ có 1 từ instance duy nhất trong câu

Each bicycle was built from the same set of blueprints and therefore contains the same components. In object-oriented terms, we say that your bicycle is an instance of the class of objects known as bicycles. A class is the blueprint from which individual objects are created.

nghĩa là instance ở đây dùng để giải thích nghĩa cho thứ tạo ra theo nguyên mẫu class thay vì dùng từ object lần nữa :V :V

comment về cái link wp đó đây:
image

câu trả lời đúng đây:

This is view from Structural Programming. There’s no real significant difference that should consume too much of your time. There might be some fancy language that some people might take up a lot of spaces to write about, but at the end of the day, as far as a coder, developer, programmer, architect, is concerned, an instance of a class and an object mean the same thing and can often be used interchangeably. I have never met anyone in my career that would be picky and spend half hour trying to point out the differences, because there’s really none. Time can be better spent on other development efforts.

mới mở OOP chân kinh gặp câu đầu tiên có object vs instance mà mất cả buổi ko lật qua trang được thì chắc luyện 10 năm cũng chưa xong chân kinh =]] Java doc rất hay ở chỗ ko xài từ instance =]

ko biết có chỗ nào phỏng vấn hỏi sự khác biệt giữa obj và ins, bé nào chém gió nửa tiếng thì cho về luôn =]]

8 Likes

Nói chung là gần như chẳng có cái quy tắc chung gì về OOP cả, mỗi ngôn ngữ chém mỗi kiểu, cứ tự hiểu trong đầu là OOP của mỗi ngôn ngữ khác nhau (trừ cái lấy đối tượng làm trung tâm, 4 tính chất cơ bản, đều có thể áp dụng SOLID,…) cho nó nhanh =]]

4 Likes

Câu này được hiểu như nào @@:
Object reference not set to an instance of an object

MyClass obj = new MyClass();

Khi lệnh trên thực hiện, ta có thể hiểu 1 object được tạo ra. Nhưng phía sâu bên trong, có 2 thứ riêng biệt đã đồng thời được tạo ra. Đó là :
obj : Tham chiếu.
instance : dữ liệu của đối tượng đang nằm đâu đó trên RAM. obj sẽ trỏ tới dữ liệu này.

Object là các gọi chung của một thứ bao gồm cả 2 thành phần là tham chiếu + instance. Nếu instance không tồn tại, khi truy cập sẽ là nguyên nhân của NullException.

5 Likes

Theo như tôi hiểu, thì:

  1. Object là thực tại khách quan, dù ta có nhìn nhận như thế nào thì object vẫn là như vậy, ta chỉ có thể tác động vào object theo những cách mà object đó cung cấp.

  2. Instance là thực tại khách quan được phản ánh lại theo ý thức của con người. Với mỗi object, ta lại định danh cho nó theo một interface nào đó. Cho nên là cùng một object, nó có thể là instance của class A, instance của interface B… Khi ta định danh nó với một khái niệm cụ thể, thì ta sẽ tìm cách tương tác nó theo khái niệm cụ thể đó, tương tự với việc ta ép kiểu để sử dụng các hàm của class vậy.

  3. Vì instance là ý thức chủ quan nên đôi khi nó không đúng hoặc không phù hợp với thực tại khách quan:

Dog d = new Dog();
Animal a = d;
Cat c = (Cat)a;//Yo, wtf man?
c.meow();//Gâu gâu
7 Likes

Tranh luận vô ích, tiếng Anh cũng giống tiếng Việt, dùng từ tương đối thôi.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?