5.1.1 Lớp và đối tượng trong đời thực

Tất cả các chương trình của chúng ta và tất cả các kỹ thuật chúng ta đã sử dụng từ đầu đến giờ là cái gọi là phong cách lập trình hướng thủ tục. Đó là cách tiếp cận chi phối ngành phát triển phần mềm trong nhiều thập kỷ của CNTT và nó vẫn được sử dụng ngày nay. Chúng ta có thể nói rằng nó sẽ không biến mất trong tương lai, vì nó hoạt động rất tốt cho các loại dự án cụ thể ( không phức tạp và không quá lớn). Phương pháp tiếp cận hướng đối tượng còn khá trẻ (trẻ hơn nhiều so với cách tiếp cận hướng thủ tục), nó đặc biệt hữu ích khi áp dụng vào các dự án lớn và phức tạp được thực hiện bởi các team lớn bao gồm nhiều lập trình viên. Nó làm cho nhiều tác vụ quan trọng trở nên dễ dàng hơn, ví dụ: phân chia dự án thành các phần nhỏ, độc lập và phát triển độc lập các thành phần khác nhau của dự án.

Ngôn ngữ C++ được tạo ra như một công cụ phục vụ cho lập trình đối tượng. Điều này không có nghĩa là bạn không thể sử dụng nó để lập trình hướng thủ tục. Bạn vẫn có thể sử dụng nó cho các chương trình thủ tục, nhưng đó không phải là mục đích chính của nó. Như bạn đã biết, ngôn ngữ C++ phát triển từ tổ tiên nổi tiếng của nó, ngôn ngữ lập trình C. C++ có thêm một số thứ thú vị mà C không có.

Điều này không có nghĩa là C tệ hơn C++. Đó là một công cụ khác được sử dụng trong các môi trường khác. Một cái búa không tệ hơn một cái rìu. Tất cả mọi thứ phụ thuộc vào nhu cầu.


Trong phương pháp tiếp cận thủ tục, chúng ta có thể chia thế giới thành hai loại khác nhau và riêng biệt: thế giới dữ liệu (data) và thế giới của code. Thế giới của data được thể hiện bởi các biến với các kiểu khác nhau, trong khi thế giới của code được thể hiện bởi các hàm. Hàm có thể sử dụng dữ liệu nhưng không có chiều ngược lại. Và các hàm có thể lạm dụng dữ liệu, tức là sử dụng dữ liệu một cách trái phép (ví dụ như hàm sin nhận được số dư tài khoản ngân hàng như một tham số).

Phương pháp tiếp cận hướng đối tượng cho thấy một cách suy nghĩ hoàn toàn khác. Dữ liệu và hàm được đính kèm với nhau trong cùng một thế giới, được chia thành các lớp (class). Mỗi class giống như một công thức được sử dụng để tạo ra một đối tượng (object). Bạn có thể tạo ra nhiều đối tượng để giải quyết vấn đề của bạn. Mỗi đối tượng có một tập các thuộc tính (tiếng Anh là properties hoặc attributes) và có thể thực hiện một tập các phương thức (tiếng Anh là methods hoặc functions).

Các class có thể được sửa đổi nếu chúng không phù hợp với các mục đích cụ thể, và kết quả là các class mới có thể được tạo ra. Các class mới thừa các thuộc tính và phương thức từ bản gốc và thường thêm một số thuộc tính và phương thức mới, tạo ra công cụ mới và cụ thể hơn.

Các đối tượng là những hóa thân của ý tưởng thể hiện trong các class, giống như một miếng bánh pho mát trên đĩa của bạn là một hóa thân của một ý tưởng được thể hiện từ công thức được in trong một cuốn sách nấu ăn. Các đối tượng tương tác với nhau, trao đổi dữ liệu hoặc gọi các phương thức của chúng. Một class được xây dựng hợp lý có thể bảo vệ dữ liệu nhạy cảm và che giấu nó khỏi những sửa đổi trái phép. Không có ranh giới rõ ràng giữa dữ liệu và hàm: chúng tồn tại cùng nhau trong cùng đối tượng.