Tuesday, May 25, 2010

МТ 2-2 Б.Хуягбаатар

C# хэл ба Объект хандлагат технологи

Объект хандлагат технологийн түлхүүр ойлголтууд
• Abstraction
• Encapsulation
• Polymorphism
• Inheritance
Abstraction гэдэг нь хэд хэдэн өгөгдлийн төрлүүд болон хэд хэдэн функцийг нэгтгэн объект үүсгэх боломж юм. Класс нь объектын загвар болох ба объект нь классын бодит байдал болно.
Жишээ нь: хэрвээ хүн гэдэг нь класс бол Бат, Дорж, Дулам нь объект болох юм.
Объект нь өөрийн гэсэн төлөв болон үйлдэлтэй. Үүнийг тайлбарлавал объектын утга нь түүний төлөв болох ба функц нь түүний үйлдэл болдог юм. Жишээ нь Дорж ярих нь түүний үйлдэл болно.

Encapsulation буюу битүүмжлэл. Энэ нь классын гишүүн өгөгдөл эсвэл функцад ямар класс хандаж болохыг заасан буюу классыг халдлагаас сэргийлж байгаа юм. Класс нь өөрийн гэсэн харьцах хэсэг буюу interface-тэй ба үүгээр класс хоорондоо харилцана гэсэн үг. Жишээ нь Дорж хэдэн номтой вэ гэдгийг Дорж л мэдэх болохоос өөр хэн нэгэн түүний номын тоог өөрчлөх боломжгүй юм.

Классын ангилал: Классыг гишүүн өгөгдлийн нууцлал заах түлхүүр үгээр 3 ангилдаг.
Public: Гишүүн өгөгдөл бүгдэд харагдах ба заагч ашиглан хэрэглэж бас болдог. Удамшдаг.
Private: Гишүүн өгөгдөл нуугдсан байх ба зөвхөн класс өөрөө л буюу түүний функцууд утгандаа л хандалт хийнэ. Заагч ашиглан хандалт хийх нь боломжгүй юм. Удамшихгүй.
Protected: Гишүүн өгөгдөл private төрлийн гишүүн өгөгдөлтэй адил боловч ялгаа нь удамшиж болдог.
interface IMyInterface //класстай харицах хэсгийг зарлаж байна.
{
void MethodToImplement(); //классын үйлдэл зөвхөн зөрлөж байна.
}

class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}


Дотоод буюу найз класс. Энэ нь тухайн application-ы түвшинд public боловч application-ы гадаа бол private болдог класс юм. Үүгээр new оператор ашиглан шинэ заагч бүхий объект байгуулж болдог.
Protected дотоод класс нь дээрхийн адил боловч new оператор ашиглан шинэ заагч бүхий объект байгуулж болдоггүй.
SubType буюу polymorphism - эрлийзжилт нь классын хувилбар болдог. Жишээ нь хүн гэдэг классын хувьд хар арьстай цагаан арьстай гэх мэт. Мөн энэхүү ойлголт нь функц дээр бас биелэх ба үүнийг ашиглан функцыг дахин програмчилж болдог. Хэрэв Дорж монгол хэлээр ярьдаг бол Бат монгол бас англи хэлээр яридаг бол хүн классын ярих(); функц нь Батын хувьд илүү өргөн хүрээтэй болж ирж байна.
using System;
public class WebSite
{
public string SiteName;
public string URL;
public string Description;
public WebSite() { }
public WebSite( string strSiteName, string strURL, string strDescription )
{
SiteName = strSiteName;
URL = strURL;
Description = strDescription;
}
public override string ToString()
{
return SiteName + ", " +URL + ", " +Description;
}
}
2 дахь WebSite() функцыг дахин тодорхойлж параметр авдаг болгосон байна.
WebSite( string strSiteName, string strURL, string strDescription )
Inheritance Удамшил гэдэг нь нэг классын тодорхойлолтыг ашиглан шинэ класс үүсгэн өшиглах явдал юм. Жишээ нь хүн гэдэг классаас ажилчин гэдэг класс удамшуулан ашиглах нь хүн + ажилчин гэсэн нэмэлт төлөв мэдээлэл оруулж болох бас хүн гэдэг классын өгөгдөлтэй байх зэрэг боломж нээгдэж байна. C#-ийн хувьд дараахь 2 хандалттай
base хандалт нь үндсэн классын гишүүдрүү хандах хандалт.
this хандалт нь одоо хэрэглэж байгаа объект болдог.
Base-ийн жишээ:
using System;// System-ийн сан ашиглана.
public class Person//Person класс зарлах
{
protected string ssn = "444-55-6666";//string төрлийн ssn хувьсагч, түүнд утга олгох
protected string name = "John L. Malgraine";//string төрөл name хувьсагч түүнд утга олгох
public virtual void GetInfo()
{
Console.WriteLine("Name: {0}", name);
Console.WriteLine("SSN: {0}", ssn);
}
}


