Có rất nhiều heuristic liên quan đến thiết kế hướng đối tượng. Ví dụ, tất cả các biến thành viên nên được sử dụng là riêng tư, hoặc các biến toàn cầu có thể tránh được, hoặc sử dụng nhận dạng loại thời gian chạy (RTTI) là nguy hiểm. Nguồn gốc của các heuristic này là gì? Điều gì làm cho chúng đúng? Họ luôn luôn đúng? Cột này nghiên cứu nguyên tắc thiết kế làm cơ sở cho các heuristic này - nguyên tắc đóng mở.
Như Ivar Jacobson đã nói: tất cả các hệ thống thay đổi trong vòng đời của chúng. Điều này phải được lưu ý khi phát triển các hệ thống dự kiến sẽ tồn tại lâu hơn phiên bản đầu tiên. Làm thế nào chúng ta có thể tạo ra các thiết kế ổn định khi đối mặt với sự thay đổi và nó sẽ tồn tại lâu hơn phiên bản đầu tiên? Bertrand Meyer đã cho chúng tôi hướng dẫn từ năm 1988 khi ông đưa ra nguyên tắc đóng mở nổi tiếng hiện nay. Để diễn giải anh ta:
PHẦN MỀM PHẦN MỀM (LỚP, MÔ HÌNH, CHỨC NĂNG, ETC.) NÊN ĐƯỢC MỞ RA KHAI THÁC, NHƯNG ĐÓNG CỬA ĐỂ SỬA ĐỔI.
Khi một thay đổi duy nhất đối với chương trình dẫn đến một loạt các thay đổi đối với các mô đun phụ thuộc, chương trình đó thể hiện các thuộc tính không mong muốn mà chúng ta đã liên kết với thiết kế của Bad bad. Chương trình trở nên mong manh, cứng nhắc, không thể đoán trước và không thể sử dụng được. Nguyên tắc đóng mở tấn công điều này theo một cách rất đơn giản. Nó nói rằng bạn nên thiết kế các mô-đun không bao giờ thay đổi . Khi yêu cầu thay đổi, bạn mở rộng hành vi của các mô-đun đó bằng cách thêm mã mới, không phải bằng cách thay đổi mã cũ đã hoạt động.
Sự miêu tả
Các mô-đun tuân thủ nguyên tắc đóng mở có hai thuộc tính chính.
- Họ đang mở rộng để mở rộng.
Điều này có nghĩa là hành vi của mô-đun có thể được mở rộng. Rằng chúng ta có thể làm cho mô-đun hoạt động theo những cách mới và khác nhau khi các yêu cầu của ứng dụng thay đổi hoặc để đáp ứng nhu cầu của các ứng dụng mới.
- Họ đang đóng cửa để sửa đổi.
Mã nguồn của một mô-đun như vậy là bất khả xâm phạm. Không ai được phép thực hiện thay đổi mã nguồn cho nó.
Có vẻ như hai thuộc tính này là bất hòa với nhau. Cách thông thường để mở rộng hành vi của một mô-đun là thay đổi mô-đun đó. Một mô-đun không thể thay đổi thường được cho là có hành vi cố định. Làm thế nào hai thuộc tính đối lập này có thể được giải quyết?
Trừu tượng là chìa khóa ...