Аргыг нуух ба дахин тодорхойлолтын ялгаа

Програмчлалын c# хэл өргөн боломжтой, обьект хандлагат парадигмийг дэмждэг, том төслүүдийн боловсруулалтад өргөнөөр ашиглагддаг, маш универсал хэл. Хэлийг Microsoft хөгжүүлдэг нь л өөрөө ихийг хэлнэ. Миний бодлоор c# -ийн зарим шийдлүүдийг шууд ойлгоход хүндрэлтэй байдаг нь хэлний хийсвэрлэлттэй холбоотой байдаг болов уу. Хэлний боломжийг сайн судлан мэдэхгүйгээр сайн, хүчирхэг гэсэн утгаар төслийн үндсэн хэлээр ашиглах нь зөв биш шийдэл болов уу. Та c# хэл дээр код бичдэг, бичихээр суралцаж байгаа бол хэлний боломж, бололцоог сайн судлахыг зөвлөе.      

Виртуал аргууд, шинжүүд, Далд арга, шинжүүд хичээлүүдээр суурь классаас өвлөн авсан аргуудын ажиллагааг өөрчлөх нуух, дахин тодорхойлох гэсэн хоёр аргыг үзсэн. Эдгээр аргууд хоорондоо ямар ялгаатайг харцгаая.

Дахин тодорхойлох

class Person
{
    public string Name { get; set; }
    public Person(string name)
    {
        Name = name;
    }
    public virtual void Print()
    {
        Console.WriteLine(Name);
    }
}
class Employee : Person
{
    public string Company { get; set; }
    public Employee(string name, string company)
        : base(name)
    {
        Company = company;
    }
 
    public override void Print()
    {
        Console.WriteLine($"{Name} {Company} -д ажилладаг");
    }
}

Классуудийг програмд

Person tom = new Employee("Tom", "Microsoft");
tom.Print();        // Tom Microsoft -д ажилладаг

ашиглавал tom.Print() аргыг дуудахад tom хувьсагч Person төрлийнх хэдий ч Employee классийн Print аргын хэрэгжүүлэлт биелэгдэнэ. Компилятор виртуал аргуудтай ажиллахдаа виртуал аргуудын хүснэгтийг (Virtual Method Table эсхүл VMT) бүрдүүлдэг. Хүснэгтэд виртуал аргуудын хаягийг бичдэг. Класс бүрд өөрийн хүснэгтийг үүсгэдэг. Классийн обьект үүсэхэд компилятор обьектийн байгуулагчид VMT хүснэгт обьектийг холбох тусгай кодийг дамжуулдаг. Виртуал аргыг дуудахад обьектоос түүний VMT хүснэгтийн хаягийг аваад VMT хүснэгтээс аргын хаягийг олоод түүнд удирдлагыг шилжүүлдэг. Өөрөөр хэлбэл аргын хэрэгжүүлэлтийг сонгох үйлдэл програмийн ажиллагааны үед хийгддэг. Програмийг ажлуулах орчин эхлээд VMT хүснэгтээс хэрэгтэй аргын хаягийг авах шаардлагатай тул энэ нь програмийн ажиллагааг багахан удаашруулдаг гэдгийг тооцох хэрэгтэй.    

Нуулт

Одоо Person, Employee классуудад дахин тодорхойлолтын оронд нуултыг

class Person
{
    public string Name { get; set; }
    public Person(string name)
    {
        Name = name;
    }
 
    public void Print()
    {
        Console.WriteLine(Name);
    }
}
 
class Employee : Person
{
    public string Company { get; set; }
    public Employee(string name, string company)
            : base(name)
    {
        Company = company;
    }
    public new void Print()
    {
        Console.WriteLine($"{Name} {Company} -д ажилладаг");
    }
}

ашиглаад

Person tom = new Employee("Tom", "Microsoft");
tom.Print();        // Tom

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

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

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

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

