Объект хандлагат  програмчлалын хэл  Java Хичээл :  CS203 Багш :   Д.Энхжаргал   Mongolia University of Science & Technology Лекц:   Encapsulation
Encapsulation Encapsulation   нь Объект Хандлагат Технологийн тулгын 3 чулуу болсон ойлголтын нэг.  Encapsulation , Inheritance, Polymorphism En capsul ation :  үгийн бүтцийг задлан шинжилж үзвэл  capsul -   нь аливаа зүйлийн гадна талын бүрхүүл, баглаа en - гэдгийг  put  буюу хийх, нэгтгэх гэдэг утгаар ойлгоно ation - гэдэг нь нэр үг үүсгэж байгаа хэлбэр. Ингээд Тодорхойлолт:  Encapsulation  гэдэг бол   тухайн объектод  шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц юм. Үүнд: Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудыг нэг капсулд  хийх. Далдлах: Объектын дотоод бүтцийг далдлах.  Java  хэлэнд  private хандалтын тусламжтай өгөгдлийн далдлалтыг хэрэгжүүлдэг.
Encapsulation En capsul ation :   Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц юм. Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудын нэг капсулд хийх. Далдлах: Объектын дотоод бүтцийг далдлах.  Java  хэлэнд  private  хандалтын тусламжтай өгөгдлийн далдлалтыг  хэрэгжүүлдэг. Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд Computer Processor speed RAM Use(); Buy();
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
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-   Далдлах ) ОХП хэлний ӨХТөрөлд өгөгдлийн далдлалтыг хэрэгжүүлэх боломжтой болсноор Классыг хар хайрцаг  (black box)- ны шинж чанартай болгож өгдөг.
Объектын бие даасан байдал Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах замаар  Encapsulation  хэмээх ойлголтыг хэрэгжүүлсэнээр   объектын бие даасан байдал хангагддаг. Учир нь бүтцийн програмчлалд өгөгдөл болон тэдгээрийг боловсруулах үйлдлүүд  ( функцууд )  нь тус тусдаа ойлголт байсан бол ОХП-д тэдгээрийг нэгтгэн нэг капсулд хийж өгсөнөөр объект нь өөрийнхөө гишүүн функцын тусламжтай “өөрөө өөрийгөө боловсруулах чадвартай” болно.   ОХП-д “Гадаад холбоо сул, дотоод холбоо хүчтэй” байх зарчим үйлчилдэг. Computer Processor speed RAM Use(); Buy();
Объектын бие даасан байдал   буюу өөрийгөө боловсруулах чадвар Улс  Арьс шир Мал Мод Газрын баялаг  … ГазрынБаялагБоловсруулах () ТүүхийЭдБоловсруулах () БайгалийнБаялагБоловсруулах () ТусгаарТогтнох () … Жишээ нь:
Уламжлалт аргачлал Объект хандлагат аргачлал Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
Уламжлалт аргачлал Объект хандлагат аргачлал Нэгтгэхэд т¿вэгтэй Нэгтгэхэд хялбар Encapsulation:  Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
Encapsulation ОХП  – д  Enacapsulation  хэмээх ойлголт нь объектын дотоод бүтцийг програмаас далдлахад онцгой үүрэг гүйцэтгэдэг. Объектод хандахийн тулд сайтар шалгагдсан, аюулгүй ажиллагаатай гишүүн функцээр нь дамжуулж хандана. Enacapsulation  нь объектыг ингэж хар хайрцагийн шинж чанартай болгодог тул тэрхүү хар хайрцаг руу хандах зарим гадаад хэсгүүд  ( нийтийн хандалттай функцууд )  байх шаардлагатай бөгөөд хэрэглэгч тэдгээр гадаад хэсгүүдээр дамжуулан объектыг хялбархан ашиглах боломжтой болно гэсэн үг. Жишээ нь:  TV  –ийг авч үзье. Үнэндээ  TV  –ийн дотоод эд ангиуд болон тэдгээрийн үйл ажиллагааг үзэгчид мэдэхгүйгээр түүний удирдлагаар  ( гадаад товчлууруудаар  )   TV  –ийг хялбархан удирдаж өөрийн зорилгодоо ашигладаг билээ. Тэдгээр товчлууруудыг заримдаа хэрэглэгчийн  interface  ч гэж нэрлэх нь бий. Тэгвэл ОХП-д ч гэсэн аливаа объектыг хялбар аргаар ашиглахын тул  interface -ийг хэрэгжүүлдэг.  Харин объектын дотоод хэсгүүд нь далдлагдсан байна.
Програмчлалд энэхүү ойлголтыг ашигласнаар   Програм хангамж нь Security :  Учир нь битүүмжлэл нь өгөгдлийн далдлалтыг  (Data hiding)- ийг хэрэгжүүлдэг. Stable :  Шаардлагатай нэмэлт өөрчлөлт нь нийт системийн үйл ажиллагаанд нөлөөлөх нөлөөлөл бага байх чанар юм.  /Энэ тухай дараагийн хуудсанд үзүүлсэн жишээн дээр тодорхой авч үзэх болно./ Encapsulation
Нэмэлт уншилга Дараах жишээ кодонд хэрэгжүүлсэн бидний хараахан үзээгүй шинэ ойлголтуудад тухай бүрт нь товч тодорхой тайлбар хийсэн. Гол нь энэхүү жишээ кодоор  Encapsulation   хэмээх ойлголт нь програмын тогтвортой байдлыг хэрхэн хангадагийг харуулахыг зорьсон болно.
Encapsulation -  Жишээ Их сургууль нь улирал бүр оюутны дараах төрлийн тайлангуудыг гаргадаг.  Консол апликэшнд зориулсан текстэд суурилсан тайлан  (Text based report) Хүснэгтэн хэлбэрийн апликэшнд зориулсан тайлан  (CSV based report) Вэбэд суурилсан апликэшнд зориулсан тайлан  (HTML based report) Нэгтгэлд зориулсан тайлан  (XML based report) Цаг хугацааны шаардлагаар аливаа програмыг өөрчлөн, засварлах шаардлага урган гардаг. Тэгэхдээ програмд оруулсан жижиг нэмэлт, өөрчлөлт нь аль болох нийт системд нөлөөлөх нөлөөлөл бага байвал сайн. Энэхүү шаардлагын улмаас  encapsulation   хэмээх ойлголтыг програмчлалд хэрэгжүүлэх нь зүйтэй.  Цаашид цаг үеийн шаардлагаар тэдгээр тайлангуудад агуулгын болон форматын өөрчлөлт хийх боломжтой байх шаардлагатай .  Тухайлбал,  тайлангийн толгойн мэдээллийг өөрчлөх, форматыг нь өөрчилж  Bold  болгох... Алхам  #1:  Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох Алхам  #2:  Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих Алхам  #3:  Шаардлагатай тайлан үүсгэгч  (generator)- ийг хэрэгжүүлэх Дээрх алхмуудыг зөв хэрэгжүүлэхийн тулд клиент код нь ямар ч нөхцөлд илүү тогтвортой  (stable)  байх болно.
Encapsulation -  Жишээ Алхам  #1:  Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох Бидний үүсгэх хэд хэдэн төрлийн тайлангуудын нийтлэг тал гэвэл тэдгээр нь дараах хэлбэрийн хийсвэрлэл  (interface)- ийг   ашигладаг  ( хэрэгжүүлдэг )   Алхам  #2:  Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих Бид тайлан үүсгэхэд шаардлагатай зарим өгөгдлүүдийг үүсгэх клиент кодыг бичнэ. School   төрлийн объект Course   төрлийн объектуудын жагсаалт Student   төрлийн объектуудын жагсаалт public interface  CourseReporter  { void  setOutputPath (String path); void  setTitle (String title); void  generateReport (List students) throws IOException; }
Encapsulation -  Жишээ ReportTestClass public class  ReportTestClass  { //  тестлэх өгөгдлүүд .. private static School  testSchool ; private static Course  sw201  =  new ProgrammingCourse("SW201", "Introduction to Algorithm", 3); private static Course  sw202  =  new ProgrammingCourse("SW202", "Introduction to Programming", 3); private static Course  sw203  =  new ProgrammingCourse("SW203", "Object-oriented Programming", 3); private static Course  sw204  =  new ProgrammingCourse("SW204", "Data Structure", 3); private static Course  sw305  =  new ProgrammingCourse("SW305", "Collaborative Team Programming", 3); private static Course  sw503  =  new ProgrammingCourse("SW503", "Project Management", 3); private static Course  sw508  =  new ProgrammingCourse("SW508", "Object-oriented Analysis and Design", 3); private static Course  sw511  =  new ProgrammingCourse("SW511", "E-business Programming", 3); private static Course  ma201  = new MathCourse("MA201", "Algebra I", 3); private static Course  ma202  = new MathCourse("MA202", "Algebra II", 3); private static Course  ma203  = new MathCourse("MA203", "Trigonometry", 3); private static Course  ma204  = new MathCourse("MA204", "Finite Mathematics",3); private static Course  ma205  = new MathCourse("MA205", "Calculus I", 3); private static Course  ma206  = new MathCourse("MA206", "Calculus II", 3); //  Үргэлжлэл нь дараагийн хуудсанд
Encapsulation -  Жишээ ReportTestClass  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл private static Course  en101  = new LanguageCourse("EN101", "English I", 4); private static Course  en201  = new LanguageCourse("EN201", "English II", 4); private static Course  en301  = new LanguageCourse("EN301", "Writing English I", 4); private static Course  en302  = new LanguageCourse("EN302", "Writing English II", 4); private static Course  en501  = new LanguageCourse("EN501", "Business English", 4); private static Course  en502  = new LanguageCourse("EN502", "Advanced English", 4); private static Course  en503  = new LanguageCourse("EN503", "Technical English", 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("Fall", 2006, course); } public static void  main (String[] args) throws Throwable { //  Үргэлжлэл нь дараагийн хуудсанд
Encapsulation -  Жишээ ReportTestClass  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл //  school  объект үүсгэх testSchool  = new School(); testSchool.setName("KTMC"); testSchool.setAddress("Sansar, Ulaanbaatar, Mongolia"); // create test student objects... Student  s1  = createStudent("John Smith", "SW03E001", testSchool); s1.setGrades(new Grade[]{createGrade(sw201), createGrade(ma201), createGrade(en101)}); Student  s2  = createStudent("James Baker", "SW02E109", testSchool); s2.setGrades(new Grade[]{createGrade(sw204), createGrade(sw305), createGrade(ma202), createGrade(ma203), createGrade(ma204), createGrade(en201)}); Student  s3  = createStudent("Jonna Simpson", "IM04E401", testSchool); s3.setGrades(new Grade[]{createGrade(sw305), createGrade(sw204), createGrade(sw203), createGrade(ma202), createGrade(ma203), createGrade(ma205), createGrade(en201), createGrade(en301)}); //  үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ ReportTestClass  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл Student  s4  = createStudent("Jimmy Bubba", "SW02F059", testSchool); s4.setGrades(new Grade[]{createGrade(sw503), createGrade(sw508), createGrade(sw511), createGrade(en501), createGrade(en502), createGrade(en503)}); Student  s5  = createStudent("Jenny Kursten", "MG02E002", testSchool); s5.setGrades(new Grade[]{createGrade(ma205), createGrade(ma206), createGrade(en501), createGrade(en502), createGrade(en503)}); Student  s6  = createStudent("Jamison Lincohn", "MG02E108", testSchool); s6.setGrades(new Grade[]{createGrade(sw503), createGrade(ma204), createGrade(ma205), createGrade(ma206), createGrade(en501), createGrade(en502)}); Student  s7  = createStudent("Joni Blanc", "IM03G013", testSchool); s7.setGrades(new Grade[]{createGrade(sw305), createGrade(sw503), createGrade(ma206), createGrade(en501), createGrade(en503)}); //  Үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ ReportTestClass  ( Үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл Student  s8  = createStudent("Jake Hound", "IM03M117", testSchool); s8.setGrades(new Grade[]{createGrade(sw203), createGrade(sw204), createGrade(sw305), createGrade(ma201), createGrade(ma202), createGrade(ma203), createGrade(en101), createGrade(en301)}); Student  s9  = createStudent("Jeremy Kim", "SW04E096", testSchool); s9.setGrades(new Grade[]{createGrade(sw202), createGrade(ma202), createGrade(ma203), createGrade(en201), createGrade(en302)}); Student  s10  = createStudent("Jessica Jewels", "MG05E110", 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); //  Үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ ReportTestClass  ( Үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл //  тайлан   объект үүсгэх CourseReporter reporter = new CourseTextReporter(); //  Тайлангийн толгой болон байрлах байрлалыг тогтоох reporter.setOutputPath("c:/temp"); reporter.setTitle("Fall 2006 Course Registration"); //  Тайлан гаргах reporter.generateReport(students); } } //  үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ Алхам  #3:  Шаардлагатай тайлан үүсгэгчийг хэрэгжүүлэх Өмнөх алхамуудаар бид тайлан гаргагч   буюу  report generator   хэмээх интерфейс болон түүнийг шалгах клиент кодыг үүсгэсэн. Харин одоо тэрхүү интерфейсийг хэрхэн хэрэгжүүлэхийг авч үзье. Өмнө хэлсэнчилэн бид тайлангийн олон хэлбэрийг ашиглаж болно.  Тэгвэл одоо текстэд суурилсан, хүснэгтэд суурилсан,  HTML  хуудсанд суурилсан тайлангуудыг үүсгэе.  CourseTextReporter –  Текстэд суурилсан тайлан CourseCsvReporter –  Хүснэгтэд суурилсан тайлан CourseHtmlReporter –  Вэбэд суурилсан тайлан
Encapsulation -  Жишээ CourseTextReport 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("==================================================\n"); buffer.append(title).append("\n"); buffer.append("==================================================\n\n"); buffer.append("==Course Report===================================\n"); //  Үргэлжлэл нь дараагийн хуудсанд
Encapsulation -  Жишээ CourseTextReport  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered.\n&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;--\n&quot;); buffer.append(&quot; Name:  &quot;).append(student.getName()).append(&quot;\n&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;\n&quot;); } buffer.append(&quot;..................................................\n&quot;); } } buffer.append(&quot;==End of Report===================================\n&quot;); FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.txt&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
Encapsulation -  Жишээ CourseTextReport -ийн үр дүн ================================================== 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===================================
Encapsulation -  Жишээ CourseCsvReport 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;\n&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;\n&quot;); //  Үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ CourseCsvReport  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered.\n&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;\n&quot;); } } FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.csv&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
Encapsulation -  Жишээ CourseCsvReport -ийн үр дүн
Encapsulation -  Жишээ CourseHtmlReport 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;); //  Үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ CourseHtmlReport  ( үргэлжлэл ) //  Өмнөх хуудсын үргэлжлэл 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;); } //  Үргэлжлэл дараагийн хуудсанд
Encapsulation -  Жишээ CourseHtmlReport  ( үргэлжлэл ) //  Өмнөх хуудсын үр дүн 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(); } }
Encapsulation -  Жишээ CourseHtmlReport -ийн үр дүн

