SlideShare une entreprise Scribd logo
1  sur  30
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 Жишээ: Computer CPU Mouse Disk Компьютер процессортой Компьютер хулганатай Компьютер дисктэй Бүрдмэл харьцаа
6 Бүрдмэл харьцаа Object A Object B Object A Object B Бүрдмэл харьцааны дараах 2 хэлбэр байдаг Composition: Бүрэлдэхүүн хэсэг нь үндсэн хэсэгээс шууд хамааралтай. Өх: Үндсэн хэсэг нь үүсээгүй байхад бүрэлдэхүүн хэсэг үүсэх боломжгүй юм. Тухайлбал: Компани үүсээгүй байхад түүний салбар хэлтэс үүсэх боломжгүй юм. Дүрслэхдээ битүү ромбоор дүрсэлдэг. Aggregation: Бүрэлдэхүүн хэсэг нь үндсэн хэсэг нь оршин тогтнож буй эсэхээс хамаарахгүйгээр бие даан үүсдэг. Дүрслэхдээ задгай ромбоор дүрсэлдэг.
Жишээ: Бүрдмэл харьцаа
Жишээ: Бүрдмэл харьцаа
Жишээ: Бүрдмэл харьцаа
10 Багтаасан ба багтсан класс ,[object Object]
Агуулагдсан класс
Багтсан класс
Өөр нэг буюу хэд хэдэн класс агуулах классыг
Багтаасан класс гэнэ
Багтсан класс нь
Статик
Статик бус байж болно.
Статик бус багтсан классыг Дотоод класс(Inner class)гэнэ
Багтсан классын объект нь багтаасан классынхаа мужид зарлагдана
Багтсан классаас багтаасан классын бүх гишүүд рүү хандах боломжтой. Эсрэгээр багтаасан классаас багтсан классын гишүүд рүү хандах боломжгүй
Харин статик дотоод классаас түүний гаднах классынх нь статик бус гишүүд рүү хандах боломжгүй.
Дотоод класс нь private, protected, public болон багцын хандалттай байж болно.
Багтсан ба багтаасан классууд нь Бүрдмэл холбоосоос өөр ойлголт юм шүү!,[object Object]
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() + " will now work at the cashier.");     } else {       System.err.println(getName() + " 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() + " will now collect the dishes from " +                          "the dinning area.  When finished, " + getName() +                          " will clean the dishes.");     } else {       System.err.println(getName() + " 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() + " is not working at this time.");     }   }   protected abstract void doWork();   protected int getDayOfWeek() {     return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);   } } “Тогооч” бол “Гуанзны ажилтан” юм.

Contenu connexe

Tendances (20)

Lec4 хereglegchiinpunkts
Lec4 хereglegchiinpunktsLec4 хereglegchiinpunkts
Lec4 хereglegchiinpunkts
 
Sw203 Lecture10 Polymorphism
Sw203 Lecture10 PolymorphismSw203 Lecture10 Polymorphism
Sw203 Lecture10 Polymorphism
 
Sw203 Lecture5 Class Acess Modifiers
Sw203 Lecture5 Class Acess ModifiersSw203 Lecture5 Class Acess Modifiers
Sw203 Lecture5 Class Acess Modifiers
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7
 
C# hicheelin lekts
C# hicheelin lektsC# hicheelin lekts
C# hicheelin lekts
 
Lec3 c++operator
Lec3 c++operatorLec3 c++operator
Lec3 c++operator
 
давталттай алгоритм
давталттай алгоритмдавталттай алгоритм
давталттай алгоритм
 
Sw203 Lecture8 Interface
Sw203 Lecture8 InterfaceSw203 Lecture8 Interface
Sw203 Lecture8 Interface
 
массив
массивмассив
массив
 
Java programchlal s.uuganbayr
Java programchlal s.uuganbayrJava programchlal s.uuganbayr
Java programchlal s.uuganbayr
 
It101 9
It101 9It101 9
It101 9
 
Лекц №9
Лекц №9Лекц №9
Лекц №9
 
C cons
C consC cons
C cons
 
Sw203 Lecture4 Class Object
Sw203 Lecture4  Class ObjectSw203 Lecture4  Class Object
Sw203 Lecture4 Class Object
 
алгоритм
алгоритмалгоритм
алгоритм
 
Өгөгдлийн бүтэц 15
Өгөгдлийн бүтэц 15Өгөгдлийн бүтэц 15
Өгөгдлийн бүтэц 15
 
