O — Open/Closed Principle
"Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification." — Bertrand Meyer, Object-Oriented Software Construction, 1988
Open/Closed Principle (OCP) là nguyên lý đầu tiên được Bertrand Meyer giới thiệu trong cuốn sách kinh điển năm 1988, trước khi SOLID ra đời đến hơn một thập kỷ. Meyer định nghĩa: một thực thể phần mềm nên "mở cho việc mở rộng" (open for extension) — nghĩa là ta có thể thêm hành vi mới cho nó, nhưng "đóng cho việc sửa đổi" (closed for modification) — nghĩa là không cần phải sửa mã nguồn của nó. Đạt được điều này tưởng chừng mâu thuẫn: làm sao có thể thay đổi hành vi của một module mà không chạm vào code của nó? Câu trả lời nằm ở sức mạnh của abstraction và polymorphism: module cha định nghĩa các extension points (interface, abstract class), và module con cung cấp implementation cụ thể. Khi cần thêm hành vi mới, ta chỉ cần viết module con mới — không cần mở module cha ra để sửa.