งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

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

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai"— ใบสำเนางานนำเสนอ:

1 Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
Object Oriented Programming Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai

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

5 The “package” Statement
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 Class Reference in Package
ใช้ชื่อเต็มของ คลาส package-name.ClassName; เช่น geometry.Point; หรือ banking.Bank; import คลาส และใช้เฉพาะชื่อคลาส import คลาสเดียวภายในคลาสที่ระบุ import package-name.ClassName; เช่น import geometry.Point; import ทุกคลาสที่อยู่ภายใน package import package-name.*; เช่น import geometry.*; คลาส geometry.Point จะถูกอ้างอิงด้วย Point คลาส geometry.Circle จะถูก import เข้ามาด้วย

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

9 Preventing Name Collision
packages จัดเป็นเครื่องมือที่ใช้ในการแบ่งส่วน name space และป้องกัน preventing name collisions คลาสใน packages ต่างกันสามารถมีชื่อเดียวกันได้ คลาสเหล่านั้นสามารถรวมไว้ในไฟล์เดียวกันโดยไม่ก่อให้เกิด name collision หรือ package space; public class Point { … … } คลาสชื่อเดียวกัน แต่อยู่ต่างคลาส geometry.Point gPoint = new geometry.Point( … … ) space.Point sPoint = new space.Point( … … ) อ้างอิงคลาส Point ที่ถูกประกาศ ไว้ภายใต้ package geometry 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 โปรแกรม package package1.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 Example : Stack Case Study : คลาส Stack1 ประกาศ package
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]; } // End second constructor … … } // End Stack class 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 public void 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 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 รับ input จาก Command line argument กฎ ของ Subtype Return ค่า instance ของ item

22 Summary Java Packages


ดาวน์โหลด ppt Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai

งานนำเสนอที่คล้ายกัน


Ads by Google