Sunday, October 11, 2015

Лекц - 7

7 Класс зохион байгуулах
Класс гэдэг нь хоорондоо логикийн хувьд уялдаа холбоотой хувьсагчид болон тэдгээр дээр үйлдэл хийх функцуудыг агуулсан хэрэглэгчийн тодорхойлсон төрөл юм. Класс төрөлтэйгээр зарлагдсан хувьсагчыг тухайн классын обьект гэж нэрлэдэг.
  Классын объект бүр бусад объектуудаас ялгагдах дахин давтагдашгүй шинж чанартай байх бөгөөд өөр өөрийн гэсэн санах ойн мужтай байдаг. Классын гишүүн өгөгдөл ба гишүүн функцэд хандахдаа тухайн классын объектын нэрийг цэгтэй хамт бичдэг. Тухайлбал: Энд b1.setName(“English grammar”); мөр нь b1 объектод зориулан түүний setName() гишүүн функыг дуудаж байна. Нэг ёсондоо b1 бол бэхлэгдсэн объект юм. Классын гишүүдийг мөн статикаар тодорхойлж болно. Статик гишүүдийн хэрэглээг дараа тодорхой жишээн дээр авч үзэх болно. Классын гишүүд ба объект
   Класс хүчирхэг ӨХТ болох нь. Учир нь тэрээр бусад ӨХТ-үүдийг бодвол дараах 2 гол давуу талаар хангагдсан. Үүнд: Гишүүн функцээр хангагдсан Өгөгдлийн далдлалтыг хэрэгжүүлдэг. Өгөгдлийн далдлалт Объектын дотоод дүрслэл болох шинж чанар болон төлөв байдал нь програмын бусад хэсгээс далдлагдсан байдаг. ӨХТ-ийн гишүүдийг далдалж өгсөнөөр програмд гарч болох санаатай болон санамсаргүй гаргах алдаанаас сэргийлдэг. Ингэснээр хувьсагч буруу утга авах зэрэг алдаа гарах магадлал багасна. Өгөгдлийн далдлалтыг private хандалтаар хэрэгжүүлдэг. ӨХ: Далдлах гишүүн өгөгдөл болон функцын өмнө private түлхүүр үг бичих бөгөөд гол нь классын далдлах шаардлагатай хэсгийг оновчтой тодорхойлох нь чухал юм. Өгөгдлийн далдлалт нь классыг хар хайрцагны шинж чанартай болгож өгдөг. Өгөгдлийн далдлалт (Data hiding)
   Энд “Оюутан” классыг авч үзэв. Энэ жишээнд оюутны үнэлгээний голч дүн ( GPA ) болон төлбөр төлсөн байдал ( isPaid ) гэсэн гишүүн өгөгдл үүдийг далдлах шаардлагатай гэж үзье.. Жич: Нэгэнт “Оюутан” класс нь Өгөгдлийн Хийсвэр Төрөл ( ӨХТ ) буюу Хэрэглэгчийн Тодорхойлсон Төрөл ( ХТТ ) учраас түүнд ямар ямар гишүүн өгөгдөл, ямар ямар гишүүн функц байхыг програм зохиогч өөрөө хийсвэрлэж тогтоохоос гадна ямар гишүүдээ далдлахаа мөн л өөрөө бодит амьдралын шаардлага дээр үндэслэн шийднэ. Жишээ: Өгөгдлийн далдлалт STUDENT Student_code Student_name GPA isPaid Choose_lesson() Pay_payment()
   Гишүүдийн хандалтууд Өгөгдлийн хандалтыг тодорхойлох дараах тодорхойлогч (access modifiers)- ууд байдаг.Үүнд: private ( хувийн хандалтыг тодорхойлогч ) public ( нийтийн хандалтыг тодорхойлогч ) protected ( хамгаалагдсан хандалтыг тодорхойлогч ) default ( Багцын хандалтыг тодорхойлогч ) static тухайн классын объектыг үүсгэхгүйгээр ашиглаж болно final утгыг нь уншиж болох боловч өөрчилж болохгүй trancient стандарт сериалчлалаар хадгалах сэргээх боломжгүй votalite олон процессуудын зэрэг ажиллагааны үед бүгд нэг зэрэг өөрчилж болно private хандалттай гишүүд нь програмын бусад хэсгээс ( үндсэн функц болон бусад классаас ) далдлагдсан байна. Түүнд хандахдаа тухайн классын нийтийн хандалттай гишүүн функцээр дамжуулж хандана. public хандалттай гишүүдэд програмын дурын хэсгээс хандах боломжтой. protected хандалттай гишүүд нь өөрийн хүү классдаа харагддаг, харин програмын бусад хэсгээс далдлагдан байдаг. default хандалт нь тухайн багцынхаа классуудад харагддаг, програмын бусад хэсгээс далдлагдсан хандалт юм.
   Хандалт тодорхойлогчид ба тэдгээрийн зохицол yes no abstract yes yes non-static yes yes static non-final final   yes yes, but private yes yes default yes yes, but protected yes yes public non-final final   yes yes non-abstract yes no abstract non-final final   no yes yes yes abstract yes yes yes default private protected public yes yes yes yes yes yes yes yes yes non-abstract non-static   static
  Далдлагдсан гишүүд нь үндсэн функцэд харагдахгүй Алдаа !!! Далдлагдсан гишүүдэд хандаж болохгүй Далдлагдсан гишүүд
   Далдлагдсан функцыг үндсэн функцэд ашиглах боломжгүй Алдаа !!! Далдлагдсан функц үндсэн програмд харагдахгүй Далдлагдсан функц
   Жишээ: Нийтийн хандалттай гишүүд үндсэн функцэд харагдана. Энэ энгийн жишээ програмд ямар нэг асуудал үүсэхгүй. Учир нь нийтийн хандалттай гишүүн өгөгдөл болон гишүүн функц нь үндсэн функцэд харагдана.
   Room ба ExampleTest4 классууд нь нэг багцад байрлаж байна. Эндээс нийтийн хандалттай гишүүн өгөгдөлд түүнтэй ижил багц ад байрлах классаас хандах боломжтой болох нь харагдаж байна. Мөн өөр багцад орших классуудад ч харагдах тул нийтийн хандалттай гишүүдийг хаанаас ч ашиглаж болно. Жишээ: Нийтийн хандалттай гишүүд бусад классуудад харагдана Нийтийн хандалттай гишүүн өгөгдөл
 Классын гишүүдийн хандалт Багцын хандалт: Хэрэв классын гишүүнийг тодорхойлохдоо өмнө нь ямар нэг хандалт тодорхойлоогүй байвал түүнийг default буюу багц ын хандалттай гэж үзнэ. Java хэлэнд хоорондоо харилцан хамаарал бүхий классуудыг нэг пакетад хадгалж заншсан бөгөөд багц ын хандалтын тусламжтай тэдгээр классууд хоорондоо хамтран ажиллахад хялбар болдог. Ийм хандалттай гишүүд нь түүнтэй ижил багцад орших бусад классуудад харагддаг харин өөр багцад орших классуудаас далдлагдсан байдаг.
   Room ба ExampleTest4 классууд нь нэг багцад байрлаж байна. Багцын хандалттай гишүүд нь үндсэн функцэдээ харагдахаас гадна нэг багцад орших бусад классуудад л харагдана Пакетын хандалттай гишүүн өгөгдөл Эндээс багцын хандалттай гишүүн өгөгдөлд түүнтэй ижил багцад байрлах класаас хандах боломжтой болох нь харагдаж байна.
  Room ба ExampleTest4 классууд нь өөр өөр багцад байрладаг бол дараах алдаа заана. Учир нь багцын хандалттай гишүүд нь бусад багц дахь классуудаас далдлагдсан байдаг. Багцын хандалттай гишүүд нь өөр багцанд орших классуудаас далдлагдсан байна Багцын хандалттай гишүүн өгөгдөл
   Классын хандалт Классын гишүүдэд хандалт тогтоохоос гадна классын өмнө бас хандалт тодорхойлогч түлхүүр үгийг бичдэг болохыг та бүхэн анзаарсан бизээ. Классын хандалт нь нийтийн (public) эсвэл пакетын (default) хандалттай байж болно. Хувийн болон хамгаалагдсан хандалттай класс байдаггүй. ( Харин Inner класс хэмээх ойлголтын үед хувийн болон хамгаалагдсан хандалттай классын тухай яригддаг ) Хэрэв классын нэрний өмнө ямар нэг хандалт тодорхойлох түлхүүр үг бичээгүй бол түүнийг багцын хандалттай класс гэж үзнэ. Классын хандалтыг тодорхойлох үед дараах дүрмийг баримтална. Үүнд : Анхдагч эх файлд хэдэн ч класс тодорхойлж болох боловч тэдгээрийн нэг нь л нийтийн хандалттай байна. Хэрэв хэд хэдэн нийтийн хандалттай класс тодорхойлвол алдаа заана. Анхдагч эх файл нь main() функцыг заавал агуулах албагүй. Хэрэв түүнд main() функц тодорхойлогдсон бол main() функцыг агуулах тэрхүү классыг нийтийн хандалттай тодорхойлж өгнө. Анхдагч эх файлыг нэрлэхдээ түүн дэх нийтийн хандалттай классын нэрээр нэрлэнэ. Анхдагч эх файлд ямар нэг нийтийн хандалттай класс тодорхойлогдоогүй бол түүнийг дуртай нэрээрээ нэрлэж болно.
   Классын хандалт ба гишүүдийн хандалтын хүснэгт public класс “ default” класс класс Багц public класс “ default” класс класс Багц Өөр б агц Нийтийн болон багцын хандалттай классын гишүүд рүү өөр багцын классаас хандах нь Нийтийн болон багцын хандалттай классын гишүүд рүү ижил багцын классаас хандах нь no no "default" гишүүн no no private гишүүн no yes / no protected гишүүн no Yes public гишүүн "default" class public class   yes yes "default" гишүүн no No private гишүүн yes Yes protected гишүүн yes yes public гишүүн "default" класс public класс  
   Үгийн санд Нарийвчлалт Specialization Ерөнхийлөлт Generalization Мутатор, өөрчлөгч арга Mutator method Гүйцэтгэл Performance Үзэл санаа Paradigm Багцын зарлалт Package declaration Багцын хандалт Package access Багц Package Шигтгэсэн систем Embeded system Энгийн удамшил Single Inheritance Нийлмэл удамшил Multiple Inheritance Хандах арга Accessor method Хандалтыг тодорхойлогч Access modifier Хийсвэрлэлт Abstraction Хийсвэр эх класс Abstract superclass Хийсвэр арга Abstract method Өгөгдлийн хийсвэр төрөл (ӨХТ) Abstract data type (ADT) Хийсвэр класс Abstract class
