Sw203 Lecture7 Method Override

1,963 views

Published on

дахин тодорхойлсон функц

Published in: Education, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,963
On SlideShare
0
From Embeds
0
Number of Embeds
244
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Sw203 Lecture7 Method Override

  1. 1. Объект хандлагат програмчлалын хэл Java Хичээл : C S203 Багш : Д.Энхжаргал Mongolia University of Science & Technology Лекц №7. Даран тодорхойлсон функц (Method override)
  2. 2. <ul><li>Java хэлэнд ижил нэртэй функцын дараах 2 хэлбэр байдаг. Үүнд: </li></ul><ul><ul><li>Method overload </li></ul></ul><ul><ul><li>Method override </li></ul></ul><ul><li>Method override : Удамшлын харьцаан дахь эх классын гишүүн функцтэй ижил дүрслэлтэй гишүүн функцыг хүү классд тодорхойлохыг хэлнэ. Өх: Тэдгээр функцуудын дүрслэл нь ижил харин гүйцэтгэх үүрэг нь өөр өөр байна. </li></ul><ul><ul><li>Функцын дүрслэл (Method signature) </li></ul></ul><ul><ul><ul><li>Функцын нэр </li></ul></ul></ul><ul><ul><ul><li>Буцаах утга </li></ul></ul></ul><ul><ul><ul><li>Параметрийн жагсаалт </li></ul></ul></ul>Дахин тодорхойлсон функц
  3. 3. Method Override Удамшил Method override: Ижил нэртэй ялгаатай функц тодорхойлох Багш __ мэдээлэл Хичээлийн код calc__salary(age) Ажилтан _ мэдээлэл Нэр Төрсөн огноо Нас Хаяг calc__age(birthday) calc__salary(age)
  4. 4. Course CS Course Math Course Cisco Course Programming Course Basic Math Course Advanced Math Course extends extends extends extends extends extends Method override -ийн шаардлага
  5. 5. Course getCourseCredit()::3 CS Course Math Course Cisco Course Programming Course Basic Math Course extends extends extends extends extends extends Advanced Math Course Онцгой тохиолдол Учир нь: Course классаас удамших классууд нь бүгд 3 кредитийн хичээлүүд бөгөөд харин Advanced Math Course нь 4 кредитийн хичээл Асуудлыг хэрхэн шийдэх вэ? Method override -ийн шаардлага Course 1 getCourseCredit():: 4 extends ×
  6. 6. Course getCourseCredit()::3 CS Course Math Course Cisco Course Programming Course Basic Math Course extends extends extends extends extends extends Advanced Math Course getCourseCredit()::4 Онцгой тохиолдол Учир нь: Course классаас удамших классууд нь бүгд 3 кредитийн хичээлүүд бөгөөд харин Advanced Math Course нь 4 кредитийн хичээл Асуудлыг хэрхэн шийдэх вэ? Эх классын гишүүн функцтэй ижил дүрслэлтэй гишүүн функцыг түүнд тодорхойлж өгөх нь зүйтэй Method override -ийн шаардлага
  7. 7. private default protected public public protected default private <ul><li>Эх классын гишүүн функцыг дахин тодорхойлохдоо хандалтуудын хувьд баримтлах дүрэм байдаг. Үүнд: </li></ul><ul><ul><ul><li>Хувийн хандалттай гишүүн функцыг ямар ч хандалттайгаар дахин тодорхойлох боломжтой </li></ul></ul></ul><ul><ul><ul><li>Пакетын хандалттай гишүүн функцыг пакетын, protected , нийтийн хандалттайгаар дахин тодорхойлох боломжтой </li></ul></ul></ul><ul><ul><ul><li>Protected хандалттай гишүүн функцыг protected эсвэл нийтийн хандалттайгаар дахин тодорхойлох боломжтой </li></ul></ul></ul><ul><ul><ul><li>Нийтийн хандалттай гишүүн функцыг хүү классд нь зөвхөн нийтийн хандалттай дахин тодорхойлно </li></ul></ul></ul>Харин эсрэгээр боломжгүй Method override хийх үед хандалтыг хэрхэн тодорхойлох вэ?
  8. 8. Method Override - Жишээ <ul><li>Их сургуульд 3 төрлийн оюутнууд сурдаг. Үүнд: </li></ul><ul><ul><li>Бакалаврын оюутан / Bachelor student / </li></ul></ul><ul><ul><li>Магисрын оюутан / Master student / </li></ul></ul><ul><ul><li>Докторантурын оюутан / Doctorate student / </li></ul></ul><ul><li>Тэдгээр оюутнууд дараах ижил шинжүүдтэй. Үүнд: </li></ul><ul><ul><li>Оюутны код / Student ID / </li></ul></ul><ul><ul><li>Нэр / Name / </li></ul></ul><ul><ul><li>Сургуулийн нэр / School name / </li></ul></ul><ul><ul><li>Дүн / Grades / – тухайн оюутны судалсан хичээлийн нэр болон дүнгийн жагсаалт </li></ul></ul><ul><ul><li>Дээрх нийтлэг шинжүүдэд үндэслэн тэдгээр оюутнуудын хувьд эх класс /супер класс /тодорхойлж болно. </li></ul></ul>
  9. 9. <ul><li>Эх класс – Оюутан / Student / </li></ul>Method Override - Жишээ public class Student { private String id; private String name; private School school; private Grade[] grades; public Grade[] getGrades() { return grades; } public void setGrades(Grade[] grades) { this.grades = grades; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public School getSchool() { return school; } // дараагийн хуудас …
  10. 10. <ul><li>Эх класс – Оюутан / Student / </li></ul>Method Override - Жишээ // үргэлжлэл … public Grade getGrade(Course course) { if (grades == null) { return null; } for (int i = 0; i < grades.length; i++) { Grade grade = grades[i]; if (grade.getCourse() == course) { return grade; } } return null; } public boolean isPassed(Course course) { Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() > 50; } } }
  11. 11. <ul><li>Бакалаврын оюутан / BachelorStudent / </li></ul><ul><li>Магистр оюутан / MasterStudent / </li></ul><ul><li>Докторантур оюутан / DoctorateStudent / </li></ul><ul><li>Эдгээр оюутан классууд Student класаас удамшина. </li></ul>Method Override - Жишээ public class BachelorStudent extends Student { } public class MasterStudent extends Student { } public class DoctorateStudent extends Student { } Student BachelorStudent DoctorateStudent MasterStudent extends
  12. 12. <ul><li>Гэвч тэдгээр оюутнуудын хувьд нийтлэг ижил төстэй зүйл байхаас гадна ялгаатай онцлог талууд бас бий. Тухайлбал: Тэдгээрийн Үнэлгээний Голч Дүнг өөрөөр боддог. </li></ul><ul><ul><li>Бакалавр оюутны ҮГД 74% ба түүнээс дээш байх ёстой </li></ul></ul><ul><ul><li>Магистр оюутны ҮГД 82% ба түүнээс дээш байх ёстой </li></ul></ul><ul><ul><li>Докторантур оюутны ҮГД 50% ба түүнээс дээш байх ёстой </li></ul></ul><ul><li>Энэхүү онцлогийг тусгахын тулд isPassed() гишүүн функц нь чухал үүрэгтэй. </li></ul><ul><ul><li>This isPassed() гишүүн функц нь ялгаатай төрлийн оюутан бүрийн хувьд ялгаатайгаар хэрэгжинэ. </li></ul></ul><ul><ul><li>Удамшлын харьцаан дахь эх классын гишүүн функцыг хүү классд дахин тодорхойлогдсоныг / method override / гэнэ . </li></ul></ul><ul><ul><li>Хэрэв дахин тодорхойлогдсон гишүүн функцыг хүү классын объектод бэхэлж дуудвал хүү классын дахин тодорхойлогдсон функц дуудагдана. </li></ul></ul>Method Override - Жишээ
  13. 13. <ul><li>Бакалавр оюутан / BachelorStudent / </li></ul><ul><li>Магистр оюутан / MasterStudent / </li></ul><ul><li>Докторантур оюутан / DoctorateStudent / </li></ul><ul><ul><li>Кодын өөрчлөлт хийх шаардлагагүй . </li></ul></ul>Method Override - Жишээ public class BachelorStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 74 ; } } } public class MasterStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 82; } } }
  14. 14. <ul><li>Одоо програмынхаа үр дүнг авч үзье : </li></ul>Method Override - Жишээ public class TestClass { public static void main(String[] args) { // сургууль объектыг үүсгэе. School ktmc = new School(); ktmc.setName(&quot;KTMC&quot;); ktmc.setAddress(&quot;Sansar, Ulaanbaator, Mongolian&quot;); // зарим хичээл объектууд үүсгэе Course sw203 = new Course(&quot;SW203&quot;, &quot;Object-oriented Programming&quot;, 3); Course sw508 = new Course(&quot;SW508&quot;, &quot;Object-oriented Analysis and Design&quot;, 3); Course sw811 = new Course(&quot;SW811&quot;, &quot;Advanced Artificial Intelligence&quot;, 3); // Бакалаврын оюутан гэсэн объект үүсгэе Student bachelor = new BachelorStudent(); bachelor.setId(&quot;SW050001&quot;); bachelor.setName(&quot;Baatar&quot;); bachelor.setSchool(ktmc); bachelor.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw203)}); // Магистр оюутан гэсэн объект үүсгэе Student master = new MasterStudent(); master.setId(&quot;SW020001&quot;); master.setName(&quot;Chimgee&quot;); master.setSchool(ktmc); master.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw508)}); // Докторант оюутан гэсэн объект үүсгэе Student doctorate = new DoctorateStudent(); doctorate.setId(&quot;SW990001&quot;); doctorate.setName(&quot;Tuya&quot;); doctorate.setSchool(ktmc); doctorate.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw811)});
  15. 15. <ul><li>Одоо кодоо шалгая ( үргэлжлэл ): </li></ul><ul><li>Програмын үр дүн : </li></ul>Method Override - Жишээ // өмнөх хуудсын үргэлжлэл … // одоо оюутандуудыг оноогоор дүгнэе // тэгээд оюутнуудыг дүгнэсэн оноо зөв олгогдсон эсэхийг шалгаж үзье. bachelor.getGrades()[0].setScore(81); System.out.println(&quot;bachelor student passed SW203? &quot; + bachelor.isPassed(sw203)); bachelor.getGrades()[0].setScore(73.9); System.out.println(&quot;bachelor student passed SW203? &quot; + bachelor.isPassed(sw203)); master.getGrades()[0].setScore(81); System.out.println(&quot;master student passed SW511? &quot; + master.isPassed(sw508)); master.getGrades()[0].setScore(87); System.out.println(&quot;master student passed SW511? &quot; + master.isPassed(sw508)); doctorate.getGrades()[0].setScore(48); System.out.println(&quot;doctorate student passed SW811? &quot; + doctorate.isPassed(sw811)); doctorate.getGrades()[0].setScore(61); System.out.println(&quot;doctorate student passed SW811? &quot; + doctorate.isPassed(sw811)); } } bachelor student passed SW203? true bachelor student passed SW203? false master student passed SW511? false master student passed SW511? true doctorate student passed SW811? false doctorate student passed SW811? false
  16. 16. Method Override – санамж <ul><li>Method Override : ОХП-ийн удамшил хэмээх ойлголттой салшгүй холбоотой бөгөөд энэ нь эх классын гишүүн функцыг хүү классд дахин тодорхойлох явдал юм. </li></ul><ul><ul><li>Хэрэв Method Override гэсэн ойлголт байхгүй бол ( эх классын гишүүн функцыг хүүд нь дахин тодорхойлох боломжгүй бол ) удамшлын харьцаан дахь хүү классууд ( бакалаврын оюутан, магистр оюутан, докторантур оюутан гэсэн классууд ) эх класс ( оюутан класс ) -аас ялгагдахгүйд хүрнэ. </li></ul></ul><ul><li>Method Override нь хүү классд дахин тодорхойлогдсон функцын дүрслэл эх классын гишүүн функцтэй адил боловч тэдгээр нь ялгаатай үүрэг гүйцэтгэнэ. </li></ul><ul><ul><li>Функцын дүрслэл: функцын нэр, параметрийн тоо болон тэдгээрийн эрэмбэ дарааг багтааж ойлгоно. </li></ul></ul>// from Student.class... public boolean isPassed(Course course) { Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() > 50; } } // from BachelorStudent.class... public boolean isPassed(Course course) { Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 74 ; } } Ижил дүрслэл Ялгаатай үүрэг
  17. 17. <ul><li>Гэвч тэдгээр оюутнуудын хувьд нийтлэг ижил төстэй зүйл байхаас гадна ялгаатай онцлог талууд бас бий. Тухайлбал: Тэдгээрийн Үнэлгээний Голч Дүнг өөрөөр боддог. </li></ul><ul><ul><li>Бакалавр оюутны ҮГД 74% ба түүнээс дээш байх ёстой </li></ul></ul><ul><ul><li>Магистр оюутны ҮГД 82% ба түүнээс дээш байх ёстой </li></ul></ul><ul><ul><li>Докторантур оюутны ҮГД 50% ба түүнээс дээш байх ёстой </li></ul></ul><ul><li>Энэхүү онцлогийг тусгахын тулд isPassed() гишүүн функц нь чухал үүрэгтэй. </li></ul><ul><ul><li>This isPassed() гишүүн функц нь ялгаатай төрлийн оюутан бүрийн хувьд ялгаатайгаар хэрэгжинэ. </li></ul></ul><ul><ul><li>Удамшлын харьцаан дахь эх классын гишүүн функцыг хүү классд дахин тодорхойлогдсоныг / method override / гэнэ . </li></ul></ul><ul><ul><li>Хэрэв дахин тодорхойлогдсон гишүүн функцыг хүү классын объектод бэхэлж дуудвал хүү классын дахин тодорхойлогдсон функц дуудагдана. </li></ul></ul>Method Override - Жишээ
  18. 18. <ul><li>Бакалавр оюутан / BachelorStudent / </li></ul><ul><li>Магистр оюутан / MasterStudent / </li></ul><ul><li>Докторантур оюутан / DoctorateStudent / </li></ul><ul><ul><li>Кодын өөрчлөлт хийх шаардлагагүй . </li></ul></ul>Method Override - Жишээ public class BachelorStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 74 ; } } } public class MasterStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 82; } } }
  19. 19. <ul><li>Одоо програмынхаа үр дүнг авч үзье : </li></ul>Method Override - Жишээ public class TestClass { public static void main(String[] args) { // сургууль объектыг үүсгэе. School ktmc = new School(); ktmc.setName(&quot;KTMC&quot;); ktmc.setAddress(&quot;Sansar, Ulaanbaator, Mongolian&quot;); // зарим хичээл объектууд үүсгэе Course sw203 = new Course(&quot;SW203&quot;, &quot;Object-oriented Programming&quot;, 3); Course sw508 = new Course(&quot;SW508&quot;, &quot;Object-oriented Analysis and Design&quot;, 3); Course sw811 = new Course(&quot;SW811&quot;, &quot;Advanced Artificial Intelligence&quot;, 3); // Бакалаврын оюутан гэсэн объект үүсгэе Student bachelor = new BachelorStudent(); bachelor.setId(&quot;SW050001&quot;); bachelor.setName(&quot;Baatar&quot;); bachelor.setSchool(ktmc); bachelor.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw203)}); // Магистр оюутан гэсэн объект үүсгэе Student master = new MasterStudent(); master.setId(&quot;SW020001&quot;); master.setName(&quot;Chimgee&quot;); master.setSchool(ktmc); master.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw508)}); // Докторант оюутан гэсэн объект үүсгэе Student doctorate = new DoctorateStudent(); doctorate.setId(&quot;SW990001&quot;); doctorate.setName(&quot;Tuya&quot;); doctorate.setSchool(ktmc); doctorate.setGrades(new Grade[]{new Grade(&quot;Fall&quot;, 2006, sw811)});
  20. 20. <ul><li>Одоо кодоо шалгая ( үргэлжлэл ): </li></ul><ul><li>Програмын үр дүн : </li></ul>Method Override - Жишээ // өмнөх хуудсын үргэлжлэл … // одоо оюутандуудыг оноогоор дүгнэе // тэгээд оюутнуудыг дүгнэсэн оноо зөв олгогдсон эсэхийг шалгаж үзье. bachelor.getGrades()[0].setScore(81); System.out.println(&quot;bachelor student passed SW203? &quot; + bachelor.isPassed(sw203)); bachelor.getGrades()[0].setScore(73.9); System.out.println(&quot;bachelor student passed SW203? &quot; + bachelor.isPassed(sw203)); master.getGrades()[0].setScore(81); System.out.println(&quot;master student passed SW511? &quot; + master.isPassed(sw508)); master.getGrades()[0].setScore(87); System.out.println(&quot;master student passed SW511? &quot; + master.isPassed(sw508)); doctorate.getGrades()[0].setScore(48); System.out.println(&quot;doctorate student passed SW811? &quot; + doctorate.isPassed(sw811)); doctorate.getGrades()[0].setScore(61); System.out.println(&quot;doctorate student passed SW811? &quot; + doctorate.isPassed(sw811)); } } bachelor student passed SW203? true bachelor student passed SW203? false master student passed SW511? false master student passed SW511? true doctorate student passed SW811? false doctorate student passed SW811? false
  21. 21. Method Override – санамж <ul><li>Method Override : ОХП-ийн удамшил хэмээх ойлголттой салшгүй холбоотой бөгөөд энэ нь эх классын гишүүн функцыг хүү классд дахин тодорхойлох явдал юм. </li></ul><ul><ul><li>Хэрэв Method Override гэсэн ойлголт байхгүй бол ( эх классын гишүүн функцыг хүүд нь дахин тодорхойлох боломжгүй бол ) удамшлын харьцаан дахь хүү классууд ( бакалаврын оюутан, магистр оюутан, докторантур оюутан гэсэн классууд ) эх класс ( оюутан класс ) -аас ялгагдахгүйд хүрнэ. </li></ul></ul><ul><li>Method Override нь хүү классд дахин тодорхойлогдсон функцын дүрслэл эх классын гишүүн функцтэй адил боловч тэдгээр нь ялгаатай үүрэг гүйцэтгэнэ. </li></ul><ul><ul><li>Функцын дүрслэл: функцын нэр, параметрийн тоо болон тэдгээрийн эрэмбэ дарааг багтааж ойлгоно. </li></ul></ul>// from Student.class... public boolean isPassed(Course course) { Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() > 50; } } // from BachelorStudent.class... public boolean isPassed(Course course) { Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 74 ; } } Ижил дүрслэл Ялгаатай үүрэг
  22. 22. <ul><li>Method Override нь зөвхөн гишүүн функцын хувьд яригдана. Харин классын функцын хувьд энэ ойлголт хамаарахгүй. </li></ul><ul><ul><li>Классын функц (Class methods) нь статик түлхүүр үгээр зарлагдсан функц бөгөөд тэрээр зөвхөн тухайн классын тодорхойлолтонд хамаарах бөгөөд классын иерархид хамаарахгүй. </li></ul></ul><ul><ul><li>Гишүүн функц (Instance methods) нь классын тохиолдол ( объект ) бүрт харъяалагдах бөгөөд классын объект үүсч байж сая түүн рүү хандах боломжтой. Мөн тухайн классын хүү классаас түүнд хандах боломжтой. Түүний гүйцэтгэх үүрэгийг Method override - ийг хэрэгжүүлэх замаар өөрчлөх боломжтой. </li></ul></ul><ul><li>Method Override хэмээх ойлголт нь полиморфизмын бодит илрэл юм . </li></ul><ul><ul><li>Полиморфизм нь ОХП-ийн үндсэн суурь ойлголтуудын нэг юм. Полиморфизм нь ижил үйлдлээр ялгаатай үр дүнд хүрэх чадвар бөгөөд Method override нь удамшлын шаталсан харьцаанд ижил нэртэй, ялгаатай үүрэгтэй функцууд тодорхойлох замаар хэрэгжинэ. Ингэснээр програм илүү уян хатан, засварлах боломжтой болно. </li></ul></ul><ul><ul><li>Бид полиморфизм хэмээх ойлголтын талаар дараа илүү дэлгэрэнгүй авч үзнэ. </li></ul></ul>Method Override - Жишээ
  23. 23. Хийсвэрлэлт ийг цөөн үгээр <ul><li>Одоо асуудлын хүрээг КтМС-ийн хувьд авч үзье. </li></ul><ul><li>КтМС-д дараах 3 төрлийн оюутнууд суралцдаг. Үүнд: </li></ul><ul><ul><li>Бакалаврын оюутан / Bachelor student / </li></ul></ul><ul><ul><li>Магисрын оюутан / Master student / </li></ul></ul><ul><ul><li>Докторантурын оюутан / Doctorate student / </li></ul></ul><ul><li>Дээрх 3 класс нь дараах нийтлэг шинжүүдтэй: </li></ul><ul><ul><ul><li>Оюутны код / code / </li></ul></ul></ul><ul><ul><ul><li>Оюутны нэр / name / </li></ul></ul></ul><ul><ul><ul><li>Цуглуулсан кредит / credit / </li></ul></ul></ul><ul><ul><ul><li>Үнэлгээний Голч Дүн / GPA / </li></ul></ul></ul>Student BachelorStudent DoctorateStudent MasterStudent extends
  24. 24. Оюутан классын програмын бичлэгийг авч үзье. public class Student { String code; String name; int credit; double GPA; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int getCredit() { return credit; } public void setCredit(int credit) { this.credit = credit; } public double getGPA() { return GPA; } public void setGPA(double gpa) { GPA = gpa; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Дээр Оюутан класс тодорхойлсон байна. Оюутан классд 4 гишүүн өгөгдөл ба тэдгээрт утга олгох, тэдгээрийн утгыг авч унших mutator methods буюу setter ба getter methods -ийг тодорхойлов. Оюутан классд тухайн оюутан нь төгсөгч оюутан мөн эсэхийг шалгах үүрэгтэй isCraduator нэртэй гишүүн Функц шаардлагатай гэж үзье.
  25. 25. Оюутан классын програмын бичлэгийг авч үзье. public class Student { String code; String name; int credit; double GPA; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int getCredit() { return credit; } public void setCredit(int credit) { this.credit = credit; } public double getGPA() { return GPA; } public void setGPA(double gpa) { GPA = gpa; } public String getName() { return name; } public void setName(String name) { this.name = name; } isGraduator ( ){ ... } } Асуулт: isGraduator( ) гишүүн функцын аргумент, гүйцэтгэх үйлдэл, буцаах утга ямар байх вэ? Хариулт: Бодит амьдралын шаардлагатай уялдуулан хийсвэрлэнэ.
  26. 26. <ul><li>Бодит амьдралын шаардлагыг харгалзан үзвэл: КтМС-ийн хувьд 2,0– оос дээш Үнэлгээний Голч Дүнтэй, нийт 122-оос дээш кредит цуглуулсан оюутныг төгсөгч оюутан гэж үздэг тул isCradutaor гишүүн функцыг дараах байдлаар тодорхойлж болно. </li></ul>Оюутан классын програмын бичлэгийг авч үзье. public class Student { String code; String name; int credit; double GPA; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int getCredit() { return credit; } public void setCredit(int credit) { this.credit = credit; } public double getGPA() { return GPA; } public void setGPA(double gpa) { GPA = gpa; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isGraduator(int credit, double gpa){ if ((gpa>=2.0) && (this.credit>=122)) {return true;} else return false;} }
  27. 27. Method Override - Жишээ <ul><li>КтМС-ийн хувьд </li></ul><ul><ul><li>Бакалаврын оюутны ҮГД нь 2,0 ба түүнээс дээш, цуглуулсан кредит нь 122 ба түүнээс дээш байвал түүнийг төгсөгч оюутан гэнэ. </li></ul></ul><ul><ul><li>Магистрант оюутны ҮГД нь 3,5 ба түүнээс дээш ба цуглуулсан кредит нь 33 ба түүнээс дээш байвал түүнийг төгсөгч магистрант гэнэ. </li></ul></ul><ul><ul><li>Докторант оюутны ҮГД нь 2,5 ба түүнээс дээш цуглуулсан кредит нь 60 ба түүнээс дээш байвал түүнийг төгсөгч докторант гэнэ. </li></ul></ul><ul><li>Бодит амьдралын энэхүү шаардлагыг харгалзан үзвэл </li></ul>
  28. 28. <ul><li>Бакалавр оюутан / BachelorStudent / </li></ul><ul><ul><li>Кодын өөрчлөлт хийх шаардлагагүй . ( isCraduator() функцыг дахин тодорхойлох шаардлагагүй ) </li></ul></ul><ul><li>Магистрант оюутан / MasterStudent / </li></ul><ul><li>Докторант оюутан / DoctorateStudent / </li></ul>Method Override - Жишээ public class BachelorStudent extends Student { public boolean isGraduator(int credit, double gpa){ if ((gpa>=2.5) && (this.credit>=60)) {return true;} else return false; } } public class MasterStudent extends Student { public boolean isGraduator(int credit, double gpa){ if ((gpa>=3.5) && (this.credit>=33)) {return true;} else return false; } }
  29. 29. <ul><li>Бакалавр оюутан / BachelorStudent / </li></ul><ul><li>Магистр оюутан / MasterStudent / </li></ul><ul><li>Докторантур оюутан / DoctorateStudent / </li></ul><ul><ul><li>Кодын өөрчлөлт хийх шаардлагагүй . </li></ul></ul>Method Override - Жишээ public class BachelorStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 74 ; } } } public class MasterStudent extends Student { public boolean isPassed(Course course) { // method override Grade grade = getGrade(course); if (grade == null) { return false; } else { return grade.getScore() >= 82; } } }
  30. 30. <ul><li>Их сургуульд дараах 3 хичээл байдаг гэж үзье. Тухайлбал : </li></ul><ul><ul><li>Programming – SW203 </li></ul></ul><ul><ul><li>Mathematic – MA201 </li></ul></ul><ul><ul><li>English – EN301 </li></ul></ul><ul><li>Тэдгээр нь дараах нийтлэг шинж чанартай : </li></ul><ul><ul><li>Course Code // Хичээлийн код </li></ul></ul><ul><ul><li>Course Name //Хичээлийн нэр </li></ul></ul><ul><ul><li>Credit //Хичээлийн кредит </li></ul></ul><ul><ul><li>Instructor // Хичээл заах багш </li></ul></ul><ul><li>Тэдний нийтлэг шинжид үндэслэн тэдгээрийн эх классыг тодорхойлж болно. </li></ul><ul><ul><li>Тэгвэл Эх класс нь дараах 4 гишүүн өгөгдөлтэй : </li></ul></ul><ul><ul><ul><ul><li>private String code; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>private String name; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>private int credit; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>private Teacher teacher; </li></ul></ul></ul></ul>Constructor override- Жишээ
  31. 31. <ul><li>Эх класс – Course( хичээл ) </li></ul>Constructor override- Жишээ public class Course { private String code; private String name; private int credit; private Teacher teacher; public Course(String id, String name, int credit) { this.code = id; this.name = name; this.credit = credit; } public int getCredit() { return credit; } public String getCode() { return code; } public String getName() { return name; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } } Байгуулагч функц Гишүүн өгөгдөл Классын нэр
  32. 32. <ul><li>Хичээл классд түүний гишүүн өгөгдөл ( хичээлийн код, хичээлийн нэр, хичээлийн нэр ) -үүдэд утга олгох үүрэгтэй нэг байгуулагч функц тодорхойогдсон байна. </li></ul><ul><li>Бид тэрхүү эх классыг өргөтгөн бусад төрлийн хичээлийг үүсгэж болно. </li></ul><ul><ul><li>Удамшлын харьцаан дахь хүү классын объект үүсэх үед түүний эх классын байгуулагч функцыг дуудах ёстой. Тэгэхдээ super түлхүүр үгийг ашигладаг. Хэрэв эх классын байгуулагч функц аргумент шаарддаг бол түүнийг хүү классын байгуулагч функц хангаж өгөх ёстой. </li></ul></ul>Constructor override- Жишээ public class ProgrammingCourse extends Course { public ProgrammingCourse() { super(&quot;SW203&quot;, &quot;Programming Course&quot;, 3); } } public class ProgrammingCourse extends Course { public ProgrammingCourse(String id, String name, int credit) { super(id, name, credit); } } Жишээ 1 Жишээ 2
  33. 33. <ul><li>Жишээ 2 ( өмнөх хуудасны ) -г дэлгэрэнгүй авч үзье. Энд эх классын байгуулагч функцыг хүү классд дахин тодорхойлсон байна. </li></ul><ul><li>Байгуулагч функцыг дахин тодорхойлох үед , хүү классын байгуулагч функцын хамгийн эхэнд эх классын байгуулагч функцыг дуудах ёстой. Харин дараа нь код нэмж бичиж болно. </li></ul>Constructor override- Жишээ public class Course { private String code; private String name; private int credit; private Teacher teacher; public Course(String id, String name, int credit) { this.code = id; this.name = name; this.credit = credit; } ... ... ... } public class ProgrammingCourse extends Course { public ProgrammingCourse(String id, String name, int credit) { super(id, name, credit); } } Ижил дүрслэл
  34. 34. <ul><li>Их сургуулийн хичээлүүд нь лекцээс гадна лаборатор эсвэл семинарийн цагуудтай байдаг. Тухайлбал: Прорамчлалын хичээл лекц лаборатортой байхад математикийн хичээл лекц семинартай байдаг. </li></ul><ul><li>Жишээ нь манай тохиолдолд : </li></ul><ul><ul><li>Programming – SW203 лекц бүр 1 лабораторитой </li></ul></ul><ul><ul><li>Mathematic – MA201 лекц бүр 2 лабораторитой </li></ul></ul><ul><ul><li>English – FL350 нь хэд хэдэн семинартай байдаг. </li></ul></ul><ul><ul><li>Хичээл классын объект үүсэх үед түүнд харгалзах цагуудыг үүсгэе. </li></ul></ul>Constructor override- Жишээ
  35. 35. <ul><li>Тэдгээр классуудыг үүсгэхийн тулд бид байгуулагч функцыг дахин тодорхойлох (Constructor Override) техникийг ашиглая. </li></ul>Constructor override- Жишээ public class ProgrammingCourse extends LeadingLecture { public ProgrammingCourse(String id, String name, int credit) { super(id, name, credit); this.sessions = new AccompanyingSession[1]; this.sessions[0] = new Laboratory(this, id, name + &quot; Laboratory&quot;); } } Эх классын байгуулагчийг дуудах мөр хамгийн эхэнд байна. Бусад кодыг дараа нь нэмж бичиж болно.
  36. 36. <ul><li>Бид янз бүрийн хэлбэр бүхий хичээлүүдийг хооронд нь ялгаж салгахын тулд шинэ иерархи үүсгэсэн . </li></ul>Constructor override- Жишээ public class LeadingLecture extends Course { protected AccompanyingSession[] sessions; public LeadingLecture(String id, String name, int credit) { super(id, name, credit); } public AccompanyingSession[] getSessions() { return sessions; } } public class AccompanyingSession extends Course { private LeadingLecture lecture; /** дагалдах цагууд нь кредитгүй */ public AccompanyingSession(LeadingLecture lecture, String id, String name) { super(id, name, 0); // Кредитгүй this.lecture = lecture; System.out.println (&quot;created accompanying session for &quot; + name); } public LeadingLecture getLecture() { return lecture; } } public class Seminar extends AccompanyingSession { public Seminar(LeadingLecture lecture, String id, String name) { super(lecture, id, name); } } public class Laboratory extends AccompanyingSession { public Laboratory(LeadingLecture lecture, String id, String name) { super(lecture, id, name); }}
  37. 37. <ul><li>Бичсэн кодоо тэстлэх програм бичье : </li></ul><ul><li>Үр дүн : </li></ul>Constructor override- Жишээ public class TestClass { public static void main(String[] args) { System.out.println(&quot;Creating SW203...&quot;); Course SW203 = new ProgrammingCourse(&quot;SW203&quot;, &quot;Object-oriented Programming&quot;, 3); System.out.println(); System.out.println(&quot;Creating MA201...&quot;); Course MA201 = new MathCourse(&quot;MA201&quot;, &quot;Algebra II&quot;, 3); System.out.println(); System.out.println(&quot;Creating FL350...&quot;); Course EN350 = new LanguageCourse(“FL350&quot;, &quot;Business English II&quot;, 4); } } Creating SW203... created accompanying session for Object-oriented Programming Laboratory Creating MA201... Creating FL350... created accompanying session for Business English II Seminar I created accompanying session for Business English II Seminar II
  38. 38. Boat() Gette r functions & Setter functions tellAboutSelf() StateRegistrationNo Length Manufacturer Year Boat Sail Boat() Gette r functions & Setter functions tellAboutSelf() keelDepth numberSails motorType Sailboat Power Boat() Gette r functions & Setter functions tellAboutSelf() numberOfEngines fuelType PowerBoat

×