class Employee: Person //Person классаас Employee класс удамшуулах
{
public string id = "ABC567EFG";
public override void GetInfo()
{ // Calling the base class GetInfo method:
base.GetInfo();
Console.WriteLine("Employee ID: {0}", id);
}
}
class TestClass // шинэ TestClass үүсгэх
{
public static void Main()
{
Employee E = new Employee(); //удамшсан Employee төрлийн E объект
E.GetInfo(); //удамшсан E-ийн функцыг дуудах
}
}
Гаралт:
Name: John L. Malgraine
SSN: 444-55-6666
Employee ID: ABC567EFG


C# хэлийг зохиох болсон шалтгаан, зорилтууд

C# нь энгийн, орчин үеийн, ерөнхий хэрэглээний, объект хандлагат програмчлалын хэл байхаар бүтээгдсэн.
Програмчдын ажлыг хөнгөлөхөөс гадна, зарлагдаагүй хувьсагчдын хэрэглээг илрүүлэхийг оролдох, массивийн хязгаарлалт зэргийг хянах системийг олгоно.
C болон C++ хэлийг мэдэх хүмүүст энгийн мөн нэмэлт өргөн боломж, DirectX, SQL зэргийг ашиглах боломж олгосон.
C# application нь эдийн засгийн хувьд санах ой бага зарцуулах, процессорын хүч бага зарцуулах шаардлагыг хангана.
C# хэлийг ашиглан энгийн функц бичихээс эхлүүлэн бүхэл бүтэн үйлдлийн систем хүртэл бичиж болно.
Хамгийн гол нь internatiolozation дэмждэг хэл болсон.

Энэхүү нэрний нэршил нь “♯” хөгжмийн тэмдэглэгээ бөгөөд доод өнгөнөөс нэг хөг илүү дээр байна гэдгийг илэрхийлдэг. Энэхүү тэмдэглэгээ нь дугаарын # тэмдэглэгээнээс арай өөр нйлуу байдаг. Энэ нь C++ хэлний 1-ээр нэмэгдэх гэдэгтэй ойролцоо утгатай. Гэвч санамсаргүйгээр энэ нь дөрвөн нэмэх тэмдэг болсон ба ++++ гэсэн нь # болсон юм. Энгийн хэрэглэгчийн товчлуурт гаранд ♯ тэмдэг байдаггүй учир үүнийг ихэнхдээ дугаарлах тэмдэг # болгон хэрэглэдэг нь стандарт болсон. Гэвч MicroSoft компани үүнийг стандартаар хөгжмийн налуу тэмдэглэгээ буюу ♯-ийг ашигладаг.

Анхандаа энэхүү хэлийг үүсгэсэн даруйдаа COOL буюу C-like Object Oriented Language гэж нэрлэж байжээ. Гэвч энэ нь худалдааны нэршил мэт санагдахуйц байсан учраас үүнийг солин C# гэх болжээ.

