Trang chủ » C++ không phải là ngôn ngữ hướng đối tượng?
Chuyện bên lề

C++ không phải là ngôn ngữ hướng đối tượng?

c-plus-plus

Hôm nay ngẫu hứng, mình có tình cờ đọc được 1 bài blog của tác giả nước ngoài nói về vấn đề này. Trước đây mình học về C/C++ không để ý cho lắm, nhưng xong bài này mình cảm thấy cần phải suy nghĩ lại về C/C++ :D. Có lẽ một số bạn nghĩ rằng, C++ chắc chắn phải là ngôn ngữ hướng đối tượng, bởi vì nó có lớp, có đối tượng, có kế thừa,… mà mình đã liệt kê ở trong series Lập trình hướng đối tượng. Vậy rốt cuộc, C++ có phải ngôn ngữ hướng đối tượng hay không?

1. “Hướng đối tượng” nghĩa là gì?

Có lẽ bạn phải dựa vào định nghĩa về hướng đối tượng (OOP). Nếu bạn nghĩ rằng OOP là ngôn ngữ cung cấp những khả năng làm việc với những đối tượng, thì chính xác C++ là ngôn ngữ hướng đối tượng rồi đấy!

Nhưng, như thế thì, nếu tuỳ thuộc vào những tính năng bạn cho là cần phải có của OOP, thì ngôn ngữ C cũng được xem là OOP cả đấy. Mình đã từng thấy code C có những thứ giống như hàm dựng, phương thức, hàm ảo và hơn thế nữa.

Tuy nhiên, nếu bạn nghĩ OOP là ngôn ngữ mà phải lập trình với những đối tượng, nhồi hết mọi thứ vào trong lớp (class), và cung cấp hàng tấn những tính năng mà làm cho OOP trở nên dễ dàng hơn, thì rõ ràng C++ không phải là ngôn ngữ hướng đối tượng!

Liệu C++ có phải là ngôn ngữ hướng đối tượng?
Liệu C++ có phải là ngôn ngữ hướng đối tượng?

2. So sánh C++ và OOP

Với những điều trên, có thể một số người học Java hay C# đều xem rằng C++ là ngôn ngữ tệ hại: Họ mong rằng OOP với những tính năng phù hợp ví dụ như cơ chế xoá bộ nhớ rác (Garbage Collector) và thất vọng bởi vì họ không thấy những điều mà sách vở đã ghi.

Thậm chí, họ không quan trọng việc C++ chỉ cung cấp những tính năng lập trình hướng đối tượng – thế mạnh của nó – bởi vì họ không biết hoặc không quan tâm những tính năng khác.

Vì vậy, với những người viết ứng dụng thuần OOP, họ không nên sử dụng ngôn ngữ C++, bởi vì nó có thể không đáp ứng đủ. C++ không phải là ngôn ngữ thuần hướng đối tượng, và nếu bạn cần 1 ngôn ngữ như vậy, mặc dù nó không phải là 1 ngôn ngữ tệ hại, nhưng nó cũng không thuần OOP được.

3. Nếu không phải là OOP, vậy C++ là gì?

Vậy, chúng ta nên đặt C++ ở vị trí nào? Nó không phải là OOP, mặc dù bạn có thể thao tác với đối tượng bằng C++. Nó cũng không phải là ngôn ngữ hướng thủ tục, bởi vì vậy thì giống C mất rồi. Nó cũng không phải là ngôn ngữ bậc thấp, bởi vì nó cung cấp những tính năng bậc cao được trừu tượng hoá. Bạn có thể chóng mặt và loạn não vì điều này đấy!

C++ cung cấp những tính năng lập trình tổng quát, bao gồm thời gian compile tính năng Turing-complete (đệ quy không giới hạn) và bạn có thể lập trình chức năng và những môi trường lấy nền tảng lập trình, nếu bạn đủ độ “crazy”.

oop-vs-pp

Từ những điều trên, C++ được gọi là ngôn ngữ đa mô hình. Bạn có thể làm mọi thứ với nó, nếu bạn muốn, nhưng nó không phải là ngôn ngữ tốt nhất để làm mọi thứ. C++ là 1 công cụ trong số rất nhiều, và công việc của 1 lập trình viên là chọn đúng công cụ để giải quyết vấn đề. Biết cách vận dụng những công cụ ấy cũng là nhiệm vụ của họ, tức là biết khi nào cần sử dụng những khía cạnh về OOP hay thủ tục hay tổng quát của C++.

Độ phức tạp này có thể khiến C++ khó học hơn những ngôn ngữ khác, nhưng cũng rất thú vị nếu như bạn nằm lòng toàn bộ những tính năng trên, một khi bạn đã biết khi nào và làm thế nào để kết hợp chúng.

Bài viết được dịch từ http://arne-mertz.de/2015/07/c-is-not-an-object-oriented-language/

About the author

Võ Hoài Sơn

Tính tình bất định
Chọc vào là bịnh
Rất yêu lập trình
Luôn code hết mình
Mình hiện đang là sinh viên của trường ĐH Khoa học tự nhiên TPHCM. Bản thân rất thích code, kiêm luôn cả mần thơ nên thường hơi hâm hâm dở dở. Ngoài ra chém gió, chém chuối, chém trái cây các kiểu cũng là sở trường của mình. Rất mong được làm quen với các bạn :D

Add Comment