Hỏi về khái niệm đối tượng

Mình mới học về lập trình , mình học về đối tượng và lớp thì thấy có nói về đối tượng là 1 thực thể có trạng thái và hành vi .
mình thấy họ hay lấy ví dụ về con chó : " Nếu chúng ta xem xét một con chó, thuộc tính của nó sẽ là – tên, giống, màu sắc, và các hành vi là: sủa, chạy, ăn,… "
nhưng mình đang thắc mắc về những thứ khác như cái bàn , bức tranh treo trên tường , hay cái bánh bao , thì nó có hành vi là gì ?
mong mọi người giải thích cho mình hiểu với

Vào vấn đề cụ thể thì mới có mấy cái đó bạn :smiley: còn gọi là quá trình mô hình hóa.

4 Likes

bạn có thể cho mình hỏi là có khi nào đối tượng chỉ có thuộc tính hoặc hành vi thôi không , hay là luôn luôn phải có cả thuộc tính và hành vi.

Không bắt buộc, không có hành vi thì thôi.
Hành vi hay thuộc tính có hay không là do người lập trình.

5 Likes

Hi Trần Hạ Lê.
Cái bàn có hành vi đổ. Bức tranh có hành vi cũ đi.

Thuộc tính là các trạng thái và nó không ảnh hưởng đến các đối tượng khác hay chính nó. VD tuổi của bức tranh. Muốn nó thay đổi hoặc ảnh hưởng đến các đối tượng khác cần thông qua hành vi.

7 Likes

Thuộc tính là các trạng thái và nó không ảnh hưởng đến các đối tượng khác hay chính nó. VD tuổi của bức tranh. Muốn nó thay đổi hoặc ảnh hưởng đến các đối tượng khác cần thông qua hành vi.

mình chưa hiểu đoạn này lắm, bạn có thể giải thích thêm hoặc cho mình 1 cái ví dụ để mình hiểu hơn không. cảm ơn bạn

Đơn giản thôi đừng nghĩ phức tạp quá, thuộc tính giống như tính từ.

Ví dụ:
Nam là một sinh viên
Cậu ấy thông minh nhưng xấu trai.
Hoa cũng là một sinh viên
Cô ấy xinh và thông minh

Xinh và xấu trai có thể gọi là thuộc tính “vẻ bề ngoài”
Việc Hoa xinh hay xấu không ảnh hưởng gì đến Nam thông minh hay đẹp trai.
Việc Nam thông mình cũng không liên quan gì đến việc anh ta xấu trai hay không.

Ta có thêm một bác sỹ thẩm mỹ nữa như sau
Lâm là một bác sỹ thẩm mỹ giỏi
Lâm có thể thay đổi vẻ bề ngoài của người khác với hành vi phẫu thuật thẩm mỹ

Vậy sau khi Lâm thực hiện hành vi phẫu thuật thẩm mỹ trên Nam, khiến thuộc tính “vẻ bề ngoài” của Nam
từ “xấu trai” chuyển sang “đẹp trai”

Code thì như sau:

sinhVien Nam = new sinhVien("xau trai", "thong minh");
sinhVien Hoa = new sinhVien("xinh gai", "thong minh");

System.out.println(Nam.veBeNgoai); // xau trai


bacSy Lam = new bacSy("gioi");
Lam.phauThuatThamMy(Nam);

System.out.println(Nam.veBeNgoai); // dep trai

Ở đây hành vi phauThuatThamMy của Lâm đã ảnh hưởng thuộc tính veBeNgoai của Nam.

5 Likes

mình muốn hỏi thêm , nếu mình muốn làm cái bánh, nguyên liệu là bột và đường, các bước làm bánh là trộn bột , tạo hình và cuối cùng là nướng.
thì đối tượng của mình có phải là bánh, nó có thuộc tính là bột và đường và có các hành vi là trộn, tạo hình và nướng không ?

1 Like

Hi Trần Hạ Lê.
Theo mình là không. Khi đã dùng bột làm bánh thì bột mất đi. Lượng đổi chất rời.

3 Likes

Khi một người lập trình đối tượng thì cô/anh ta phải biết đối tượng đó cần phải có những gì. Sau đó mới phân tích thành hành vi và thuộc tính.

Về cái bánh, mình tưởng tượng ra một game làm bánh, ở đó người chơi có thể làm các loại bánh họ thích, theo một công thức nhất định.

Thế thì banhGato chẳng hạn sẽ có thành phần là bột, đường, sữa trứng…
còn banhPizza lại có thành phần bột, phô mai, thịt bò…

Mình có thể để thuộc tính “thành phần” để phân biệt chúng cũng được.
banhGato.thanhPhan = [bột, đường, sữa trứng]
banhGato.thanhPhan = [bột, phô mai, thịt bò, nấm]

Tuy nhiên các thao tác trộn, tạo hình, nướng không phải là hành vi của bánh, mà là hành vi của người làm bánh.
Bạn nghe thử hai câu dưới nhé

  1. Trong bếp, cái bánh gato đang trộn bột
  2. Trong bếp, người làm bánh đang trộn bột làm cái bánh ga tô.

Bạn thấy câu nào hợp lý, câu nào không?

Ngoài ra nên nhớ, khi người làm bánh đang trộn bột thì cái bánh hoàn chỉnh vẫn chưa ra đời đâu nhé.

6 Likes

Một đối tượng có thể có thuộc tính và hành vi, nhưng không nhất thiết phải có cả 2.

Lấy ví dụ về 1 đối tượng không có thuộc tính thì rất khó, nhưng mà nó tồn tại. Trong các ngôn ngữ hướng đối tượng thường có những loại đối tượng không có thuộc tính.

Còn ví dụ về đối tượng không có hành vi thì đó, ví dụ như cái bàn. Về mặt cơ bản thì bàn không có hành vi. Nhưng có những cái bàn lại có hành vi, ví dụ phát sáng, bật nhạc…

Bàn là lớp, mỗi cái bàn là một đối tượng. Đối tượng có thể có thêm những thuộc tính/hành vi mà lớp không có, nhưng phải có tất cả những thuộc tính/hành vi đã được định nghĩa trong lớp.

4 Likes

bạn ơi cho mình hỏi là hành vi của 1 vật là phải tự nó làm hay là nó phụ thuộc vào người khác bạn, ví dụ như cái bút có hành vi là viết, nhưng cái bút đâu có thể tự viết được nên mình nghỉ viết là hành vi của con người, còn cái viết không có hành vi. mình nghỉ vậy không biết đúng không

Về mặt cơ bản thì bút có các hành vi là “chảy mực ra”, “hỏng”, “hết mực” nhé :joy: Viết là hành vi của con người.

Tuy nhiên, có những trường hợp ta có thể code để cho “viết” là hành vi của bút, dù nhìn hơi ngứa mắt:

public void viết(Người người, Giấy giấy, Nội_dung nội_dung)
{
    người.viết(this, giấy, nội_dung);
}
3 Likes

Bàn: đổ.
Tranh: rơi, vỡ.
Không phải đối tượng là bắt buộc phải có cả 2 cái.

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