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

Өмнөх хичээлүүдээр бид өгөгдлийн төрлүүд, үйлдлүүд, цикл, нөхцөлт бүтэцүүд, массив, арга гээд 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

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

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

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

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

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

Олонлогийн тухай сэдвийг үргэлжлүүлэн үзье. C# -д олонлогийн хэдэн төрлүүд байдаг. Олонлогийн тухай ойлголт интерфейс ба ерөнхийлөлтэй их холбоотой тул хичээлийг үзэхээс өмнө интерфейс , ерөнхийлөл сэдвийн хичээлүүдийг судлахыг зөвлөе.

Цуглуулга /collection/

Одоо цуглуулга гэж юу болох талаар авч үзье. Цуглуулга өөрийн гишүүдийг нэмж, хасч, цэвэрлэж болдогоороо дарааллаас ялгаатай гэдгийг өмнөх хичээлд дурдсан. Дарааллын хувьд бид түүнийг үүсгэх дүрмийг давтагчийг /итератор/ ашиглан өгч болсон. Жишээ нь 3 ялгавартай арифметик прогресс.

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

 үүсвэр:

Өмнөх хичээлээр бид делегатын талаар тодорхой авч үзсэн. Энэ хичээлээр өмнөх хичээлд үзсэн зүйлүүдийг үргэлжлүүлэн үйл явдал гэдэг ойлголтыг авч үзнэ. Иймээс хичээлийн материалыг үзэхийн өмнө Делегат ба үйл явдал 1 хичээлийг сайтар судлан ойлгосон байх шаардлагатай.

Нэгдсэн /ерөнхийлөгдсөн/ делегат.

Дараах дохиолдолыг авч үзье. Бидэнд void (string) тодорхойлогчид тохирох аргад холбоотой CountDelegate гэсэн делегат байлаа гэж үзье. Яваандаа програмын ажиллагааны кодод void (string) тодорхойлогчид тохирох аргад холбоотой бас нэгэн TimesDelegate гэсэн делегат хэрэгтэй болох тохиолдол гарч ирэх бүрэн боломжтой. Ийм байдлаар 3 дахь 4 дэхь тохиолдлууд гарч болно.

  Нээгдсэн тоо: 189 Нийтийн

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

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

Програмчлалын хэлний суурь бүрдүүлэгчдийг нэг бол тодорхой нөхцлөөс хамааран програмын кодийн ажиллагааны дарааллыг өөрчлөх нөхцлийн бүтэц юм. C# хэлний ийм бүтцүүдийн нэг бол if..else бүтэц.
if..else бүтэц нөхцлийн үнэн эсэхийг шалгаад үр дүнгээс хамааран тодорхой кодийг биелүүлдэг. Бүтцийн энгийн хэлбэр if блокоос бүрдэнэ.

if(нөхцөл)
{
    биелэгдэх командууд
}

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 
Энэ долоо хоногт

тэгшитгэлийг бод.

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

 

хязгаарыг бодоорой.

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

 

Ангийн нийт сурагчдын 60% нь эмэгтэй сурагчид байдаг. Ангиас санамсаргүйгээр нэг сурагч сонгоход эрэгтэй сурагч байх магадлалыг ол.

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