Object — dastur bajarilishida identity, holat va xatti-harakatni birlashtiradigan qiymat yoki entitydir. Obyektga yo‘naltirilgan tillarda class obyekt turini belgilashi mumkin, prototipga asoslangan tillarda esa obyekt boshqa obyektni prototype sifatida oladi. Har qiymat obyekt bo‘lishi shart emas; ayrim tillar primitive va object representationni ajratadi.
Identity va holat
Identity ikki obyekt fieldlari teng bo‘lsa ham alohida ekanini bildiradi. Reference equality ayni instance’ni, value equality esa mazmun tengligini tekshiradi. Domain entity odatda barqaror ID bilan taniladi, value object esa barcha muhim fieldlar teng bo‘lsa teng hisoblanadi.
Holat field yoki propertylarda saqlanadi. Mutable obyekt vaqt bilan o‘zgaradi; immutable obyekt yaratilgach o‘zgarmaydi. Immutable qiymat threadlar orasida bo‘lishish va hash key sifatida ishlatishda xavfsizroq. Mutable key collection ichida o‘zgarsa topilmay qolishi mumkin.
Xatti-harakat
Method obyekt holati va invariantiga ishlaydi. order.approve() operatsiyasi ruxsat etilgan state transitionni obyekt ichida saqlashi mumkin. Faqat getter va setterlardan iborat obyekt domen qoidasini tashqi service’ga tarqatadi. Biroq data transfer object ataylab transport uchun sodda bo‘lishi mumkin.
Dynamic dispatch methodning haqiqiy runtime type’dagi implementatsiyasini tanlaydi. Message-passing nuqtai nazarida caller obyektga operatsiya so‘raydi, ichki representationni bilmaydi. Encapsulation couplingni kamaytiradi.
Xotira va lifetime
Stack, heap yoki region obyekt storage’ini beradi. Managed runtime garbage collector reachability bo‘yicha obyektni tozalaydi. Native til owner lifetime’ni boshqaradi. Reference mavjudligi obyekt barcha tashqi resource’lari ochiq turishi kerak degani emas; file va socket explicit close talab qiladi.
Object graph reference’lar orqali bog‘lanadi. Cycle reference countingda leak, garbage collector’da esa root’dan reachable bo‘lsa logical leak yaratadi. Cache, listener va global registry keraksiz obyektni ushlab turishi mumkin. Heap profiler retention pathni ko‘rsatadi.
Serialization
Obyektni JSON yoki binary formatga aylantirish identity, private field va behaviorni to‘liq saqlamaydi. Explicit schema tashqi contractni internal classdan ajratadi. Version o‘zgarganda migration yoki backward-compatible field kerak. Runtime class nomini wire formatga yozish refactoring va xavfsizlik muammosini tug‘diradi.
Deserialization ishonchsiz inputdan arbitrary class yaratmasligi kerak. Allowlist, typed schema va constructor side effect’ini cheklash zarur. Sensitive field default serializer orqali tasodifan responsega chiqmaydi.
Concurrency
Bir mutable obyektga parallel threadlar murojaat qilsa data race va invariant buzilishi mumkin. Lock operationning to‘liq atomik chegarasini qamraydi. Ownershipni bitta actor yoki threadga berish shared mutationni kamaytiradi. Snapshot immutable ko‘rinish readerlarga barqaror holat beradi.
Identiklik va tenglik
Ikki obyekt bir xil maydon qiymatlariga ega bo‘lsa ham, xotirada alohida identiklikka ega bo‘lishi mumkin. Reference equality aynan bitta nusxaga ishora qilinishini, value equality esa mazmunning tengligini tekshiradi. Til yoki sinf equals va hash hisobini o‘zgartirishga ruxsat bersa, teng obyektlar bir xil hash qiymat berishi shart; aks holda to‘plam va lug‘atlarda qidiruv buziladi. O‘zgaruvchan obyektni hash kaliti sifatida ishlatish xavfli, chunki kalit maydoni o‘zgarsa, u avvalgi joyidan topilmay qolishi mumkin. Obyektning hayot davri ham resurs boshqaruviga bog‘liq: fayl va socket kabi tashqi resurslar faqat garbage collectorga tashlab qo‘yilmay, aniq yopiladi.
Bog‘liq tushunchalar
Class, Instance, Identity, Value object, Encapsulation, Object graph, Garbage collection