C# -д ердийн классуудаас гадна абстракт классууд гэж бий. Ийм классууд ямар хэрэгтэй вэ? Классууд тодорхой төрлийн обьект эсхүл биетийн ерөнхий хэвийг голдуу илэрхийлдэг. Жишээ нь машинийг төлөөлөх Car эсхүл хүнийг илэрхийлэх Person гэх мэтээр классуудыг тодорхойлоод эдгээрт тухайн обьектийг тодорхойлох талбар, шинж, аргуудыг оруулан өгч болно. Гэтэл тодорхой дүрслэлгүй зарим нэгэн зүйлүүдийг програмчлалын хэлээр илэрхийлэх хэрэгцээ гардаг. Жишээ нь яг энэ гээд хэлэх геометрийн дүрс бодитоор оршдоггүй. Тойрог, тэгш өнцөгт, квадрат гэж байдаг ч зүгээр дүрс гэж байхгүй. Гэхдээ тойрог, тэгш өнцөгтүүдэд зарим нэгэн ерөнхий зүйлүүд байх бөгөөд энэ нь дүрс юм. Тодорхой биелэлгүй үүнтэй төстэй зүйлүүдийг тодорхойлоход абстракт классууд зориулагдсан.

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

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

Санамж. Програмчлалын хэлийг сурахад дадлага чухал үүрэгтэй. Жижиг гэлтгүй асуудлуудыг өөрөө шийдэхээс л дадлагажин код бичиж сурдаг. Эхлэн суралцагсад асуудлыг бэлэн сангууд ашиглан шийдэх гэдэг нь цаашид асуудал үүсгэх үндэс болдог. Хичээлийн жишээнүүдийг бэлэн сан ашиглан маш хурдан шийдэж болох ч чухам ямар ажиллагаануудыг хийсэнг мэдэлгүй өнгөрнө. Өөрөөр хэлбэл кодийн алгоритмийг ойлголгүй ажиллагааг шийднэ гэсэн үг. Ийм аргаар бүх асуудлыг шийдэх боломжгүй гэдэг нь тодорхой. Ер код бичих суурь бол асуудлыг шийдэх алгоритмыг зохиож сурах. Үүнд суралцахгүйгээр код бичиж сурахгүй гэдгийг сануулъя.

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

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

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

Энэ хичээлээр бид ОХП-д томоохон байр суурийг эзэлдэг интерфейс гэдэг ойлголтыг авч үзэх болно. Сэдэв сонирхолтой, нарийн хэдий ч ойлгож чадна гэдэгт итгэлтэй байна. Ингээд интерфейс гэж юу болохоос эхлэе.

Интерфейс гэж юу вэ?

Интерфейсийн олон янзын тодорхойлолтууд байдаг. Jeffrey Richter өөрийн "CLR via C#" номондоо интерфейсийг аргуудын тодорхойлогчдын нэрлэсэн багц гэжээ. Тодорхойлолтыг ухан ойлгоцгооё. Делегат ба үйл явдал хичээлд үзснээр бол аргын тодорхойлогч /Signature/ гэдэг нь аргын нэр, түүнээс буцаах утгын төрөл, оролтын параметрын төрлийг агуулах хэв юм.

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

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

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

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

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

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

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

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

 

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

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

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

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

 

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

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

 

Зуучлагч (Mediator) нь олон тооны обьектууд бие биетэйгээ холбоос үүсгэхгүйгээр харилцан ажиллах боломжийг хангах загварчлалын хэв юм. Ингэснээр…

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

 

Делегатууд хичээлд ухагдхууны талаар дэлгэрэнгүй үзсэн ч жишээнүүд делегатийн хүчийг бүрэн харуулж чадахааргүй байсан.…

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

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

функц өгөгдөв.

  1. f(x) функцын x0=5 абсцисстай M цэгт татсан шүргэгч шулууны тэгшитгэл
  2. f(x) функцын график, дээрх шүргэгч шулуун болон координатын тэнхлэгүүдээр хүрээлэгдсэн дүрсийн талбай  
  3. f(x) функцын графикийг M цэгт шүргэх, төв нь OX (абсцисс) тэнхлэг дээр орших тойргийн тэгшитгэл

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

 

20 хувийн концентрацитай 18 гр уусмал дээр концентрацийг нь 4 хувиар нэмэгдүүлэхийн тулд 26 хувийн концентрацитай хичнээн грамм уусмал нэмж хийх шаардлагтай вэ?

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

 

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

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