CodeGym /Khóa học Java /Python SELF VI /Giới thiệu về OOP

Giới thiệu về OOP

Python SELF VI
Mức độ , Bài học
Có sẵn

2.1 Những khái niệm cơ bản về OOP

Nền tảng của cách tiếp cận lập trình hướng đối tượng là nguyên lý OOP. Đây là khi mọi thực thể trong chương trình đều được coi là đối tượng. Các đối tượng — là dữ liệu cộng với các methods/functions mà thực hiện điều gì đó trên các dữ liệu này.

Có thể nói rằng đối tượng có trạng thái và hành vi. Trạng thái của đối tượng được cung cấp bởi dữ liệu của nó được lưu trữ trong các biến nội bộ của nó. Hành vi của đối tượng — là tập hợp tất cả các hành động mà các phương thức của nó thực hiện.

Trong một chương trình trung bình có hàng nghìn đối tượng, trong một lớn — hàng triệu. Để giảm bớt sự hỗn loạn, người ta quyết định tổ chức các đối tượng thành các lớp, và các lớp — thành một số loại hệ thống phân cấp.

Điều này thật thú vị! Khái niệm về hệ thống phân cấp lớp được lấy từ thế giới động vật, nơi có người là linh trưởng, và linh trưởng là động vật có vú, v.v.

Mỗi đối tượng có một lớp mà thông qua đó nó được tạo ra. Mặt khác, lớp — là một mẫu đối tượng, mặt khác — đó là một đối tượng độc lập với các đặc điểm của riêng mình (chi tiết bên dưới).

Để hiểu rõ hơn về khái niệm lớp, hãy xem các định nghĩa sau:

Lớp:

Lớp — là mẫu hoặc kế hoạch để tạo đối tượng, xác định thuộc tính và phương thức, đặc trưng cho tất cả các đối tượng thuộc loại này. Các lớp cho phép tổ chức dữ liệu và các hàm, làm việc với các dữ liệu đó, thành một tổng thể duy nhất.

Đối tượng:

Đối tượng — là một phiên bản của lớp. Mỗi đối tượng có trạng thái (được xác định bởi các thuộc tính) và hành vi (được xác định bởi các phương thức).

Đóng gói:

Đóng gói là việc ẩn đi triển khai bên trong của lớp và cung cấp một giao diện để tương tác với các đối tượng của lớp này. Điều này giúp bảo vệ dữ liệu và quản lý quyền truy cập vào chúng.

Kế thừa:

Kế thừa cho phép một lớp (con) kế thừa các thuộc tính và phương thức của lớp khác (cha). Điều này hỗ trợ việc tái sử dụng mã và đơn giản hóa việc hỗ trợ mã.

Đa hình:

Đa hình cho phép sử dụng một giao diện chung để làm việc với các đối tượng thuộc các lớp khác nhau. Điều này đạt được nhờ việc ghi đè các phương thức trong các lớp con kế thừa từ cha.

Trừu tượng:

Trừu tượng là việc xác định các đặc điểm chung của đối tượng và tạo ra các lớp đại diện cho các đặc điểm chung này. Điều này giúp đơn giản hóa các hệ thống phức tạp và cải thiện sự hiểu biết.

Nếu bạn hiểu ít nhất một nửa — tốt lắm. Tiếp theo chúng ta sẽ phân tích từng điểm này chi tiết hơn.

2.2 Trừu tượng

Một ví dụ tốt về trừu tượng trong cuộc sống thực là mô tả các chức danh trong một công ty hoặc tổ chức. Tên của vị trí — là một chuyện, còn trách nhiệm của từng vị trí cụ thể — lại là một chuyện hoàn toàn khác.

Hãy tưởng tượng bạn đang thiết kế cấu trúc của công ty tương lai của mình. Bạn có thể phân phối trách nhiệm của thư ký, "rải" chúng cho một số vị trí công việc khác. Có thể chia nhỏ vị trí giám đốc điều hành thành một số vị trí độc lập: giám đốc tài chính, giám đốc kỹ thuật, giám đốc marketing, giám đốc nhân sự. Hoặc, ví dụ, kết hợp các vị trí quản lý văn phòng và tuyển dụng thành một.

Từ góc độ lập trình, trừu tượng — là, hãy nói vậy đi, phân chia hợp lý chương trình thành các đối tượng. Thường thì bất kỳ chương trình lớn nào cũng có thể được miêu tả bằng hàng chục cách khác nhau dưới dạng các đối tượng tương tác. Trừu tượng cho phép chọn lọc những đặc điểm chính và bỏ qua những thứ không quan trọng.

Trừu tượng — giống như chiến lược trong quân sự. Chiến lược kém — và bất kỳ chiến thuật thiên tài nào cũng không thể khắc phục được tình hình.

2.3 Đóng gói

Mục tiêu của đóng gói — là cải thiện chất lượng mức độ tương tác giữa các phần tử bằng cách đơn giản hóa sự tương tác của chúng.

