Search…

Lập Trình Hướng Đối Tượng Ở Một Cách Tiếp Cận Khác - Tính Trừu Tượng

La Kiến VinhLa Kiến Vinh
15/09/20203 min read
Hướng tiếp cận tính trừu tượng và OOP theo khái niệm và ví dụ mềm dẻo.

Lập trình hướng đối tượng (OOP) với 4 tính chất cơ bản bao gồm:

  • Tính trừu tượng (abstraction).
  • Tính đóng gói (encapsulation).
  • Tính kế thừa (inheritance).
  • Tính đa hình (polymorphism).

Để hiểu nó thì cần các khái niệm, bài viết này hỗ trợ 1 vài ví dụ để làm khái niệm hiểu căn bản về tính trừu tượng và OOP.

OOP

OOP theo tự nhiên

Với góc nhìn này chỉ cần 1 phương pháp lập trình sao cho các lập trình viên khác khi khảo sát code có thể hiểu rằng: Đây là 1 nhóm dữ liệu có liên quan với nhau mà không cần quá nhiều chú thích. Nếu đạt được điều này, nghĩa là code có mang 1 lượng nội dung giúp gia tăng khả năng trừu tượng.

Để giải thích rõ hơn, xem xét các bước ví dụ bên dưới.

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, nội dung đang đề cập vẫn chưa rõ ràng, chưa biết đang đề cập điều gì (mặc dù có từ khóa cpuram) có thể đoán được 1 ít thông tin là đang đề cập đến cái máy tính nhưng độ tin cậy vẫn ở mức thấp.

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

int main()
{
	char* name_1;
	int cpu_1;
	int ram_1;
	float price_1;
// LINE 8
char* name_2; int cpu_2; int ram_2; float price_2; return 0; }

Để ý dòng // LINE 8, thông tin đó giúp ta định hướng rõ ràng hơn, nó ngăn cách các "cụm biến", giúp định hướng nhiều hơn về sự liên quan nhiều hơn 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;
// LINE 8
char* phone_name_2; int phone_cpu_2; int phone_ram_2; float phone_price_2; return 0; }

Thêm tiền tố phone_ vào trước các tên biến, gia tăng khả năng định hướng, tạo ra 1 thể thống nhất hơn, hình thành 1 dữ liệu được trừu tượng hóa, và đây là 1 cách thức đơn giản.

Với cách hiện thực ở ví dụ 3 này, có thể thấy ngôn ngữ lập trình nào cũng đều có khả năng hướng đối tượng, nhưng độ tin cậy không cao do mang nhiều cảm tính và vẫn có thể can thiệp vào chi tiết quá sâu (quá tường tận phone_ có gì thay vì hiểu đó là phone), do đó cần được hỗ trợ nhiều hơn để mang độ chính xác cao.

Ví dụ 4 - Sự hỗ trợ của ngôn ngữ lập trình

Ví dụ 3 đã hiện thực được các "đối tượng" cụ thể, với cách làm này dữ liệu đã được trừu tượng nhưng vẫn có độ chính xác không cao, do đó nên sử dụng struct hoặc class để thống nhất chuẩn chung và độ chính xác cao hơn, không những vậy nó còn hỗ trợ nhiều công cụ hữu ích giúp lập trình nhanh hơn và kiến trúc phần mềm rõ ràng hơn.

struct và class

structclass, nhất là class ra đời 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 tính trừu tượng. Bên cạnh đó cũng dễ dàng hỗ trợ nhiều công cụ hữu ích như hàm tạo, hàm tạo sao chép, hàm hủy, hay viết lại các phương thức, ... hay chỉ dẫn rõ ràng hơn sự tương tác giữa các đối tượng.

class Phone
{
	char* name;
	int cpu;
	int ram;
	float price;
};

int main()
{
	Phone phone_1;
	Phone phone_2;
	
	return 0;
}
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024