Өгөгдлийн төрлүүд

Юуны өмнө ОХП-ын хэлүүд болон C# хэлэнд байдаг тодорхой суурь ухагдхууны талаар ойлголтыг авах хэрэгтэй. ОХП-ын хэлэнд бараг бүх обьектууд өгөгдлийн төрлүүд байдаг.

  • Хувьсагч гэдэг нь төрөл бүрийн утгуудыг авч болдог дараа нь тэдгээрийг өөр төрлийн утгаар өөрчилж болдог хэлний элемент юм. Иймээс түүнийг хувьсагч гэж нэрлэдэг. Тогтмол утга гэж бас байдаг. Тогтмол утга нь хувьсагчаас ялгаатай нь өөрийн утгаа компиляц хийх үед ганц удаа аваад тухайн утгаа дахин өөрчилдөггүй. Хувьсагч гэдгийг ямар нэгэн зүйлийг эсхүл тухайн зүйл хаана байгааг заах мэдээллийг хадгалж болдог хайрцагтай зүйрлэж болно.
  • Өгөгдлийн төрөл гэдгийг хувьсагч авч болох утгуудын олонлог гэж ойлгоно. Хэрвээ бид хувьсагчийг бүхэл тоон төрлийнх гэж заавал түүнд зөвхөн бүхэл тоог эсхүл логик төрлийнх гэвэл зөвхөн логик утгыг авна гэсэн үг. Өөрөөр хэлбэл хувьсагч өөрийн төрөлд багтах утгуудын олонлогоос л утгаа авах ёстой гэсэн үг.
  • Обьект гэдэг нь хувьсагч авсан тодорхой утга эсхүл тухайн утгыг авах холбоосын утгыг хувьсагчид олгосонг хэлнэ. Энэ ойлголт нь ОХП-ын үндсэн гол ойлголт байдаг.

Өгөгдлүүдийн төрлүүдийн жишээ.

Дээрх зурагт өгөгдлүүдийн энгийн төрлүүдийн жишээг харууллаа. Хувьсагчид төрөл заан өгснөөр бид түүний авч болох утгуудын олонлогийг өгч байгаа юм. Хэрвээ хувьсагчид бүхэл тоон төрөл өгсөн бол бид түүнд бутархай тоо эсхүл логик утгыг олгож болохгүй зөвхөн бүхэл тоон утгыг л олгох ёстой. Үүнийг "төрлийн хатуу хяналт" гэж нэрлэдэг. C#, JAVA гэх мэт хэлүүд хатуу төрөлжсөн хэлүүдэд ордог. Та програмын коддоо хувьсагчийг ашиглахаасаа өмнө түүний төрлийг заан зарласан байх шаардлагатай. Програмчлалын зарим хэлүүд жишээ нь PHP хувьсагчийн төрлийг заавал заахыг шаарддаггүй.

Дадлагын ажил.

Програмчлалын хэлийг сурах хамгийн сайн арга бол практик. Бид практикийн ажилдаа Visual Studio 2015 -ын C# -ийн Console Application төрлийн төслийг ашиглана. Эхлэн суралцаж байгаа хүмүүст ийм төрлийн програм зохиох нь энгийн. Ийм програм зохиохын тулд Visual Studio боловсруулалтын орчингоо нээгээд File->New->Project гэж ороод нээгдэх цонхны зүүн талын самбарт Visual C# -ийн Windows сонголтыг хийгээд дунд самбараас Console Application төрлийг сонгоорой.

Visual Studio боловсруулалтын орчинг компьютерт суулгахад Visual C# -аас гадна Visual Basic, Visual F#, Visual C++ зэрэг хэлүүдийг цуг суулгадаг. Иймээс самбарын зүүн хэсэгт хэлний сонголтоо хийхээ мартуузай. Name талбарт өгсөн нэртэй ижилхэн Solution үүсгэнэ. Нэг Solution буюу шийдэл .NET фреймворк дэмжих өөр өөр хэл дээр хүртэл бичигдсэн олон төслийг агуулж болдог. Програмын тохиргоонуудаа хийж дуусаад OK товчийг дарахад Visual Studio орчин Console Application төрлийн төслийг үүсгэнэ. Төсөлд Program нэртэй классыг агуулсан доорх агуулга бүхий Program.cs гэсэн файлыг автоматаар оруулан ирнэ.