Хувилбар Хэл бэлэн болсон Microsoft compiler
C# 1.0
12-р сар 2001
1-р сар 2002
C# 2.0
12-р сар 2002
11-р сар 2005
C# 3.0
6-р сар 2005
11-р сар 2006
C# 4.0
6-р сар 2006
4-р сар 2010


C#-ийн нэмэгдлүүд:
• Глобал хувьсагч эсвэл функц гэж байхгүй болсон. Бүгд класс дотор зарлагдах ба глобал хувьсагч эсвэл функц шаардлагатай бол түүнийг static гэж зарлан хэрэглэж болно.
• Boolean datatype шууд хэрэглэдэг болсон.
• C болон C++ хэл дээр байдаг гадаад хувьсагч нь адил нэртэй дотоод хувьсагчтай харшилдах нь больсон.
• Санах ойн заагч нь зөвхөн block( “{}” ) дотроо хүчинтэй бөгөөд үүнээс гадуур unsafe буюу аюулшзй бус болно. Ийм тэмдэглэгээ бүхий кодыг ажиллуулахад үүнийг ажиллуулах зөвшөөрөл шаардлагатай болдог.
• C# нь Common Type System (CTS) буюу нэгтгэсэн төрлийн систем болсон. Үүнийг :
o Value type
o Reference type гэж ангилна.
• Properties буюу тухайн объектын тухай зүйлүүдийг хянах засварлах интерфейс нэмэгдсэн.
• Boxing ба Unboxing
• Preprocessor
• XML дэмждэг

Windows ба Обьект хандлагат програмчлал МТ 2-2 Ананда

