สิ่งเหล่านี้เกือบทั้งหมดแสดงให้เห็นถึงความเข้าใจผิดขั้นพื้นฐานของการห่อหุ้มและวิธีการใช้
การตอบสนองเริ่มต้นที่คุณทำลาย encapsulation นั้นผิด แอปพลิเคชันของคุณอาจจำเป็นต้องตั้งค่าของชีสในตู้เย็นแทนการเพิ่ม / ลดหรือเพิ่ม / ลบ นอกจากนี้มันไม่ใช่ซีแมนทิกส์ไม่ว่าคุณจะเรียกมันว่าอะไรถ้าคุณต้องการที่จะเข้าถึงและ / หรือเปลี่ยนคุณลักษณะที่คุณไม่ได้ทำลาย encapsulation โดยการให้พวกเขา ในที่สุดการห่อหุ้มไม่ได้เกี่ยวกับ "การซ่อน" แต่เป็นการควบคุมการเข้าถึงรัฐและค่านิยมที่ไม่จำเป็นต้องเปิดเผยต่อสาธารณะหรือจัดการนอกชั้นเรียน
ผู้ทะเยอทะยานหรือผู้ตั้งตัวไม่ทำลายการห่อหุ้มเมื่อมีความต้องการที่ถูกกฎหมายในการรับหรือตั้งค่า นี่คือเหตุผลที่วิธีการสามารถทำให้เป็นแบบสาธารณะ
Encapsulation เป็นเรื่องเกี่ยวกับการเก็บข้อมูลและวิธีการที่ปรับเปลี่ยนข้อมูลนั้นโดยตรงในสถานที่ตรรกะหนึ่งระดับ
ในกรณีนี้มีความจำเป็นที่จะต้องเปลี่ยนค่าของชีสในแอปพลิเคชันอย่างชัดเจน ไม่ว่าจะทำสิ่งนี้ได้อย่างไรผ่านการรับ / การตั้งค่าหรือเพิ่ม / ลบตราบใดที่วิธีการถูกห่อหุ้มในคลาสที่คุณกำลังติดตามลักษณะเชิงวัตถุ
เพื่อความกระจ่างแจ้งฉันจะยกตัวอย่างว่าการห่อหุ้มถูกทำลายได้อย่างไรโดยให้การเข้าถึงโดยไม่คำนึงถึงชื่อเมธอดหรือการดำเนินการทางตรรกะ
สมมติว่าตู้เย็นของคุณมี "อายุการใช้งาน" เพียงแค่เห็บจำนวนหนึ่งก่อนที่ตู้เย็นจะไม่สามารถใช้งานได้อีกต่อไป (เพื่อการโต้แย้งคุณไม่สามารถซ่อมแซมตู้เย็นได้) ไม่มีเหตุผลที่ผู้ใช้ (หรือส่วนที่เหลือของแอปพลิเคชันของคุณ) จะสามารถเปลี่ยนค่านี้ได้ ควรเป็นแบบส่วนตัว มันจะมองเห็นได้ผ่านการพูดว่าคุณลักษณะสาธารณะอื่นที่เรียกว่า "isWorking" เมื่ออายุการใช้งานหมดอายุชุดตู้เย็นภายในคือการทำงานเป็นเท็จ
การดำเนินการของอายุการใช้งานนับถอยหลังและการเปิดสวิตช์ isWorking ทั้งหมดอยู่ภายในตู้เย็นไม่มีอะไรนอกจะสามารถ / ควรจะมีผลต่อกระบวนการ isWorking ควรจะปรากฏให้เห็นเท่านั้นดังนั้นผู้ทะเยอทะยานจึงไม่ทำลายการห่อหุ้ม อย่างไรก็ตามการเพิ่ม accessors สำหรับองค์ประกอบของกระบวนการตลอดชีวิตอาจทำให้การห่อหุ้มของคุณแย่ลง
เช่นเดียวกับสิ่งส่วนใหญ่คำจำกัดความของการห่อหุ้มไม่ได้เป็นตัวอักษร คุณควรเห็น X นอกห้องเรียนหรือไม่? คุณควรจะเปลี่ยน Y ไหม ทุกสิ่งที่เกี่ยวข้องกับวัตถุของคุณที่นี่ในชั้นนี้หรือมีการทำงานกระจายไปทั่วหลายชั้น?
putCheese
จะเพิ่มชีสลงในตู้เย็นและtakeCheese
จะลบออก - สิ่งเหล่านี้คือ abstractions ที่มุ่งเน้นในระดับที่สูงกว่า object field getters & setters (ซึ่งเป็น abstractions การโปรแกรมคอมพิวเตอร์ระดับล่าง