Ангиуд ба бүтэц
Объект хандалтат (OO) програмчлалын хэлний зарим үндсэн ойлголтууд нь капсулжуулалт, удамшил, полиморфизм юм. Анги болон Бүтэц нь OO-ийн хоёр бүтээц/хэрэгслүүд бөгөөд программистуудад гарч байгаа OO програмчлалын ихэнх хэлнүүдэд эдгээр ойлголтуудыг хэрэгжүүлэхэд тусалдаг (Java нь бүтцийг өгдөггүй). Ангиуд нь бодит ертөнцийн объектуудын хийсвэр дүрслэл юм. Бүтэц нь ижил төстэй хэрэглээтэй ангиудтай маш төстэй боловч ангиудтай харьцуулахад цөөн хязгаарлалттай байдаг. Анги болон бүтэц хоёулаа ижил төрлийн өгөгдлийг хамтад нь бүлэглэхэд ашиглагддаг.
Анги гэж юу вэ?
Ангиуд нь бодит ертөнцийн объектуудын хийсвэр дүрслэлийг дүрсэлдэг бол харилцаа холбоо нь анги бүр бусадтай хэрхэн холбогдож байгааг харуулдаг. Ангиуд болон харилцаа холбоо хоёулаа шинж чанарууд гэж нэрлэгддэг шинж чанартай байдаг. Ангиудын аргууд нь эдгээр ангиудын зан төлөвийг илэрхийлдэг эсвэл тодорхойлдог. Ангиудын арга, шинж чанаруудыг ангийн гишүүд гэж нэрлэдэг. Ихэвчлэн атрибутуудыг хувийн болгохын зэрэгцээ тэдгээр шинж чанаруудад хандахад ашиглаж болох нийтийн аргуудыг бий болгосноор капсулжуулалтыг хийдэг. Объект нь ангийн жишээ юм. Өв залгамжлал нь хэрэглэгчдэд бусад ангиас (супер анги гэж нэрлэгддэг) ангиудыг (дэд анги гэж нэрлэдэг) өргөтгөх боломжийг олгодог. Полиморфизм нь програмистад тухайн ангийн объектыг супер ангийн объектын оронд орлуулах боломжийг олгодог. Дүрмээр бол асуудлын тодорхойлолтод байгаа нэр үг нь програмын анги болж хувирдаг. Үүний нэгэн адил үйл үг нь арга болдог. Public, private болон protected нь ангиудад хэрэглэгддэг ердийн хандалтын хувиргагчид юм. Ангийн диаграм нь системийн ангиуд, ангиудын хоорондын хамаарал, тэдгээрийн шинж чанаруудыг харуулдаг.
Бүтэц гэж юу вэ?
Дээр дурьдсанчлан бүтэц нь ижил төстэй хэрэглээтэй ангиудтай маш төстэй боловч ангиудаас бага зэрэг хязгаарлагдмал боломжуудтай. Үнэн хэрэгтээ ангиудыг бүтцийн өргөтгөл гэж үзэж болно. Жишээлбэл, бүтэц нь C++ хэл дээрх ангиудтай адилхан боловч анхдагч байдлаар нийтийн гишүүдтэй байдаг. Хэрэглэгч нийлмэл төрлийг төлөөлөх бүтцийг тодорхойлж болно. Ангиудтай адил бүтэц нь олон төрөлд хамаарах гишүүдийг агуулдаг. Struct түлхүүр үгийг C ба C++ хэл дээр бүтцийг тодорхойлоход ашигладаг бол Structure гэсэн түлхүүр үгийг. NET програмчлалын хэлэнд мөн адил ашигладаг.
Ангиуд болон бүтцийн хооронд ямар ялгаа байдаг вэ?
Хэдийгээр анги болон бүтэц хоёулаа програмчлалын хэлэнд байдаг ижил төстэй бүтэцтэй боловч нарийн ялгаа байдаг. Ерөнхийдөө анги нь бүтцийн өргөтгөл бөгөөд иймээс бүтэц нь харьцангуй хязгаарлалттай байдаг. Жишээлбэл, бүтцийг C++ хэл дээрх ангиудтай адилхан гэж үзэж болох боловч гишүүд ангиудад анхдагч байдлаар нийтэд нээлттэй байдаггүй (бүтэцээс ялгаатай). Энэ нь үнэндээ C++-д тохирох хандалтын хувиргагчийг ашиглан яг ижил шинж чанартай анги, бүтцийг тодорхойлж болно гэсэн үг юм. Гэсэн хэдий ч C хэл дээр бүтэц нь ямар ч функц эсвэл хэт ачаалалтай үйлдлүүдийг агуулж болохгүй. C++ хэл дээрх анги болон бүтцийг тодорхойлоход class болон struct түлхүүр үгсийг ашигладаг.. NET хэлний (C, VB. NET гэх мэт) тухайд класс нь лавлагааны төрөл, харин бүтэц нь утгын төрөл юм. Мөн ихэвчлэн жижиг объектуудад бүтцийг ашигладаг, харин санах ойд удаан хугацаагаар хадгалагдах том объектуудад ангиллыг ашигладаг.