week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/classes/java/wk12_package.pdf ·...

45
1 JAVA Programming Week 12 แพ็คเกจ (package)* อาจารยพัลลภ ฮวบสมบูรณ ภาควิชาคณิตศาสตรและสถิติ คณะวิทยาศาสตร มหาวิทยาลัยมหิดล (*ดัดแปลงจาก slide ของผูแตงหนังสือ เขียนโปรแกรม Java เบื้องตน)

Upload: others

Post on 05-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

1

JAVA ProgrammingWeek 12

แพ็คเกจ (package)*

อาจารยพัลลภ ฮวบสมบูรณภาควิชาคณิตศาสตรและสถิติ

คณะวิทยาศาสตร มหาวิทยาลยัมหิดล

(*ดัดแปลงจาก slide ของผูแตงหนังสือ “เขียนโปรแกรม Java เบื้องตน”)

Page 2: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

2

หัวขอ

แพ็คเกจ

การนําคลาสไปใสในแพ็คเกจ

การอิมพอรตคลาสจากแพ็คเกจอื่น

การอิมพอรตสแตติกแอททริบิวทและเมธอด

Page 3: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

3

แพ็คเกจ (package)

Page 4: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

4

แพ็คเกจ

เปรียบไดกับโฟลเดอร ประโยชน

จัดระเบียบคลาส

แกปญหาคลาสชื่อซ้ํากัน

Page 5: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

5

การนําคลาสไปใสในแพ็คเกจ

Page 6: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

6

การนําคลาสไปใสในแพ็คเกจ

รูปแบบ

package แพค็เกจ;

ตัวอยาง

package somchai;

public class Rectangle {

... }

Page 7: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

7

การนําคลาสไปใสในแพ็คเกจยอย

รูปแบบ

package แพค็เกจ.แพ็คเกจยอย ;

ตัวอยาง

package somchai.shape;

public class Triangle {...

}

Page 8: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

8

การตั้งชื่อแพ็คเกจ

นิยมตั้งเปนโดเมนเนมยอนหลัง

เชน com.mycompany

th.in.somchaiตอดวยชื่อแพ็คเกจยอย

th.in.somchai.shape

Page 9: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

9

การอางถึงคลาสที่อยูในแพ็คเกจ สําหรับคลาสในแพ็คเกจเดียวกนั

ใชชื่อคลาส

สําหรับคลาสที่อยูตางแพ็คเกจ

รูปแบบ

แพ็คเกจ.คลาส;

ตัวอยาง

somchai.Rectangle r;r = new somchai.Rectangle()

Page 10: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

10

ตัวอยาง: คลาสสีเ่หลี่ยมในแพ็คเกจสมชายpackage somchai;

public class Rectangle {

public void say() {

System.out.println("I'm a rectangle");

}

}

Page 11: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

11

การอางถึงคลาสที่อยูในแพ็คเกจ

package somchai;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

package somying;

public class TestRectangle {

public static void main(String[] a){

somchai.Rectangle r;

r = new somchai.Rectangle();

r.say();

}

}

Page 12: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

12

การอิมพอรตคลาสจากแพ็คเกจอื่น

Page 13: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

13

การอิมพอรตคลาสจากแพ็คเกจอื่น

ไมตองเขียนชื่อเต็ม

Page 14: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

14

การอิมพอรตคลาส

รูปแบบ

import แพ็คเกจ.คลาส;

import แพค็เกจ.*;

ตัวอยาง

import somchai.Rectangle;import somchai.*;

Page 15: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

15

ตัวอยางการอิมพอรตคลาสสี่เหลี่ยม

package somying;

public class TestRectangle {

public static void main(String[] a){

somchai.Rectangle r;

r = new somchai.Rectangle();

r.say();

}

}

package somying;

import somchai.*;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

Page 16: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

16

การคอมไพลและรันคลาสที่อยูในแพ็คเกจ

Page 17: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

17

โฟลเดอรที่ใชเก็บคลาส