алгоритм 8
алгоритм 8алгоритм 8
алгоритм 8
 
Lecture3 охп удамшил
Lecture3 охп удамшилLecture3 охп удамшил
Lecture3 охп удамшил
 
It101 lab11 use case
It101 lab11 use caseIt101 lab11 use case
It101 lab11 use case
 

En vedette (20)

Lecture8 9
Lecture8 9Lecture8 9
Lecture8 9
 
Laboratory 14
Laboratory 14Laboratory 14
Laboratory 14
 
Lab5
Lab5Lab5
Lab5
 
Lab 12
Lab 12Lab 12
Lab 12
 
Lab6 db
Lab6 dbLab6 db
Lab6 db
 
SW203 Lab10
SW203  Lab10SW203  Lab10
SW203 Lab10
 
Sw203lab5
Sw203lab5Sw203lab5
Sw203lab5
 
Програм ба зүйрлэл
Програм ба зүйрлэлПрограм ба зүйрлэл
Програм ба зүйрлэл
 
Лабораторийн ажил № 2
Лабораторийн ажил № 2Лабораторийн ажил № 2
Лабораторийн ажил № 2
 
Video lab1-web
Video lab1-webVideo lab1-web
Video lab1-web
 
Sw203 Lecture12 Composition
Sw203 Lecture12 CompositionSw203 Lecture12 Composition
Sw203 Lecture12 Composition
 
Sw203lab6
Sw203lab6Sw203lab6
Sw203lab6
 
Sw203 Lab7
Sw203 Lab7Sw203 Lab7
Sw203 Lab7
 
Lab7
Lab7Lab7
Lab7
 
Lab10 11
Lab10 11Lab10 11
Lab10 11
 
Лабораторийн ажил № 1
Лабораторийн ажил № 1Лабораторийн ажил № 1
Лабораторийн ажил № 1
 
Cs203 lab8
Cs203 lab8Cs203 lab8
Cs203 lab8
 
S W203 Lecture8 Interface
S W203  Lecture8  InterfaceS W203  Lecture8  Interface
S W203 Lecture8 Interface
 
Sw203 Lecture9 Encapsulation
Sw203 Lecture9  EncapsulationSw203 Lecture9  Encapsulation
Sw203 Lecture9 Encapsulation
 
It101-lab9
It101-lab9It101-lab9
It101-lab9
 

Similaire à Cs203 lecture13 composition

Similaire à Cs203 lecture13 composition (15)

Lecture
LectureLecture
Lecture
 
SW203 Lab9
SW203  Lab9SW203  Lab9
SW203 Lab9
 
Lecture4
Lecture4Lecture4
Lecture4
 
Pl lecture7
Pl lecture7Pl lecture7
Pl lecture7
 
Sw203 Lecture7 Method Override
Sw203 Lecture7  Method OverrideSw203 Lecture7  Method Override
Sw203 Lecture7 Method Override
 
Лекц №13
Лекц №13Лекц №13
Лекц №13
 
Cs203 lecture 14 reflection
Cs203 lecture 14  reflectionCs203 lecture 14  reflection
Cs203 lecture 14 reflection
 
Java laboratoriin udirdamj 2
 Java laboratoriin udirdamj 2 Java laboratoriin udirdamj 2
Java laboratoriin udirdamj 2
 
U.cs101 лаборатори 8
U.cs101 лаборатори 8U.cs101 лаборатори 8
U.cs101 лаборатори 8
 
Pp Lect7 1
Pp Lect7 1Pp Lect7 1
Pp Lect7 1
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
 
Lecture2
Lecture2Lecture2
Lecture2
 
баяраа сургалт
баяраа сургалтбаяраа сургалт
баяраа сургалт
 
001cclass 120926194905-phpapp02
001cclass 120926194905-phpapp02001cclass 120926194905-phpapp02
001cclass 120926194905-phpapp02
 
U.cs101 лаборатори 1
U.cs101 лаборатори 1U.cs101 лаборатори 1
U.cs101 лаборатори 1
 

Plus de Jargalsaikhan Alyeksandr

Plus de Jargalsaikhan Alyeksandr (6)

Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)
 
Microsoft IT Academy
Microsoft IT AcademyMicrosoft IT Academy
Microsoft IT Academy
 