Và cách tốt nhất để đơn giản hóa điều gì đó — là ẩn đi tất cả những phần phức tạp khỏi tầm mắt của người ngoài cuộc. Ví dụ, nếu bạn ngồi trong buồng lái của Boeing, bạn không hiểu ngay cách điều khiển nó:

Mặt khác, đối với hành khách trên máy bay, mọi thứ trông đơn giản hơn nhiều: mua vé, ngồi lên máy bay, cất cánh và hạ cánh. Bạn có thể dễ dàng di chuyển từ lục địa này sang lục địa khác, chỉ cần có kỹ năng "mua vé" và "ngồi lên máy bay". Tất cả các khó khăn dưới dạng chuẩn bị máy bay để bay, cất cánh, hạ cánh và các tình huống bất thường khác đều được giấu kín khỏi chúng ta. Chưa kể đến định vị vệ tinh, chế độ lái tự động và các trung tâm kiểm soát tại sân bay. Và điều này làm cuộc sống của chúng ta dễ dàng hơn.

Từ góc độ lập trình, đóng gói — là "ẩn đi việc triển khai". Tôi thích định nghĩa này. Lớp của chúng ta có thể chứa hàng trăm phương thức và thực hiện hành vi rất phức tạp trong các tình huống khác nhau. Nhưng chúng ta có thể giấu tất cả các phương thức của nó khỏi mắt người ngoài (bằng cách bao quanh tên của chúng bằng "__" ở hai bên), và để lại chỉ một vài phương thức để tương tác với các lớp khác. Khi đó tất cả các lớp khác trong chương trình của chúng ta sẽ chỉ thấy ba phương thức trong lớp này và sẽ gọi chính chúng. Và tất cả các phức tạp sẽ bị giấu bên trong lớp, giống như buồng lái của phi công khỏi những hành khách hạnh phúc.

2.4 Kế thừa

Kế thừa có hai mặt. Mặt lập trình và mặt đời sống thực. Từ góc độ lập trình, kế thừa — là mối quan hệ đặc biệt giữa hai lớp. Nhưng thú vị hơn nhiều, nó có nghĩa là gì từ góc độ đời sống thực.

Nếu chúng ta cần tạo ra thứ gì đó trong đời sống thực, có hai cách:

  1. tạo ra thứ gì đó mà chúng ta cần từ đầu, tiêu tốn rất nhiều thời gian và công sức;
  2. tạo ra thứ gì đó mà chúng ta cần dựa trên cái đã có sẵn.

Chiến lược tối ưu nhất trông như thế này: chúng ta lấy một giải pháp tốt đã có, chỉnh sửa một chút, điều chỉnh cho phù hợp với nhu cầu của chúng ta và sử dụng.

Nếu chúng ta theo dõi lịch sử hình thành của loài người, có vẻ như từ khi sự sống xuất hiện trên hành tinh đã trôi qua hàng tỷ năm. Và nếu giả định rằng con người xuất hiện từ loài khỉ (dựa trên loài khỉ), chỉ mất có vài triệu năm. Tạo từ đầu — lâu hơn. Rất lâu hơn nhiều.

Trong lập trình cũng có khả năng tạo ra một lớp dựa trên lớp khác. Lớp mới trở thành hậu duệ (kế thừa) của lớp hiện có. Điều này rất hữu ích khi có một lớp chứa 80%–90% dữ liệu và phương thức cần thiết cho chúng ta. Chúng ta chỉ cần tuyên bố lớp phù hợp làm cha của lớp mới của chúng ta, khi đó trong lớp mới sẽ tự động xuất hiện tất cả dữ liệu và phương thức của lớp cha. Thật tiện lợi, phải không?

2.5 Đa hình

Đa hình — là một khái niệm trong lĩnh vực lập trình. Nó mô tả tình huống, trong đó một giao diện ẩn chứa các triển khai khác nhau. Nếu cố gắng tìm kiếm các tương tự của nó trong đời sống thực, thì một trong những tương tự đó là quá trình điều khiển ô tô.

Nếu một người có thể lái xe tải, thì người đó cũng có thể ngồi sau tay lái của xe cứu thương, và sau tay lái của xe thể thao. Người đó có thể lái xe bất kể đó là loại xe nào, vì tất cả chúng đều có cùng giao diện điều khiển: vô lăng, bàn đạp và cần số. Nội thất của từng loại xe là khác nhau, nhưng chúng đều có cùng giao diện điều khiển.

Quay lại với lập trình, đa hình cho phép sử dụng cùng một cách để tương tác với các đối tượng của các lớp khác nhau (thường là có tổ tiên chung) – điều thực sự rất khó để định giá. Giá trị của nó càng tăng cao, khi chương trình càng lớn.

OOP — là những nguyên tắc. Những luật lệ bên trong. Mỗi nguyên tắc đều giới hạn chúng ta ở một khía cạnh nào đó, đổi lại đem lại những lợi ích lớn khi chương trình phát triển đến mức độ lớn. Bốn nguyên tắc của OOP — như bốn chân của một chiếc ghế. Hãy bỏ đi một chân, và toàn bộ hệ thống sẽ trở nên bất ổn.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION