Классууд ба обьектууд

Өмнөх хичээлүүдээр бид өгөгдлийн төрлүүд, үйлдлүүд, цикл, нөхцөлт бүтэцүүд, массив, арга гээд C# програмчлалын хэлний суурь ойлголтуудыг үзсэн. C# бол бүрэн хэмжээний обьект хандлагат хэл. ОХП -ийн аргачлал орчин үед маш өргөн дэлгэрсэн тул өргөн дэлгэрсэн програмчлалын хэлүүд бүгд энэ парадигмийг дэмждэг. Энгийнээр ОХП -нь програмийг өөр хоорондоо харилцан холбогдож ажиллах обьектууд байдлаар зохиох аргачлал юм. Цаашид програмчлалын илүү нарийн ойлголтуудыг судлаж эхлэх учраас өмнөх хичээлүүдийг үзсэн байхыг зөвлөе.

Обьектийн тодорхойлолт бол класс харин обьект бол энэ классийн хувийг илэрхийлнэ. Жишээ нь бидэнд хүний тухай нэр, нас, хүйс, гарал үүсэл, үндэстэн гэх мэтээр тодорхой төсөөлөл бий. Өөрөөр хэлбэл ерөнхий хэв юм. Энэхүү хэвийг класс гэж нэрлэж болно. Хэвийн тодорхой биелэлүүд өөр өөр байж болно. Жишээ нь нэг хүний нэр, нас,өндөр нөгөөгөөсөө өөр байх гэх мэтээр. Бодит хүн бол энэ классийн хувь.
Өмнөх хичээлүүдэд бид классууд ашиглаж байсан. Жишээ нь мөрийг илэрхийлэх string төрөл бол үнэндээ бол класс. Эсхүл консолд мэдээлэл үзүүлэх WriteLine() аргатай Console ч бас класс.

Класс, обьект нь нилээд хийсвэрлэл өндөртэй ойлголтууд тул үгээр тайлбарлахад төвөгтэй. Иймд жишээгээр авч үзэх нь илүү.

Одоо өөрсдийн классийг хэрхэн үүсгэхийг харцгаая. Ер нь класс бол хэрэглэгч тодорхойлж буй шинэ төрөл бөгөөд сlass түлхүүр үгээр тодорхойлогдоно.

class классийн_нэр
{
    // классийн агуулга
}

class түлхүүр үгийн араас классийн нэрийг өгөөд цааш хаалтанд классийн агуулга байрлана. Жишээ нь Program.cs файлд хүнийг төлөөлөх Person классыг тодорхойлбол

class Person
{
 
}

байна. Гэхдээ ийм класс тийм ч ойлгомжтой биш тул түүнд зарим ажиллагааг нэмье.

Классийн талбар ба аргууд

Класс өгөгдлүүдийг хадгалж болох бөгөөд үүний тулд талбарыг хэрэглэдэг. Үнэндээ классийн талбар гэдэг нь классийн түвшинд зарлагдсан хувьсагч. Үүнээс гадна класст зарим биелэгдэх эсхүл хийгдэх үйлдлүүдийг тодорхойлох боломжтой. Классийн үйлдлийг тодорхойлохдоо аргуудыг хэрэглэнэ.
Ингээд Person класст талбар, аргуудыг

class Person 
{
    public string name = "Undefined";   // нэр
    public int age;                     // нас
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

нэмье. Дээрх кодоор Person класст нэр хадгалах name, нас хадгалах age талбаруудыг тодорхойлсон. Аргад тодорхойлогдох хувьсагчдаас классийн талбарууд модификатор /хандалтын боломж/ авч болдогоороо ялгаатай. Кодод талбарууд Person классийн гаднаас хандалттай байлгах үүднээс тэдгээрт public модификаторийг заан өгсөн байгаа. Талбарын тодорхойлолтод түүнд ямар нэгэн утгыг олгож болохыг name талбарын тодорхойлотоос харагдана. Хэрвээ классийн талбарт инициализац хийгээгүй бол тэдгээр нь төрлийнхөө анхдагч утгуудыг авна. Тоон төрлийн хувьсагчид энэ нь 0 байна.
Үүнээс гадна Person класст Print() аргыг тодорхойлсон. Классийн арга түүний талбаруудад хандах боломжтой бөгөөд кодод Print() арга name, age талбаруудын утгыг консолд гаргаж байгаа. Аргад классийн гаднаас хандах боломжийг олгох үүднээс түүнийг ч бас public модификатортой тодорхойлсон.

Классийн обьектыг үүсгэх

Классийн тодорхойлсоны дараа түүний обьектыг үүсгэх боломжтой. Обьектыг үүсгэхдээ байгуулагчийг (constructor) ашиглана. Байгуулагч нь класстай ижил нэртэй классийн шинэ обьектийг үүсгэхэд дуудагдан обьектийн инициализацийг хийдэг тусгай арга юм. Байгуулагч аргыг дуудах ерөнхий бичлэг.

new классийн_байгуулагч(параметрүүд);

байна. new оператор обьектод санах ой тусгаарлаад дараа нь байгуулагчийн дуудалтыг хийнэ.

Анхдагч байгуулагч

Класст (манай Person класс шиг) ямарч байгуулагч тодорхойлогдоогүй бол ямарч параметрүүд авдаггүй хоосон байгуулагч аргыг автоматаар үүсгэдэг.   
Person классийн обьектыг үүсгэе

Person tom = new Person();  // Person классийн обьектийг үүсгэх
// Person классийн тодорхойлолт
class Person
{
    public string name = "Undefined";
    public int age;
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

Person обьектыг үүсгэхдээ new Person() илэрхийллийг ашигласан. Илэрхийллээр Person обьектын бүх өгөгдлүүдийг хадгалах санах ойн хэсэг тусгаарлагдана. tom хувьсагч үүсгэгдсэн обьектын холбоосыг авах бөгөөд хувьсагчаар дамжуулан обьектын гишүүдэд хандан ашиглах боломжтой.

Классийн гишүүдэд хандах

Классийн гишүүдэд (талбар, арга гэх мэт) хандахдаа цэгийг ашиглана. Классийн обьектын (хувь) холбоосыг хадгалсан хувьсагчийн ард цэг тавиад дараа нь классийн элементийн нэрийг өгнө.  

объект.талбар
объект.арга(аргын параметрүүд)

Person классийн обьектийн элементүүдэд хандах жишээ

Person tom = new Person();  // Person классийн обьектыг үүсгэх
 
// Талбарын утгыг хувьсагчид авах
string personName = tom.name;
int personAge = tom.age;
Console.WriteLine($"Нэр: {personName} Нас {personAge}");   // Нэр: Undefined  Нас: 0
 
// талбарт шинэ утга олгох
tom.name = "Tom";
tom.age = 37;
 
// Print аргад хандах
tom.Print();    // Нэр: Tom  Нас: 37
 
class Person
{
    public string name = "Undefined";
    public int age;
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

Програм консолд

мэдээллийг үзүүлнэ.

Классийн тогтмол

Классийн талбарт тогтмол өгөгдлийг хадгалах тогтмолыг тодорхойлж болно. Талбараас ялгаатай нь тогтмолыг талбарын тодорхойлолтод нэг удаа шууд тавьдаг бөгөөд дараа нь утгыг өөрчлөх боломжгүй. Тогтмолууд ганцхан обьектод биш бүх класст хамааралтай өгөгдлийг хадгалдаг. Тогтмолд обьектын нэрээр биш классийн нэрээр ханддаг. Жишээ нь

Person tom = new Person();
tom.name = "Tom";
tom.age = 37;
tom.Print();    // Person: Tom - 37
 
Console.WriteLine(Person.type); // Person
// Person.type = "User";    // !Алдаа: тогтмолыг өөрчилж болохгүй
 
class Person
{
    public const string type = "Person";
    public string name = "Undefined";
    public int age;
    public void Print() => Console.WriteLine($"{type}: {name} - {age}");
}

Person класст классийн нэрийг хадгалах type тогтмолыг тодорхойлсон.

public const string type = "Person";

Классийн нэр обьектоос хамаарахгүй. Person классаас олон обьектийг үүсгэж болох ч классийн нэр өөр болох ёсгүй бөгөөд Person классийн бүх обьект ижил. Иймээс төрлийн нэрийг тогтмолд хадгалах боломжтой. Тогтмолд түүний тодорхойлолтод шууд утгыг олгох ёстойг сануулъя. Классийн дотроос тогтмолд ердийн талбарууд шиг хандах боломжтой. Жишээ нь

Console.WriteLine(Person.type); // Person

гэж Print аргаас тогтмолын утгыг консолд үзүүлж болно. Гэхдээ классийн гаднаас тогтмолд хандах болбол классийн нэрийг ашиглах хэрэгтэй. Жишээ нь    

Console.WriteLine(Person.type); // Person

Бүх класст хамааралтай өгөгдлийг хадгалах хэрэгтэй бол тогтмолыг ашиглаж болно.

Visual Studio -д классийг нэмэх

Классуудыг голдуу тусдаа файлд хадгалдаг. Нэг класс нэг файлд байх нь элбэг. Visual Studio боловсруулалтын орчинд классийн анхдагч хэвийг оруулан өгсөн байдаг.
Visual Studio -д класс нэмэхдээ төслийн нэр дээр баруун даралт хийхэд

нээгдэх цэсний Add -> New Item... (эсхүл Add -> Class...) командуудыг сонговол Add New Item

дэлгэц нээгдэнэ. Шинэ элемент нэмэх цонхны дунд орших элементүүдийн хэвүүдээс (шаблон) Class -ийг сонгоод Name талбарт нэмж буй классийнхаа нэрийг өгөөд Add товчийг дарна.
Классийн нэрийн талбарт Person эсхүл Person.cs гэсэн ч болох бөгөөд Add товчийг дарсаны дараа төсөлд

Person.cs нэртэй файл нэмэгдэнэ. Person.cs файлд нэг талбартай Print аргатай

class Person
{
    public string name = "Undefined";
    public void Print()
    {
        Console.WriteLine($"Person {name}");
    }
}

классийг тодорхойлъё. Үндсэн Program.cs файлд Person классийн хувийг үүсгээд

using ConsoleApp1;
Person tom = new Person();
tom.name = "Tom";
tom.Print();    // Person Tom

Програмаа ажлуулбал

үр дүнг өгнө. Ингэснээр бид классийг тусдаа файлд тодорхойлоод түүнийг програмдаа ашиглахыг сурлаа.

Жич: Эхэн үедээ ОХП төвөгтэй мэт санагдаж магадгүй ч та хичээвэл тийм ч хүнд биш гэдэгт итгээрэй.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 1216 Төлбөртэй

Бид өмнөх хичээлээр C# хэлний generalization буюу ерөнхийлөл гэдэг төрөл бүрийн обьектуудын төлөв байдлын хэвийг тодорхойлох механизмын талаар үзсэн. Энэ удаагийн хичээлээр сэдвийг үргэлжлүүлэн авч үзэцгээе. Ерөнхийлөлд тодорхой хязгаарлалтууд үйлчилдэг.

Ерөнхийлөлийн хязгаарлалт  

Ерөнхийлөлд тавигдах хязгаарлалтууд түүнтэй ажиллах ажиллагааг илүү уян хатан болгодог нь сонирхолтой.

