Trong một thời gian dài tôi băn khoăn không hiểu cái gì có thể cực đắt, cực hiện đại, có thể cực kì vô dụng. Và rồi tôi phát hiện ra máy tính là một cái máy ngu ngốc có khả năng làm những việc thông minh phi thường, trong khi lập trình viên là những người thông minh có khả năng làm những việc ngu ngốc phi thường. Bill Bryson
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 (OOP) 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). Để hiểu nó thì cần các khái niệm, do đó bài viết này hỗ trợ 1 vài ví dụ và khái niệm để hiểu căn bản về OOP.

OOP

OOP theo tự nhiên

Với góc nhìn này bạn chỉ cần code sao cho các lập trình viên 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 có thể cung cấp thêm nhiều thông tin ẩn bên dưới. Để làm rõ về vấn đề này, ta sẽ đi từng bước trong tiến trình trừu tượng hóa dữ liệu.

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

Ví dụ 1 - Code không 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 ý nghĩa 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.

Hoặc tìm hiểu thêm về Khóa Học Lập Trình Hướng Đối Tượng Với C++ dành cho người có căn bản lập trình tại STDIO Training.

Bạn cần hỗ trợ các dự án kết nối không dây?

Quí doanh nghiệp, cá nhân cần hỗ trợ, hợp tác các dự án IoT, kết nối không dây. Vui lòng liên hệ, hoặc gọi trực tiếp 0942.111912.

  • TỪ KHÓA
  • Arduino
  • ESP32
  • ESP8266
  • Wifi
  • Bluetooth
  • Zigbee
  • Raspberry Pi
THẢO LUẬN
ĐÓNG