หากมีคนเขียนโค้ดเพื่อให้ตัวแปร $ _fields ภายในสามารถเข้าถึงได้โดยไม่ต้องใช้วิธี getter / setter มีคำที่เหมาะสมที่ใช้อธิบายหรือไม่
บางสิ่งบางอย่างสุภาพพอที่จะใช้กับการจัดการ :)
หากมีคนเขียนโค้ดเพื่อให้ตัวแปร $ _fields ภายในสามารถเข้าถึงได้โดยไม่ต้องใช้วิธี getter / setter มีคำที่เหมาะสมที่ใช้อธิบายหรือไม่
บางสิ่งบางอย่างสุภาพพอที่จะใช้กับการจัดการ :)
คำตอบ:
การเปิดเผยให้สมาชิกที่เป็นส่วนตัวนั้นไม่เคยเป็นสิ่งที่ดีในสังคมที่สุภาพ ...
การปฏิบัตินี้คือการขาดการห่อหุ้ม / ยากจน
private
) ยังมีการนำไปใช้อีกแนวคิดของการห่อหุ้ม
__
ชื่อ mangling) ภาษาอื่นอาจมีการห่อหุ้มที่ไม่ดีเช่นการสะท้อนใน Java และตัวชี้ทางคณิตศาสตร์ใน C ++ เพื่อให้ได้ตัวแปรส่วนตัว Python ไม่ได้สร้างรูปแบบให้ยุ่งยาก
__
ชื่อ mangling หากไม่มี__
มันการออกแบบยังคงสะท้อนให้เห็นถึงการห่อหุ้มที่ดี การอ้างว่า "สาธารณะ" หมายถึง "การขาดการห่อหุ้ม / การห่อหุ้มไม่ดี" ผิด แนวคิดนี้ยังคงอยู่ รหัสแหล่งที่มาขาดการตกแต่งที่เหมาะสม
นอกจากการขาดการห่อหุ้มที่เอ่ยถึงแล้วโดย Oded ขึ้นอยู่กับภาษาการเขียนโปรแกรมและกระบวนทัศน์ของมันก็อาจจะเป็น"ข้อมูลเก่าธรรมดา" (ที่ไม่จำเป็นต้องเป็น antipattern หรือกลิ่นรหัส)
ฉันเคยได้ยินคำว่า "วัตถุเปล่า" มาก่อน
มันเรียกว่าถุงสมบัติ
โดยปกติจะใช้เพื่อเก็บชุดของคุณสมบัติที่เกี่ยวข้องบางที (อาจเป็นวัตถุคลาสที่มีตัวระบุการเข้าถึงที่เหมาะสมหรือไม่) แต่โครงสร้างโดยรอบเป็นเพียงถุงสมบัติ
เรียกว่า "ไม่ปฏิบัติตามมาตรฐานการเข้ารหัสเฉพาะ"
OP เขียนว่า:
ตัวแปรภายใน $ _fields สามารถเข้าถึงได้โดยไม่ต้องใช้วิธี getter / setter
นั่นอาจขัดกับมาตรฐานของคุณและ (อาจ) เป็นกลิ่นรหัส แต่มันก็ไม่ได้เป็นเพียงการห่อหุ้มที่ไม่ดี การเปิดเผยตัวแปรภายใน (เช่นเดียวกับใน "การใช้งานภายในเท่านั้น") เหนือทะเยอทะยานและผู้ตั้งค่าสู่โลกภายนอกจะยิ่งแย่ลงไปอีก
คำถามคือควร$_fields
จะสามารถเข้าถึงได้สำหรับโลกภายนอก?
ถ้าเป็นเช่นนั้นเรามีกรณีที่คุณจะเพิ่มวิธีการ getter / setter วิธีการเหล่านี้ไม่ได้ห่อหุ้มอะไรเลยนอกจากความจริงที่ว่า$_fields
เป็นตัวแปรบางชนิด ทั้งนี้ขึ้นอยู่กับภาษาของคุณคุณอาจยังคงรั่วไหลประเภท (รายละเอียดการใช้งาน) ไปยังด้านนอก ไม่ว่าคุณต้องการ getters / setters เสมอหรือเฉพาะเมื่อ "จำเป็น" เป็นปัญหามาตรฐานการเข้ารหัส
หาก$_fields
ควรจะไม่สามารถเข้าถึงได้แล้วดีไม่เข้าถึงได้ ไม่ว่าคุณควรป้องกันไม่ให้ผู้อื่นเข้าถึงในระดับภาษา (ส่วนตัวและเพื่อน) หรือไม่ (ซึ่งอาจช่วยให้การดีบักในบางสถานการณ์) ง่ายขึ้นอีกครั้ง - เป็นปัญหามาตรฐานการเข้ารหัส
ปัญหาของการห่อหุ้มนั้นตั้งฉากกับสิ่งนี้ทั้งหมด การละเมิด encapsulation เป็นไปได้อย่างแน่นอนกับ getters และ setters มันง่ายกว่าที่จะแอบเข้าไปเพราะระฆังปลุกของคนส่วนใหญ่จะไม่ดังเมื่อพวกเขาเห็นกลุ่มผู้ทะเยอทะยานและผู้เซทเทอร์ - รหัสที่ดูเหมือนจะเป็นไปตามแนวทางปฏิบัติที่ดีที่สุด รหัสที่ดีมากอาจแนะนำการอ้างอิงมากขึ้นในรายละเอียดการดำเนินงานภายในกว่าที่เรียกว่าตัวแปรที่เกิดขึ้นไม่ได้ที่จะระบุว่าเป็น$_fields
private
ฉันเป็นแฟนตัวยงของการเปรียบเทียบที่ไม่ดี: การเรียกว่าการห่อหุ้มที่ไม่ดีนั้นเหมือนกับการโทรหาคนที่ถือปืนเป็นฆาตกร
ฉันจะเรียกตัวแปรเช่นตัวแปรสมาชิกสาธารณะ
ถ้าวิธี setter / getter ของคุณไม่มีอะไรมากไปกว่านั้น
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
จากนั้นการสร้างตัวแปร pubic เพียงแค่บันทึกการพิมพ์นอกเคสที่มีความแตกต่าง