  Нээгдсэн тоо: 1065 Төлбөртэй

Linq технологит олонлогтой ажиллах маш олон аргууд байдаг. Бүх аргуудыг үзнэ гэвэл их хугацаа шаардлагатай тул энэ хичээлд ихээр хэрэглэдэг аргуудаас товчхон авч үзэх болно. Аргуудыг хэрхэн ашиглах ерөнхий зарчмыг ойлгосон байхад бусад аргуудыг хэрэглэхэд хүндрэл гарахгүй тул материалыг сайн судлан ойлгон авахыг хичээгээрэй.

  Нээгдсэн тоо: 194 Бүртгүүлэх

Програмчлалын C# хэлэнд өгөгдлийн энгийн төрлүүдээс гадна enum буюу дурдах /тоолох/ гэсэн төрөл бий. enum төрөл логик холбоотой тогтмолуудаар илэрхийлэгдэнэ.

Төрлийг enum оператороор зарладаг.

enum нэр
{
    // тоологын утгууд
    утга1,
    утга2,
    .......
    утгаN
}

enum араас тооллогын нэрийг өгнө. Дараа нь хаалтанд таслалаар тусгаарлан тооллогын утгууддыг тогтмолуудыг бичнэ.

  Нээгдсэн тоо: 963 Төлбөртэй

Олон урсгалыг үүсгэн удирдах хичээлээр бид Invoke аргаар удирдлагыг нэмэлт урсгалаас үндсэн урсгалд хэрхэн шилжүүлэх талаар авч үзсэн. Invoke арга удирдлагыг нэмэлт урсгалаас үндсэн урсгалд шилжүүлэх цорын ганц зам биш. .NETSynchronizationContext гэдэг класс бий. Энэ класс нэг эсхүл олон урсгалыг барин тэдгээрийн хооронд удирдлагыг дамжуулах ажиллагааг хийдэг. Ерөнхийдөө Invoke арга хийдэгтэй ижил. Эндээс Invoke аргаар шийдэж болж байхад бас нэгэн класс байх ямар хэрэгтэй юм бэ? гэсэн асуулт гарч ирнэ.

Класс ба структурт ердийн талбар, арга, шинжүүдээс гадна статик талбар, арга, шинжүүд байж болдог. Статик талбар, арга, шинжүүд…

Нээгдсэн тоо : 48

 

Хичээлээр useState -тэй тун төстэй useRef хукийн талаар авч үзье. useRef хукийн онцлог ашиглалтыг компонент хэдэн удаа дахин…

Нээгдсэн тоо : 44

 

Хүүхдүүд тооны хичээлийг анхнаасаа зөв ойлгон сураагүйгээс анги ахих тусмаа математикийн хичээлийнн хоцрогдолоос болоод дургүй болох тал байдаг.…

Нээгдсэн тоо : 104

 

Нийтлэлээр графикийн хэвүүдийн /GUI pattern/ түүхийг авч үзье. Боловсруулалтын графикийн хэвүүдийг 30 гаруй жилийн туршид боловсруулж байгаа бөгөөд…

Нээгдсэн тоо : 83

 

Хааяа өөр өөр параметрүүдийн багцтай нэг аргыг үүсгэх шаардлага гардаг. Ирсэн параметрүүдээс хамааран аргын тодорхой хэрэгжүүлэлтийг хэрэглэнэ. Ийм…

Нээгдсэн тоо : 84

 

Ямарч програмын ажиллагааны чухал хэсэг бол төрөл бүрийн мэдээллийн боловсруулалт, тэдгээртэй ажиллахтай холбоотой байдаг. Иймээс энэ хичээлээс vuejs

Нээгдсэн тоо : 66

 

Хичээлээр react -ийн хукуудаас их өргөн ашиглагддаг useEffect -ийн талаар авч үзье. useEffect -ийн ажиллагааг судлах хуудасны кодийг

Нээгдсэн тоо : 62

 

Илэрхийлэл бол математикийн хэлний үндэс болсон суурь ойлголтуудын нэг. Математикийн илэрхийллийг тооцооны алгоритм, аксиом, теорем, бодлогын нөхцлүүд гээд…

Нээгдсэн тоо : 83

 

Програм зохиох бол нарийн төвөгтэй ажил. Ямар ч програмын хувьд өөрийн хийх ажлаа гүйцэтгэхийн чацуу цаашдаа хөгжих, ажлын…

Нээгдсэн тоо : 75