มีฮิวริสติกจำนวนมากที่เกี่ยวข้องกับการออกแบบเชิงวัตถุ ตัวอย่างเช่น "ตัวแปรสมาชิกทั้งหมดควรเป็นส่วนตัว" หรือ "ควรหลีกเลี่ยงตัวแปรส่วนกลาง" หรือ "การใช้การระบุประเภทเวลาทำงาน (RTTI) เป็นอันตราย" แหล่งที่มาของการวิเคราะห์พฤติกรรมเหล่านี้คืออะไร? อะไรทำให้พวกเขาเป็นจริง พวกเขาเป็นจริงเสมอ คอลัมน์นี้จะตรวจสอบหลักการออกแบบที่รองรับฮิวริสติกเหล่านี้ - หลักการแบบเปิด
ดังที่ Ivar Jacobson กล่าวว่า“ ทุกระบบเปลี่ยนแปลงในช่วงชีวิตของพวกเขา สิ่งนี้จะต้องเกิดขึ้นในใจเมื่อการพัฒนาระบบคาดว่าจะยาวนานกว่ารุ่นแรก” เราจะสร้างการออกแบบที่มีความเสถียรเมื่อเผชิญกับการเปลี่ยนแปลงได้อย่างไรและจะยาวนานกว่ารุ่นแรกอย่างไร เบอร์ทรานด์เมเยอร์ให้คำแนะนำกับเราเมื่อปี 1988 เมื่อเขาประกาศใช้หลักการแบบเปิดที่มีชื่อเสียงในขณะนี้ เพื่อถอดความเขา:
ซอฟแวร์ ENTITIES (คลาส, โมดูล, ฟังก์ชั่น, ฯลฯ ) ควรเปิดสำหรับการขยาย, แต่ปิดสำหรับการดัดแปลง
เมื่อการเปลี่ยนแปลงหนึ่งครั้งในโปรแกรมส่งผลให้เกิดการเปลี่ยนแปลงของโมดูลที่ต้องพึ่งพาโปรแกรมนั้นจะแสดงคุณลักษณะที่ไม่พึงประสงค์ซึ่งเราได้เชื่อมโยงกับการออกแบบ "ไม่ดี" โปรแกรมกลายเปราะบางเข้มงวดไม่สามารถคาดเดาได้และไม่สามารถใช้งานได้ หลักการแบบเปิดปิดเป็นการโจมตีในลักษณะที่ตรงไปตรงมามาก มันบอกว่าคุณควรออกแบบโมดูลที่ไม่เคยเปลี่ยน เมื่อความต้องการเปลี่ยนแปลงคุณขยายการทำงานของโมดูลดังกล่าวโดยเพิ่มรหัสใหม่ไม่ใช่โดยการเปลี่ยนรหัสเก่าที่ใช้งานได้
ลักษณะ
โมดูลที่สอดคล้องกับหลักการเปิดมีสองคุณสมบัติหลัก
- พวกเขาคือ“ เปิดเพื่อการขยาย”
ซึ่งหมายความว่าพฤติกรรมของโมดูลสามารถขยายได้ เราสามารถทำให้โมดูลทำงานในรูปแบบใหม่และแตกต่างกันไปตามข้อกำหนดของการเปลี่ยนแปลงแอปพลิเคชันหรือเพื่อตอบสนองความต้องการของแอปพลิเคชันใหม่
- พวกเขาคือ“ ปิดเพื่อแก้ไข”
ซอร์สโค้ดของโมดูลดังกล่าวไม่ถูกทำลาย ไม่มีใครได้รับอนุญาตให้ทำการเปลี่ยนแปลงซอร์สโค้ดมัน
ดูเหมือนว่าทั้งสองคุณลักษณะจะขัดแย้งกัน วิธีปกติในการขยายลักษณะการทำงานของโมดูลคือทำการเปลี่ยนแปลงกับโมดูลนั้น โดยปกติโมดูลที่ไม่สามารถเปลี่ยนแปลงได้จะคิดว่ามีพฤติกรรมที่คงที่ แอตทริบิวต์ของทั้งสองฝั่งตรงข้ามสามารถแก้ไขได้อย่างไร?
สิ่งที่เป็นนามธรรมคือกุญแจสำคัญ ...