Обьект гэдэг нь физик биет, түүний хийсвэрлэл юм. Амьдрал дээрхи обьект буюу физик биет буюу үзэгдэл нь өөрийгөө тодорхойлох шинж чанарууд болон оршин байх төлөв байдлуудтай байдаг. Тэрхүү шинж чанар, төлөв байдлууд нь ижил байдаг обьектуудыг нэг бүлэг буюу класс болгоод, шинж чанаруудыг нь стандарт өгөгдлийн төрлүүдтэй хувьсагчид, төлөв байдлыг нь функцууд болгож бичиж өгдөг. Өөрөөр хэлбэл: класс гэдэг нь ямар нэгэн обьектийг тодорхойлж чадах гишүүн хувьсагчид, төлөв байдлыг нь тодорхойлох (тэдгээр хувьсагчид дээр үйлдэл хийх) гишүүн функцуудаас бүтдэг.
Програмд Class-г тодорхойлох формат:
class Классын нэр{
Хандалт:
гишүүн өгөгдлийн төрөл1 гишүүн өгөгдлийн нэр1;
гишүүн өгөгдлийн төрөл2 гишүүн өгөгдлийн нэр2;
...
гишүүн өгөгдлийн төрөл2 гишүүн өгөгдлийн нэр2;
Хандалт:
Гишүүн функцуудын тодорхойлолтууд; ...}
Жишээ нь: Компьютер гэсэн класс байвал гишүүн өгөгдлүүд болон функцууд нь дараах байдалтай байна.
class PC{
private:
int RAM;
float Speed;
char *manufacturer[30];
int Hard;
public:
void get_values(void)
{
cout<<”manufacturer name:”; cin>>manufacturer;
cout<<”CPU Speed:”; cin>>Speed;
cout<<”Hard disk size:”; cin>>Hard;
cout<<”RAM size:”; cin>>RAM;
}
Public хэсэг гэж юу вэ?
Класс дотор зарлагдаж буй гишүүн өгөгдлүүд болон функцуудын өмнө public: буюу private: гэсэн хандалтуудыг бичиж өгдөг. Аль нэгийг нь бичээгүй бол private хандалттай болдог. Энэхүү хандалт нь нэг удаа бичигдсэн бол дараагын хандалт тодорхойлогдох хүртэл, бичигдсэн бүх хувьсагчид, функцуудад хэрэгждэг. Дээрх 2 хандалтын үүрэг нь:
Ямар нэг функц буюу хувьсагч нь <public> түлхүүр үгийн араас зарлагдсан бол <public> хандалттай болох бөгөөд тухайн обьектын хүрээн дэх аливаа дуудах програмын хувьд хэрэглэгдэх боломжтой. Private хандалттай хувьсагчид руу програмын дурын хэсгээс хандах боломжгүй. Иймээс зөвхөн классын <public> хэсэгт тодорхойлсон функцийг дуудах замаар private хэсэг дэхь функц, хувьсагчдийг хэрэглэж чадна.
Тухайн нэг классын гишүүн функцийг классын мужаас гадна зарлахад функц бүрийн нэрний өмнө давхар хос цэгээр классынх нь нэрийг тусгаарлан бичиж өгдөг. Ингэснээр ижил нэртэй функцүүдийг өөр өөр классын хувьд тодорхойлж өгч байгаа юм. Өөрөөр хэлбэл компилятор тэдгээрийг аль нь аль классынх болохыг ялгаж танина.
Класс дотор private гишүүн агуулагдсан байхын нэг гол учир нь уг классын гишүүн функцүүдээр тэдгээрийг өөрчлөх болон унших боломжтой байдаг.
Ихэвчилэн тухайн классын үндсэн хувьсагчид ба функцүүдийг private хэсэгт харин public хэсэгт нэмэлт хувьсагчид ба функцүүдийг зарладаг. Практикт ихэвчлэн хувьсагчдийг зөвхөн private хэсэгт харин функцүүдийг public хэсэгт зарладаг .Гэвч хувьсагчид эсвэл функц нөгөө хэсэгтээ зарлагдсан байдаг. Мэдээж энэ нь ямар бодлогын даалгавар тавигдсан, мөн програмын онцлогоос болох нь ойлгомжтой.


No comments:

Post a Comment