Instance và property trong lập trình OOP khác nhau chỗ nào?

Cho em hỏi instance và property trong lập trình OOP khác nhau chỗ nào ạ ?

Một người có chân, tay đầu…

Chân, tay, đầu là các properties
Một con người là một instance của class “con người”

1 Like

nghĩa là property chỉ các thuộc tính , còn instance chỉ tên của class được tạo . hiểu như vậy có đúng ko

trong các tài liệu tiếng anh còn dùng từ “filed” vậy nó có nghĩa là gì ?

mấy cái này chủ động google đi , search cái nó ra cả đống mà , giải thích rõ ràng nữa .

4 Likes

instance ko phải là tên class được tạo, mà là một thực thể, một cái gì đó đã được hình thành dựa trên class.
Ví dụ class là “con người”, thì mỗi con người là một instance thuộc class “con người”. Tôi là một instance, bạn là một instance, nhưng ko ai có thể đại diện cho cả class “con người”

Chính xác thì chân, tay, đầu là field, tuy nhiên việc tác động đến field có thể là trực tiếp, có thể là gián tiếp thông qua property. Nếu một field có đăng ký property thì việc truy cập từ bên ngoài đối tượng sẽ là property

Ví dụ cho một class sử dụng property:

Class C
{
    public int a;//đây là field
    public int b{get; private set;}//đây là property
}

Giả sử ta có một khai báo như sau:

C i = new C();//i là instance

Như vậy:

int x;
x = i.a;//Hợp lệ vì a là public
x = i.b;//Hợp lệ vì getter của b là public
i.a = 5;//Hợp lệ vì a là public
i.b = 5;//Không hợp lệ vì setter của b là private
2 Likes

Thông qua lớp Vector mình xin giải thích như sau :

  • Attribute : thuộc tính bản chất của lớp
    Tọa độ x, y, z là thuộc tính bản chất(Attribute) của class Vector
    Phải có tọa độ x, y, z thì mới là class Vector
  • Property : thuộc tính thêm (thêm vào với mục đích để thuận tiện khi code)
    magnitude lưu giá trị độ lớn vector
    sqrmanitude lưu giá trị bình phương độ lớn vector
    Những thuộc tính này không bắt buộc phải có để tạo lớp Vector, nhưng thuận tiện để code hơn khi có
  • Field : Trường dữ liệu, từ này thường dùng cho kiểu cấu trúc (Struct), cũng có nghĩa là thuộc tính

Tóm lại Attribute, Property, Field đều là thuộc tính, nhưng có đôi chút khác biệt

  • Variable : Biến, từ này thường dùng trong lập trình cấu trúc (Structured programming), đi chung với kiểu dữ liệu giá trị (Value), kiễu dự liệu định sẵn (built-in)
    int a = 2;
    double b = 2.4;
  • Instance : Thực thể, từ này thường dùng trong lập trình hướng đối tượng (Object Oriented Programing) đi chung với kiểu dữ liệu tham khảo (reference), kiểu dữ liệu tự định nghĩa (user-defined)
    Dog lulu = new Dog();
    Chú chó lulu là thực thể(instance) của lớp Dog
  • Object : Từ này có nghĩa tương tự instance

Tóm lại Instance, Variable, Object đều là biến thôi.

  • Function : Hàm, thường dùng trong lập trình cấu trúc(Structured Programing)
  • Method : Phương thức thường dùng trong lập trình hướng đồi tương
  • Behavior : Hành vi, giống method thường dùng trong lập trình hướng đối tượng
    ví dụ : Nhân vật Game có hành vi Chém, Đấm, Bắn súng …

Tóm lại tụi nó là hàm hết

  • Parameter : Tham số (Dùng khi định nghĩa hàm)
    void swap(int &a, int &b)
    Ở đây a và b là tham số
  • Argument : Đối số (Dùng khi gọi hàm, truyền đối số cho hàm)
    swap(a, b)
    Ở đây a và b là đối số

Mình bị lẫn lộn các từ này khi học lập trình
Đây là những gì mình tìm hiểu được
Mong chia sẽ với các bác và mong được góp ý sửa sai

2 Likes

Bạn không sai nhưng lạc đề rồi bạn, chủ thớt hỏi về C# chứ ko phải là hỏi về OOP đâu, vì Property (tính chất) là một khái niệm của C# mà. Vì vậy mình sẽ giải thích trên C# :))

Attribute của bạn nói, nó là Field (trường).
Property mà bạn nói, nó là Field. Khái niệm và ví dụ về Property trong C# mình đã đưa ra ở comment trên. Property được khai báo theo cách khai báo Method, và sử dụng theo cách sử dụng Field.

Trong một khai báo Class, một Field không bắt buộc là kiểu Struct, có thể là kiểu Class. Cũng không thể dùng từ “thường” vì tần suất bạn sử dụng field là class cũng khá nhiều, tuỳ theo mục đích của class cha là gì. Chú ý trong C# các kiểu dữ liệu chỉ gồm 2 nhóm là “struct” và “class”, kể cả các kiểu dữ liệu nguyên thuỷ cũng sẽ được wrap vào một strong 2 nhóm trên. Ví dụ “int” được wrap vào struct Int32, “string” được wrap vào class “String”.

Instance (thực thể) có nghĩa rộng hơn Object (đối tượng). Một class luôn có một static instance, với các field chính là các static field của class đó. Instance này được định danh thông qua class. Còn Object mà bạn nói là non-static instance và được định danh thông qua Variable (biến).

Việc định danh thông qua instance dẫn tới C# không có Function (hàm). Mọi thứ đều là Method (phương thức) và được gọi đến thông qua một instance nào đó, kể cả phương thức Main().

Mình chưa bao giờ gặp khái niệm Behavior nên không ý kiến.

Parameter (tham số) và Argument (đối số) thì đúng như bạn nói. Nhưng bạn chủ thớt hỏi về C#, ta sẽ giả định như bạn đó không hiểu ký hiệu “&” và khái niệm “hàm” :)) Việc tìm hiểu cách khai báo và sử dụng phương thức, bạn ấy sẽ hiểu sau.

Nói thêm: Attribute là một khái niệm khá phức tạp và ít dùng trong C#, mình cũng chưa biết rõ. Nếu muốn timnf hiểu, bạn có thể đọc ở đây.

3 Likes

Cám ơn bạn, nhờ bạn mình hiểu thêm được nhiều điều.

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