Quay lại bài học – Giới thiệu về các biến, chúng ta đã biết, một đối tượng trong C++ được định nghĩa: “là một phần bộ nhớ có thể được sử dụng để lưu trữ các giá trị”. Một đối tượng có tên, thì được gọi là một biến.

Trong lập trình truyền thống (những gì chúng ta đã và đang làm trước thời điểm này), Chương trình về cơ bản là danh sách các chỉ thị dành cho máy tính mà định nghĩa các dữ liệu (thông qua các đối tượng) và sau đó làm việc với các dữ liệu này (thông qua các câu lệnh và hàm). Dữ liệu và các hàm làm việc trên dữ liệu dó là các thực thể riêng biệt, được kết hợp lại với nhau để tạo ra kết quả mong muốn. Do sự tách biệt này, lập trình truyền thống thường không cung cấp được một biểu diễn trực quan về thế giới hiện thực. Lập trình viên phải tự quản lý và kết nối các thuộc tính – properties (chính là các biến – variables) với các hành vi (là các hàm – functions) theo cách thích hợp. Điều này làm cho code trở thành như sau:

driveTo(you, work);

Vậy thì, lập trình hướng đối tượng (object-oriented programming) là gì? Hãy nhìn xung quanh bạn – bạn có thể nhìn thấy các đối tượng ở mọi nơi: các quyển sách, các tòa nhà, thực phẩm, và thậm chí bạn cũng chính là một đối tượng. Các đối tượng bao gồm hai thành phần chính: 1) Một danh sách các thuộc tính có liên quan (ví dụ: trọng lượng, màu sắc, kích thước, độ rắn, hình dạng, v.v…) và 2) Một số hành vi mà chúng có thể thể hiện (ví dụ: được mở ra, làm cho những thứ khác nóng lên, v.v…). Những thuộc tính và hành vi này không thể tách rời nhau.

Lập trình hướng đối tượng (Object-oriented programming – OOP) cho phép chúng ta tạo ra những đối tượng có khả năng gắn kết cả các thuộc tính và các hành vi thành một thể thống nhất, có thể tái sử dụng. Điều này làm cho code trở nên giống như sau:

you.driveTo(work);

Đoạn code trên không chỉ dễ đọc hơn, nó còn thể hiện rõ ràng hơn đối tượng ở đây là gì (you) và hành vi nào đang được thực hiện (lái xe đi đâu đó). Thay vì tập trung vào việc viết các hàm, chúng ta sẽ tập trung vào việc định nghĩa các đối tượng đã có tập hợp các hành vi được xác định rõ. Đây là lý do vì sao mô hình phát triển phần mềm này lại được gọi là “hướng đối tượng”.

Lập trình hướng đối tượng cho phép lập trình viên dễ dàng tổ chức chương trình của mình thành các module, giúp việc viết code trở nên đơn giản hơn và code cũng dễ hiểu hơn, đồng thời, mức độ tái sử dụng của code trong lập trình hướng đối tượng cũng được đẩy lên tối đa. Các đối tượng được định nghĩa trong lập trình hướng đối tượng đã giúp cho việc xử lý các dữ liệu trong khi lập trình trở nên trực quan hơn, bằng cách cho phép chúng ta định nghĩa cách mà chúng ta tương tác với các đối tượng này, và cách mà chúng tương tác với các đối tượng khác.

Lưu ý rằng OOP (lập trình hướng đối tượng) sẽ không thay thế các phương pháp lập trình truyền thống. Thay vào đó, nó cung cấp cho bạn những công cụ bổ sung hữu dụng, giúp ích cho bạn khi cần phải xử lý những trường hợp phức tạp trong việc lập trình để giải quyết các bài toán thực tế, trong cuộc sống hằng ngày.

Lập trình hướng đối tượng cũng đưa ra một số khái niệm hữu ích khác như: kế thừa (inheritance), đóng gói (encapsulation), trừu tượng hóa (abstraction), và đa hình (polymorphism). Các nhà thiết kế ngôn ngữ lập trình có một triết lý là: never use a small word where a big one will do – tạm dịch: đừng bao giờ sử dụng một từ ngữ nhỏ, khi mà một từ ngữ lớn hơn có thể. Chúng ta sẽ thảo luận về tất cả các khái niệm này trong các bài hướng dẫn sắp tới. Khối lượng kiến thức là không nhỏ, nhưng một khi bạn đã quen với OOP, tôi cá rằng bạn có thể sẽ không bao giờ muốn quay lại lập trình truyền thống thuần túy nữa.

Lưu ý rằng, thuật ngữ “đối tượng” được nhắc đến rất nhiều khi làm việc với OOP, và điều này có thể gây ra một số nhầm lẫn. Trong lập trình truyền thống, một đối tượng là một phần bộ nhớ dùng để lưu trữ các giá trị. Còn trong lập trình hướng đối tượng, một “đối tượng” sẽ là sự kết hợp của đối tượng trong lập trình truyền thống và các khái niệm về thuộc tính (property) và hành vi (behavior). Từ thời điểm này trở đi, khi sử dụng thuật ngữ “đối tượng”, chúng ta sẽ liên hệ tới “đối tượng” trong lập trình hướng đối tượng.