Tài trợ bài viết này và giới thiệu dịch vụ, sản phẩm, thương hiệu, nhu cầu tuyển dụng của doanh nghiệp đến với cộng đồng.
La Kiến Vinh Ở một cách tiếp cận khác của OOP, tôi hy vọng có thể giúp cho bạn đọc vẫn còn lấn cấn để hiểu được OOP một cách thông suốt. Bài viết nói lên quan điểm hoàn toàn cá nhân để tiếp cận OOP một cách mềm dẽo hơn.
Nội dung bài viết

Giới thiệu

Lập trình hướng đối tượng hay OOP được chúng ta ứng dụng và hay nhắc đến với 4 tính chất cơ bản bao gồm trừu tượng (abstraction), đóng gói (encapsulation), kế thừa (inheritance), đa hình (polymorphism). Tuy nhiên, nếu nhìn ở góc độ khác ta cũng có nhiều ý tưởng khác.

Đối tượng hướng đến

Bài viết này người mới tiếp cận chưa biết về OOP vẫn có thể đọc được, tuy nhiên, bạn sẽ khó khăn khi gặp phải khái niệm class trong bài viết.

OOP

OOP theo tự nhiên

Với góc nhìn này, lập trình hướng đối tượng có nghĩa là làm sao khi bạn code, lập trình viên khác đọc code đó có thể hiểu rằng - ĐÂY LÀ MỘT "NHÓM" DỮ LIỆU CÓ LIÊN QUAN ĐẾN NHAU. Tức là code của bạn biết nói. Để làm rõ về vấn đề này, ta sẽ đi từng bước trong ví dụ về tính trừu tượng hóa dữ liệu bên dưới.

Tính trừu tượng hóa dữ liệu

Ví dụ 1 - Code không biết mang nhiều nội dung

int main()
{
	char* name;

	int cpu;

	int ram;

	float price;

	return 0;
}

Với đoạn code như vậy, bạn đọc cũng chưa hiểu rõ tôi đang đề cập đến vấn đề gì (mặc dù có từ khóa CPU và RAM) có thể đoán được 1 ít thông tin là cái máy tính. Và cũng không biết được là các biến này có liên quan với nhau hay không.

Ví dụ 2 - Code mang được nhiều n hơn

Giả sử với đoạn code dưới

int main()
{
	char* name_1;
	int cpu_1;
	int ram_1;
	float price_1;
	
	char* name_2;
	int cpu_2;
	int ram_2;
	float price_2;

	return 0;
}

Ta cần để ý dòng trống số 7, thông tin đó giúp ta định hướng rõ ràng hơn, có lẽ là ta đang miêu tả 2 "vật thể", hoặc chí ít ta cảm giác được 1 ít sự liên quan giữa các biến.

Ví dụ 3 - Code nói được nhiều hơn nữa

int main()
{
	char* phone_name_1;
	int phone_cpu_1;
	int phone_ram_1;
	float phone_price_1;
	
	char* phone_name_2;
	int phone_cpu_2;
	int phone_ram_2;
	float phone_price_2;

	return 0;
}

Bạn thấy được điều gì nếu tôi thêm tiền tố phone_ vào trước các tên biến. Một thể thống nhất hơn đã hình thành dữ liệu đã được TRỪU TƯỢNG HÓA thông qua một cách thức đơn giản.

Với cách hiện thực ở ví dụ 3 này, ta có thể khẳng định rằng tất cả ngôn ngữ lập trình đều có khả năng hướng đối tượng.

Vậy điểm khác biệt ở C và C++ khi bàn về hướng đối tượng là gì?

Ví dụ 4 - Sự hỗ trợ của kỹ thuật ngoại cảnh

Với ví dụ 3, ta đã hiện thực được 1 "đối tượng" cụ thể, với cách làm này, dữ liệu đã được trừu tượng, tuy nhiên, nó vướng phải một vấn đề đó là chính sách chưa hỗ trợ, nên doanh nghiệp còn vất vả trong việc triển khai ý tưởng, dự án. Mà trong trường hợp này, đó là khả năng của ngôn ngữ lập trình hay nói đúng hơn, là những người có khả năng quyết định hay thiết kế nên ngôn ngữ lập trình.

Vậy điểm khác biệt của C và C++ hay có câu nói là "ngôn ngữ hướng đối tượng" ý chỉ ra rằng, các ngôn ngữ lập trình có hỗ trợ lập trình hướng đối tượng tốt hơn (đỡ cực nhọc hơn khi code) chứ không nói rằng ngôn ngữ đó không có hướng đối tượng. Với tôi, những điều không tồn tại trong cuộc đời này, chúng ta sẽ làm ra nó.

STRUCT VÀ CLASS RA ĐỜI

structclass có thể gọi là 2 ứng cử viên sáng giá nhất để hỗ trợ lập trình hướng đối tượng tốt hơn. Khả năng của struct và class có thể sử dụng để "đại diện" cho cả một nhóm dữ liệu thay vì phải gõ lại rất nhiều, và làm tăng khả năng nhìn thấy nó có vẻ trông hướng đối tượng hơn.

struct CPhone
{
	char* name;
	int cpu;
	int ram;
	float price;
};

int main()
{
	CPhone phone_1;
	CPhone phone_2;
	
	return 0;
}

Ngoài ra, để hiểu thêm về code mang nhiều nội dung bạn có thể đọc thêm bài viết Stdio Coding Convention - Level 1.

THẢO LUẬN
Lập trình viên là người có bản chất lạc quan, họ cũng có con mắt tinh anh để nhìn những khuyết điểm. Một trí tưởng tượng quá khích cho các kịch bản thảm họa là một tài sản chuyên nghiệp, họ phải suy nghĩ qua mọi thứ mà có thể sai để rèn luyện tay nghề của họ. Edsger W. Dijkstra
ĐÓNG