Windows гэж юу вэ? Энэ бол та бидний өдөр тутмын хэрэглээнд ашиглагдаж буй Microsoft компаниас гаргасан үйлдлийн систем. Тэгвэл үйлдлийн систем гэж юу вэ? Энэ бол таныг компьютер дээр юм үзэх, бичих, сонсох гээд л бүхий үйлдлийг чинь хөнгөвчилж өгдөг програм болон төхөөрөмжүүдийн хоорондох систем юм. Windows үйлдлийн систем гарахаас өмнө DOS буюу Disc Operation System гэж байсан бөгөөд энэ нь хэрэглэхэд хүндрэлтэй, зөвхөн мэргэжлийн хүмүүс л мөр кодоор үйлдлээ хийдэг байсан юм. Тиймээс үүнийг хөнгөвчлөх үүднээс энэхүү үйлдлийн систем нь гарсан. Яг одоогоор зах зээл дээр хамгийн их эрэлттэй болон хамгийн их ашиглагдаж буй үйлдлийн системийн судалгаагаар Microsoft компаниас гаргасан Windows, түүний дараагаар Linux, Mac OS орж байна. Харин одоо Обьект хандлагат програмчлал гэж юу вэ? гэж та сонирхох байх. Энэ нь та програм зохиохдоо хийх үйлдэл, тэдгээрийн ашиглах өгөгдлүүдийг хэрхэн зөв оновчтой, мөн хурдан бөгөөд хамгаалалт сайтайгаар зохион байгуулахыг хэлж байгаа юм. Обьект хандлагат технологи гарахаас өмнө бид Процедур хандлагат буюу өөрөөр модулан програмчлалын аргаар програмаа бичдэг байсан. Энэ нь програмын ажиллагаа нь код бичигдсэн дарааллаар буюу дээрээсээ доош ажиллаад дуусдаг арга юм. Цаг хугацааны эрхээр энэхүү арга нь хуучирч дараагийн шинэ үе болох обьект хандлагат технологи гарч ирлээ. Обьект хандлагат технологи нь хэд хэдэн онцлог давуу шинжүүдтэй бөгөөд үүнийгээ бидний өргөн хэрэглэдэг C програмчлалын хэлэнд нэмж боловсруулан 1980 оны үеээс C++ хэмээн шинэ хэлийг гаргасан юм. Харин одоо тэр нэмэгдсэн 3н чухал ойлголтыг үзье. Эхнийх нь Encapsulation (өгөгдлийн багцлалт). Энэ нь та өөрийн өгөгдлүүдээ багцлан, үүнийгээ дараа нь ашиглаж хэрэглэхэд хялбар болгож өгч байгаа юм. Мөн хамгийн чухал нь та өгөгдлүүдээ багцалснаар эдгээр өгөгдөлдөө хандах эрхийг зааж өгөх боломжтой болно. Үүнд Public, Private, Protected гэж байдаг. Public горим нь та өгөгдлөө нууцлаагүй бөгөөд хэн дуртай нь хандах боломжийг олгодог бол харин Private, Protected горим нь зөвхөн тухайн обьектын функцууд л хандах боломжтой болгох горим. Private, Protected хоёр маань ерөнхийдөө адилхан боловч энэ хоёрын гол ялгаа нь тухайн классаас удамших үед гарч ирнэ. Private өгөгдлүүд нь удамшдаггүй бол харин Protected нь удамшдаг. Хэрвээ та удамших талаар ойлгохгүй бол одоо тайлбарлаж өгье. Обьект хандлагат технологын хоёр дахь чухал ойлголт буюу удамшил нь та нэгэнт тодорхойлсон классаа шинэчлэн, өргөжүүлэн дахин ашиглах боломжийг олгож байгаа юм. Энэ нь хоорондоо уялдаа, холбоо бүхий обьектуудыг програмдаа ашиглаж байгаа тохиолдолд тэдгээрийн аль алинд байх хэсгүүдийг дахин бичилгүй ашиглах явдал юм. Хялбараар тайлбарлавал та багш, оюутан гэсэн 2 обьектын тухай програм бичиж байвал дунд нь нэг Хүн гэдэг класс тодорхойлон түүнээсээ удамшуулан хэрэглэх явдал юм. Учир нь багш ч бай, оюутан ч бай хоёулаа ялгаагүй овог, нэр, настай байдаг. Удамшлыг удамших байдлаас нь хамаарч энгийн ба нийлмэл удамшил гэж ангилдаг. За одоо харин обьект хандлагат технологын 3 дахь гол ойлголт болох дахин тодорхойлолтын тухай авч үзье. Энэ нь дотроо 2 төрөл байдаг бөгөөд эхнийх нь буюу функцын дахин тодорхойлолт нь танд нэг нэрийн доор хэд хэдэн ялгаатай үйлдэл хийдэг олон функц байлгах боломжийг олгоно. Гагцхүү тэдгээрийн гол ялгаа нь фунцкцуудын параметрын тоо эсвэл тэдгээрийн өгөгдлийн төрөл өөр байх ёстой. Харин нөгөө дахин тодорхойлолт нь операндыг дахин тодорхойлдог бөгөөд ингэснээр обьект хооронд үйлдэл хийхэд хялбар болж өгөх юм. Жишээ нь та + ( нэмэх ) үйлдлийг дахин тодорхойлж 2 болон түүнээс дээш обьектыг нэмж болох фунцкыг өөрөө бичин дараа нь ашиглахдаа шууд нэмэх тэмдгээ тавин хэрэглэх боломжтой болох юм. Та Windows болон Обьект хандлагат програмчлалын тухай жоохон ч болов ойлголт авсан бол одоо энэ 2-ийн хоорондоо ямар хамаатай болох талаар тайлбарлъя. Windows үйлдлийн систем нь өөрөө 70 орчим хувь нь С хэл дээр, үлдсэн 30 гаруй хувь нь ассемблер дээр бичигдсэн байдаг бөгөөд мөн обьект хандлагат технологийг маш сайн ашигласан юм. Ерөнхийдөө үйлдлийн систем хэд хэдэн цонхуудаар загварчилж тэдгээрийн уялдаа холбоон дээр үйлдэл хийгддэг болохоор нь энэхүү системээ Windows буюу орчуулвал Цонхнууд нэг нэрлэсэн юм. Хэрэв та Windows үйлдлийн системд зориулан програм бичиж байгаа бол дараах 3-н төрлийн аргаар бичиж болох юм. Үүнд Win32 API ( Application Programming Interface ), MFC ( Microsoft Foundation Classes ) болон Windows Forms багтана. Эхнийх нь болох Win32 API нь C++ хэл үүсэхээс өмнө бий болсон болохоор обьект хандлагатаар загварчлагдаагүй бөгөөд нилээд доод түвшний хэл юм. Энэ нь Windows –ийн өөрийн API сангийн зуу зуун функцуудээс тогтох бөгөөд эдгээр нь хоорондоо өгөгдөл дамжуулахдаа class бус бүтцийг ашигладаг. Хэдийгээр та Win32 API дээр програм бичвэл програм тань нилээд хурдтайгаар ажиллах боломж олгох ч нилээд доод түвшнийх болохоор маш их код бичих шаардлагатай болно. Харин MFC –ийн хувьд бол энэ нь классаар загварчлагдсан, кодын хэмжээ бага бөгөөд бас controls буюу товчнуудыг шууд оруулах ашиглах бэлэн графиктай юм. MFC ашиглан програм бичихэд маш хялбар бөгөөд та харагдах цонхон дээр хэдэн товч, үг бичих талбар гэх мэт controls –ууд зөөн тавиад тэдгээрийн үзэгдэл дээр ямар үйлдэл хийх вэ гэдэг функцуудыг бичиж өгөхөд л хангалттай. Жишээ нь үг бичих талбар дээрх утга солигдоход энэ функц дуудагдаж ийм үйлдэл хийгдэнэ, харин энэ товч дарагдахад ийм үйлдэл хийнэ гэсэн функцууд л бичих юм. Тухайн функцын уялдаа холбоо болон энэ нь хэрхэн яаж үзэгдэлтэй холбогдох талаар MFC –ийн сангууд нь өөрсдөө зохицуулдаг бөгөөд ингэснээр програмчилж буй хүний цаг хугацааг ихээхэн хэмнэж өгдөг. Тэгвэл одоо Windows Forms –ийн тухай. Энэ нь өмнөх 2 аргаасаа хамаагүй хялбар бөгөөд өгөгдлийн багцлалт буюу encapsulation, өгөгдлийн нууцлал тал дээр маш сайн анхаарсан. MFC-тэй адил та харагдах цонхон дээрээ хэрэгтэй controls –уудаа байршуулан тэдгээрээ зөв удирдан зохион байгуулж функцуудээ бичих шаардлагатай. Win32 API болон MFC дээр та C++ ашиглан програмаа бичдэг бол харин энэ удаад Windows Forms дээр програм бичих бол C# хэлийг ашиглан бичих шаардлагатай юм. С# хэл нь өмнөх C++ -ийн ойлголтууд дээр шинээр delegate, interface гэх мэт хэд хэдэн ойлголтууд нэмэгддэг. Энэхүү ойлголтууд нь Java хэлний обьект хандлагат технологид хэрэглэдэг аргуудаас санаа авсан ерөнхийдөө гарсан юм. Та Win32 API, MFC эсвэл Windows Forms алин дээрч бай хамаагүй програм бичих гэж байгаа бол Microsoft Visual Studio програмыг ашиглана. Одоогоор энэхүү програмын 2008 хувилбар нь зах зээл дээр ашиглагдаж байгаа. Хэрэв хүсвэл бүрэн гүйцэд дуусаагүй, туршилтын шатандаа явж байгаа 2010 хувилбарыг нь үнэгүй татан авч хэрэглэх боломжтой юм. Ингээд энэхүү нийтлэлээр таны мэдлэгт жоохон ч гэсэн дусал нэмсэн бол миний туйлын зорилго биелсэн болой. Анхаарлаар шагнасанд тань баярлалаа.

Wednesday, January 21, 2009

Хоосон блог нээгдэв

Хоосон блог нээгдэв.