1Объект хандлагат програмчлалын хэл JavaХичээл:     CS203Багш:Д.ЭнхжаргалMongolia University of Science & TechnologyБүрдмэл харьцаа
2Бүрдмэл харьцааБүрдмэл нь ОХПрограмчлалын  үндэс суурь болсон гол ойлголт хараахан биш.Бүтцийн програмчлал дахь Програм-А нь Програм-В-г дуудахыг бүрдмэлийн энгийн жишээ гэж хэлж болно.Үүний адил Програм-А нь Төрөл-В –ийг ашиглахыг мөн бүрдмэлийн энгийн жишээ болгон тайлбарлаж болно.ОХПрограмчлал нь бүрдмэл хэмээх ойлголтыг илүү өргөн утгаар нь хэрэгжүүлдэг:Бүтцийн бүрдмэл /Structural Composition/: класс нь өөр классыг дотроо агуулахФункцын бүрдмэл /Behavioral Composition/: класс нь өөр классын гишүүн функцыг агуулахХолбоо хамаарлын бүрдмэл /Composition by Relationship/: Класс нь класс хоорондын холбоо хамаарлыг өөртөө агуулах
3Бүрдмэл харьцааБүрдмэл харьаа нь Програм хангамжийн дахин ашиглагдах чадвар (Software reuseability)-ийг дэмждэг бөгөөд өгүүлбэрзүйн “..........бол ..........тай” буюу “have a” холбоосоор холбогддог.Ойлголт сэргээх ньОХП-д классуудын хоорондын шаталсан харьцааны дараах 2 хэлбэр байдаг.Удамшил харьцаа   “... бол... юм”Бүрдмэл харьцаа  “...бол...тай”Бүрдмэл нь бодит амьдрал дээр элбэг тохиолддог.		    Жишээ нь:                        Person has a heart                                                     Computer has a cooler                                                     Student has a mobile                                                     Teacher has a car
4Бүрдмэл харьцааОбъект Хандлагат Програмчлалд классуудын шаталсан харьцааны дараах 2 хэлбэр байдаг. Үүнд:Удамшил харьцаа (“AKO” буюу     “….a kind of……” эсвэл “….is a…”)Бүрдмэл харьцаа  (“APO” буюу     “….a part of……” эсвэл “….a part of..”)Эдгээр 2 харьцаа нь програм хангамжийн дахин ашиглагдах чадвар(Reuseability)-ыг нэмэгдүүлдэг.Бүрдмэл харьцаа нь  Бүрдмэл харьцааг удамшлыг бодвол програмчлалд тэр бүр ашиглаад байдаггүй.Класс доторх объектын хэрэглээ юм. Жишээ нь:class Computer{   String name; Disk disk;// Гишүүн объектMemory memory; // Гишүүн объект                                 Mouse mouse;// Гишүүн объект                                 float price;        	                 }
5Жишээ:ComputerCPUMouseDiskКомпьютер процессортойКомпьютер хулганатайКомпьютер дисктэйБүрдмэл харьцаа
6Бүрдмэл харьцааObject AObject BObject AObject BБүрдмэл харьцааны дараах 2 хэлбэр байдагComposition: Бүрэлдэхүүн хэсэг нь үндсэн хэсэгээс шууд хамааралтай. Өх: Үндсэн хэсэг нь үүсээгүй байхад бүрэлдэхүүн хэсэг үүсэх боломжгүй юм. Тухайлбал: Компани үүсээгүй байхад түүний салбар хэлтэс үүсэх боломжгүй юм. Дүрслэхдээ битүү ромбоор дүрсэлдэг.Aggregation: Бүрэлдэхүүн хэсэг нь үндсэн хэсэг нь оршин тогтнож буй эсэхээс хамаарахгүйгээр бие даан үүсдэг. Дүрслэхдээ задгай ромбоор дүрсэлдэг.
Жишээ: Бүрдмэл харьцаа
Жишээ: Бүрдмэл харьцаа
Жишээ: Бүрдмэл харьцаа
10Багтаасан ба багтсан классӨөр класс дотор агуулагдах классыг нэрлэх нь :
Агуулагдсан класс
Багтсан класс
Өөр нэг буюу хэд хэдэн класс агуулах классыг
Багтаасан класс гэнэ
Багтсан класс нь
Статик
Статик бус байж болно.
Статик бус багтсан классыг Дотоод класс(Inner class)гэнэ
Багтсан классын объект нь багтаасан классынхаа мужид зарлагдана
Багтсан классаас багтаасан классын бүх гишүүд рүү хандах боломжтой. Эсрэгээр багтаасан классаас багтсан классын гишүүд рүү хандах боломжгүй
Харин статик дотоод классаас түүний гаднах классынх нь статик бус гишүүд рүү хандах боломжгүй.
Дотоод класс нь private, protected, public болон багцын хандалттай байж болно.
Багтсан ба багтаасан классууд нь Бүрдмэл холбоосоос өөр ойлголт юм шүү!Дотоод классДотоод классГадаад класс
12
13Дотоод классаас түүний гадаад классынх нь гишүүн өгөгдөлд хандах боломжтойГадаад классынхаа гишүүн өгөгдлийг хэвлэх
14Нэмэлт уншилга:Тайлбар: Өмнө авч үзсэн Бүрдмэл харьцааны энгийн жишээнээс санаа авч өөрийн сонгосон сэдвийн хүрээнд “бүрдмэл харьцаа”-г энгийн авсаархан байдлаар хэрэгжүүлж энэ 7 хоногийн лабораторийн ажлааа гүйцэтгээрэй!Хэрэв нэмэлт 2 онооны ажил гүйцэтгэх хүсэлтэй бол дараах загвар жишээнээс санаа авч бүрдмэл харьцааг илүү өргөн утгаар нь хийсвэрлэн хэрэгжүүлээрэй! Бүрдмэл харьцааг “Их сургуулийн гуанзны ажилчдын цаг бүртгэлд” хэрэгжүүлсэн жишээ
15Их сургуулийн гуанз (cafeteria) нь оюутан багш нарт зориулсан хэд хэдэн нэр төрлийн хоолтой.Үйлчлүүлэгчдийн хүсэл шаардлагад нийцсэн үйлчилгээ үзүүлэхийн тулд өдөр бүр дор хаяж 1 ахлах тогооч ажилна. Заримд нөхцөлд тухайлбал оргил цагаар (үдийн их завсарлагаанаар) нэгээс олон ахлах тогооч ажилна.Тогоочоос гадна кассчин ажилнаМөн цэвэрлэгээний ажилтан гэж байна Ийнхүү бид өөрийн кодоо дээрх онцлог дээр тулгуурлан бичихдээ ялгаатай үүрэг бүхий ажилтангуудад зориулсан классыг үүсгэх боломжтойЖишээ
16ЖишээЭхлээдГуанзны ажилчдад зориулсан классыг үүсгэеpublic abstract class CafeteriaWorker {  protected String name;  protected int startHour;  protected int stopHour;  protected CafeteriaWorker(String name, int startHour, int stopHour) {    this.name = name;    this.startHour = startHour;    this.stopHour = stopHour;  }  public String getName() { return name; }  public int getStartHour() { return startHour; }  public int getStopHour() { return stopHour; }  /** удамшсан класс бүр өөр өөрийнхөөр ажилдаг  */  public abstract void work();  /** тухайн ажилтаны ажлын цаг мөн эсэхийг тогтоох */  protected boolean isWorkHour() {    int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);    return currentHour >= startHour && currentHour < stopHour;  }}“Гуанзны ажилтан” хийсвэр класс Гуанзны ажилтан бүр өөр өөрийн ажилтай тул “ажиллах” гэсэн функцыг хийсвэрээр зарласан байна
17ЖишээодооГуанзны ажилчдын зарим төрлийн албыг үүсгэеpublic class Cashier extends CafeteriaWorker {  public Cashier(String name, int startHour, int stopHour) {    super(name, startHour, stopHour);  }  public void work() {    if (isWorkHour()) {      System.out.println(getName() + "\t will now work at the cashier.");    } else {      System.err.println(getName() + "\t is not working at this time.  " +                         "Cafeteria should be closed now.");    }  }}“Кассчин” бол “Гуанзны ажилтан” юм.public class Cleaner extends CafeteriaWorker {  public Cleaner(String name, int startHour, int stopHour) {    super(name, startHour, stopHour);  }  public void work() {    if (isWorkHour()) {      System.out.println(getName() + "\t will now collect the dishes from " +                         "the dinning area.  When finished, " + getName() +                         " will clean the dishes.");    } else {      System.err.println(getName() + "\t is not working at this time.");    }  }}“Цэвэрлэгч” бол “Гуанзны ажилтан” юм.
18ЖишээChefбол онцгой үүрэг гүйцэтгэх гуанзны ажилтан юм.Өмнө дурдсан ёсоор олон төрлийн тогооч (chef) байдаг . Ж нь:Baker – Талх, нарийн боов барьдаг тогоочHotMealCook – Нэг, хоёрдугаар хоол бэлтгэдэг тогоочSaladPrep – Зууш салат бэлтгэдэг тогоочMeatPrep –HotDog, CheeseBurger г.м бүтээгдэхүүн бэлтгэдэг тогоочPiroshkiPrep – Пирошки бэлтгэдэг тогоочpublic abstract class Chef extends CafeteriaWorker {  protected Chef(String name, int startHour, int stopHour) {    super(name, startHour, stopHour);  }  public void work() {    if (isWorkHour()) {      doWork();    } else {      System.err.println(getName() + "\t is not working at this time.");    }  }  protected abstract void doWork();  protected int getDayOfWeek() {    return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);  }}“Тогооч” бол “Гуанзны ажилтан” юм.

