OCP LÀ GÌ

 - 

Trước khi bước vào tìm hiểu chi tiết về nguyên tắc thứ nhì - xuất hiện / Closed principle (OCP), đầu tiên họ sẽ khám phá xem SOLID là gì. (Bài viết chỉ giới thiệu dễ dàng và đơn giản SOLID là gì cùng tên 5 nguyên tắc của SOLID, để tìm nắm rõ hơn về SOLID cùng những công dụng mà nó sẽ đem lại, các bạn đọc hoàn toàn có thể đọc cái nội dung bài viết để ở những link tài liệu tìm hiểu thêm hoặc xem thêm ở trong các bài báo khoa học, sách lập trình...).

Bạn đang xem: Ocp là gì

SOLID là gì?

SOLID là viết tắt của 5 vần âm đầu vào 5 nguyên lý kiến tạo hướng đối tượng. Hỗ trợ cho lập trình viên viết ra rất nhiều đoạn code dễ dàng đọc, dễ dàng hiểu, dễ dàng maintain. Nó được gửi ra bởi vì Robert C. Martin và Michael Feathers. 5 nguyên lý đó bao gồm:

Single responsibility priciple (SRP)Open/Closed principle (OCP)Liskov substitution principe (LSP)Interface segregation principle (ISP)Dependency inversion principle (DIP)

Trong bài viết lần này họ sẽ cùng khám phá về nguyên tắc thứ nhì của SOLID - open / Closed principle (OCP) - dễ dàng mở rộng, nặng nề sửa đổi.

Open / Closed principle (OCP) - Đóng cùng mở

*

Có nhì nội dung chính trong nguyên tắc này:

Hạn chế sửa đổi: không nên chỉnh sửa source code của một module hoặc một class tất cả sẵn, bởi sẽ làm hình ảnh hướng mang lại tính đúng mực của chương trình.

Ưu tiên mở rộng: Khi nên thêm bản lĩnh mới, nên thừa kế và không ngừng mở rộng các module/class có sẵn thành những module nhỏ lớn hơn. Các module/class bé vừa có các đặc tính của lớp cha (đã được kiểm hội chứng đúng đắn), vừa được bổ sung tính năng mới tương xứng với yêu thương cầu.

Thông thường, ước ao có thêm chức năng, ta phải viết thêm code hoặc sửa code sẽ có. Mặc dù nhiên, ví như sửa code đã có thì lại phạm luật vào ngôn từ một của nguyên tắc này. Vậy làm rứa nào để ta rất có thể thiết kế một module dễ mở rộng, nhưng mà lại cực nhọc sửa đổi?

Trước khi nói về lập trình, hãy thuộc phân tích một dụng cụ trong thực tế. Tưởng tượng một loại máy ảnh chuyên dụng, gồm một ống kính đi kèm theo theo máy để chụp phong cảnh, giờ người dùng muốn máy ảnh có thêm tuấn kiệt chụp chân dung, thay vị đem mẫu ống kính đang xuất hiện ra để sửa lại, bọn họ mở rộng cỗ máy ảnh ra bằng dùng những ống kính khác, ví dụ như các ống kính được thiết kế với để chuyên chụp chân dung. Tương tự, máy ảnh có thành phần đèn flash nhưng công suất yếu, người tiêu dùng muốn đèn công suất cao hơn... Thay vày tháo ma lanh và thay thế sửa chữa các phần tử của lắp thêm ảnh, bạn cũng có thể ráp thêm một cái flash rời.

Hình dưới là một cái máy hình ảnh được thiết kế đúng chuẩn theo nguyên tắc Open / Closed principle (OCP). Dễ thấy, máy ảnh được xây cất để thuận lợi mở rộng thiên tài mà không cần mổ sẻ toá lắp các bộ phận bên phía trong nó. Một module phù hợp OCP cũng nên được thiết kế với như thế.

Xem thêm: Top 9 Ứng Dụng Nhắn Tin Miễn Phí Tốt Nhất Trên Android, Những Ứng Dụng Nhắn Tin Miễn Phí Tốt Nhất

*

Áp dụng nguyên lý trong lập trình

Hãy coi một lấy một ví dụ chương trình làm chủ sinh viên:

Giả sử ngôi trường học tất cả 2 nhiều loại sinh viên nữa: Sinh viên khả năng và du học sinh. Sinh viên năng lực được sút 20% học tập phí, du học viên tăng 30% so với tiền học phí của sinh viên bình thường. Điều này dẫn cho phải thay đổi xử lý phần tính chi phí khóa học cho sinh viên, có hai cách để giải quyết vụ việc này.

Cách thứ nhất là thêm trực thuộc tính một số loại sinh viên mang lại class SinhVien, sửa code vào hàm tinhHocPhi() để cho ra kết quả cân xứng với từng một số loại sinh viên.

*

Dễ thấy nếu tuân theo cách này, nếu sau này có thêm nhiều một số loại sinh viên khác, code lại bắt buộc thay đổi, hoàn toàn có thể dẫn cho code new làm ảnh hưởng đến code cũ và làm cho hỏng luôn luôn cả đều dòng code trước đó đã chạy được.

Để giải quyết vấn đề cách thứ nhất gây ra, giải pháp thư nhì áp dụng nguyên tắc đóng và mở (Open / Closed principle - OCP): tiêu giảm sửa đổi, ưu tiên không ngừng mở rộng hay nói biện pháp khác, code được thiết kế để sau đây dù có thêm yêu thương cầu mới cũng không phải quay lại sửa đổi code cũ. Code được sản xuất như sau:

*

*

Trong tương lai, khi bao gồm thêm nhiều loại sinh viên hoặc yêu ước nào mới, ta chỉ cần tạo thêm class kề vượt từ class SinhVien lúc đầu mà không làm tác động gì tới các class gồm sẵn. Đảm bảo tính đúng mực cho chương trình, tinh giảm được phạm vi test, giúp giảm giá cả phát triển và duy trì chương trình dễ dàng hơn.

Kết luận

Khi thiết kế một trong những phần mềm, cần chú ý tới khả năng bảo trì và không ngừng mở rộng của nó. Khi tạo ra các lớp hoặc một module làm sao đó, hãy luôn luôn đặt câu hỏi: code cố này đã tách bóc bạch chưa? Làm vậy này rất có thể dễ dàng không ngừng mở rộng trong tương lai? Nếu gồm thì làm như thế nào? … bằng phương pháp đó, chúng ta luôn đặt vụ việc để cách tân phần mượt của mình.

Xem thêm: Giá Khớp Lệnh Là Gì ? Những Phương Thức Giao Dịch Giá Khớp Lệnh

Việc xây cất các lớp dựa trên nguyên lí 2 của SOLID giúp phần mềm của họ dễ gia hạn và dễ không ngừng mở rộng hơn siêu nhiều. Vớ nhiên không hẳn lúc làm sao ta cũng không được chỉnh sửa code tất cả sẵn, tuy vậy thông thường thì họ không đề nghị làm như vậy. Bắt lại, SOLID là một trong guideline xuất sắc giúp bạn xây đắp và lập trình tốt hơn.