using System;

namespace Lesson1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Program класс Main гэсэн ганц аргатай бөгөөд энэ нь програмын эхлэлийн цэг юм. Програмын хувьд Main нэртэй статик арга ганцхан байж болно. Бусад програмын хэлнүүдийн адилаар C# -д өөрийн өгөгдлийн төрлийг зарлаж болно. Үүний тулд төсөлд _age гэсэн бүхэл тоон талбар бүхий Student гэсэн өгөгдлийн шинэ төрлийг зарлан өгье.

    public struct Student
    {
        public int _age;
    }

Өгөгдлийн төрлийг struct гэсэн түлхүүр үг зааж байгаа юм. Энэ нь бид утга олгогдох өгөгдлийн шинэ төрлийг үүсгэж байгааг компиляторт мэдэгдэнэ. Талбарын нэр доогуур зураасаар эхлэж байгаад анхаарна уу. Бид хичээлдээ "Унгар" тэмдэглэгээ гэж нэрлэдэг бичлэгийн дүрмийг ашиглана. Дүрмийн дагуу төрлийн талбарын нэрүүдийг доогуур зураасаар эхлээд араас нь жижиг үсгээр бичдэг. Ингэснээр төрлийн талбарыг локал хувьсагч, шинжүүдээс ялгахад амар болгоно. "Унгар" тэмдэглэгээнээс өөр програмын кодыг бичих "Camel" гэх мэтийн тэмдэглэгээнүүд бас байдаг. Код бичих аль нэгэн дүрмийг анхнаасаа хэвшил болгон ашиглаж сурах нь чухал. Одоо үүсгэсэн шинэ төрлөө програмдаа ашиглая. Үүний тулд эхлээд төрөлд тохирох хувьсагчийг

Student student = new Student();    

гэж үүсгэн өгнө. Дээрх мөр Student төрлийн student нэртэй хувьсагчийг үүсгэнэ. Бид хувьсагчийн нэрийг төрлийн нэртэй ижилхэнээр гэхдээ жижиг үсгээр өгсөн. C# -хэл том жижиг үсгийн ялгадаг учраас үүнийг алдаа гэж үзэхгүй. new Student(); хэсэг төрлийн байгуулагчийг дуудан түүний хувийг үүсгэн өгнө. Бид төрлийг үүсгэхдээ түүний байгуулагч аргыг бичин өгөөгүй хэдий ч C# -ийн бүх төрлүүдэд компилятор анхдагч байгуулагч аргыг автоматаар хэрэгжүүлэн өгдөг. Ийм болохоор дээрх мөр хувьсагчийг зарлаад зогсохгүй түүнд анхны утгыг олгох ажиллагааг хийж байгаа юм. Student төрлийн хувьсагч үүсгэсэн тул одоо түүний гишүүдэд хандах боломжтой болсон. Манай төрлийн _age гэсэн бүхэл тоон ганцхан талбарт доорх командаар утга олгоё.

student._age = 20;  

Шинэ төрлийг ингэж ашиглана. Энэ хүртэл бичсэн кодыг үзүүлбэл

using System;

namespace Lesson1
{
    public struct Student
    {
        public int _age;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student._age = 20;
        }
    }
}

байгаа. Төрлийг програмд хэрхэн ашиглахыг доорх кодоос харцгаая.

// ...
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student._age = 20;

            Calculate(student);

            Console.WriteLine(student._age);
            Console.ReadLine();
        }

        static void Calculate(Student student)
        {
            student._age += 1;
        }
    }
// ...

Жишээнд Student төрлийн хувийг Calculate аргад параметрээр дамжуулсан байгаа. Calculate арга Student төрлийн нэг параметрийг хүлээн аваад түүний _age талбарын утгыг нэгээр нэмнэ. Програмын кодоос харвал бид эхлээд Student төрлийн student хувийг үүсгээд түүний _age талбарт 20 гэсэн утга олгоод дараа нь хувийг Calculate аргад дамжуулан талбарын утгыг нэгээр нэмээд үүний дараа талбарын утгыг дэлгэцэнд үзүүлэх болно. Энд бид 21 гэсэн утгыг хүлээн авна гэж бодож байгаа ч програмаа ажлуулбал

