มันยุติธรรมที่จะบอกว่ามันเป็นวิธีที่ดีในการเริ่มต้นทุกอย่างให้private
ล่วงหน้าเมื่อเขียนโค้ดบางอย่าง?
จากนั้นอัปเกรดprotected
เป็นคลาสย่อยเท่านั้นpublic
หากต้องการคลาสอื่นหรือไม่
มันยุติธรรมที่จะบอกว่ามันเป็นวิธีที่ดีในการเริ่มต้นทุกอย่างให้private
ล่วงหน้าเมื่อเขียนโค้ดบางอย่าง?
จากนั้นอัปเกรดprotected
เป็นคลาสย่อยเท่านั้นpublic
หากต้องการคลาสอื่นหรือไม่
คำตอบ:
คำตอบสั้น ๆ : ใช่
คำตอบอีกต่อไป:
ใช่ แต่ไม่ควรตีความว่าเป็นข้อเสนอแนะเพื่อเริ่มต้นด้วยการเขียนชั้นเรียนของคุณกับทุกสิ่งที่เป็นส่วนตัว วิธีการดังกล่าวแสดงถึงการออกแบบชั้นเรียนโดยมุ่งเน้นไปที่รายละเอียดการนำไปปฏิบัติก่อนที่คุณจะตัดสินบนอินเทอร์เฟซ
หนึ่งในสิ่งสำคัญที่สุดที่ควรพิจารณาเมื่อออกแบบชั้นเรียนคือวิธีการใช้งาน ซึ่งเกี่ยวข้องกับการคิดเกี่ยวกับวิธีการสาธารณะของคุณก่อนที่คุณจะเริ่มคิดถึงรายละเอียดส่วนตัว / การนำไปใช้งาน
นอกจากนี้วิธีการดังกล่าวมักจะพลาดโอกาสที่จะถามตัวเองว่า "ฉันจะเขียนบททดสอบสำหรับชั้นเรียนนี้ได้อย่างไร" - ซึ่งเป็นคำถามที่สำคัญที่จะถามแม้ว่าคุณจะไม่ได้เขียนการทดสอบหน่วย (ที่เกี่ยวข้อง: "หลักการออกแบบที่ส่งเสริมโค้ดที่ทดสอบได้คืออะไร" )
ดังนั้นเมื่อคุณได้กำหนดอินเทอร์เฟซสาธารณะแล้วมันเป็นความคิดที่ดีที่จะเริ่มต้นส่วนที่เหลือให้เป็นส่วนตัวเพราะส่วนใหญ่แล้วจะเป็นรายละเอียดการใช้งานที่ไม่น่าเป็นห่วงซึ่งไม่เกี่ยวข้องกับสิ่งใดนอกชั้นเรียน
"จากนั้นอัปเกรดเป็นแบบป้องกันหากคลาสย่อยต้องการหรือเป็นแบบสาธารณะถ้าคลาสอื่นต้องการหรือไม่"
นั่นเป็นวิธีที่ผิด ในขณะออกแบบคุณควรทราบว่าการเข้าถึงสาธารณะใดที่คุณต้องการให้ โดยปกติแล้วคุณจะให้การเข้าถึงสาธารณะเพราะนั่นเป็นจุดประสงค์ทั้งหมดของชั้นเรียนของคุณ และคุณให้สิทธิ์การเข้าถึงที่ได้รับการป้องกันเนื่องจากคุณต้องการให้คลาสย่อยเข้าถึงสิ่งต่าง ๆ และคุณใช้ส่วนตัวในสิ่งที่เป็นธุรกิจของคนอื่น
ตอนนี้ถ้าใครบางคนต้องการเข้าถึงสิ่งที่พวกเขาไม่สามารถเข้าถึงได้คุณควรคิดอย่างหนักเกี่ยวกับความต้องการนั้น พวกเขาไม่ควรต้องการการเข้าถึงนั้นหรือการออกแบบของคุณผิด บางทีการออกแบบของคุณคือผิดและสิ่งที่ไม่สาธารณะที่ควรจะเป็นของประชาชนเพื่อให้คุณเปลี่ยนที่ แต่ถ้าการออกแบบของคุณถูกต้องแสดงว่ามีบางอย่างผิดปกติกับความต้องการดังนั้นคุณจึงแก้ไขสิ่งนั้นแทนที่จะทำให้การออกแบบของคุณเสียหาย
private
หรือprotected
?
กุญแจสำคัญในการทำความเข้าใจแง่มุมของการเขียนโปรแกรมเชิงวัตถุนี้เป็นแนวคิดของการห่อหุ้มข้อมูล แนวคิดคือการทำให้ชั้นเรียนเข้าใจง่ายขึ้นโดยการซ่อนรายละเอียดการนำไปปฏิบัติ นี้เรียกว่าหลบซ่อนตัวข้อมูล ดังนั้นเราเพียงต้องการที่จะเปิดเผย (เปิดเผย) ฟังก์ชั่นเหล่านั้นที่จำเป็นต้องใช้ในชั้นเรียน ฟังก์ชั่นเหล่านี้เป็นส่วนต่อประสานกับชั้นเรียน
คิดว่าอินเตอร์เฟสเป็นเหมือนพวงมาลัยของรถ คุณตัดสินใจได้ว่าทิศทางของรถคืออะไรโดยการหมุนล้อ แต่ภายใต้ฝาครอบจะมีวาล์วโรตารี่ระบบไฮดรอลิกส์รอกเปลี่ยนการหมุนของล้อ แต่คุณไม่จำเป็นต้องเป็นวิศวกรเครื่องกลขับรถ
ดังนั้นคำตอบสำหรับคำถามของคุณคือใช่ คุณต้องการซ่อนรายละเอียดเกี่ยวกับคลาสจากคลาสอื่น ๆ ให้มากที่สุด การทำความเข้าใจเมื่อสิ่งที่ควรเป็นสาธารณะส่วนตัวหรือได้รับการคุ้มครองนั้นง่ายต่อการเรียนรู้ แต่ยากที่จะควบคุม