More Related Content
PPS
Sw203 Lecture9 Encapsulation PPS
PPS
Sw203 Lecture5 Class Acess Modifiers PPS
Sw203 Lecture7 Method Override ODP
PPTX
Cs203 lecture 14 reflection PPS
Sw203 Lecture4 Class Object PPS
Sw203 Lecture12 Composition What's hot
PPT
PPS
Sw203 Lecture6 Inheritance PPTX
PPS
Sw203 Lecture10 Polymorphism PPTX
PPTX
PPTX
Cs203 lecture13 composition ODT
PDF
Java laboratoriin udirdamj 2 PDF
PDF
PPTX
PPTX
Viewers also liked
PPTX
PPTX
PPTX
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №5 PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №4 PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №6 PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №3 PPTX
PDF
Жава хэлний сурах бичиг Java helnii surah bichig Mongol PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №2 PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №1 PPTX
PPTX
PPT
PDF
Java programchlal s.uuganbayr PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №7 Similar to Lecture4
PPTX
PPT
DOCX
PPT
PPTX
PPT
001cclass 120926194905-phpapp02 PPTX
PPTX
объект хандлагат программчлал PPT
PPT
PDF
PPT
PDF
PPTX
PPTX
PDF
PPTX
DOC
PPTX
PPTX
More from orgil
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
DOCX
Lecture4
- 1.
Лекц №4<br />Сэдэв:Классын зохиомж<br />4.1. Áàéãóóëàã÷ ôункц дахин тодорхойлох<br />Класст ижил нэртэй ч дамжих параметрийн тоогоороо ялгаатай функцуудыг дахин дорхойлогдсон функц гэдэг. Emplоуее класст параметрийн тоогоороо ялгаатай kлассын байгуулагчийг дахин тодорхойллоо:<br />//дахин тодорхойлсон байгуулагчид<br />public Employee() { }<br />public Employee(string fullname, int empID, float currPay) {...}<br />Зөвхөн байгуулагчийг ч биш функцийг ч бас дахин тодорхойлж болно. Жишээ нь: Trangle класст оролтын параметрүүдээрээ ялгагдах Draw/() функцуудыг дахин тодорхойлбол:<br />public class Triangle<br />{<br />public void Draw(int x, int y, int height, int width) {...}<br />public void Draw(float x, float y, float height, float width) {...}<br />public void Draw(Point upperLeft, Point bottomRight) {...}<br />public void Draw(Rect r) {...}<br />}<br />Хэрэв дээрх 4 байгуулагч тодорхойлоогүй байсан бол 4 өөр функц бичих хэрэгтэй бaйх байлаа:<br />public class Triangle<br />{<br />public void DrawWithInts(int x,int y,int height,int width) {...}<br />public void DrawWIthFloats(float x,float y,float height,float width){..}<br />public void DrawWithPoints(Point upperLeft,Point bottomRight){..}<br />public void DrawWithRect(Rect r) {...}<br />}<br />Функц дахин тодорхойлоход буцаах утга нэг л төрөлтэй байх ёстой.<br />4.2. This –ийн хэрэглээ<br />this түлхүүр үг нь тухайн объектын гишүүд болон талбар(field))-ыг төлөөлж байдаг. Xэрэглэх гол шалтгаан нь гадаад ижил нэртэй параметрүүдээс дотоод хувьсагчийг ялгах байдаг.<br />public Employee(string fullName, int empID, float currPay)<br />{this.fullName = fullName;<br />this.empID = empID;<br />this.currPay = currPay;<br />}<br />Энэ тохиолдолд тухайн классын гишүүд функцээр орж ирэх параметрүүдтэй ижил нэртэй байна. Харин доорх тохиолдолд тэдгээр нь ялгаатай тул thi түлхүүр үгийг хэрэглэхгүй байж болдог.<br />public Employee(string name, int id, float pay)<br />{<br />fullName = name;// this.fullName = name; <br />empID = id;// this.empID = id; <br />currPay = pay;// this.currPay = pay; <br />}<br />Доорх жишээгээр this түлхүүр үгийг байгуулагчтай хамт хэрэглэж үзүүлэв:<br />public class Employee<br />{<br />...<br />public Employee(string fullName, int empID, float currPay)<br />{<br />this.fullName = fullName;<br />this.empID = empID;<br />this.currPay = currPay;<br />}<br />public Employee(string fullName):this(fullName, IDGenerator.GetNewEmpID(), 0.0F) {...}<br />4.3. Классын public интерфейс<br />Объект руу \"
.\"
оператороор дамжуулан хандах боломжтой гишүүн рublic хандалттай байх ёстой. Бидний авч үзэж байгаа Emploуее класст GiveBonus(), DisplayStats() гэсэн 2 рublic функц тодорхойлогдож байна:<br />namespace Employees<br />{<br />public class Employee<br />{<br />private string fullName;<br />private int empID;<br />private float currPay;<br />// áàéãóóëàã÷èä<br />public Employee(){ }<br />public Employee(string fullName, int empID, float currPay)<br />{<br />this.fullName = fullName;<br />this.empID = empID;<br />this.currPay = currPay;<br />}<br />public void GiveBonus(float amount){ currPay += amount; }<br />public void DisplayStats()<br />{<br />Console.WriteLine(“Name: {0} “, fullName);<br />Console.WriteLine(“Pay: {0} “, currPay);<br />Console.WriteLine(“ID: {0} “, empID);<br />}<br />static void Main(string[] args)<br />{<br /> Console.WriteLine(“*The Employee Type at Work*\n”);<br /> Employee e = new Employee(“Joe”, 80, 30000);<br /> e.GiveBonus(200);<br /> e.DisplayStats();<br /> Employee e2;<br /> e2 = new Employee(“Beth”, 81, 50000);<br /> e2.GiveBonus(1000);<br /> e2.DisplayStats();<br /> Console.ReadLine();<br />}<br />}<br />}<br />Үр дүн:<br />Зураг 2. Employee класс ажиллаж байгаа ньв<br />Дээрх жишээнд public интерфэйстэй хамгийн энгийн класс харуулав.<br />4.4. Өгөгдлийн далдлалт (Encapsulation)<br />ОХП-ын суурь ойлголтын нэг бол өгөгдлийн далдлалт юм. ОХП-ын бүх хэлэнд суурь 3 ойлголт хэрэглэгддэг: <br />Өгfгдлийн далдлалт. - 2.
- 3.
ПолиморфизмОбъектын хэсгүүдийг гадаадхэрэглэгчээс нуух програмчлалын ойлголт юм. Програмын бусад кодоос зарим кодыг нууж өгдөг. Програм бичих үед програмист аль хэсгийг хэрэглэгчдэд харагдахаар, аль хэсгийг \"
дотоод хэрэглээ\"
-нд зориулахыг шиидэх ёстой. Классын хэрэглэгчдэд харагдахгүй хэсгийг класст өгөгдлийн далдлалт хийгдсэн байна гэж хэлдэг. Классыг бичихэд классын аль болох олон хэсгийг нуух хэрэгтэй байдгийн учир нь:<br />Хэрэглэгч классын дотоод кодоос хамааралгүй болж, классын ажиллагаанд хутгалдах нь багасна. Хаалттай өгөгдлүүдэд класс дотроосоо л харьцах болно. Хэрэв хэрэглэгчийн код классын бүтцээс хамаардаг бол классын өөрчлөлт хэрэглэгчээс хамааралтай кодын ажиллагааг эвдэж болно. - 4.
Классын нээлттэй хэсэгдэх өөрчлөлт хийхэд өмнөх хэсгүүдийг зайлшгүй анхаарах хэрэгтэй. Хэрэглэгчдэд нээлттэй хэсэг их байх тусам хэрэглэгчийн кодыг өөрчлөлгүйгээр тухайн классын кодыг өөрчлөхөд хүндрэлтэй болҗ ирнэ. - 5.
Класст нээлттэй хэсэгих байх тусам олон хэсгийг хянах шаардлагатай болдог учраас програмыг хүндрүүлдэг.Жишээ нь: <br />private string fullname;<br />public Employee() { }<br />4.5. Удамшил (Inheritance)<br />Удамшил бол ОХП-ын суурь ойлголтуудын нэг юм. Шинэ классыг эхнээс нь зохиохын оронд өмнө бичигдсэн классыг ашиглан дээр нь хэрэгтэй нэмэлтүүдийг хийнэ. Тодорхойлогдсон байгаа класс дээр үндэслээд шинэ класс үүсгэх боломжийг олгодог. Хуучин класс нь \"
эцэг класс\"
, түүний үр дүнд үүссэн шинэ классыг \"
удамшсан\"
буюу \"
хүү класс\"
гэж нэрлэдэг. Удамших байдлаас хамаарч:<br />* Энгийн удамшил<br />* Нийлмэл удамшил гэж байдаг<br />Онолын хувьд удамшил нь гол ойлголт тул практикт өргөн хэрэглэгддэг ч:<br />Бодит зүйлүүдийн харьцааг ашигладаг. Жишээ нь: "амьтан", "муур" классууд байвал муур нь амьтан учираас "муур" класс "амьтан" классаас удамшиж болно. Эцэг класс нь илүү ерөнхий шинж чанартай байх ёстой, харин хүү класс нь өргөтгөсөн, нарийн шинж чанарыг агуулах ёстой. Тэгвэл "муур” классын хувьд "тэжээгдэх" гэсэн шинж нэмэгдэж болох байна. Гэвч энэ нь оновчтой шийдэл биш ба иймэрхүү жишээ тэр бүр элбэг биш. - 6.
Эцэг класс ньудамшлыг тооцож үзсэний үндсэн дээр бичигдэх ёстой. Энэ нь хэд хэдэн учир шалтгаантай. Хэрэв объект нь тохиромжгүй бүтэцтэй бол ажиллагаа муу байх нь ойлгомжтой. Мөн эцэг класс нь хүү классуудын бүх ерөнхий шинжийг агуулдаг учраас классуудын өөрчлөлтийг харж үзэх хэрэгтэй болдог. Үгүй бол, эцэг класс ямар нэг байдлаар өөрчлөгдөвөл удамшсан классууд "эвдэрч" болзошгүй.285750429895Програмын бүтцийг сайжруулах, ажиллагааг хурдасгах үед л удамшлыг хэрэглэх хэрэгтэй. .NЕТ-ийн орчинд бүх объектууд классаас удамшдаг ба зөвхөн нэг классаас л удамшихыг зөвшөөрнө. Ингэж хязгаарласнаар зарим нэгэн асуудал гардаг ч програмыг энгийн болгож өгдөг. Гэхдээ .NЕТ-ийн орчинд интерфейс ашиглаж олон удамшиж болно.<br />Энэ зурагт 6 өнцөгт дүрс геометрийн хэлбэр болохынхоо хувьд Shaре классаас, Shаре класс нь С#-ын объектоос удамшиж байгааг харуулав.<br />Зураг 4в Удамшил<br />Жишээ:<br />class A{ //ñóóðü êëàññ};<br /> class B : public A{ //public óäàìøèë}<br /> class C : protected A{ //protected óäàìøèë}<br /> class Z : private A{ //private óäàìøèë}<br />Машин класс нь Радио классыг агуулж \"
А Б-ийг агуулна\"
гэсэн харьцаагаар удамшиж байна.<br />public class Radio<br />{<br />public void Power(bool turnOn)<br />{ Console.WriteLine(“Radio on: {0}”, turnOn);}<br />}<br />public class Car<br />{<br />// Ìàøèí ðàäèîã “àãóóëíà”<br />private Radio myRadio = new Radio();<br />public void TurnOnRadio(bool onOff)<br />{<br />myRadio.Power(onOff);<br />}<br />}<br />