үр дүнг авах болно. Туршаад үзээрэй. Яагаад ийм үр дүнг авах болов. Програмын кодод багахан засвар оруулъя. Төрлийг зарлахдаа өгсөн struct түлхүүр үгийг class болгон өөрчлөе.

    public class Student
    {
        public int _age;
    }

Ингэснээр бид Student бүтцээр биш Student классаар тодорхойлогдсон өгөгдлийн төрлийг зарлаж байгаа юм. Програмаа дахин ажлуулбал

бидний хүлээж байсан үр дүнд хүрлээ. Ийм үр дүнд хэрхэн хүрснийг одоо тайлбарлая. Учир нь C# -хэлэнд стандарт болон байж болох бүх өгөгдлийн төрлүүд утгаар өгөгдөх өгөгдлийн төрлүүд, холбоосоор өгөгдөх өгөгдлийн төрлүүд гэсэн хоёр хэсэгт хуваагддаг. Бид жишээндээ Student төрлийг struct түлхүүр үгээр тодорхойлоход утгаар өгөгдөх харин class түлхүүр үгээр тодорхойлоход холбоосоор өгөгдөх өгөгдлийн төрлүүдийг үүсгэж байгаа юм.

Эдгээрийн ялгааг тайлбарлая. Ерөнхийдээ манай програмыг биелүүлэхэд ашиглагдах компьютерын санах ойг хоёр хэсэгт хуваан үзэж болно. Эхний хэсгийг "Стек" гэх бөгөөд 1 орчим мегабайт хэмжээний багахан хэмжээний санах ойг эзэлдэг. Програм ажиллагаандаа энэ хэсгийг хамгийн эрчимтэй ашигладаг. Хоёрдугаар хэсгийг "Удирдлагатай багц" гэж нэрлэнэ. Онолын хувьд энэ хэсэг компьютерын санах ойн боломжит бүх сул хэсгийг ашиглаж болох ба том обьектууд эсхүл хэмжээ нь тодорхойгүй обьектуудыг хадгалах зориулалттай. C# -хэлний утгаар өгөгдөх бүх төрлүүд "Стек"-д хадгалагдана. Ийм төрлийн хувьсагч, структурыг ямарч аргад параметрээр дамжуулахад стект байгаа төрлийг хуулбарладаг тул бид Main аргад student хувийг үүсгээд _age талбарт 20 утга олгоод хувийг Calculate аргад дамжуулсан хэдий ч үндсэн аргад үүсгэсэн хувь дамжигдахгүй харин түүний хуулбарыг үүсгэсэн болохоор програмын үр дүн 20 гэж гарч байгаа юм. Өөрөөр хэлбэл Main аргын student хувийн _age талбарт ямарч өөрчлөлт орохгүй. Үүнийг шалгахын тулд програмдаа төрлийг struct түлхүүр үгээр үүсгэсэн хэвээр үлдээгээд Calculate аргад _age талбарын утгыг дэлгэцэнд бичих командыг өгвөл 21, 20 гэсэн үр дүнг харна. C# -хэлэнд утгаар өгөгдөх төрлүүд олон байдаггүй ч эдгээрийг сайн мэдэж байх хэрэгтэй.
Харин холбоосоор өгөгдөх өгөгдлийн төрлүүдийн хувьд асуудал өөр. Бид ямарч нэгэн class -ийг үүсгэхэд тэр нь үнэн хэрэгтээ "Удирдлагатай багц" -д үүсгэгдэнэ. Харин "Стек" -т байрлах class -ийн хувь болох хувьсагчид тухайн обьектын холбоос л зөвхөн агуулагдана. Одоо бид энэ хувьсагчийг аргад параметр хэлбэрээр дамжуулан өгвөл бас л хуулбар үүсэх хэдий ч обьектын хуулбар үүсэхгүй харин түүний холбоосын хуулбар үүснэ. Харин холбоосууд "Удирдлагатай багц" -д байгаа нэг ижил обьектын холбоос учраас Calculate аргад _age талбарын утгыг өөрчилнө гэдэг нь "Удирдлагатай багц" -д байгаа обьектын талбарын утгыг өөрчилж байгаа хэрэг юм. Иймээс бид Student төрлийг class түлхүүр үгээр тодорхойлоход хүлээж байсан үр дүндээ хүрсэн. Үүнийг сайн ойлгон аваарай.
C# -хэлний өгөгдлийн бүх төрлүүд утгаар өгөгдөх, холбоосоор өгөгдөх гэж хуваагдахаас гадна энгийн ба энгийн бус өгөгдлийн төрлүүдэд бас хуваагдана. Үүнийг ойлгохын тулд доорх жишээг харцгаая.

   int myVar = 250;
   Student student = new Student();