Computer ethics and system security
Computer ethics and system securityComputer ethics and system security
Computer ethics and system security
 
Sw203lab8
Sw203lab8Sw203lab8
Sw203lab8
 
Sw203 Lecture11 Casting
Sw203 Lecture11 CastingSw203 Lecture11 Casting
Sw203 Lecture11 Casting
 
Sw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java ProgramSw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java Program
 

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. 5 Жишээ: Computer CPU Mouse Disk Компьютер процессортой Компьютер хулганатай Компьютер дисктэй Бүрдмэл харьцаа
  • 6. 6 Бүрдмэл харьцаа Object A Object B Object A Object B Бүрдмэл харьцааны дараах 2 хэлбэр байдаг Composition: Бүрэлдэхүүн хэсэг нь үндсэн хэсэгээс шууд хамааралтай. Өх: Үндсэн хэсэг нь үүсээгүй байхад бүрэлдэхүүн хэсэг үүсэх боломжгүй юм. Тухайлбал: Компани үүсээгүй байхад түүний салбар хэлтэс үүсэх боломжгүй юм. Дүрслэхдээ битүү ромбоор дүрсэлдэг. Aggregation: Бүрэлдэхүүн хэсэг нь үндсэн хэсэг нь оршин тогтнож буй эсэхээс хамаарахгүйгээр бие даан үүсдэг. Дүрслэхдээ задгай ромбоор дүрсэлдэг.
  • 10.
  • 13. Өөр нэг буюу хэд хэдэн класс агуулах классыг
  • 18. Статик бус багтсан классыг Дотоод класс(Inner class)гэнэ
  • 19. Багтсан классын объект нь багтаасан классынхаа мужид зарлагдана
  • 20. Багтсан классаас багтаасан классын бүх гишүүд рүү хандах боломжтой. Эсрэгээр багтаасан классаас багтсан классын гишүүд рүү хандах боломжгүй
  • 21. Харин статик дотоод классаас түүний гаднах классынх нь статик бус гишүүд рүү хандах боломжгүй.
  • 22. Дотоод класс нь private, protected, public болон багцын хандалттай байж болно.
  • 23.
  • 24. 12
  • 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() + " will now work at the cashier."); } else { System.err.println(getName() + " 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() + " will now collect the dishes from " + "the dinning area. When finished, " + getName() + " will clean the dishes."); } else { System.err.println(getName() + " 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() + " is not working at this time."); } } protected abstract void doWork(); protected int getDayOfWeek() { return Calendar.getInstance().get(Calendar.DAY_OF_WEEK); } } “Тогооч” бол “Гуанзны ажилтан” юм.
  • 31. 19 Жишээ Baker класс public class Baker extends Chef { public Baker(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } protected void doWork() { switch (getDayOfWeek()) { case Calendar.MONDAY: case Calendar.TUESDAY: case Calendar.WEDNESDAY: System.out.println(getName() + " will bake 5 chocolate cakes today."); break; case Calendar.THURSDAY: case Calendar.FRIDAY: System.out.println(getName() + " will bake 3 loaves of bread and 2 " + "meat pies."); break; default: System.out.println(getName() + " will bake some surprises... :-)"); break; } } }
  • 32. 20 Жишээ HotMealCook класс public class HotMealCook extends Chef { public HotMealCook(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } protected void doWork() { switch (getDayOfWeek()) { case Calendar.MONDAY: case Calendar.WEDNESDAY: case Calendar.FRIDAY: System.out.println(getName() + " will cook fried rice, guliash " + "and noodles today."); break; case Calendar.TUESDAY: case Calendar.THURSDAY: System.out.println(getName() + " will cook vegetable soup, lamb " + "meat and curry today."); break; default: System.out.println(getName() + " will re-cook the leftovers " + "from this week... :-)"); break; } } }
  • 33. 21 Жишээ SaladPrep класс public class SaladPrep extends Chef { public SaladPrep(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } protected void doWork() { switch (getDayOfWeek()) { case Calendar.MONDAY: case Calendar.WEDNESDAY: case Calendar.TUESDAY: case Calendar.THURSDAY: System.out.println(getName() + " will make potato salad and " + "cabbage salad today."); break; case Calendar.FRIDAY: System.out.println(getName() + " will make potato salad, " + "cabbage salad and carrot salad today."); break; default: System.err.println(getName() + " will not work today. :-)"); break; } } }
  • 34. 22 MeatPrep класс Жишээ public class MeatPrep extends Chef { public MeatPrep(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } protected void doWork() { switch (getDayOfWeek()) { case Calendar.MONDAY: case Calendar.WEDNESDAY: case Calendar.FRIDAY: case Calendar.TUESDAY: case Calendar.THURSDAY: System.out.println(getName() + " prepare beef and lamb meat today."); break; default: System.err.println(getName() + " will not work today. :-)"); break; } } }
  • 35. 23 PiroshkiPrep класс Мэдээж бид Гуанз классыг мөн тодорхойлох хэрэгтэй болно. Гуанз (Cafeteria) класс нь Гуанзны ажилчин (CafeteriaWorker) классыг өөртөө агуулна. “Гуанз бол хэд хэдэн төрлийн ажилчидтай”. Тэдгээр ажилчид нь өөр өөрийн үүрэгийг гүйцэтэснээр гуанзны үйл ажиллагаа хэвийн явагдана. Эндээс үзэхэд: Гуанз нь олон төрлийн ажилчидаас бүрдэнэ. Тэдгээр ажилтангууд нь Гуанз(cafeteria) классын бүрэлдэхүүн хэсэг болно. Жишээ public class PiroshkiPrep extends Chef { public PiroshkiPrep(String name, int startHour, int stopHour) { super(name, startHour, stopHour); } protected void doWork() { System.out.println(getName() + " will prepare pirshki now."); } }
  • 36. 24 Cafeteria буюу Гуанз класс Жишээ public class Cafeteria { private String name; private int startHour; private int stopHour; private CafeteriaWorker[] workers; public Cafeteria(String name) { this.name = name; } public String getName() { return name; } public int getStartHour() { return startHour; } public void setStartHour(int startHour) { this.startHour = startHour; } public int getStopHour() { return stopHour; } public void setStopHour(int stopHour) { this.stopHour = stopHour; } public CafeteriaWorker[] getWorkers() { return workers; } public void setWorkers(CafeteriaWorker[] workers) { this.workers = workers; } public void callWorkersToWork() { for (int i = 0; i < workers.length; i++) { workers[i].work(); } } }
  • 37. 25 Дээрх классуудыг тестлэх код бичье Жишээ public class TestClass { private static String DOS_CMD = "c:windowssystem32cmd.exe"; private static String TIME_CMD = DOS_CMD + " /k time "; public static void main(String[] args) throws Throwable { // гуанз объект үүсгэх Cafeteria guanz = new Cafeteria("Mongolian Univeristy Guanz"); guanz.setStartHour(8); guanz.setStopHour(16); // 10 ажилтан үүсгэх CafeteriaWorker[] workers = new CafeteriaWorker[11]; workers[0] = new Cashier("Narantuya", 8, 16); workers[1] = new Cleaner("Baatar", 10, 12); workers[2] = new Cleaner("Enkh-Munkh", 12, 16); workers[3] = new Cleaner("Erika", 10, 14); workers[4] = new Baker("Chuloo", 10, 15); workers[5] = new HotMealCook("Ganbat", 11, 15); workers[6] = new SaladPrep("Zaya", 8, 14); workers[7] = new SaladPrep("Sukhee", 8, 15); workers[8] = new MeatPrep("Zolbayar", 10, 15); workers[9] = new PiroshkiPrep("Bat-Erdene", 9, 14); workers[10] = new PiroshkiPrep("Erdene-Bat", 9, 14); guanz.setWorkers(workers); // Үргэлжлэл дараагийн хуудсанд
  • 38. 26 Жишээ // Өмнөх хуудсын үргэлжлэл... // Үр дүнг ялгаатай цагууд дээр шалгаж үзье Runtime runtime = Runtime.getRuntime(); setSystemTime(runtime, "08:00:00"); guanz.callWorkersToWork(); setSystemTime(runtime, "12:00:00"); guanz.callWorkersToWork(); setSystemTime(runtime, "15:00:00"); guanz.callWorkersToWork(); guanz.callWorkersToWork(); setSystemTime(runtime, "20:00:00"); guanz.callWorkersToWork(); // цагаа reset хийх System.out.println("Don't forget to reset your clock!"); // ажил дуусаа! } private static void setSystemTime(Runtime runtime, String newTime) throws IOException, InterruptedException { System.out.println(); runtime.exec(TIME_CMD + newTime); Thread.sleep(1000); System.out.println("The time is now " + newTime + "...."); System.out.println("===================================================="); } }
  • 39. 27 Жишээ Гарах ҮР ДҮН: The time is now 08:00:00.... ===================================================== Narantuya is not working at this time. Cafeteria should be closed now. Baatar is not working at this time. Enkh-Munkh is not working at this time. Erika is not working at this time. Chuloo is not working at this time. Ganbat is not working at this time. Zaya is not working at this time. Sukhee is not working at this time. Zolbayar is not working at this time. Bat-Erdene is not working at this time. Erdene-Bat is not working at this time. The time is now 12:00:00.... ===================================================== Narantuya will now work at the cashier. Baatar will now collect the dishes from the dinning area. When finished, Baatar will clean the dishes. Enkh-Munkh is not working at this time. Erika will now collect the dishes from the dinning area. When finished, Erika will clean the dishes. Chuloo will bake 3 loaves of bread and 2 meat pies. Ganbat will cook vegitable soup, lamb meat and curry today. Zaya will make potato salad and cabbage salad today. Sukhee will make potato salad and cabbage salad today. Zolbayar prepare beef and lamb meat today. Bat-Erdene will prepare pirshki now. Erdene-Bat will prepare pirshki now. // Үргэлжлэл нь дараагийн хуудсанд
  • 40. 28 Жишээ // Өмнөх хуудсын үргэлжлэл The time is now 15:00:00.... ===================================================== Narantuya will now work at the cashier. Baatar is not working at this time. Enkh-Munkh will now collect the dishes from the dinning area. When finished, Enkh-Munkh will clean the dishes. Erika is not working at this time. Chuloo will bake 3 loaves of bread and 2 meat pies. Ganbat will cook vegetable soup, lamb meat and curry today. Zaya is not working at this time. Sukhee will make potato salad and cabbage salad today. Zolbayar prepare beef and lamb meat today. Bat-Erdene is not working at this time. Erdene-Bat is not working at this time. Narantuya will now work at the cashier. Baatar is not working at this time. Enkh-Munkh will now collect the dishes from the dinning area. When finished, Enkh-Munkh will clean the dishes. Erika is not working at this time. Chuloo will bake 3 loaves of bread and 2 meat pies. Ganbat will cook vegitable soup, lamb meat and curry today. Zaya is not working at this time. Sukhee will make potato salad and cabbage salad today. Zolbayar prepare beef and lamb meat today. Bat-Erdene is not working at this time. Erdene-Bat is not working at this time. // Үргэлжлэл дараагийн хуудсанд...
  • 41. 29 Жишээ // Үргэлжлэл нь өмнөх хуудсанд... The time is now 20:00:00.... ===================================================== Narantuya is not working at this time. Cafeteria should be closed now. Baatar is not working at this time. Enkh-Munkh is not working at this time. Erika is not working at this time. Chuloo is not working at this time. Ganbat is not working at this time. Zaya is not working at this time. Sukhee is not working at this time. Zolbayar is not working at this time. Bat-Erdene is not working at this time. Erdene-Bat is not working at this time. Don't forget to reset your clock! Энэ жишээнээс үзэхэд Гуанзны ажилтан классын объектууд үүсээгүй байхад гуанз ямар ч үйл ажиллагаа явагдахгүй болох нь харагдаж байна. Гуанз нь гуанзны ажилчдын ажлыг оноож өгдөг Гуанзны бүх ажилчид нь гуанзны үйл ажиллагааг явуулдаг- Бүрдмэл Тайлбар: Энэхүү жишээ нь java.util-ийн date/time-д зориулсан зарим багцыг ашигласан бөгөөд түүнд анхаарлаа хандуулахгүй байж болно
  • 42. 30 Манай жишээний хувьд inner class-ийг хэрэгжүүлэхийн тулд кодонд шаардлагатай өөрчлөлтийг оруулъя. Кассчин нь мөнгө, тооцоотой холбоотой ажил хариуцсан нилээд чухал алба бөгөөд эзэн нь кассчиныг сонгон шалгаруулахдаа хүний итгэл даах, найдвартай хүнийг сонгодог. Бид Кассчин классыг inner class-аар тодорхойлж ашиглах боломжтой бөгөөд түүний функцуудээр дамжуулан тухайн кассчиныг хир итгэл даах хүн болохыг нь хянаж болно. Жишээ