Các nguyên lý của lập trình hướng đối tượng

1. Nguyên lý SOLID

  • "Uncle Bod" tổng hợp

  • "Kim chỉ nam " hoạt động thiết kế

  • 5 Nguyên lý SOLID

Nguyên lý là gợi ý cho lời giải, design pattern là lời giải cụ thể

1.1 Nguyên lý đóng mở

  • Đóng với chỉnh sửa và mở với việc thêm mới

  • Khi thay đổi chương trình:

    • Giải pháp 1: chỉnh sửa mã nguồn --> rủi ro : hiệu ứng domino

    vì khi viết code: A--> B, A ---> C, C--> D , C --> E, nếu một dòng bị hỏng --> hỏng hết

  • Giải pháp 2: thay thế, lắp ghép, dễ mở rộng . Tính đến việc thay đổi đến sau này (update).

Để đáp ứng hướng mở rộng

  • Xây dựng interface hỗ trợ thay thế mở rộng. Sử dụng mối nối để dễ thay đổi.

  • Hạn chế điều kiện rẽ nhánh lựa chọn mở rộng

1.2 Nguyên lý đơn nhiệm

Mỗi lớp, đối tượng chỉ đảm nhiệm MỘT nhiệm vụ

hoặc

mỗi lớp chỉ nên có một hướng mở rộng.

Đa năng không hẳn là tốt.

Ví dụ:

Chúng ta cần sửa lại

1.3 Nguyên lý Đảo ngược phụ thuộc

Chữa bài tập

Trong trường hợp keyboard không thay đổi được. thì chúng ta cần adapter để tương thích với reader

Bài tập sửa lại nguyên lý đóng mở.

Yêu cầu :

Hướng mở rộng: Extensibility

Hướng mở rộng khác: vẽ theo thứ tự + dạng hình

Lời giải :

  • Chúng ta có listShape và SortShape.

  • Phải delegation cho một class Drawer.

  • Hoặc là hướng suy nghĩ khác:

    • Client: vẽ

    • SortShape: sắp xếp

  • Cải tiến thêm : sử dụng template method.

  • Cải tiến thêm loại :

1.4 Nguyên lý Thay thế Liskov

Đối tượng CON phải THAY THẾ được Cha trong mọi hoàn cảnh mà không ảnh hưởng đến tính đúng đắn của chương trình.

Không biết tất cả điều khoản hợp đồng mà lớp cha đã hứa hẹn.

Chim: bay --> chim cách cụt: không bay : thái hóa.

Bài toán kinh điển : Square và Rectangle.

Các cách giải quyết:

  • Prefer Inheritance over composition

Subtype (inheritance from Interface) : java 1995, C# 2001 . Should not Subclass, Subtype.

C++ cải tiến.

Điều kiện kế thừa:

  • Toàn vẹn về cú pháp :

  • Toàn vẹn về sự xử lý logic :

  • DESIGN BY CONTRACT

Note

Ban đầu ta có cái shape :

Matching để mở rộng:

  • Với mỗi loại thì mở rộng theo interface

  • Gom nhóm hướng mở rộng cùng hướng.

  • Convert về chung dạng

Last updated

Was this helpful?