Эхний мөрөөр бүхэл тоон төрлийн myVar хувьсагч зарлаад түүнд 250 гэсэн утга олгосон. Харин 2-р мөрөөр Student төрлийн student нэртэй хувьсагчийг new түлхүүр үгийг ашиглан үүсгээд төрлийн байгуулагчаар анхны утгыг олгож байгаа. .NET фреймворкийн компилятор new түлхүүр үг, байгуулагч аргыг ашиглахгүйгээр 1-р мөрөөр үзүүлсэнтэй адилаар хэсэг өгөгдлийн төрлийг зарлахыг дэмждэг. Гэхдээ 1-р мөрөөр зарлагдаж буй int төрлийн myVar хувьсагчийн цаана үнэндээ бол .NET фреймворкт стандартаар байдаг утгаар олгогдох struct төрлийн int32 төрөл байдаг. Иймээс манай кодын 1-р мөр доорх кодтой ижилхэн юм.

    Int32 myVar = new Int32();
    myVar = 250;

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

Өгөгдлийн энгийн төрлүүд заавал бүтэц /structure/ эсхүл утгаар өгөгдөх төрлүүд байх албагүй гэдгийг дурдая. Хүснэгтийн доод хэсэгт байгаа string, object, dynamic төрлүүд бол холбоосоор өгөгдөх төрлүүд буюу классууд болно.
Програмчлалын хэлийг үзэхэд тухайн хэлний өгөгдлийн төрлүүдийг сайн ойлгож авах нь маш чухал суурь байдаг тул хичээлийн материалыг сайтар ойлгон авахыг хичээгээрэй.

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

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

Модел-үзүүлбэр-контролер (model-view-controller) ухагдхуун 1970 оны сүүлээр гарч ирсэн. Энэ загвар Xerox PARC компаний Smalltalk төслийн үр дүн бөгөөд тухайн үедээ өмнө нь хийгдсэн байсан програмуудын хэрэглэгчийн графикийн интерфейсүүдийг зохион байгуулах хэлбэрээр гарч иржээ. Анхны MVC загварын зарим зүйлүүд Smalltalk төслийн дэлгэц, хэрэгслүүд гэх мэтийн тодорхой баримтлалтай холбоотой байсан ч илүү нэгдсэн ойлголтуудыг програмд ашиглаж байсан. Модел-үзүүлбэр-контролер паттерн веб програмчлалд маш сайн тохирдог тул ASP.NET фреймворкид загвар сайн хэрэглэгээг олсон. Гэхдээ бид энэ удаа хэвийг WPF -д ашиглахыг авч үзэх болно.
Хэвийг ерөнхийлөх талаас нь харвал бүтцийн MVC паттерн програмыг багаар бодоход 3 хэсэгт хуваана гэж ойлгож болно. Нэрнээсээ ч загвар програмыг Модел, Үзүүлбэр, Контролер гэсэн хэсгүүдэд хуваах нь харагдана.

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

Үйлдвэрийн арга (Factory Method) хэв нь ямар нэгэн классын обьектыг үүсгэх интерфейсийг тодорхойлдог. Гэхдээ яг ямар классын обьектыг үүсгэх шийдлийг дэд класс шууд гаргадаг. Өөрөөр хэлбэл суурь класс хүүхэд классуудад обьект үүсгэхийг дамжуулахыг энэхүү хэвээр хийдэг.

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

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

гэж үзье.

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

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

төрөл хувьсагчийн_нэр;

байна. Эхлээд хувьсагчийн төрөл дараа нь түүний нэр. Дараах шаардлагыг хангасан дурын нэрээр хувьсагчийг нэрлэж болно.

Цэсийг нээх хаах ажиллагааг хариуцах компонентийг боловсруулсан тул энэ хичээлээр програмийн удирдах цэсийг…

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

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

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

 

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

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