คลาส Rectangle อยูในแพ็คเกจ somchai ดังนั้นไฟล

Rectangle.java ควรอยูในโฟลเดอร somchai

คลาส TestRectangle อยูในแพ็คเกจ somying ดังนั้นไฟล TestRectangle.java ควรอยูในโฟลเดอร somying

Page 18: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

18

การคอมไพลและรัน

Page 19: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

19

ผลการคอมไพล

การคอมไพลไฟลซอรสโคดดวยคําสั่งในหนาที่แลว ทําใหเกิดไฟลไบตโคดในโฟลเดอรเดียวกัน

Page 20: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

20

แยกไฟล .java กับ .class

สรางโฟลเดอรชื่อ src เพื่อเก็บซอรสโคด สรางโฟลเดอรชื่อ classes เพื่อเก็บไบตโคดใชคําสั่งตอไปนี้ในโฟลเดอร src

Page 21: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

21

ออปชันการคอมไพลและรัน

การคอมไพลดวยออปชัน -d หมายถึงใหสรางไบตโคดในโฟลเดอรที่กําหนด ในที่นี้คือ ..\classes

การรันดวยออปชัน -cp หมายถึงใหเครื่องจักรเสมือนจาวาหาคลาส (ไบตโคด) ในโฟลเดอรที่กําหนด ในทีน่ี้คือ ..\classes

Page 22: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

22

เรื่องอื่นๆเกีย่วกบัแพ็คเกจ

Page 23: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

23

ทดลองตัดออกทีละคําและศึกษาความหมาย

package somchai;

public class Rectangle {

public void say() {

System.out.println("I'm a rectangle");

}

}

Page 24: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

24

แพ็คเกจไรชื่อ (default package)

package somchai;

public class Rectangle {

public void say() {

System.out.println("I'm a rectangle");

}

}

ไมสามารถอิมพอรตคลาสจากแพ็คเกจไรชื่อได

Page 25: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

25

แพ็คเกจไรชื่อ

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

package somying;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

Page 26: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

26

คลาสที่ใชไดภายในแพ็คเกจ

package somchai;

public class Rectangle {

public void say() {

System.out.println("I'm a rectangle");

}

}

คลาสในแพ็คเกจเดียวกันเทานั้นที่สามารถเรียกใชได

Page 27: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

27

คลาสที่ใชไดภายในแพ็คเกจ

package somchai;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

package somying;

import somchai.*;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

Page 28: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

28

การเขาใชแบบแพ็คเกจ

package somchai;

public class Rectangle {

public void say() {

System.out.println("I'm a rectangle");

}

}

คลาสในแพ็คเกจเดียวกันเทานั้นที่สามารถเรียกใชได

Page 29: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

29

ตัวอยางการอิมพอรตคลาสสี่เหลี่ยม

package somchai;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

package somying;

import somchai.*;

public class TestRectangle {

public static void main(String[] a){

Rectangle r;

r = new Rectangle();

r.say();

}

}

Page 30: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

30

แพ็คเกจที่จาวาจัดให จาวารุน 5.0 มีคลาสและอินเตอรเฟซรวมกันถึง 3,279 อัน จัดหมวดหมูไวเปนแพ็คเกจจํานวน 166 แพ็คเกจ

Page 31: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

31

แพ็คเกจที่จาวาจัดให

Page 32: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

32

แพ็คเกจที่เปนพืน้ฐานของภาษาจาวา java.lang มีคลาสที่เราใชกันประจําไดแก String, StringBuffer และ Math คลาสตางๆ ในแพ็คเกจนี้สามารถเรียกใชไดโดยไมตองอิมพอรต

java.util มีคอลเลคชันคลาสซึ่งใชในการเก็บวัตถุอื่นๆ คลาสที่จัดการเกี่ยวกบัวันเวลา และคลาสอรรถประโยชนอื่นๆjava.awt และ javax.swing มีคลาสสําหรับสรางสวนติดตอกับผูใชแบบกราฟก java.applet มีคลาสสําหรับใชสรางจาวาแอพเพลต

