อินสแตนซ์ตัวแปรคืออะไร

ตัวแปรอินสแตนซ์เป็นส่วนหนึ่งของข้อมูลในการเขียนโปรแกรมเชิงวัตถุที่มีค่าเป็นของตัวเองสำหรับทุกวัตถุที่มันอยู่ ตัวแปรอินสแตนซ์อาจถูกเรียกว่าสมาชิกอินสแตนซ์เขตข้อมูลไม่คงที่และสมาชิกข้อมูล พวกเขาเป็นส่วนสำคัญของวัตถุส่วนใหญ่ถือชิ้นส่วนข้อมูลเฉพาะที่วัตถุใช้สำหรับการคำนวณ

ตัวอย่างเช่นหากมีวัตถุสองรายการ A และ B โดยที่วัตถุ A มีตัวแปรอินสแตนซ์ที่เรียกว่า "blah" และวัตถุ B ก็มีตัวแปรอินสแตนซ์ที่เรียกว่า "blah" ตัวแปรทั้งสอง "blah" นั้นเป็นหน่วยงานที่แตกต่างกัน ตัวแปรแต่ละตัวเกี่ยวข้องกับวัตถุที่ห่อหุ้มมัน ชื่อเต็มของตัวแปร "blah" ที่เกี่ยวข้องกับวัตถุ A คือ "A.blah" ในขณะที่ชื่อเต็มของตัวแปร "blah" ที่เกี่ยวข้องกับวัตถุ B คือ "B.blah" แต่ละตัวแปรถ้าเหล่านี้สามารถมีค่าของตัวเอง หากวัตถุ A และ B เป็นประเภทเดียวกันและวัตถุอื่นของประเภทนั้นถูกสร้างขึ้น C และวัตถุ C จะมีตัวแปรอินสแตนซ์ "blah" ซึ่งสามารถมีค่าที่ไม่ซ้ำกันได้

ตัวแปรอินสแตนซ์มักจะสับสนกับตัวแปรสแตติก แต่ทั้งสองแตกต่างกันอย่างมีนัยสำคัญ ตรงกันข้ามกับตัวแปรอินสแตนซ์ซึ่งวัตถุทุกประเภทเฉพาะมีของตัวเองตัวแปรคงมีเพียงหนึ่งค่าและค่านี้จะเหมือนกันสำหรับวัตถุทุกประเภทที่เหมาะสม ตัวแปรสแตติกมักถูกเรียกว่าตัวแปรคลาสซึ่งไม่เหมือนกับตัวแปรอินสแตนซ์

ขึ้นอยู่กับคุณสมบัติการมองเห็นที่กำหนดให้กับพวกเขาตัวแปรอินสแตนซ์อาจมองเห็นได้เฉพาะภายในวัตถุหนึ่ง ๆ กับวัตถุและคลาสย่อยหรือวัตถุที่มันอยู่เช่นเดียวกับวัตถุอื่น ๆ การมองเห็นประเภทสุดท้ายนั้นเรียกว่าการเปิดเผยต่อสาธารณะมักถูกมองว่าเป็นการปฏิบัติที่ไม่ดีสำหรับตัวแปรอินสแตนซ์เนื่องจากเป็นการง่ายที่จะละเมิดหลักการการห่อหุ้มในการเขียนโปรแกรมเชิงวัตถุ แม้จะมีข้อห้ามนี้ แต่ก็มีบางครั้งที่ตัวแปรอินสแตนซ์สาธารณะจะมีประโยชน์ ตัวอย่างเช่นคลาสมาตรฐานจำนวนมากใน Java มีตัวแปรอินสแตนซ์สาธารณะซึ่งบางครั้งอนุญาตให้แก้ไขคุณสมบัติได้ง่าย

การมองเห็นของตัวแปรอินสแตนซ์ยังมาพร้อมกับการสืบทอด ถ้าคลาสหนึ่งสืบทอดจากคลาสอื่นจะไม่ให้ทั้งสองคลาสเข้าถึงตัวแปรอินสแตนซ์ของอีกฝ่ายได้ทันที ตัวแปรอินสแตนซ์ส่วนตัวในซูเปอร์คลาสและคลาสย่อยยังคง จำกัด เฉพาะคลาสเหล่านั้นเท่านั้นดังนั้นตัวแปรส่วนตัวในคลาสย่อยจะไม่สามารถมองเห็นได้โดยซูเปอร์คลาสและในทางกลับกัน ตัวแปรอินสแตนซ์เดียวที่ทั้งซูเปอร์คลาสและคลาสย่อยสามารถดูได้คือตัวแปรที่ได้รับการปกป้องในซูเปอร์คลาส