Thế nào là tư duy hướng đối tượng?

Hi all,
Mình hiện đang intern trong một công ty về embedded linux, trong thời gian làm việc mình phải đọc source code linux rất nhiều. Mặc dù công việc chỉ là đọc source example, rồi dev driver theo cái form example đó. Tuy nhiên cá nhân mình thấy rằng việc đọc code của mình khá chậm. Chậm từ việc hiểu cái model quản lý source trong chương trình, chậm hiểu phần cách cả hệ thống quản lý cái chương trình của mình ntn.
Khi hỏi mấy ông anh, thì họ nói họ đọc nhanh là vì có tư duy OOP. Mình cũng biết OOP, cũng đã code mấy ngôn ngữ như C++, Java. Nhưng mình không hiểu các ông ấy ốp được tư duy OOP vào trong việc đọc source C của kernel kiểu gì. Trước giờ mình đều tư duy theo hướng module hóa, tức là từng phần trong hệ điều hành sẽ là ntn và rồi mình đọc source code, trace source theo đúng kiểu hàm gọi hàm và không thấy cái nhìn OOP về kernel source.

Mọi người cho mình hỏi, thế nào là tư duy hướng đối tượng ( NOT “Thế nào là OOP” ).

Và cho mình xin một bài tập để luyện OOP về cách các đối tượng tương tác với nhau.

Thanks to you !

4 Likes

Tư duy hướng đối tượng ít khi áp dụng trong lập trình cấp thấp, bởi vì lập trình cấp thấp đối tượng thu hẹp trong phạm vi cái máy tính, và lúc đó thì tư duy hướng đối tượng không có nhiều tác dụng. Mặc dù ngày nay người ta cũng đã thấy OOP làm tốt việc lập trình hệ điều hành, chỉ là viết lại hàng triệu dòng code thì mệt quá. Chả thế mà lập trình cấp thấp người ta thường chọn ngôn ngữ C để dùng, tận dụng được hơn 10 triệu dòng code đã có.

Hướng đối tượng là sao? Theo cách hiểu của mình (không phải dân IT chuyên nghiệp) nghĩa là bạn dùng ngôn ngữ lập trình + các công cụ hỗ trợ lập trình để giải quyết một vấn đề trong thực tế.

Do đó, hướng suy nghĩ truyền thống của lập trình khi chưa có OOP là bạn suy nghĩ là ta có búa, có đinh, cưa, có băng keo, có gỗ,… giờ thì ta loay hoay sao đó để đóng được cái bàn, cái tủ. Vậy là ông thợ mộc cứ nhảy vào đóng từng thứ một rồi ghép thành bàn, thành tủ. Nói cách khác, tôi đang có một đống dụng cụ, vật liệu đây, giờ cứ đóng, ra cái gì tính sau.

Trong khi đó, suy nghĩ/ tư duy theo lối OOP là nào thì cái tủ gọi là gì (class, object) sẽ cao bao nhiêu, màu sắc gì (thuộc tính), cánh cửa tủ mở ra hay mở vào (method), có mấy bộ phận làm bằng chất liệu cụ thể gì (variable). Lúc này cái tủ là đối tượng, từ đó ta mới chọn sử dụng búa, cưa, đinh, gỗ,… để đóng. Hay nói cách khác, tôi không cần biết anh có dụng cụ/ đồ nghề/ phương tiện gì, anh làm sao đóng cho tôi cái tủ dùng được.

OOP nghĩa là phân rã/ trừu tượng hóa thứ (đồ vật/ quy trình/ công việc…) có trong đời thật thành các thứ trong một ngôn ngữ lập trình. Còn theo kiểu chức năng cũ là trong lập trình có các món này, giờ tìm xem trong thực tế cần lấy món này chọc vào chỗ nào.

12 Likes

Cám ơn bạn. Rất dễ hiểu
Rất nhiều người biết (có thể biết rất rõ) định nghĩa OOP là gì, nhưng để vận dụng nó như thế nào lại là cái khác.
Theo tôi cách vận dụng nó ntn chính là tư duy hướng đối tượng!

1 Like

Đúng, cái khó khi đọc source code chính là việc hình dung ra đối tượng nó là gì, đã được phân rã ra thành những gì và tương tác với các đối tượng khác ntn.
Thanks sir.

1 Like

Một là chưa đủ kiến thức để hiểu.
Hai là mã nguồn không theo tiêu chuẩn.

Khả năng 1 cao hơn nên cần luyện tập va chạm thêm đến một lúc đủ lượng tự nhiên thấy mọi thứ nó sáng sủa dễ đọc ngay.
Còn tư duy OOP nó có vẻ không đúng.

5 Likes

lý thuyết nhiều thì đọc chán cũng ko hiểu đc, cứ đc giao làm chục cái task thì sẽ hiểu dần thôi.

4 Likes

Hay quá a ơi, cách giải thích rất dễ hiểu

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