คำถามนี้เกี่ยวกับเวลาที่จะใช้ส่วนตัวและเมื่อใดควรใช้การป้องกันในชั้นเรียนทำให้ฉันคิด (ฉันจะขยายคำถามนี้ไปยังคลาสและวิธีการขั้นสุดท้ายเนื่องจากมีความเกี่ยวข้องฉันกำลังเขียนโปรแกรมใน Java แต่ฉันคิดว่านี่เกี่ยวข้องกับทุกภาษา OOP)
กฎง่ายๆคือทำทุกอย่างให้เป็นส่วนตัวที่สุด
- ทำให้คลาสทั้งหมดจบลงเว้นแต่ว่าคุณจะต้องการคลาสย่อยเหล่านั้นในทันที
- ทำให้วิธีการทั้งหมดเป็นขั้นสุดท้ายเว้นแต่ว่าคุณจะต้อง subclass และแทนที่พวกเขาทันที
- ทำพารามิเตอร์เมธอดทั้งหมดให้เป็นที่สุดเว้นแต่คุณจำเป็นต้องเปลี่ยนพารามิเตอร์ภายในเนื้อความของเมธอดซึ่งค่อนข้างน่าอึดอัดใจเกือบทุกครั้ง
ค่อนข้างตรงไปตรงมาและชัดเจน แต่ถ้าฉันส่วนใหญ่เขียนไลบรารี่ (Open Source บน GitHub) แทนที่จะเป็นแอพพลิเคชั่น
ฉันสามารถตั้งชื่อห้องสมุดและสถานการณ์มากมายได้ที่ไหน
- ห้องสมุดได้ขยายออกไปอย่างที่นักพัฒนาไม่เคยคิดมาก่อน
- สิ่งนี้จะต้องทำด้วย "class loader magic" และแฮ็กอื่น ๆ เนื่องจากข้อ จำกัด ในการมองเห็น
- ไลบรารี่ถูกนำไปใช้ในวิธีที่พวกเขาไม่ได้สร้างขึ้นมา
- ไม่สามารถใช้ไลบรารีเนื่องจากปัญหาเล็ก ๆ (ข้อผิดพลาดฟังก์ชันการทำงานที่ขาดหายไปพฤติกรรม "ผิด") ที่ไม่สามารถเปลี่ยนแปลงได้เนื่องจากการมองเห็นลดลง
- ปัญหาที่ไม่สามารถแก้ไขได้นำไปสู่การแก้ไขปัญหาขนาดใหญ่ที่น่าเกลียดและบั๊กกี้ซึ่งการแทนที่ฟังก์ชั่นที่เรียบง่าย
และฉันก็เริ่มตั้งชื่อเหล่านี้จนกระทั่งคำถามยาวเกินไปและฉันตัดสินใจที่จะลบออก
ฉันชอบความคิดที่ว่าไม่มีโค้ดเกินความจำเป็นการมองเห็นได้มากกว่าที่จำเป็นและสิ่งที่เป็นนามธรรมมากกว่าที่จำเป็น และสิ่งนี้อาจใช้ได้เมื่อเขียนแอปพลิเคชันสำหรับผู้ใช้ปลายทางโดยที่รหัสจะถูกใช้โดยผู้ที่เขียนเท่านั้น แต่สิ่งนี้จะเกิดขึ้นได้อย่างไรหากผู้พัฒนารายอื่นใช้โค้ดนี้ในกรณีที่เป็นไปไม่ได้ที่ผู้พัฒนาดั้งเดิมจะนึกถึงกรณีการใช้งานที่เป็นไปได้ล่วงหน้าและการเปลี่ยนแปลง / การสร้างซ้ำนั้นยาก / เป็นไปไม่ได้
เนื่องจากไลบรารีโอเพ่นซอร์สขนาดใหญ่ไม่ใช่สิ่งใหม่อะไรคือวิธีที่พบได้บ่อยที่สุดในการจัดการการมองเห็นในโครงการดังกล่าวด้วยภาษาเชิงวัตถุ