Жишээ хувьсагч ба Орон нутгийн хувьсагч
Жишээ хувьсагч нь объект хандалтат програмчлалд байдаг хувьсагчийн төрөл юм. Энэ нь ангид тодорхойлогдсон хувьсагч бөгөөд тухайн ангийн объект бүр тухайн хувьсагчийн тусдаа хуулбарыг агуулна. Нөгөөтэйгүүр, орон нутгийн хувьсагчдыг ашиглах нь зөвхөн объект хандалтат програмчлалын хэлээр хязгаарлагдахгүй. Энэ нь зөвхөн тодорхойлогдсон кодын тодорхой блок (жишээ нь: функц, давталтын блок гэх мэт) дотор үнэлж болох хувьсагч юм. Энэ шалтгааны улмаас локал хувьсагчдыг орон нутгийн хамрах хүрээтэй гэж үздэг.
Жишээ хувьсагч гэж юу вэ?
Жишээ хувьсагчийг объект хандалтат програмчлалд анги дахь объект бүрийн төлөвийг хадгалахад ашигладаг. Тэдгээрийг гишүүн хувьсагч эсвэл талбарын хувьсагч гэж нэрлэдэг. Жагсаалтын хувьсагчдыг Java-д статик түлхүүр үг ашиглахгүйгээр зарладаг. Жишээ хувьсагчдад хадгалагдсан утгууд нь объект бүрт өвөрмөц байдаг (объект бүр тусдаа хуулбартай) бөгөөд тэдгээрт хадгалагдсан утгууд нь тухайн объектын төлөвийг илэрхийлдэг. Жишээ хувьсагчийн зайг овоолгод хуваарилдаг бол тухайн объектыг овоолгод хуваарилдаг. Иймээс объект амьд байгаа цагт жишээ хувьсагчдыг санах ойд хадгална. Жишээлбэл, нэг машины өнгө нь нөгөө машины өнгөнөөс хамааралгүй байдаг. Тиймээс машины объектын өнгийг жишээ хувьсагчид хадгалах боломжтой. Практикт жишээ хувьсагчдыг анги дотор болон гадна аргуудын дотор зарладаг. Ихэвчлэн хувьсагч хувьсагчийг хувийн гэж зарладаг тул тэдгээрт зөвхөн зарласан ангидаа хандах боломжтой.
Орон нутгийн хувьсагч гэж юу вэ?
Локал хувьсагчид нь локал хамрах хүрээтэй хувьсагчид бөгөөд тэдгээр нь тодорхой кодын блок дотор зарлагддаг. Орон нутгийн хувьсагчдыг түр зуурын төлөвөө хадгалах аргад ашигладаг хувьсагч гэж үзэж болно. Орон нутгийн хувьсагчийн хамрах хүрээг тухайн хувьсагчийн зарласан байршлыг ашиглан тодорхойлдог бөгөөд энэ зорилгоор тусгай түлхүүр үгсийг ашигладаггүй. Ер нь локал хувьсагч руу хандах хандалт нь түүний зарласан кодын блок дотор хязгаарлагдмал байдаг (жишээ нь тухайн кодын блокийн нээх ба хаалтын хаалтуудын хооронд). Орон нутгийн хувьсагчдыг ихэвчлэн дуудлагын стект хадгалдаг. Энэ нь рекурсив функцийн дуудлагад локал хувьсагчийн хуулбарыг тусад нь санах ойн хаягийн зайд хадгалах боломжийг олгоно. Арга ажиллаж дуусахад тухайн аргын талаарх мэдээлэл дуудлагын стекээс гарч ирэх ба мөн хадгалагдсан локал хувьсагчдыг устгана.
Жишээ хувьсагч ба Локал хувьсагч хоёрын ялгаа юу вэ?
Жишээ хувьсагчдыг аргын гаднах ангиудад зарлаж, объектын төлөвийг хадгалдаг бол локал хувьсагчдыг кодын блок дотор зарлаж, аргын төлөвийг хадгалахад ашигладаг. Тухайн хувьсагчийг агуулсан объект амьд байх үед жишээ хувьсагч нь амьд байх ба локал хувьсагч нь тухайн арга/кодын блокийг гүйцэтгэх явцад амьд байна. Жишээ хувьсагчийг (олон нийтэд зарласан) анги дотроос хандах боломжтой бол локал хувьсагч нь зөвхөн зарласан кодын блок дотор хандах боломжтой. Жишээ хувьсагчийн хэрэглээ нь зөвхөн объект хандалтат програмчлалаар хязгаарлагддаг бол локал хувьсагчдад ийм хязгаарлалт байхгүй.