Sw203 Lecture9 Encapsulation

  • 1.
    Объект хандлагат програмчлалын хэл Java Хичээл : CS203 Багш : Д.Энхжаргал Mongolia University of Science & Technology Лекц: Encapsulation
  • 2.
    Encapsulation Encapsulation нь Объект Хандлагат Технологийн тулгын 3 чулуу болсон ойлголтын нэг. Encapsulation , Inheritance, Polymorphism En capsul ation : үгийн бүтцийг задлан шинжилж үзвэл capsul - нь аливаа зүйлийн гадна талын бүрхүүл, баглаа en - гэдгийг put буюу хийх, нэгтгэх гэдэг утгаар ойлгоно ation - гэдэг нь нэр үг үүсгэж байгаа хэлбэр. Ингээд Тодорхойлолт: Encapsulation гэдэг бол тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц юм. Үүнд: Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудыг нэг капсулд хийх. Далдлах: Объектын дотоод бүтцийг далдлах. Java хэлэнд private хандалтын тусламжтай өгөгдлийн далдлалтыг хэрэгжүүлдэг.
  • 3.
    Encapsulation En capsulation : Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах үйл явц юм. Нэгтгэх: Тухайн объектын өгөгдлүүд болон функцуудын нэг капсулд хийх. Далдлах: Объектын дотоод бүтцийг далдлах. Java хэлэнд private хандалтын тусламжтай өгөгдлийн далдлалтыг хэрэгжүүлдэг. Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд Computer Processor speed RAM Use(); Buy();
  • 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.
    STUDENT TEACHER Student_codeStudent_name GPA Course_number Teacher_name Salary Room_number Choose_lesson Pay_payment Do_homework Give_lecture Get_salary Encapsulation ( 2- Далдлах ) ОХП хэлний ӨХТөрөлд өгөгдлийн далдлалтыг хэрэгжүүлэх боломжтой болсноор Классыг хар хайрцаг (black box)- ны шинж чанартай болгож өгдөг.
  • 6.
    Объектын бие даасанбайдал Тухайн объектод шаардлагатай өгөгдлүүд Тухайн объект дээр хийгдэх үйлдлүүд Тухайн объектод шаардлагатай өгөгдлүүд болон үйлдлүүдийг нэгтгэн далдлах замаар Encapsulation хэмээх ойлголтыг хэрэгжүүлсэнээр объектын бие даасан байдал хангагддаг. Учир нь бүтцийн програмчлалд өгөгдөл болон тэдгээрийг боловсруулах үйлдлүүд ( функцууд ) нь тус тусдаа ойлголт байсан бол ОХП-д тэдгээрийг нэгтгэн нэг капсулд хийж өгсөнөөр объект нь өөрийнхөө гишүүн функцын тусламжтай “өөрөө өөрийгөө боловсруулах чадвартай” болно. ОХП-д “Гадаад холбоо сул, дотоод холбоо хүчтэй” байх зарчим үйлчилдэг. Computer Processor speed RAM Use(); Buy();
  • 7.
    Объектын бие даасанбайдал буюу өөрийгөө боловсруулах чадвар Улс Арьс шир Мал Мод Газрын баялаг … ГазрынБаялагБоловсруулах () ТүүхийЭдБоловсруулах () БайгалийнБаялагБоловсруулах () ТусгаарТогтнох () … Жишээ нь:
  • 8.
    Уламжлалт аргачлал Объектхандлагат аргачлал Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
  • 9.
    Уламжлалт аргачлал Объектхандлагат аргачлал Нэгтгэхэд т¿вэгтэй Нэгтгэхэд хялбар Encapsulation: Гадаад холбоо хүчтэй дотоод холбоо сул байх зарчим
  • 10.
    Encapsulation ОХП – д Enacapsulation хэмээх ойлголт нь объектын дотоод бүтцийг програмаас далдлахад онцгой үүрэг гүйцэтгэдэг. Объектод хандахийн тулд сайтар шалгагдсан, аюулгүй ажиллагаатай гишүүн функцээр нь дамжуулж хандана. Enacapsulation нь объектыг ингэж хар хайрцагийн шинж чанартай болгодог тул тэрхүү хар хайрцаг руу хандах зарим гадаад хэсгүүд ( нийтийн хандалттай функцууд ) байх шаардлагатай бөгөөд хэрэглэгч тэдгээр гадаад хэсгүүдээр дамжуулан объектыг хялбархан ашиглах боломжтой болно гэсэн үг. Жишээ нь: TV –ийг авч үзье. Үнэндээ TV –ийн дотоод эд ангиуд болон тэдгээрийн үйл ажиллагааг үзэгчид мэдэхгүйгээр түүний удирдлагаар ( гадаад товчлууруудаар ) TV –ийг хялбархан удирдаж өөрийн зорилгодоо ашигладаг билээ. Тэдгээр товчлууруудыг заримдаа хэрэглэгчийн interface ч гэж нэрлэх нь бий. Тэгвэл ОХП-д ч гэсэн аливаа объектыг хялбар аргаар ашиглахын тул interface -ийг хэрэгжүүлдэг. Харин объектын дотоод хэсгүүд нь далдлагдсан байна.
  • 11.
    Програмчлалд энэхүү ойлголтыгашигласнаар Програм хангамж нь Security : Учир нь битүүмжлэл нь өгөгдлийн далдлалтыг (Data hiding)- ийг хэрэгжүүлдэг. Stable : Шаардлагатай нэмэлт өөрчлөлт нь нийт системийн үйл ажиллагаанд нөлөөлөх нөлөөлөл бага байх чанар юм. /Энэ тухай дараагийн хуудсанд үзүүлсэн жишээн дээр тодорхой авч үзэх болно./ Encapsulation
  • 12.
    Нэмэлт уншилга Дараахжишээ кодонд хэрэгжүүлсэн бидний хараахан үзээгүй шинэ ойлголтуудад тухай бүрт нь товч тодорхой тайлбар хийсэн. Гол нь энэхүү жишээ кодоор Encapsulation хэмээх ойлголт нь програмын тогтвортой байдлыг хэрхэн хангадагийг харуулахыг зорьсон болно.
  • 13.
    Encapsulation - Жишээ Их сургууль нь улирал бүр оюутны дараах төрлийн тайлангуудыг гаргадаг. Консол апликэшнд зориулсан текстэд суурилсан тайлан (Text based report) Хүснэгтэн хэлбэрийн апликэшнд зориулсан тайлан (CSV based report) Вэбэд суурилсан апликэшнд зориулсан тайлан (HTML based report) Нэгтгэлд зориулсан тайлан (XML based report) Цаг хугацааны шаардлагаар аливаа програмыг өөрчлөн, засварлах шаардлага урган гардаг. Тэгэхдээ програмд оруулсан жижиг нэмэлт, өөрчлөлт нь аль болох нийт системд нөлөөлөх нөлөөлөл бага байвал сайн. Энэхүү шаардлагын улмаас encapsulation хэмээх ойлголтыг програмчлалд хэрэгжүүлэх нь зүйтэй. Цаашид цаг үеийн шаардлагаар тэдгээр тайлангуудад агуулгын болон форматын өөрчлөлт хийх боломжтой байх шаардлагатай . Тухайлбал, тайлангийн толгойн мэдээллийг өөрчлөх, форматыг нь өөрчилж Bold болгох... Алхам #1: Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох Алхам #2: Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих Алхам #3: Шаардлагатай тайлан үүсгэгч (generator)- ийг хэрэгжүүлэх Дээрх алхмуудыг зөв хэрэгжүүлэхийн тулд клиент код нь ямар ч нөхцөлд илүү тогтвортой (stable) байх болно.
  • 14.
    Encapsulation - Жишээ Алхам #1: Тайлан үүсгэгч болон клиент кодуудын хоорондын хамтын ажиллагааг тодорхойлох Бидний үүсгэх хэд хэдэн төрлийн тайлангуудын нийтлэг тал гэвэл тэдгээр нь дараах хэлбэрийн хийсвэрлэл (interface)- ийг ашигладаг ( хэрэгжүүлдэг ) Алхам #2: Тэдгээрийн хамтын ажиллагааг шалгах клиент код бичих Бид тайлан үүсгэхэд шаардлагатай зарим өгөгдлүүдийг үүсгэх клиент кодыг бичнэ. School төрлийн объект Course төрлийн объектуудын жагсаалт Student төрлийн объектуудын жагсаалт public interface CourseReporter { void setOutputPath (String path); void setTitle (String title); void generateReport (List students) throws IOException; }
  • 15.
    Encapsulation - Жишээ ReportTestClass 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.
    Encapsulation - Жишээ ReportTestClass ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл 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.
    Encapsulation - Жишээ ReportTestClass ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл // 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.
    Encapsulation - Жишээ ReportTestClass ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл 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.
    Encapsulation - Жишээ ReportTestClass ( Үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл 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.
    Encapsulation - Жишээ ReportTestClass ( Үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл // тайлан объект үүсгэх CourseReporter reporter = new CourseTextReporter(); // Тайлангийн толгой болон байрлах байрлалыг тогтоох reporter.setOutputPath(&quot;c:/temp&quot;); reporter.setTitle(&quot;Fall 2006 Course Registration&quot;); // Тайлан гаргах reporter.generateReport(students); } } // үргэлжлэл дараагийн хуудсанд
  • 21.
    Encapsulation - Жишээ Алхам #3: Шаардлагатай тайлан үүсгэгчийг хэрэгжүүлэх Өмнөх алхамуудаар бид тайлан гаргагч буюу report generator хэмээх интерфейс болон түүнийг шалгах клиент кодыг үүсгэсэн. Харин одоо тэрхүү интерфейсийг хэрхэн хэрэгжүүлэхийг авч үзье. Өмнө хэлсэнчилэн бид тайлангийн олон хэлбэрийг ашиглаж болно. Тэгвэл одоо текстэд суурилсан, хүснэгтэд суурилсан, HTML хуудсанд суурилсан тайлангуудыг үүсгэе. CourseTextReporter – Текстэд суурилсан тайлан CourseCsvReporter – Хүснэгтэд суурилсан тайлан CourseHtmlReporter – Вэбэд суурилсан тайлан
  • 22.
    Encapsulation - Жишээ CourseTextReport 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;==================================================\n&quot;); buffer.append(title).append(&quot;\n&quot;); buffer.append(&quot;==================================================\n\n&quot;); buffer.append(&quot;==Course Report===================================\n&quot;); // Үргэлжлэл нь дараагийн хуудсанд
  • 23.
    Encapsulation - Жишээ CourseTextReport ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered.\n&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;--\n&quot;); buffer.append(&quot; Name: &quot;).append(student.getName()).append(&quot;\n&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;\n&quot;); } buffer.append(&quot;..................................................\n&quot;); } } buffer.append(&quot;==End of Report===================================\n&quot;); FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.txt&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
  • 24.
    Encapsulation - Жишээ CourseTextReport -ийн үр дүн ================================================== 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.
    Encapsulation - Жишээ CourseCsvReport 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;\n&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;\n&quot;); // Үргэлжлэл дараагийн хуудсанд
  • 26.
    Encapsulation - Жишээ CourseCsvReport ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл if (students == null || students.isEmpty()) { buffer.append(&quot;No students currently registered.\n&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;\n&quot;); } } FileOutputStream fos = new FileOutputStream(outputPath + &quot;/report.csv&quot;); fos.write(buffer.toString().getBytes()); fos.close(); } }
  • 27.
    Encapsulation - Жишээ CourseCsvReport -ийн үр дүн
  • 28.
    Encapsulation - Жишээ CourseHtmlReport 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.
    Encapsulation - Жишээ CourseHtmlReport ( үргэлжлэл ) // Өмнөх хуудсын үргэлжлэл 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.
    Encapsulation - Жишээ CourseHtmlReport ( үргэлжлэл ) // Өмнөх хуудсын үр дүн 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.
    Encapsulation - Жишээ CourseHtmlReport -ийн үр дүн