Page 33: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

33

การอมิพอรตสแตติกแอททรบิิวทและเมธอด

Page 34: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

34

อิมพอรตสแตติก

อิมพอรตแอททริบิวทหรือเมธอดของคลาส (static attributes and methods)

รูปแบบ

import static แพค็เกจ.คลาส.คาคงที่ของคลาส;

import static แพค็เกจ.คลาส.เมธอดของคลาส;

Page 35: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

35

อิมพอรตสแตติก

ตัวอยาง

import static java.lang.Math.PI;

import static java.lang.Math.cos;

public class TestImportStatic {

public static void main(String[] args) {

System.out.println(cos(PI));

}

}

Page 36: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

36

สรุป

Page 37: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

37

สรุป

เราสามารถจัดหมวดหมูของคลาสและอินเตอรเฟซโดยใชแพ็คเกจ

แพ็คเกจชวยใหเราสามารถตั้งชื่อคลาสหรืออินเตอรเฟซซ้ํากับของเดิมที่

มีอยูแลวได

การนําคลาสหรืออินเตอรเฟซมาใสในแพ็คเกจ ทําไดโดยใชคําสั่ง package

คลาสหรืออินเตอรเฟซที่ไมมีคําวา package จะอยูในแพ็คเกจไรชื่อ

Page 38: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

38

สรุป

การเรียกใชคลาสหรืออินเตอรเฟซที่อยูในแพ็คเกจทําไดโดยใชชื่อเต็ม เชน somchai.Rectangle

ถาไมตองการใชชื่อเต็ม ใหใชคําสั่ง import

การอิมพอรตบางคลาสหรืออินเตอรเฟซในแพ็คเกจ เชน import somchai.Rectangle;

การอิมพอรตทุกคลาสหรืออินเตอรเฟซในแพ็คเกจ เชน import somchai.*;

Page 39: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

39

สรุป

การประกาศใหคลาสหรืออินเตอรเฟซเปน public หมายความวาคลาสหรืออินเตอรเฟซนี้สามารถเรียกใชไดจากตางแพ็คเกจ

คลาสในแพ็คเกจเดียวกันสามารถใชแอททริบิวทหรือเมธอดที่มีการเขา

ใชแบบแพ็คเกจ

การเขาใชแบบแพ็คเกจไมตองใชคําประกอบ

Page 40: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

40

ใหนักศึกษาเขียนโปรแกรมโดยใชภาษาจาวา คํานวณหาพืน้ที่วงกลมรัศมี

10 หนวย โดยอิมพอรตและใชสแตติกเมธอดจากคลาส Math

Exercise

Page 41: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

41

ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม

import java.awt.Frame;

class TestFrame{

public static void main(String[] args) {

Frame frame = new Frame("My first frame");

frame.setSize(250,100);frame.setVisible(true);

}}

Exercise

Page 42: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

42

ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม

import java.awt.Color;import java.awt.Frame;

class MyFrame extends Frame {

MyFrame(String s) {

super(s);setBackground(Color.blue);setSize(250,100);setVisible(true);

}}

Exercise

Page 43: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

43

ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม

class TestFrame2 {

public static void main(String[] args) {

MyFrame frame = new MyFrame("My Second frame");}

}

Exercise

Page 44: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

44

ใหนกัศึกษาศึกษาโปรแกรมตอและเขียนอธิบายการทํางานของโปรแกรมimport java.awt.Button;import java.awt.Color;import java.awt.Frame;

class ButtonFrame extends Frame {

Button button;

ButtonFrame(String s){

super(s);setBackground(Color.green);setSize(200,100);setLocation(400,50);button = new Button("Click me");add(button);setVisible(true);

}}

Exercise

Page 45: Week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/Classes/Java/wk12_Package.pdf · อิมพอร ตแอททร ิบิ ือเมธอดของคลาสหรวท

45

ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม

class TestFrame3 {

public static void main(String[] args) {

ButtonFrame button = new ButtonFrame("My botton frame");}

}

Exercise