Năm nguyên tắc thiết kế hướng đối tượng giúp code dễ bảo trì, mở rộng, ít coupling (Robert C. Martin tổng hợp):
- S – Single Responsibility: mỗi lớp chỉ có một lý do để thay đổi (một trách nhiệm).
- O – Open/Closed: mở để mở rộng, đóng để sửa đổi — thêm tính năng bằng code mới, không sửa code đã chạy ổn (thường qua abstraction/polymorphism).
- L – Liskov Substitution: đối tượng lớp con phải thay thế được lớp cha mà không phá vỡ hành vi mong đợi.
- I – Interface Segregation: nhiều interface nhỏ, chuyên biệt tốt hơn một interface to; client không bị buộc phụ thuộc phương thức nó không dùng.
- D – Dependency Inversion: module cấp cao phụ thuộc vào abstraction, không vào chi tiết cụ thể (nền tảng của dependency injection).
Mục tiêu chung: giảm coupling, tăng cohesion, dễ test và thay đổi. Là công cụ tư duy, không phải luật cứng — cân bằng với YAGNI/KISS.