หนึ่งในสิ่งแรกที่ฉันทำเมื่อฉันคลาสย่อยคลาสคือการเปลี่ยนวิธีการส่วนตัวเพื่อป้องกัน
เหตุผลบางประการเกี่ยวprivate
กับกับprotected
วิธีการ :
private
วิธีการป้องกันการใช้รหัสซ้ำ คลาสย่อยไม่สามารถใช้รหัสในวิธีส่วนตัวและอาจต้องใช้อีกครั้ง - หรือนำวิธีการนั้นมาใช้ใหม่ซึ่งเดิมขึ้นอยู่กับวิธีการส่วนตัว & c
ในทางกลับกันวิธีการใด ๆ ที่ไม่ private
สามารถมองเห็นได้ว่าเป็น API ที่จัดทำโดยชั้นเรียนถึง "โลกภายนอก" ในแง่ที่ว่า subclasses ของบุคคลที่สามได้รับการพิจารณาว่าเป็น "โลกภายนอก" ด้วยเช่นกัน แล้ว.
นั่นเป็นสิ่งที่ไม่ดีเหรอ? - ฉันไม่คิดอย่างนั้น
แน่นอน API สาธารณะ (หลอก) จะล็อคโปรแกรมเมอร์ดั้งเดิมขึ้นมาและขัดขวางการสร้างอินเทอร์เฟซเหล่านั้นใหม่ แต่เห็นวิธีอื่น ๆ แล้วทำไมโปรแกรมเมอร์ไม่ควรออกแบบ "รายละเอียดการใช้งาน" ของเขาเองในแบบที่สะอาดและเสถียรเหมือน API สาธารณะ เขาควรใช้private
เพื่อให้เขาเลอะเทอะเกี่ยวกับการสร้างรหัส "ส่วนตัว" ของเขาหรือไม่? กำลังคิดว่าเขาจะทำความสะอาดภายหลังเพราะไม่มีใครสังเกตเห็น? - เลขที่
โปรแกรมเมอร์ควรนำความคิดเล็ก ๆ น้อย ๆ มาใส่ในรหัส "ส่วนตัว" ของเขาเช่นกันเพื่อจัดโครงสร้างในลักษณะที่อนุญาตหรือแม้กระทั่งส่งเสริมการใช้ซ้ำมากที่สุดเท่าที่จะทำได้ในตอนแรก จากนั้นส่วนที่ไม่ใช่ภาคเอกชนอาจไม่เป็นภาระมากในอนาคตเช่นเดียวกับความกลัว
รหัส (เฟรมเวิร์ก) จำนวนมากที่ฉันเห็นมีการใช้ที่ไม่สอดคล้องกันของprivate
: protected
วิธีการที่ไม่ใช่ขั้นตอนสุดท้ายซึ่งแทบจะไม่ทำอะไรมากกว่าการมอบหมายวิธีการส่วนตัว protected
ไม่ใช่วิธีการสุดท้ายที่สัญญาสามารถบรรลุได้ผ่านการเข้าถึงโดยตรงไปยังเขตข้อมูลส่วนตัวด้วย
วิธีการเหล่านี้ไม่สามารถแทนที่ / ปรับปรุงอย่างมีเหตุผลแม้ว่าในทางเทคนิคแล้วไม่มีสิ่งใดที่จะทำให้ (คอมไพเลอร์ -) ชัดเจน
ต้องการความสามารถในการขยายและการรับมรดก private
อย่าทำให้วิธีการของคุณ
ไม่ต้องการให้พฤติกรรมบางอย่างในชั้นเรียนของคุณเปลี่ยนไปหรือไม่? final
ทำให้วิธีการของคุณ
จริง ๆ แล้วไม่สามารถเรียกวิธีการของคุณนอกบริบทที่กำหนดชัดเจน ทำให้วิธีการของคุณprivate
และ / หรือคิดเกี่ยวกับวิธีที่คุณสามารถทำให้บริบทที่กำหนดไว้อย่างดีที่จำเป็นสำหรับการใช้ซ้ำผ่านprotected
วิธีการ wrapper อื่น
นั่นเป็นเหตุผลที่ฉันสนับสนุนให้ใช้private
เท่าที่จำเป็น และเพื่อไม่ให้เกิดความสับสนกับprivate
final
- หากวิธีการใช้งานมีความสำคัญต่อสัญญาทั่วไปของชั้นเรียนและดังนั้นจึงไม่ต้องถูกแทนที่ / แทนที่ให้ทำfinal
!
สำหรับสาขาที่private
ไม่เลวจริงๆ ตราบใดที่เขตข้อมูลสามารถ "ใช้" อย่างสมเหตุสมผลด้วยวิธีการที่เหมาะสม ( ไม่ใช่ getXX()
หรือsetXX()
!)