1 / 22

Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai

Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai. Object Oriented Programming. Modularity. Modularity ก่อใ ห้เกิดพื้นฐานของการที่โปรแกรมถูกพัฒนา และผลลัพธ์ของการบำรุงรักษา software high cohesion : ความสัมพันธ์กันอย่างใกล้ชิดระหว่าง หน่วย ( unit) ภายใน software module

Download Presentation

Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Advanced Class Design in JavaJava PackagesWeek #6Jarungjit Parnjai Object Oriented Programming

  2. Modularity • Modularity ก่อให้เกิดพื้นฐานของการที่โปรแกรมถูกพัฒนา และผลลัพธ์ของการบำรุงรักษา software • high cohesion : ความสัมพันธ์กันอย่างใกล้ชิดระหว่าง หน่วย (unit) ภายใน software module • low coupling : ความขึ้นตรงต่อกันและกัน แบบไม่ใกล้ชิดระหว่า software modules ที่แตกต่างกัน

  3. Modularity • หน่วย (Unit) ของ software module • method จัดเป็น programming unit ที่เล็กที่สุด • class เป็น unit ที่ใหญ่ขึ้นถัดมา methods ที่เกี่ยวเนื่องสัมพันธ์กัน จะถูกจัดไว้ใน class definition เดียวกัน • package ใน Java ก่อให้เกิดที่บรรจุ software สำหรับคลาสต่างๆ ที่มีหน้าที่การทำงานที่เกี่ยวข้องกัน

  4. geometry.Point same package geometry.Circle Packages in Java • package ถูกประกาศโดยใช้คำเฉพาะ “package” คลาสที่เกี่ยวเนื่องสัมพันธ์ถูกจัดไว้ใน package เดียวกัน • คลาส Point ถูกกำหนดไว้ใน “Point.java” • คลาส Circle ถูกกำหนดไว้ใน Circle.java • ถ้าไม่มีคำเฉพาะ “package” คลาสภายใต้ directory เดียวกันจะจัดไว้ใน package เดียวกันที่ไม่มีการตั้งชื่อ packagegeometry; public class Point { … … } packagegeometry; public class Circle { … … }

  5. The “package” Statement • การประกาศ “package” ในภาษาจาวา สามารถทำได้ดังนี้ package package_name1[.package_name2]; • โดยมีเงื่อนไขดังนี้ • ประกาศไว้ที่ตำแหน่งเริ่มต้นของไฟล์เท่านั้น • ประกาศได้เพียง 1 package ต่อ 1 source file • ตัวอย่าง “Bank.java” และ “Customer.java” package banking; public class Bank { : } package banking; public class Customer { : }

  6. Software Package • ช่วยในการจัดการ Software ขนาดใหญ่ โดยรวมกลุ่มของคลาส ไว้ใน “Package”

  7. คลาส geometry.Point จะถูกอ้างอิงด้วย Point คลาส geometry.Circle จะถูก import เข้ามาด้วย Class Reference in Package • คลาสภายใน package ที่ถูกตั้งชื่อไว้ สามารถอ้างอิงได้ 2 แบบ: • ใช้ชื่อเต็มของ คลาส package-name.ClassName; เช่น geometry.Point; หรือ banking.Bank; • import คลาส และใช้เฉพาะชื่อคลาส • import คลาสเดียวภายในคลาสที่ระบุ import package-name.ClassName; เช่น import geometry.Point; • import ทุกคลาสที่อยู่ภายใน package import package-name.*; เช่น import geometry.*;

  8. มองเห็นเฉพาะภายใน package “geometry” Import ทุกคลาสภายใต้ package “geometry” แต่ใช้ งานเฉพาะคลาส Point Visibility in Package • นอก Package มองเห็นเฉพาะคลาสที่ประกาศเป็น public • by default มองเห็นคลาสที่ไม่ได้ประกาศ modifier เฉพาะภายในpackage เช่น • คลาส Point และ Line ถูกกำหนดไว้ใน “Point.java” • คลาส DemoClient ถูกกำหนดไว้ใน “DemoClient.java” package geometry; public class Point { … … } class Line{ … … } import geometry.*; public class DemoClient { … … }

  9. คลาสชื่อเดียวกัน แต่อยู่ต่างคลาส อ้างอิงคลาส Point ที่ถูกประกาศ ไว้ภายใต้ package geometry Preventing Name Collision • packages จัดเป็นเครื่องมือที่ใช้ในการแบ่งส่วน name space และป้องกัน preventing name collisions • คลาสใน packages ต่างกันสามารถมีชื่อเดียวกันได้ • คลาสเหล่านั้นสามารถรวมไว้ในไฟล์เดียวกันโดยไม่ก่อให้เกิด name collision • หรือ packagespace; public class Point { … … } geometry.Point gPoint = new geometry.Point( … … ) space.Point sPoint = new space.Point( … … ) import geometry.Point; gPoint = new Point( … … ) space.Point sPoint = new space.Point( … … )

  10. Directory Structure • source และ class จะต้องจัดไว้ใน directory ที่โครงสร้าง directory ตรงกับโครงสร้างของ package • คลาส Foo ถูกกำหนดไว้ใน source file ที่ชื่อ Foo.java • Foo.java ถูกเก็บไว้ใน • compile • execute โปรแกรม package package1.package2; public class Foo { … … } X:\myjava\oop\package1\package2\Foo.java X:\myjava\oop\package1\package2 > javac Foo.java X:\myjava\oop>java package1.package2.Foo

  11. CLASSPATH • compiler และ interpreter จะค้นหา CLASSPATH สำหรับ class files ที่ต้องการใช้ • คลาส Foo ถูกกำหนดไว้ในไฟล์ Foo.java • Foo.class ถูกเก็บไว้ใน • กำหนด class path • execute โปรแกรม packagepackage1.package2; public class Foo { … … } X:\myjava\oop\package1\package2\Foo.class X:\anywhere > set CLASSPATH=.;X:\myjava\oop X:\anywhere >java package1.package2.Foo

  12. Java API Packages • java.langประกอบด้วย Java classes ที่จำเป็นสำหรับการประมวลผล Java programs (import ได้โดยไม่ต้องประกาศ) • java.ioประกอบด้วย Java classes ที่ใช้สำหรับการจัดการ input และ output • java.netประกอบด้วย Java classes ที่เกี่ยวกับ networking • java.utilประกอบด้วย Java classes สำหรับหน้าที่การทำงานทั่วไปเช่น list collections หรือ data representation • java.awtประกอบด้วย Java classes ที่ใช้เป็นAbstract Windowing Toolkit • java.appletประกอบด้วย Java classes ที่ใช้ในการสร้าง applet

  13. Example :TestBanking public class TestBanking { public static void main(String[ ] args) { Banking.Bank bank; bank = new Banking.Bank( ); Banking.Customer customer; bank.addCustomer("Julia", "Roberts"); customer = bank.getCustomer(0); customer.addAccount(new BankAccount(500.00)); customer.addAccount(new BankAccount(200.00)); bank.addCustomer("David", "Beckham"); customer = bank.getCustomer(1); customer.addAccount(new BankAccount(350.00)); } }

  14. Example : TestBanking import Banking.*; public class TestBanking { public static void main(String[ ] args) { Bank bank; bank = new Bank( ); Customer customer; bank.addCustomer("Julia", "Roberts"); customer = bank.getCustomer(0); customer.addAccount(new BankAccount(500.00)); customer.addAccount(new BankAccount(200.00)); bank.addCustomer("David", "Beckham"); customer = bank.getCustomer(1); customer.addAccount(new BankAccount(350.00)); } }

  15. Directory Layout and Package • Source Code ถูกเก็บไว้อยู่ใน directory ที่ตั้งชื่อตามชื่อ package • bytecode ที่ได้จากการ compile Source Code ถูกเก็บไว้ใน directory อื่น

  16. Package and Sub-Package

  17. Software Development & Deployment

  18. ประกาศ package Example : Stack package stack1; public class Stack { private Item[ ] contents; private int top; public Stack( ) { contents = new Item[10]; top = -1; } // End default constructor public Stack(int aSize) { contents = new Item[aSize]; top = -1; } // End second constructor … … } // End Stack class • Case Study : คลาส Stack1 Stack ถูก implementโดยใช้ array Item IntItem FloatItem

  19. Example : Stack public Item pop( ) { if (empty( )) { System.err.println("stack underflow"); return(new intItem(0)); } else { Item x = contents[top--]; return(x); } } // End pop publicvoid push(Item x) { if (full( )) System.err.println("stack overflow"); else { contents[++top] = x; System.out.println("Pushed "+x.getValue( )+" into Stack"); } } // End push

  20. Example : Stack public int size( ) { return(top+1); } // End size public boolean empty( ) { return(size( ) == 0); } // End empty public boolean full( ) { return(size( ) == contents.length); } // End full

  21. รับ input จาก Command lineargument กฎ ของ Subtype Return ค่า instance ของ item Example : StackDemoClient import stack1.*; public class StackDemoClient1 { public static void main(String[ ] argv) { int i, numberOfItem; numberOfItem = Integer.parseInt(argv[0]); Stack s = new Stack( ); for (i = 0; i < numberOfItem/2; i++) s.push(new IntItem(i)); for (i = numberOfItem/2; i < numberOfItem; i++) s.push(new FloatItem((float) i)); for (i = numberOfItem; i > 0; i--) System.out.println("Item popped = " + (s.pop()).getValue()); } // End main } // End StackDemoClient1 z

  22. Summary • Java Packages

More Related