Trong việc Design Parttern đến OOP fan ta bàn về vấn đề thiết kế một pattern làm thế nào để lớp con kế thừa lớp thân phụ nhưng tự vứt bỏ những method mà nó không ước ao muốn. Điều đó có nghĩa là lớp bé không tuân hành nguyên tắc định trước, tức là nó không tuân thủ giữa những nguyên tắc cơ phiên bản của xây cất hướng đối tượng người dùng (OOD – Object oriented design) là Liscov substitution principle.

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


Điều đó cho thấy khi thiết kế, tìm phương án cho một sự việc nào đó, bài toán nắm rõ những nguyên lí cơ phiên bản của OOD là vô cùng quan trọng. Bài này xin giới thiệu về 5 phương pháp cơ phiên bản của OOD là:

Open closedLiskov substitutionDependency inversionInterface segregationSingle responsibility

Open closed

Ivar Jacobson từng nói: “Để xây cất các khối hệ thống lâu dài, cần luôn luôn tâm niệm rằng các hệ thống luôn đổi khác trong quy trình sử dụng”. (All systems change during their life cycles. This must be borne in mind when developing systems expected khổng lồ last longer than the first version.”). Năm 1988, Bertrand Meyer gửi ra mục tiêu để triển khai điều nhưng mà Ivar Jacobson nói bên trên mà trong tương lai trở thành nguyên lí open-closed nổi tiếng. Đó là: SOFTWARE ENTITIES (CLASSES, MODULES, FUNCTIONS, ETC.) SHOULD BE open FOR EXTENSION, BUT CLOSED FOR MODIFICATION. những chương trình vận dụng nguyên lí open-close được cố gắng đổi bằng cách thêm code mới chứ chưa hẳn sửa code có sẵn. Bằng cách này, kị được thay đổi dây chuyền trong toàn cục chương trình. Tuy nhiên, mỗi entity của chương trình hoàn toàn có thể đóng với đổi khác này nhưng lại không đóng với đổi khác nào kia khác. Vị đó, tính đóng này chỉ là kha khá và trọng trách của người thiết kế là cùng với mỗi đặc thù của chương trình, ưu tiên đóng các thuộc tính dễ biến hóa nhất. Để “đóng” các entity của chương trình, rất có thể sử dụng phương án abstraction, data driven, .. Open-closed là nguyên li trung tâm, rất quan trọng đặc biệt trong xây dựng hướng đối tượng người dùng vì chính nguyên lí này tạo cho lập trình hướng đối tượng có tính tái áp dụng (reusability) và dễ bảo trì (maintainability). Tham khảo thêm ở đây cùng ở đây.

Liskov substitution

Nguyên lí này được tuyên bố như sau:


FUNCTIONS THAT USE POINTERS OR REFERENCES khổng lồ BASE CLASSES MUST BE ABLE to lớn USE OBJECTS OF DERIVED CLASSES WITHOUT KNOWING IT.
Tức là hoạt động vui chơi của các function có sử dụng reference tốt pointer cho tới object của lớp thân phụ cần được bảo đảm là không bị tác động khi thay thế sửa chữa reference tuyệt pointer tới object của lớp phụ thân bởi reference hay pointer tới object của lớp nhỏ và function kia không cần biết về sự mãi mãi của lớp con. Lúc đó, các virtual thành viên functions làm việc lớp phụ vương cũng phải tất cả ở lớp con, với phải triển khai một quá trình có nghĩa. Giả dụ nguyên lí này bị vi phạm, function có áp dụng reference xuất xắc pointer cho tới object của lớp thân phụ phải chất vấn kiểu của object để đảm bảo chương trình rất có thể chạy đúng, và việc này vi phạm luật nguyên lí open-closed nhắc tới ở trên. Tham khảo thêm ở đây và ở đây.

Dependency inversion

Việc vận dụng hai nguyên lí open-closed cùng Liskov substitute một cách nghiêm ngặt có thể bao quát hóa thành nguyên lí depndency inversion được phát biểu như sau:

HIGH cấp độ MODULES SHOULD NOT DEPEND UPON LOW màn chơi MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.
ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTION.

Thực hiện một bằng cách dùng abstract layer như hình dưới.


*
tham khảo thêm ở vị trí này, địa điểm kia và khu vực đó.

Interface segregation

Nguyên lí này được phát biểu như sau:


Khi một client bị xay phải phụ thuộc vào rất nhiều interface mà lại nó không áp dụng thì nó sẽ bị chịu ảnh hưởng vào những thay đổi của interface đó. Họ cần nên tránh vấn đề này nhiều nhất có thể bằng cách chia bé dại interface. tham khảo thêm ở đây.

Single responsibility

Nguyên lí này được tuyên bố như sau:


Tham khảo thêm ở chỗ này và sinh hoạt đây.

Xem thêm: Noted Là Gì ?, Từ Điển Tiếng Anh 'Noted' Là Gì

Chú ý: để hiểu bài xích này, cần phải có kiến thức cơ phiên bản về lập trình hướng đối tượng, độc nhất vô nhị là các khái niệm encapsulation, inheritance, polimorphism.