Cs203 lecture13 composition

  • 1.
    1Объект хандлагат програмчлалынхэл JavaХичээл: CS203Багш:Д.ЭнхжаргалMongolia University of Science & TechnologyБүрдмэл харьцаа
  • 2.
    2Бүрдмэл харьцааБүрдмэл ньОХПрограмчлалын үндэс суурь болсон гол ойлголт хараахан биш.Бүтцийн програмчлал дахь Програм-А нь Програм-В-г дуудахыг бүрдмэлийн энгийн жишээ гэж хэлж болно.Үүний адил Програм-А нь Төрөл-В –ийг ашиглахыг мөн бүрдмэлийн энгийн жишээ болгон тайлбарлаж болно.ОХПрограмчлал нь бүрдмэл хэмээх ойлголтыг илүү өргөн утгаар нь хэрэгжүүлдэг:Бүтцийн бүрдмэл /Structural Composition/: класс нь өөр классыг дотроо агуулахФункцын бүрдмэл /Behavioral Composition/: класс нь өөр классын гишүүн функцыг агуулахХолбоо хамаарлын бүрдмэл /Composition by Relationship/: Класс нь класс хоорондын холбоо хамаарлыг өөртөө агуулах
  • 3.
    3Бүрдмэл харьцааБүрдмэл харьаань Програм хангамжийн дахин ашиглагдах чадвар (Software reuseability)-ийг дэмждэг бөгөөд өгүүлбэрзүйн “..........бол ..........тай” буюу “have a” холбоосоор холбогддог.Ойлголт сэргээх ньОХП-д классуудын хоорондын шаталсан харьцааны дараах 2 хэлбэр байдаг.Удамшил харьцаа “... бол... юм”Бүрдмэл харьцаа “...бол...тай”Бүрдмэл нь бодит амьдрал дээр элбэг тохиолддог. Жишээ нь: Person has a heart Computer has a cooler Student has a mobile Teacher has a car
  • 4.
    4Бүрдмэл харьцааОбъект ХандлагатПрограмчлалд классуудын шаталсан харьцааны дараах 2 хэлбэр байдаг. Үүнд:Удамшил харьцаа (“AKO” буюу “….a kind of……” эсвэл “….is a…”)Бүрдмэл харьцаа (“APO” буюу “….a part of……” эсвэл “….a part of..”)Эдгээр 2 харьцаа нь програм хангамжийн дахин ашиглагдах чадвар(Reuseability)-ыг нэмэгдүүлдэг.Бүрдмэл харьцаа нь Бүрдмэл харьцааг удамшлыг бодвол програмчлалд тэр бүр ашиглаад байдаггүй.Класс доторх объектын хэрэглээ юм. Жишээ нь:class Computer{ String name; Disk disk;// Гишүүн объектMemory memory; // Гишүүн объект Mouse mouse;// Гишүүн объект float price; }
  • 5.
  • 6.
    6Бүрдмэл харьцааObject AObjectBObject AObject BБүрдмэл харьцааны дараах 2 хэлбэр байдагComposition: Бүрэлдэхүүн хэсэг нь үндсэн хэсэгээс шууд хамааралтай. Өх: Үндсэн хэсэг нь үүсээгүй байхад бүрэлдэхүүн хэсэг үүсэх боломжгүй юм. Тухайлбал: Компани үүсээгүй байхад түүний салбар хэлтэс үүсэх боломжгүй юм. Дүрслэхдээ битүү ромбоор дүрсэлдэг.Aggregation: Бүрэлдэхүүн хэсэг нь үндсэн хэсэг нь оршин тогтнож буй эсэхээс хамаарахгүйгээр бие даан үүсдэг. Дүрслэхдээ задгай ромбоор дүрсэлдэг.
  • 7.
  • 8.
  • 9.
  • 10.
    10Багтаасан ба багтсанклассӨөр класс дотор агуулагдах классыг нэрлэх нь :
  • 11.
  • 12.
  • 13.
    Өөр нэг буюухэд хэдэн класс агуулах классыг
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    Статик бус багтсанклассыг Дотоод класс(Inner class)гэнэ
  • 19.
    Багтсан классын объектнь багтаасан классынхаа мужид зарлагдана
  • 20.
    Багтсан классаас багтаасанклассын бүх гишүүд рүү хандах боломжтой. Эсрэгээр багтаасан классаас багтсан классын гишүүд рүү хандах боломжгүй
  • 21.
    Харин статик дотоодклассаас түүний гаднах классынх нь статик бус гишүүд рүү хандах боломжгүй.
  • 22.
    Дотоод класс ньprivate, protected, public болон багцын хандалттай байж болно.
  • 23.
    Багтсан ба багтаасанклассууд нь Бүрдмэл холбоосоос өөр ойлголт юм шүү!Дотоод классДотоод классГадаад класс
  • 24.
  • 25.
    13Дотоод классаас түүнийгадаад классынх нь гишүүн өгөгдөлд хандах боломжтойГадаад классынхаа гишүүн өгөгдлийг хэвлэх
  • 26.
    14Нэмэлт уншилга:Тайлбар: Өмнөавч үзсэн Бүрдмэл харьцааны энгийн жишээнээс санаа авч өөрийн сонгосон сэдвийн хүрээнд “бүрдмэл харьцаа”-г энгийн авсаархан байдлаар хэрэгжүүлж энэ 7 хоногийн лабораторийн ажлааа гүйцэтгээрэй!Хэрэв нэмэлт 2 онооны ажил гүйцэтгэх хүсэлтэй бол дараах загвар жишээнээс санаа авч бүрдмэл харьцааг илүү өргөн утгаар нь хийсвэрлэн хэрэгжүүлээрэй! Бүрдмэл харьцааг “Их сургуулийн гуанзны ажилчдын цаг бүртгэлд” хэрэгжүүлсэн жишээ
  • 27.
    15Их сургуулийн гуанз(cafeteria) нь оюутан багш нарт зориулсан хэд хэдэн нэр төрлийн хоолтой.Үйлчлүүлэгчдийн хүсэл шаардлагад нийцсэн үйлчилгээ үзүүлэхийн тулд өдөр бүр дор хаяж 1 ахлах тогооч ажилна. Заримд нөхцөлд тухайлбал оргил цагаар (үдийн их завсарлагаанаар) нэгээс олон ахлах тогооч ажилна.Тогоочоос гадна кассчин ажилнаМөн цэвэрлэгээний ажилтан гэж байна Ийнхүү бид өөрийн кодоо дээрх онцлог дээр тулгуурлан бичихдээ ялгаатай үүрэг бүхий ажилтангуудад зориулсан классыг үүсгэх боломжтойЖишээ
  • 28.
    16ЖишээЭхлээдГуанзны ажилчдад зориулсанклассыг үүсгэеpublic abstract class CafeteriaWorker { protected String name; protected int startHour; protected int stopHour; protected CafeteriaWorker(String name, int startHour, int stopHour) { this.name = name; this.startHour = startHour; this.stopHour = stopHour; } public String getName() { return name; } public int getStartHour() { return startHour; } public int getStopHour() { return stopHour; } /** удамшсан класс бүр өөр өөрийнхөөр ажилдаг */ public abstract void work(); /** тухайн ажилтаны ажлын цаг мөн эсэхийг тогтоох */ protected boolean isWorkHour() { int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); return currentHour >= startHour && currentHour < stopHour; }}“Гуанзны ажилтан” хийсвэр класс Гуанзны ажилтан бүр өөр өөрийн ажилтай тул “ажиллах” гэсэн функцыг хийсвэрээр зарласан байна
  • 29.
    17ЖишээодооГуанзны ажилчдын заримтөрлийн албыг үүсгэеpublic class Cashier extends CafeteriaWorker { public Cashier(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } public void work() { if (isWorkHour()) { System.out.println(getName() + "\t will now work at the cashier."); } else { System.err.println(getName() + "\t is not working at this time. " + "Cafeteria should be closed now."); } }}“Кассчин” бол “Гуанзны ажилтан” юм.public class Cleaner extends CafeteriaWorker { public Cleaner(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } public void work() { if (isWorkHour()) { System.out.println(getName() + "\t will now collect the dishes from " + "the dinning area. When finished, " + getName() + " will clean the dishes."); } else { System.err.println(getName() + "\t is not working at this time."); } }}“Цэвэрлэгч” бол “Гуанзны ажилтан” юм.
  • 30.
    18ЖишээChefбол онцгой үүрэггүйцэтгэх гуанзны ажилтан юм.Өмнө дурдсан ёсоор олон төрлийн тогооч (chef) байдаг . Ж нь:Baker – Талх, нарийн боов барьдаг тогоочHotMealCook – Нэг, хоёрдугаар хоол бэлтгэдэг тогоочSaladPrep – Зууш салат бэлтгэдэг тогоочMeatPrep –HotDog, CheeseBurger г.м бүтээгдэхүүн бэлтгэдэг тогоочPiroshkiPrep – Пирошки бэлтгэдэг тогоочpublic abstract class Chef extends CafeteriaWorker { protected Chef(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } public void work() { if (isWorkHour()) { doWork(); } else { System.err.println(getName() + "\t is not working at this time."); } } protected abstract void doWork(); protected int getDayOfWeek() { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK); }}“Тогооч” бол “Гуанзны ажилтан” юм.