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

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

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

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

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

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

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

Удамшуулалтад суурь классаас өвлөн ирсэн аргын ажиллагааг удамшсан класст өөрчлөх хэрэгцээ ихээр гардаг. Энэ тохиолдолд удамшсан класст суурь классийн арга, шинжүүдийг дахин тодорхойлж болдог.
Удамшсан класст дахин тодорхойлж болох арга, шинжүүдийг суурь класст virtual модификатороор тэмдэглэнэ. Ийм арга, шинжүүдийг виртуал гэж нэрлэдэг. Удамшсан класст эдгээр аргуудыг дахин тодорхойлохдоо override модификаторийг ашиглана.

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

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

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

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

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

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

Entity Framework -ийн талаарх өмнөх хоёр хичээлд бид технологийн талаарх ойлголт, өгөгдлийн санд уламжлалт аргачлалаар хандах програмын кодыг хийсэн. Энэ хичээлд өмнөх хичээлийн жишээг Entity Framework -ийг ашиглан хэрхэн хийхийг авч үзэцгээе. Таны ашиглаж байгаа .NET фреймворкийн хувилбарт Entity Framework -ийн арай өмнөх хувилбар байж болох талтай. Иймээс Entity Framework -ийн сүүлийн хувилбарыг Nuget механизмаар татан суулгаарай. Nuget бол төрөл бүрийн шинэчлэлүүдийн классын санг автоматаар татан суулгах систем юм.

Математикийн үйлдлүүдэд нэг ба тэг тоонууд онцгой шинжүүдтэй. Үржих үйлдэлд нэг ба тэг

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

 

Давталт (Iterator) паттерн нийлмэл обьектын бүх элементүүдэд тэдгээрийн дотоод бүтцийг задлахгүйгээр хандах абстракт интерфейсийг тодорхойлдог. C# хэл дээр…

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

 

Тодорхой нөхцөлд жишээ нь тоог тэгд хуваах гэх мэт тохиолдолд систем өөрөө онцгой нөхцлийн генерацийг хийдэг. Гэхдээ C#

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

 

Програмийг удирдах цэсийг нээх болон хаах ажиллагааг хариуцах компонентийг боловсруулъя. Үүний тулд төслийн components хавтаст Navigation хавтасыг үүсгээд…

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

 

Арифметикийн үндсэн 4 үйлдлийн нэг бол үржих. Нэмэх , хасах үйлдлийн талаар…

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

 

Шаблоны арга (Template Method) хэв дэд классуудад алгоритмын бүтцийг өөрчлөхгүйгээр зарим алхамуудыг дахин тодорхойлох боломж олгосон ерөнхий алгоритмыг…

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

 

Гурвалжны медиантай холбоотой бодлогууд шалгалт шүүлэгт ихээр орж ирдэг. Иймээс гурвалжны медиан, түүний шинжүүдийг бүрэн мэддэг байх хэрэгтэй.

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

 

Бүх онцгой нөхцлүүдийн суурь бол Exception төрөл. Төрөлд онцгой нөхцлийн талаарх мэдээллийг авч болох хэдэн шинжийг тодорхойлсон байдаг.…

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

 

Сорилгын үр дүнгийн QuizResult компонентод сорилгыг дахин эхлүүлэх товч байгаа. react -ийг зохиогчид  програмийг компонент дээр суурилан хийх…

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

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

илэрхийллийг хялбарчил

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

 

ABCD трапецийн бага диагонал BD=6 бөгөөд суурьтай перпендикуляр. Трапецийн AD=3, DC=12 бол B, D мохоо өнцгийн нийлбэрийг ол.

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

 

Геометрийн шалгалтанд сурагчид шалгалтын асуултуудаас нэг асуулт ирнэ. Сурагч "Дотоод өнцөг" сэдвийн асуултуудад хариулах магадлал 0,35 харин "Багтаасан тойрог" сэдвийн асуултуудад хариулах ммагадлал 0,2 байжээ. Шалгалтын асуултуудад энэ хоёр сэдэвт хоёуланд зэрэг хамаарах асуулт байхгүй бол сурагчид энэ хоёр сэдвийн аль нэгэнд нь хамааралтай асуулт ирэх магадлалыг ол.

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