Sw203 Lecture9 Encapsulation

1,063 views
954 views

Published on

Encapsulation

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,063
On SlideShare
0
From Embeds
0
Number of Embeds
152
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Sw203 Lecture9 Encapsulation

  1. 1. Объект хандлагат програмчлалын хэл Java Хичээл : CS203 Багш : Д.Энхжаргал Mongolia University of Science & Technology Лекц: Encapsulation
  2. 2. Encapsulation <ul><li>Encapsulation нь Объект Хандлагат Технологийн тулгын 3 чулуу </li></ul><ul><li>болсон ойлголтын нэг. Encapsulation , Inheritance, Polymorphism </li></ul><ul><li>En capsul ation : үгийн бүтцийг задлан шинжилж үзвэл </li></ul><ul><ul><li>capsul - нь аливаа зүйлийн гадна талын бүрхүүл, баглаа </li></ul></ul><ul><ul><li>en - гэдгийг put буюу хийх, нэгтгэх гэдэг утгаар ойлгоно </li></ul></ul><ul><ul><li>ation - гэдэг нь нэр үг үүсгэж байгаа хэлбэр. Ингээд </li></ul></ul><ul><li>Тодорхойлолт: Encapsulation гэдэг бол тухайн объектод </li></ul><ul><li>шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц </li></ul><ul><li>юм. Үүнд: </li></ul><ul><ul><li>Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудыг нэг капсулд </li></ul></ul><ul><li>хийх. </li></ul><ul><ul><li>Далдлах: Объектын дотоод бүтцийг далдлах. Java хэлэнд private </li></ul></ul><ul><li>хандалтын тусламжтай өгөгдлийн далдлалтыг хэрэгжүүлдэг. </li></ul>
  3. 3. Encapsulation <ul><li>En capsul ation : Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц юм. </li></ul><ul><ul><li>Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудын нэг капсулд хийх. </li></ul></ul><ul><ul><li>Далдлах: Объектын дотоод бүтцийг далдлах. Java хэлэнд private хандалтын тусламжтай өгөгдлийн далдлалтыг хэрэгжүүлдэг. </li></ul></ul>Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд Computer Processor speed RAM Use(); Buy();
  4. 4. Student_name, Salary, GPA, Course_number, Teacher_name, Student_code, Room_number … Method Choose_lesson, Give_lecture, Pay_payment Do_homework Get_salary … Data En capsul ation (1- Нэгтгэх ) Object 1 Data Method Object 2 Data Method Object 3 Data Method
  5. 5. STUDENT TEACHER Student_code Student_name GPA Course_number Teacher_name Salary Room_number Choose_lesson Pay_payment Do_homework Give_lecture Get_salary Encapsulation ( 2- Далдлах ) <ul><ul><li>ОХП хэлний ӨХТөрөлд өгөгдлийн далдлалтыг хэрэгжүүлэх боломжтой болсноор Классыг хар хайрцаг (black box)- ны шинж чанартай болгож өгдөг. </li></ul></ul>
  6. 6. Объектын бие даасан байдал Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд <ul><li>Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах замаар Encapsulation хэмээх ойлголтыг хэрэгжүүлсэнээр объектын бие даасан байдал хангагддаг. </li></ul><ul><li>Учир нь бүтцийн програмчлалд өгөгдөл болон тэдгээрийг боловсруулах үйлдлүүд ( функцууд ) нь тус тусдаа ойлголт байсан бол ОХП-д тэдгээрийг нэгтгэн нэг капсулд хийж өгсөнөөр объект нь өөрийнхөө гишүүн функцын тусламжтай “өөрөө өөрийгөө боловсруулах чадвартай” болно. </li></ul><ul><li>ОХП-д “Гадаад холбоо сул, дотоод холбоо хүчтэй” байх зарчим үйлчилдэг. </li></ul>Computer Processor speed RAM Use(); Buy();
  7. 7. Объектын бие даасан байдал буюу өөрийгөө боловсруулах чадвар Улс Арьс шир Мал Мод Газрын баялаг … ГазрынБаялагБоловсруулах () ТүүхийЭдБоловсруулах () БайгалийнБаялагБоловсруулах () ТусгаарТогтнох () … Жишээ нь:
  8. 8. Уламжлалт аргачлал Объект хандлагат аргачлал Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
  9. 9. Уламжлалт аргачлал Объект хандлагат аргачлал Нэгтгэхэд т¿вэгтэй Нэгтгэхэд хялбар Encapsulation: Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
  10. 10. Encapsulation <ul><ul><li>ОХП – д Enacapsulation хэмээх ойлголт нь объектын дотоод бүтцийг програмаас далдлахад онцгой үүрэг гүйцэтгэдэг. </li></ul></ul><ul><ul><li>Объектод хандахийн тулд сайтар шалгагдсан, аюулгүй ажиллагаатай гишүүн функцээр нь дамжуулж хандана. </li></ul></ul><ul><ul><li>Enacapsulation нь объектыг ингэж хар хайрцагийн шинж чанартай болгодог тул тэрхүү хар хайрцаг руу хандах зарим гадаад хэсгүүд ( нийтийн хандалттай функцууд ) байх шаардлагатай бөгөөд хэрэглэгч тэдгээр гадаад хэсгүүдээр дамжуулан объектыг хялбархан ашиглах боломжтой болно гэсэн үг. </li></ul></ul><ul><ul><li>Жишээ нь: TV –ийг авч үзье. Үнэндээ TV –ийн дотоод эд ангиуд болон тэдгээрийн үйл ажиллагааг үзэгчид мэдэхгүйгээр түүний удирдлагаар ( гадаад товчлууруудаар ) TV –ийг хялбархан удирдаж өөрийн зорилгодоо ашигладаг билээ. Тэдгээр товчлууруудыг заримдаа хэрэглэгчийн interface ч гэж нэрлэх нь бий. Тэгвэл ОХП-д ч гэсэн аливаа объектыг хялбар аргаар ашиглахын тул interface -ийг хэрэгжүүлдэг. Харин объектын дотоод хэсгүүд нь далдлагдсан байна. </li></ul></ul>
  11. 11. <ul><li>Програмчлалд энэхүү ойлголтыг ашигласнаар Програм хангамж нь </li></ul><ul><ul><ul><ul><li>Security : Учир нь битүүмжлэл нь өгөгдлийн далдлалтыг (Data hiding)- ийг хэрэгжүүлдэг. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Stable : Шаардлагатай нэмэлт өөрчлөлт нь нийт системийн үйл ажиллагаанд нөлөөлөх нөлөөлөл бага байх чанар юм. /Энэ тухай дараагийн хуудсанд үзүүлсэн жишээн дээр тодорхой авч үзэх болно./ </li></ul></ul></ul></ul>Encapsulation
  12. 12. Нэмэлт уншилга Дараах жишээ кодонд хэрэгжүүлсэн бидний хараахан үзээгүй шинэ ойлголтуудад тухай бүрт нь товч тодорхой тайлбар хийсэн. Гол нь энэхүү жишээ кодоор Encapsulation хэмээх ойлголт нь програмын тогтвортой байдлыг хэрхэн хангадагийг харуулахыг зорьсон болно.
  13. 13. Encapsulation - Жишээ <ul><li>Их сургууль нь улирал бүр оюутны дараах төрлийн тайлангуудыг гаргадаг. </li></ul><ul><ul><ul><li>Консол апликэшнд зориулсан текстэд суурилсан тайлан (Text based report) </li></ul></ul></ul><ul><ul><ul><li>Хүснэгтэн хэлбэрийн апликэшнд зориулсан тайлан (CSV based report) </li></ul></ul></ul><ul><ul><ul><li>Вэбэд суурилсан апликэшнд зориулсан тайлан (HTML based report) </li></ul></ul></ul><ul><ul><ul><li>Нэгтгэлд зориулсан тайлан (XML based report) </li></ul></ul></ul><ul><li>Цаг хугацааны шаардлагаар аливаа програмыг өөрчлөн, засварлах шаардлага урган гардаг. Тэгэхдээ програмд оруулсан жижиг нэмэлт, өөрчлөлт нь аль болох нийт системд нөлөөлөх нөлөөлөл бага байвал сайн. Энэхүү шаардлагын улмаас encapsulation хэмээх ойлголтыг програмчлалд хэрэгжүүлэх нь зүйтэй. </li></ul><ul><ul><li>Цаашид цаг үеийн шаардлагаар тэдгээр тайлангуудад агуулгын болон форматын өөрчлөлт хийх боломжтой байх шаардлагатай . Тухайлбал, тайлангийн толгойн мэдээллийг өөрчлөх, форматыг нь өөрчилж Bold болгох... </li></ul></ul><ul><li>Алхам #1: Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох </li></ul><ul><ul><li>Алхам #2: Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих </li></ul></ul><ul><ul><li>Алхам #3: Шаардлагатай тайлан үүсгэгч (generator)- ийг хэрэгжүүлэх </li></ul></ul><ul><ul><li>Дээрх алхмуудыг зөв хэрэгжүүлэхийн тулд клиент код нь ямар ч нөхцөлд илүү тогтвортой (stable) байх болно. </li></ul></ul>
  14. 14. Encapsulation - Жишээ <ul><li>Алхам #1: Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох </li></ul><ul><ul><li>Бидний үүсгэх хэд хэдэн төрлийн тайлангуудын нийтлэг тал гэвэл тэдгээр нь дараах хэлбэрийн хийсвэрлэл (interface)- ийг ашигладаг ( хэрэгжүүлдэг ) </li></ul></ul><ul><li>Алхам #2: Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих </li></ul><ul><ul><li>Бид тайлан үүсгэхэд шаардлагатай зарим өгөгдлүүдийг үүсгэх клиент кодыг бичнэ. </li></ul></ul><ul><ul><ul><li>School төрлийн объект </li></ul></ul></ul><ul><ul><ul><li>Course төрлийн объектуудын жагсаалт </li></ul></ul></ul><ul><ul><ul><li>Student төрлийн объектуудын жагсаалт </li></ul></ul></ul>public interface CourseReporter { void setOutputPath (String path); void setTitle (String title); void generateReport (List students) throws IOException; }
  15. 15. Encapsulation - Жишээ <ul><li>ReportTestClass </li></ul>public class ReportTestClass { // тестлэх өгөгдлүүд .. private static School testSchool ; private static Course sw201 = new ProgrammingCourse(&quot;SW201&quot;, &quot;Introduction to Algorithm&quot;, 3); private static Course sw202 = new ProgrammingCourse(&quot;SW202&quot;, &quot;Introduction to Programming&quot;, 3); private static Course sw203 = new ProgrammingCourse(&quot;SW203&quot;, &quot;Object-oriented Programming&quot;, 3); private static Course sw204 = new ProgrammingCourse(&quot;SW204&quot;, &quot;Data Structure&quot;, 3); private static Course sw305 = new ProgrammingCourse(&quot;SW305&quot;, &quot;Collaborative Team Programming&quot;, 3); private static Course sw503 = new ProgrammingCourse(&quot;SW503&quot;, &quot;Project Management&quot;, 3); private static Course sw508 = new ProgrammingCourse(&quot;SW508&quot;, &quot;Object-oriented Analysis and Design&quot;, 3); private static Course sw511 = new ProgrammingCourse(&quot;SW511&quot;, &quot;E-business Programming&quot;, 3); private static Course ma201 = new MathCourse(&quot;MA201&quot;, &quot;Algebra I&quot;, 3); private static Course ma202 = new MathCourse(&quot;MA202&quot;, &quot;Algebra II&quot;, 3); private static Course ma203 = new MathCourse(&quot;MA203&quot;, &quot;Trigonometry&quot;, 3); private static Course ma204 = new MathCourse(&quot;MA204&quot;, &quot;Finite Mathematics&quot;,3); private static Course ma205 = new MathCourse(&quot;MA205&quot;, &quot;Calculus I&quot;, 3); private static Course ma206 = new MathCourse(&quot;MA206&quot;, &quot;Calculus II&quot;, 3); // Үргэлжлэл нь дараагийн хуудсанд
  16. 16. Encapsulation - Жишээ <ul><li>ReportTestClass ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл private static Course en101 = new LanguageCourse(&quot;EN101&quot;, &quot;English I&quot;, 4); private static Course en201 = new LanguageCourse(&quot;EN201&quot;, &quot;English II&quot;, 4); private static Course en301 = new LanguageCourse(&quot;EN301&quot;, &quot;Writing English I&quot;, 4); private static Course en302 = new LanguageCourse(&quot;EN302&quot;, &quot;Writing English II&quot;, 4); private static Course en501 = new LanguageCourse(&quot;EN501&quot;, &quot;Business English&quot;, 4); private static Course en502 = new LanguageCourse(&quot;EN502&quot;, &quot;Advanced English&quot;, 4); private static Course en503 = new LanguageCourse(&quot;EN503&quot;, &quot;Technical English&quot;, 4); private static Student createStudent (String name, String id, School school) { Student s1 = new BachelorStudent(); s1.setName(name); s1.setId(id); s1.setSchool(school); return s1; } private static Grade createGrade (Course course) { return new Grade(&quot;Fall&quot;, 2006, course); } public static void main (String[] args) throws Throwable { // Үргэлжлэл нь дараагийн хуудсанд
  17. 17. Encapsulation - Жишээ <ul><li>ReportTestClass ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл // school объект үүсгэх testSchool = new School(); testSchool.setName(&quot;KTMC&quot;); testSchool.setAddress(&quot;Sansar, Ulaanbaatar, Mongolia&quot;); // create test student objects... Student s1 = createStudent(&quot;John Smith&quot;, &quot;SW03E001&quot;, testSchool); s1.setGrades(new Grade[]{createGrade(sw201), createGrade(ma201), createGrade(en101)}); Student s2 = createStudent(&quot;James Baker&quot;, &quot;SW02E109&quot;, testSchool); s2.setGrades(new Grade[]{createGrade(sw204), createGrade(sw305), createGrade(ma202), createGrade(ma203), createGrade(ma204), createGrade(en201)}); Student s3 = createStudent(&quot;Jonna Simpson&quot;, &quot;IM04E401&quot;, testSchool); s3.setGrades(new Grade[]{createGrade(sw305), createGrade(sw204), createGrade(sw203), createGrade(ma202), createGrade(ma203), createGrade(ma205), createGrade(en201), createGrade(en301)}); // үргэлжлэл дараагийн хуудсанд
  18. 18. Encapsulation - Жишээ <ul><li>ReportTestClass ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл Student s4 = createStudent(&quot;Jimmy Bubba&quot;, &quot;SW02F059&quot;, testSchool); s4.setGrades(new Grade[]{createGrade(sw503), createGrade(sw508), createGrade(sw511), createGrade(en501), createGrade(en502), createGrade(en503)}); Student s5 = createStudent(&quot;Jenny Kursten&quot;, &quot;MG02E002&quot;, testSchool); s5.setGrades(new Grade[]{createGrade(ma205), createGrade(ma206), createGrade(en501), createGrade(en502), createGrade(en503)}); Student s6 = createStudent(&quot;Jamison Lincohn&quot;, &quot;MG02E108&quot;, testSchool); s6.setGrades(new Grade[]{createGrade(sw503), createGrade(ma204), createGrade(ma205), createGrade(ma206), createGrade(en501), createGrade(en502)}); Student s7 = createStudent(&quot;Joni Blanc&quot;, &quot;IM03G013&quot;, testSchool); s7.setGrades(new Grade[]{createGrade(sw305), createGrade(sw503), createGrade(ma206), createGrade(en501), createGrade(en503)}); // Үргэлжлэл дараагийн хуудсанд
  19. 19. Encapsulation - Жишээ <ul><li>ReportTestClass ( Үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл Student s8 = createStudent(&quot;Jake Hound&quot;, &quot;IM03M117&quot;, testSchool); s8.setGrades(new Grade[]{createGrade(sw203), createGrade(sw204), createGrade(sw305), createGrade(ma201), createGrade(ma202), createGrade(ma203), createGrade(en101), createGrade(en301)}); Student s9 = createStudent(&quot;Jeremy Kim&quot;, &quot;SW04E096&quot;, testSchool); s9.setGrades(new Grade[]{createGrade(sw202), createGrade(ma202), createGrade(ma203), createGrade(en201), createGrade(en302)}); Student s10 = createStudent(&quot;Jessica Jewels&quot;, &quot;MG05E110&quot;, testSchool); s10.setGrades(new Grade[]{createGrade(sw203), createGrade(sw204), createGrade(sw305), createGrade(ma204), createGrade(ma205), createGrade(en301), createGrade(en501)}); // тайлан гаргах зорилгоор оюутан классын объектуудыг жагсаалтад нэмэх List students = new ArrayList(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); students.add(s5); students.add(s6); students.add(s7); students.add(s8); students.add(s9); students.add(s10); // Үргэлжлэл дараагийн хуудсанд
  20. 20. Encapsulation - Жишээ <ul><li>ReportTestClass ( Үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл // тайлан объект үүсгэх CourseReporter reporter = new CourseTextReporter(); // Тайлангийн толгой болон байрлах байрлалыг тогтоох reporter.setOutputPath(&quot;c:/temp&quot;); reporter.setTitle(&quot;Fall 2006 Course Registration&quot;); // Тайлан гаргах reporter.generateReport(students); } } // үргэлжлэл дараагийн хуудсанд
  21. 21. Encapsulation - Жишээ <ul><li>Алхам #3: Шаардлагатай тайлан үүсгэгчийг хэрэгжүүлэх </li></ul><ul><ul><li>Өмнөх алхамуудаар бид тайлан гаргагч буюу report generator хэмээх интерфейс болон түүнийг шалгах клиент кодыг үүсгэсэн. Харин одоо тэрхүү интерфейсийг хэрхэн хэрэгжүүлэхийг авч үзье. </li></ul></ul><ul><ul><li>Өмнө хэлсэнчилэн бид тайлангийн олон хэлбэрийг ашиглаж болно. Тэгвэл одоо текстэд суурилсан, хүснэгтэд суурилсан, HTML хуудсанд суурилсан тайлангуудыг үүсгэе. </li></ul></ul><ul><ul><ul><li>CourseTextReporter – Текстэд суурилсан тайлан </li></ul></ul></ul><ul><ul><ul><li>CourseCsvReporter – Хүснэгтэд суурилсан тайлан </li></ul></ul></ul><ul><ul><ul><li>CourseHtmlReporter – Вэбэд суурилсан тайлан </li></ul></ul></ul>
  22. 22. Encapsulation - Жишээ <ul><li>CourseTextReport </li></ul>public class CourseTextReporter implements CourseReporter { private String outputPath; private String title; public void setOutputPath (String outputPath) { this.outputPath = outputPath; } public void setTitle (String title) { this.title = title; } public void generateReport (List students) throws IOException { StringBuffer buffer = new StringBuffer(); buffer.append(&quot;================================================== &quot;); buffer.append(title).append(&quot; &quot;); buffer.append(&quot;================================================== &quot;); buffer.append(&quot;==Course Report=================================== &quot;); // Үргэлжлэл нь дараагийн хуудсанд
  23. 23. Encapsulation - Жишээ <ul><li>CourseTextReport ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered. &quot;); } else { for (int i = 0; i < students.size(); i++) { Student student = (Student) students.get(i); buffer.append(&quot;----------------------------------------&quot;).append( student.getId()).append(&quot;-- &quot;); buffer.append(&quot; Name: &quot;).append(student.getName()).append(&quot; &quot;); buffer.append(&quot; Courses: &quot;); Grade[] grades = student.getGrades(); for (int j = 0; j < grades.length; j++) { Grade grade = grades[j]; if (j != 0) { buffer.append(&quot; &quot;); } buffer.append(grade.getCourse().getCode()).append(&quot; - &quot;).append( grade.getCourse().getName()); buffer.append(&quot; &quot;); } buffer.append(&quot;.................................................. &quot;); } } buffer.append(&quot;==End of Report=================================== &quot;); FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.txt&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
  24. 24. Encapsulation - Жишээ <ul><li>CourseTextReport -ийн үр дүн </li></ul>================================================== Fall 2006 Course Registration ================================================== ==Course Report=================================== ----------------------------------------SW03E001-- Name: John Smith Courses: SW201 - Introduction to Algorithm MA201 - Algebra I EN101 - English I .................................................. ----------------------------------------SW02E109-- Name: James Baker Courses: SW204 - Data Structure SW305 - Collaborative Team Programming MA202 - Algebra II MA203 - Trigonometry MA204 - Finite Mathematics EN201 - English II .................................................. ----------------------------------------IM04E401-- Name: Jonna Simpson Courses: SW305 - Collaborative Team Programming SW204 - Data Structure SW203 - Object-oriented Programming MA202 - Algebra II MA203 - Trigonometry MA205 - Calculus I EN201 - English II EN301 - Writing English I .................................................. ----------------------------------------SW02F059-- Name: Jimmy Bubba Courses: SW503 - Project Management SW508 - Object-oriented Analysis and Design SW511 - E-business Programming EN501 - Business English ... ... ... ... ... ... ----------------------------------------SW04E096-- Name: Jeremy Kim Courses: SW202 - Introduction to Programming MA202 - Algebra II MA203 - Trigonometry EN201 - English II EN302 - Writing English II .................................................. ----------------------------------------MG05E110-- Name: Jessica Jewels Courses: SW203 - Object-oriented Programming SW204 - Data Structure SW305 - Collaborative Team Programming MA204 - Finite Mathematics MA205 - Calculus I EN301 - Writing English I EN501 - Business English .................................................. ==End of Report===================================
  25. 25. Encapsulation - Жишээ <ul><li>CourseCsvReport </li></ul>public class CourseCsvReporter implements CourseReporter { private String outputPath; private String title; public void setOutputPath (String outputPath) { this.outputPath = outputPath; } public void setTitle (String title) { this.title = title; } public void generateReport (List students) throws IOException { StringBuffer buffer = new StringBuffer(); buffer.append(title).append(&quot; &quot;); // column header buffer.append(&quot;student_id,student_name,&quot;); buffer.append(&quot;course1_code,course1_name,&quot;); buffer.append(&quot;course2_code,course2_name,&quot;); buffer.append(&quot;course3_code,course3_name,&quot;); buffer.append(&quot;course4_code,course4_name,&quot;); buffer.append(&quot;course5_code,course5_name,&quot;); buffer.append(&quot;course6_code,course6_name,&quot;); buffer.append(&quot;course7_code,course7_name,&quot;); buffer.append(&quot;course8_code,course8_name,&quot;); buffer.append(&quot;course9_code,course9_name,&quot;); buffer.append(&quot;course10_code,course10_name&quot;); buffer.append(&quot; &quot;); // Үргэлжлэл дараагийн хуудсанд
  26. 26. Encapsulation - Жишээ <ul><li>CourseCsvReport ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered. &quot;); } else { for (int i = 0; i < students.size(); i++) { Student student = (Student) students.get(i); buffer.append(student.getId()).append(&quot;,&quot;); buffer.append(student.getName()).append(&quot;,&quot;); Grade[] grades = student.getGrades(); for (int j = 0; j < 10; j++) { // maximum 10 courses per student if (j >= grades.length) { buffer.append(&quot;,,&quot;); } else { Grade grade = grades[j]; buffer.append(grade.getCourse().getCode()).append(&quot;,&quot;); buffer.append(grade.getCourse().getName()).append(&quot;,&quot;); } } buffer.append(&quot; &quot;); } } FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.csv&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
  27. 27. Encapsulation - Жишээ <ul><li>CourseCsvReport -ийн үр дүн </li></ul>
  28. 28. Encapsulation - Жишээ <ul><li>CourseHtmlReport </li></ul>public class CourseHtmlReporter implements CourseReporter { private String outputPath; private String title; public void setOutputPath (String outputPath) { this.outputPath = outputPath; } public void setTitle (String title) { this.title = title; } public void generateReport (List students) throws IOException { StringBuffer buffer = new StringBuffer(); buffer.append(&quot;<html>&quot;); buffer.append(&quot;<head>&quot;); buffer.append(&quot;<title>&quot;).append(title).append(&quot;</title>&quot;); buffer.append( &quot;<link rel='stylesheet' type='text/css' media='all' href='style.css'/>&quot;); buffer.append(&quot;</head>&quot;); buffer.append(&quot;<body>&quot;); buffer.append(&quot;<h1>&quot;).append(title).append(&quot;</h1>&quot;); buffer.append(&quot;<h2>Course Report</h2>&quot;); buffer.append(&quot;<hr>&quot;); // Үргэлжлэл дараагийн хуудсанд
  29. 29. Encapsulation - Жишээ <ul><li>CourseHtmlReport ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append( &quot;<center><div class='no_student'>No students currently registered.</div></center>&quot;); } else { buffer.append(&quot;<div style='report'><center>&quot;); for (int i = 0; i < students.size(); i++) { Student student = (Student) students.get(i); buffer.append(&quot;<table border='1'>&quot;); buffer.append(&quot;<tr>&quot;); buffer.append(&quot;<th>&quot;).append(student.getId()).append(&quot;</th>&quot;); buffer.append(&quot;<td>&quot;).append(student.getName()).append(&quot;</td>&quot;); buffer.append(&quot;</tr>&quot;); buffer.append(&quot;<tr>&quot;); buffer.append(&quot;<td colspan='2'>&quot;); buffer.append(&quot;<table border='0' class='courses'>&quot;); Grade[] grades = student.getGrades(); for (int j = 0; j < grades.length; j++) { Course course = grades[j].getCourse(); buffer.append(&quot;<tr>&quot;); buffer.append(&quot;<th>&quot;).append(course.getCode()).append(&quot;</th>&quot;); buffer.append(&quot;<td>&quot;).append(course.getName()).append(&quot;</td>&quot;); buffer.append(&quot;</tr>&quot;); } // Үргэлжлэл дараагийн хуудсанд
  30. 30. Encapsulation - Жишээ <ul><li>CourseHtmlReport ( үргэлжлэл ) </li></ul>// Өмнөх хуудсын үр дүн buffer.append(&quot;</table>&quot;); buffer.append(&quot;</td>&quot;); buffer.append(&quot;</tr>&quot;); buffer.append(&quot;</table&quot;); } buffer.append(&quot;</center></div>&quot;); } buffer.append(&quot;<hr>&quot;); buffer.append(&quot;<br>&quot;); // add footer Date currentDate = new Date(); DateFormat format = new SimpleDateFormat(&quot;yyyy.MM.dd hh:mm:ss&quot;); String rightNow = format.format(currentDate); buffer.append( &quot;<div class='footer'>Powered by SW203 Report Generator - Generated on &quot;); buffer.append(rightNow); buffer.append(&quot;</div>&quot;); buffer.append(&quot;<br>&quot;); buffer.append(&quot;</body>&quot;); buffer.append(&quot;</html>&quot;); FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.html&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
  31. 31. Encapsulation - Жишээ <ul><li>CourseHtmlReport -ийн үр дүн </li></ul>

×