week 12 แพ็คเกจ (package)*mucc.mahidol.ac.th/~scphc/classes/java/wk12_package.pdf ·...
TRANSCRIPT
1
JAVA ProgrammingWeek 12
แพ็คเกจ (package)*
อาจารยพัลลภ ฮวบสมบูรณภาควิชาคณิตศาสตรและสถิติ
คณะวิทยาศาสตร มหาวิทยาลยัมหิดล
(*ดัดแปลงจาก slide ของผูแตงหนังสือ “เขียนโปรแกรม Java เบื้องตน”)
2
หัวขอ
แพ็คเกจ
การนําคลาสไปใสในแพ็คเกจ
การอิมพอรตคลาสจากแพ็คเกจอื่น
การอิมพอรตสแตติกแอททริบิวทและเมธอด
3
แพ็คเกจ (package)
4
แพ็คเกจ
เปรียบไดกับโฟลเดอร ประโยชน
จัดระเบียบคลาส
แกปญหาคลาสชื่อซ้ํากัน
5
การนําคลาสไปใสในแพ็คเกจ
6
การนําคลาสไปใสในแพ็คเกจ
รูปแบบ
package แพค็เกจ;
ตัวอยาง
package somchai;
public class Rectangle {
... }
7
การนําคลาสไปใสในแพ็คเกจยอย
รูปแบบ
package แพค็เกจ.แพ็คเกจยอย ;
ตัวอยาง
package somchai.shape;
public class Triangle {...
}
8
การตั้งชื่อแพ็คเกจ
นิยมตั้งเปนโดเมนเนมยอนหลัง
เชน com.mycompany
th.in.somchaiตอดวยชื่อแพ็คเกจยอย
th.in.somchai.shape
9
การอางถึงคลาสที่อยูในแพ็คเกจ สําหรับคลาสในแพ็คเกจเดียวกนั
ใชชื่อคลาส
สําหรับคลาสที่อยูตางแพ็คเกจ
รูปแบบ
แพ็คเกจ.คลาส;
ตัวอยาง
somchai.Rectangle r;r = new somchai.Rectangle()
10
ตัวอยาง: คลาสสีเ่หลี่ยมในแพ็คเกจสมชายpackage somchai;
public class Rectangle {
public void say() {
System.out.println("I'm a rectangle");
}
}
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();
}
}
12
การอิมพอรตคลาสจากแพ็คเกจอื่น
13
การอิมพอรตคลาสจากแพ็คเกจอื่น
ไมตองเขียนชื่อเต็ม
14
การอิมพอรตคลาส
รูปแบบ
import แพ็คเกจ.คลาส;
import แพค็เกจ.*;
ตัวอยาง
import somchai.Rectangle;import somchai.*;
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();
}
}
16
การคอมไพลและรันคลาสที่อยูในแพ็คเกจ
17
โฟลเดอรที่ใชเก็บคลาส
คลาส Rectangle อยูในแพ็คเกจ somchai ดังนั้นไฟล
Rectangle.java ควรอยูในโฟลเดอร somchai
คลาส TestRectangle อยูในแพ็คเกจ somying ดังนั้นไฟล TestRectangle.java ควรอยูในโฟลเดอร somying
18
การคอมไพลและรัน
19
ผลการคอมไพล
การคอมไพลไฟลซอรสโคดดวยคําสั่งในหนาที่แลว ทําใหเกิดไฟลไบตโคดในโฟลเดอรเดียวกัน
20
แยกไฟล .java กับ .class
สรางโฟลเดอรชื่อ src เพื่อเก็บซอรสโคด สรางโฟลเดอรชื่อ classes เพื่อเก็บไบตโคดใชคําสั่งตอไปนี้ในโฟลเดอร src
21
ออปชันการคอมไพลและรัน
การคอมไพลดวยออปชัน -d หมายถึงใหสรางไบตโคดในโฟลเดอรที่กําหนด ในที่นี้คือ ..\classes
การรันดวยออปชัน -cp หมายถึงใหเครื่องจักรเสมือนจาวาหาคลาส (ไบตโคด) ในโฟลเดอรที่กําหนด ในทีน่ี้คือ ..\classes
22
เรื่องอื่นๆเกีย่วกบัแพ็คเกจ
23
ทดลองตัดออกทีละคําและศึกษาความหมาย
package somchai;
public class Rectangle {
public void say() {
System.out.println("I'm a rectangle");
}
}
24
แพ็คเกจไรชื่อ (default package)
package somchai;
public class Rectangle {
public void say() {
System.out.println("I'm a rectangle");
}
}
ไมสามารถอิมพอรตคลาสจากแพ็คเกจไรชื่อได
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();
}
}
26
คลาสที่ใชไดภายในแพ็คเกจ
package somchai;
public class Rectangle {
public void say() {
System.out.println("I'm a rectangle");
}
}
คลาสในแพ็คเกจเดียวกันเทานั้นที่สามารถเรียกใชได
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();
}
}
28
การเขาใชแบบแพ็คเกจ
package somchai;
public class Rectangle {
public void say() {
System.out.println("I'm a rectangle");
}
}
คลาสในแพ็คเกจเดียวกันเทานั้นที่สามารถเรียกใชได
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();
}
}
30
แพ็คเกจที่จาวาจัดให จาวารุน 5.0 มีคลาสและอินเตอรเฟซรวมกันถึง 3,279 อัน จัดหมวดหมูไวเปนแพ็คเกจจํานวน 166 แพ็คเกจ
31
แพ็คเกจที่จาวาจัดให
32
แพ็คเกจที่เปนพืน้ฐานของภาษาจาวา java.lang มีคลาสที่เราใชกันประจําไดแก String, StringBuffer และ Math คลาสตางๆ ในแพ็คเกจนี้สามารถเรียกใชไดโดยไมตองอิมพอรต
java.util มีคอลเลคชันคลาสซึ่งใชในการเก็บวัตถุอื่นๆ คลาสที่จัดการเกี่ยวกบัวันเวลา และคลาสอรรถประโยชนอื่นๆjava.awt และ javax.swing มีคลาสสําหรับสรางสวนติดตอกับผูใชแบบกราฟก java.applet มีคลาสสําหรับใชสรางจาวาแอพเพลต
33
การอมิพอรตสแตติกแอททรบิิวทและเมธอด
34
อิมพอรตสแตติก
อิมพอรตแอททริบิวทหรือเมธอดของคลาส (static attributes and methods)
รูปแบบ
import static แพค็เกจ.คลาส.คาคงที่ของคลาส;
import static แพค็เกจ.คลาส.เมธอดของคลาส;
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));
}
}
36
สรุป
37
สรุป
เราสามารถจัดหมวดหมูของคลาสและอินเตอรเฟซโดยใชแพ็คเกจ
แพ็คเกจชวยใหเราสามารถตั้งชื่อคลาสหรืออินเตอรเฟซซ้ํากับของเดิมที่
มีอยูแลวได
การนําคลาสหรืออินเตอรเฟซมาใสในแพ็คเกจ ทําไดโดยใชคําสั่ง package
คลาสหรืออินเตอรเฟซที่ไมมีคําวา package จะอยูในแพ็คเกจไรชื่อ
38
สรุป
การเรียกใชคลาสหรืออินเตอรเฟซที่อยูในแพ็คเกจทําไดโดยใชชื่อเต็ม เชน somchai.Rectangle
ถาไมตองการใชชื่อเต็ม ใหใชคําสั่ง import
การอิมพอรตบางคลาสหรืออินเตอรเฟซในแพ็คเกจ เชน import somchai.Rectangle;
การอิมพอรตทุกคลาสหรืออินเตอรเฟซในแพ็คเกจ เชน import somchai.*;
39
สรุป
การประกาศใหคลาสหรืออินเตอรเฟซเปน public หมายความวาคลาสหรืออินเตอรเฟซนี้สามารถเรียกใชไดจากตางแพ็คเกจ
คลาสในแพ็คเกจเดียวกันสามารถใชแอททริบิวทหรือเมธอดที่มีการเขา
ใชแบบแพ็คเกจ
การเขาใชแบบแพ็คเกจไมตองใชคําประกอบ
40
ใหนักศึกษาเขียนโปรแกรมโดยใชภาษาจาวา คํานวณหาพืน้ที่วงกลมรัศมี
10 หนวย โดยอิมพอรตและใชสแตติกเมธอดจากคลาส Math
Exercise
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
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
43
ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม
class TestFrame2 {
public static void main(String[] args) {
MyFrame frame = new MyFrame("My Second frame");}
}
Exercise
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
45
ใหนักศึกษาศึกษาโปรแกรมตอและเขยีนอธบิายการทํางานของโปรแกรม
class TestFrame3 {
public static void main(String[] args) {
ButtonFrame button = new ButtonFrame("My botton frame");}
}
Exercise