เพราะพวกเขาไม่รู้อะไรเลย
ผู้เขียนดั้งเดิมอาจจะยึดมั่นกับความเข้าใจผิดในหลักการของ SOLID ซึ่งเกิดขึ้นในโลก C + + ที่สับสนและซับซ้อน
ฉันหวังว่าคุณจะสังเกตเห็นว่าทับทิมทับทิมและงูหลามในโลกไม่มีปัญหาที่คำตอบที่นี่อ้างว่าเป็นเหตุผลในการปิดผนึก โปรดทราบว่ามันตั้งฉากกับการพิมพ์แบบไดนามิก ตัวดัดแปลงการเข้าถึงนั้นใช้งานได้ง่ายในเกือบทุกภาษา (ทั้งหมด?) ฟิลด์ c ++ สามารถ mucked ด้วยโดยการแคสต์ชนิดอื่น (C ++ อ่อนแอกว่า) Java และ C # สามารถใช้การสะท้อนกลับได้ ตัวดัดแปลงการเข้าถึงทำให้สิ่งต่าง ๆ ยากพอที่จะป้องกันคุณไม่ให้ทำเว้นแต่คุณต้องการจริงๆ
การปิดผนึกชั้นเรียนและทำเครื่องหมายสมาชิกส่วนตัวใด ๆ เป็นการละเมิดหลักการว่าสิ่งที่เรียบง่ายควรเป็นเรื่องง่ายและสิ่งที่ยากควรเป็นไปได้ ทันใดนั้นสิ่งที่ควรเรียบง่ายไม่ใช่
ฉันขอแนะนำให้คุณลองทำความเข้าใจกับมุมมองของผู้เขียนต้นฉบับ ส่วนใหญ่มาจากแนวคิดทางวิชาการเกี่ยวกับการห่อหุ้มที่ไม่เคยประสบความสำเร็จอย่างแท้จริงในโลกแห่งความเป็นจริง ฉันไม่เคยเห็นกรอบหรือห้องสมุดที่นักพัฒนาบางคนไม่ต้องการให้มันทำงานแตกต่างกันเล็กน้อยและไม่มีเหตุผลที่ดีที่จะเปลี่ยน มีความเป็นไปได้สองอย่างที่อาจทำให้ผู้พัฒนาซอฟต์แวร์ดั้งเดิมปิดกั้นและทำให้สมาชิกเป็นส่วนตัว
- ความเย่อหยิ่ง - พวกเขาเชื่อว่าพวกเขาเปิดกว้างสำหรับการขยายและปิดเพื่อดัดแปลง
- ความพึงพอใจ - พวกเขารู้ว่าอาจมีกรณีการใช้งานอื่น แต่ตัดสินใจที่จะไม่เขียนสำหรับกรณีการใช้งานเหล่านั้น
ฉันคิดว่าในกรอบขององค์กรทุ่ง # 2 น่าจะเป็นกรณี เฟรมเวิร์ก C ++, Java และ. NET เหล่านั้นจะต้อง "เสร็จสิ้น" และพวกเขาจะต้องปฏิบัติตามแนวทางที่แน่นอน แนวทางเหล่านั้นมักจะหมายถึงประเภทที่ปิดผนึกเว้นแต่ว่าประเภทนั้นได้รับการออกแบบอย่างชัดเจนเป็นส่วนหนึ่งของลำดับชั้นของประเภทและสมาชิกส่วนตัวสำหรับสิ่งต่าง ๆ ซึ่งอาจเป็นประโยชน์สำหรับผู้อื่นใช้ .. แต่เนื่องจากพวกเขาไม่เกี่ยวข้องโดยตรงกับชั้นเรียน . การแตกไฟล์ประเภทใหม่นั้นแพงเกินกว่าจะรองรับเอกสาร ฯลฯ ...
แนวคิดทั้งหมดที่อยู่เบื้องหลังตัวดัดแปลงการเข้าถึงคือโปรแกรมเมอร์ควรได้รับการปกป้องจากตัวเอง "การเขียนโปรแกรม C ไม่ดีเพราะมันช่วยให้คุณถ่ายภาพตัวเองได้" มันไม่ใช่ปรัชญาที่ฉันเห็นด้วยกับการเป็นโปรแกรมเมอร์
ฉันชอบวิธีการจัดการชื่องูใหญ่ของงูใหญ่ คุณสามารถ (แทนได้ง่ายกว่าการสะท้อน) ได้อย่างง่ายดายแทนที่ Privates หากคุณต้องการ มีการเขียนที่ยอดเยี่ยมอยู่ที่นี่: http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
ตัวดัดแปลงส่วนตัวของ Ruby นั้นได้รับการปกป้องมากกว่าใน C # และไม่มีความเป็นส่วนตัวในฐานะตัวดัดแปลง C # การป้องกันแตกต่างกันเล็กน้อย มีคำอธิบายที่ดีที่นี่: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
โปรดจำไว้ว่าภาษาแบบคงที่ของคุณไม่จำเป็นต้องสอดคล้องกับรูปแบบที่ล้าสมัยของการเขียนโค้ดในภาษานั้นในอดีต