Upload
wongyos-keardsri
View
1.304
Download
6
Embed Size (px)
DESCRIPTION
Chapter 12 Classes and Objects
Citation preview
157
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
CHAPTER 12
คลาสและออบเจค
(Classes and Objects)
1. ความรเบองตนของ คลาสและออบเจค (Introduction to Classes and Objects)
1. องคประกอบและลกษณะทวไปของคลาสและออบเจค
2. นยามและคาศพททเกยวของกบคลาสและออบเจค
Package
Constructor
Methods
Attributes ในคลาสมแอตทรบว (Attributes) ตวสราง
(Constructors) และเมทอด (Methods)
ในแพคเกจ (Package) ม
คลาส (Classes)
ในเมทอดมตวแปรและคาสง
Attributes
. . .
Method-1
Method-N
คลาสแตละคลาสสามารถสรางตวแทนของ
คลาสนน (Instance of Class) ขนได ซง
เรยกวาออบเจค (Objects)
Attributes
. . .
Method-1
Method-N
Attributes
...
Method-1
Method-N
new new new
ออบเจคเปนตวสาเนาของคลาสตนแบบ ซง
จะมทงแอตทรบวและเมทอดทกๆ ตวเหมอน
กบทคลาสตนแบบม (แตไมมตวสราง)
แพคเกจ (Package) คอ สงทเกบรวบรวมคลาสและหอหมคลาสเอาไวเปนกลมๆ (จะยงไมกลาวถงมากนก)
คลาส (Class) คอ ตนแบบของโปรแกรมหนงๆ ซงภายในประกอบไปดวย แอตทรบว ตวสราง และเมทอด
แอตทรบว (Attribute) คอ ตวแปรของคลาส หรอตวแปรทประกาศอยภายในคลาสแตอยนอกเมทอดใดๆ
Constructor
Methods
Attributes
Constructor
Methods
Attributes
ตวสราง (Constructor) คอ สวนทกาหนดคาเรมตนของคลาส ซงจะกาหนดคาเรมตนใหกบแอตทรบวทกตวในคลาส
Class A Class B Class C
Object b Object a Object c
นาเสนอมมมองในการเขยนโปรแกรมแบบใหมทเรยกวา การเขยนโปรแกรมเชงวตถ (Object-Oriented Programming)
เมทอด (Method) คอ สวนการทางานยอยของคลาส หรอโปรแกรมยอยทบงบอกการกระทาของคลาส
ตวแปร (Variable) คอ ตวแปรของเมทอด หรอตวแปรใดๆ ทประกาศภายในเมทอดใดเมทอดหนง
คาสง (Statement) คอ คาสงภายในเมทอด หรอคาสงใดๆ (if, for, …) ทปรากฎภายในเมทอดใดเมทอดหนง
ออบเจค (Object) คอ ตวแทนของคลาส ซงจะมทกอยางเหมอนทคลาสตนแบบม (ยกเวนตวสรางทไมม)
158
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
โจทยขอท 1 [ระดบงาย] จงระบสวนประกอบตางๆ ของคลาสจากโปรแกรมตอไปน (10 คะแนน)
จากโจทยขอท 1 สามารถวาดเปน Class Diagram เพอใชประกอบความเขาใจไดดงน
โจทยขอท 2 [ระดบงาย] จงพจารณาขอความตอไปนถก ( ) หรอผด ( ) (15 คะแนน) 1) คลาสทกคลาสตองมเมทอดอยางนอย 1 เมทอดเสมอ (ไมมเมทอดไมได)
2) คลาสทกคลาสตองมเมทอด main(…) เสมอ เพอเปนตวประสานเมทอดอนๆ
3) แอตทรบวของคลาสจะมหรอไมมกได ซงขนอยกบการออกแบบและการใชงานคลาสนน
4) คลาสสามารถมแอตทรบวเพยงสวนเดยวไดโดยไมตองมเมทอด (ประกาศเพยงแอตทรบว)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public class Num { private int x; private double y; public Num() { x = 0; y = 0.0; } public Num(int m, double n) { x = m; y = n; } public int addNX(int n) { return n + x; } public double addNY(double n) { return n + y; } public void showXY() { System.out.println(x); System.out.println(y); } }
1 2 3 4 5 6 7 8 9 10
public class RunNum { public static void main(String[] args){ Num obj = new Num(5, 7.0); obj.showXY(); int a = obj.addNX(4); double b = obj.addNY(13.0); System.out.println(a); System.out.println(b); } }
ผลลพธทได
Num
Num() Num(int m, double n)
int x double y
int addNX(int n) double addNY(double n)void showXY()
obj: Num
x = 5 y = 7.0
addNX(int n) addNY(double n) showXY()
RunNum
public static void main(…) { Num obj = new Num(5, 7.0); obj.showXY(); int a = obj.addNX(4); ...
}
new
159
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
5) คลาสสามารถมเมทอดเพยงสวนเดยวไดโดยไมตองมแอตทรบว
6) ออบเจคเปนตวแทนของคลาส และมแอตทรบวและเมทอดทกตวเหมอนทคลาสนนม
7) ตวแปรทประกาศภายในเมทอดใดๆ สามารถเรยกใชไดเฉพาะเมทอดนน
8) ตวแปรทประกาศภายนอกเมทอดใดๆ สามารถเรยกใชไดจากทกๆ เมทอด
9) ตวแปรทประกาศภายนอกเมทอดใดๆ คอแอตทรบว หรอตวแปรของคลาส
10) ตวแปรทประกาศภายในเมทอดใดๆ คอตวแปรทวไป หรอตวแปรของเมทอด
11) แอตทรบวสามารถประกาศชอซากนไดแตจะตองกาหนดคาเรมตนทตางกน
12) เมทอดสามารถประกาศชอซากนไดแตจะตองมรายการพารามเตอรทตางกน
13) ตวสรางจะปรากฎอยในทกออบเจคทสรางจากคลาสตนแบบ
14) ตวสรางทาหนาทในการกาหนดคาเรมตนใหกบแอตทรบวทกตวเมอเรมสรางออบเจคใหม
15) แอตทรบวในคลาสตนแบบจะตองกาหนดคาเรมตนเสมอเมอเรมสรางคลาสตนแบบ
2. คลาส (Classes)
1. การประกาศและสรางองคประกอบของคลาส คลาสหนงๆ มองคประกอบ 3 สวนไดแก แอตทรบว ตวสราง และเมทอด ซงมวธการประกาศและสรางดงตอไปน 1) การประกาศและสรางคลาส
ตวอยาง
2) การประกาศและสรางแอตทรบว ซงจะคลายกบการประกาศและสรางตวแปรในบทท 2
[ตวบงคณลกษณะ] class <ชอคลาส> {
[แอตทรบว (มกตวกได)]
[ตวสราง (มกตวกได)]
[เมทอด (มกตวกได)] } .
[ตวบงคณลกษณะ] <ประเภทขอมล> <ชอแอตทรบว>;
หวคลาส
ตวคลาส
1 2 3 4 5 6 7 8
public class Num { int x; public double y; Num() { x = 0; y = 0.0; } ...
}
ชอคลาสควรขนตนดวยอกษรตวพมพใหญ
ถาชอมหลายคาสามารถเขยนแบบหลงอฐได
ตวบงคณลกษณะ (Modifier) จะมหรอไมมกได
ถามจะมไดดงนคอ public และ final
ถาสรางคลาสหลายคลาสอยภายในแฟม *.java เดยว
กน จะตองมเพยง 1 คลาสเทานนทเปนแบบ public แต
ถาสรางคลาสแบบแยกแฟมกน (หนงแฟมหนงคลาส) จะ
สามารถใช public ไดในทกคลาส (ในบทนกาหนดให
แตละคลาสสรางแบบแยกแฟมกน)
ตวบงคณลกษณะ (Modifier) จะมหรอไมมกได ถามจะมไดดงนคอ
+ public - private # protected static final
160
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
ตวอยาง
3) การประกาศและสรางตวสราง ตวสราง (Constructor) คอ เมทอดทมชอเดยวกบชอคลาส (เมทอดทชอขนตนดวยตวอกษรพมพใหญ)
ตวอยาง
4) การประกาศและสรางเมทอด จะเหมอนกบการประกาศและสรางเมทอดในบทท 8
ตวอยาง
[ตวบงคณลกษณะ] <ประเภทขอมลทสงกลบ > <ชอเมทอด> ([พารามเตอร]) { [ตวแปรและคาสง] } .
หวเมทอด ตวเมทอด
1 2 3 4 5
public class Data { public static int n = 1; private double data; ...
}
โดยทวไปแอตทรบวทม static กากบอย จะกา-
หนดคาเรมตนใหแอตทรบวทนทเมอเรมสรางคลาส
ตนแบบ แตแอตทรบวอนๆ ทไมม static กากบ
จะไมมการกาหนดคาเรมตนใดๆ ทงสน
[ตวบงคณลกษณะ] <ชอตวสราง> ([พารามเตอร]) { [กาหนดคาเรมตนใหกบแอตทรบวทกตว] } .
ตวสรางไมม Return Type
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class Number { public long x; private int y; public Number() { x = 0L; y = 0; } public Number(long a, int b) { x = a; y = b; } public Number(double k) { x = y = (int) k; } ...
}
ตวบงคณลกษณะจะมหรอไมมกได ถา
มจะมไดแบบเดยวคอ public
วธการเขยนตวสราง คอ ใหดชอคลาสวาชออะไร ก
จะใหชอตวสรางเปนชอเดยวกบชอคลาสนน
ตวสรางมไดหลายแบบซง Overload กน
ตวสรางถกเรยกใชทกครงเมอมการสรางออบเจคใหม
คลาสใดทไมมตวสราง คอมไพเลอรจะใสตวสรางให
อตโนมตซงเปนตวสรางเรมตน (Default Constructor)
แตถามตวสรางอยแลว คอมไพเลอรจะใชตวสรางนน
ในการทางาน โดยไมมการใสตวสรางเรมตนใหอก
1 2 3 4 5 6 7 8
public class Operation { ... public int incrX(int x) { x = x + 1; return x; } ...
}
มอดดฟายเออรของเมทอดมไดดงนคอ
public, private, protected,
static และ final
ดรายละเอยดเพมเตมในบทท 8 (ทเรยนผานมา)
เมทอดทกเมทอดภายในคลาสสามารถเรยกใชงานแอตทรบวได
161
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
โจทยขอท 3 [ระดบงาย] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอสร างคลาสชอ Course ซงเปนตนแบบของวชาใดๆ ในจฬาฯ โดยประกอบไปดวยรายละเอยดดงตอไปน (30 คะแนน)
public class Course {
//แอตทรบว 3 ตว (โดยไมตองกาหนดคาใดๆ ใหกบแอตทรบว) มดงตอไปน (3 คะแนน) //แอตทรบวชอ id แบบ private เพอเกบรหสวชา (Course ID) //แอตทรบวชอ title แบบ public เพอเกบชอวชา (Course Title) //แอตทรบวชอ credit แบบ protected เพอเกบจานวนหนวยกต (Credit)
//ตวสรางแบบไมมพารามเตอรใดๆ เพอกาหนดคาเรมตนใหกบแอตทรบวทง 3 ตวตามคาเรมตนของประเภทแอตทรบวนนๆ (เชน int เปน 0, String เปน "" เปนตน) (3 คะแนน)
//ตวสรางแบบมพารามเตอร 3 ตว เพอกาหนดคาเรมตนใหกบแอตทรบวทง 3 ตวตามลาดบ (3 คะแนน)
//เมทอด setID(…)แบบ public ทรบตวเลขจานวนเตมผานทางพารามเตอรหนงคา เพอใชสาหรบกาหนดคาใหกบแอตทรบว id โดยไมตองคนคากลบ (3 คะแนน)
ใหจนตนาการวาแอตทรบวเหลานมคาพรอมแลว สามารถเรยกใชไดเลย
162
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
//เมทอด setTitle(…)แบบ public ทรบขอความผานทางพารามเตอรหนงคา เพอใชสาหรบกา-หนดคาใหกบแอตทรบว title โดยไมตองคนคากลบ (3 คะแนน)
//เมทอด setCredit(…)แบบ public ทรบตวเลขจานวนจรงผานทางพารามเตอรหนงคา เพอใชสา-หรบกาหนดคาใหกบแอตทรบว credit โดยไมตองคนคากลบ (3 คะแนน)
//เมทอด getLevel(…)แบบ public เพอคนคาระดบการศกษาทระบในรหสวชา โดยใหตวเลขหลกท 3 จากทางขวามอของรหสวชาแทนระดบการศกษา เชน 2110191 ตวเลข 1 แทนระดบการศกษา เปนตน ซงระดบการศกษาประกอบไปดวย 2 ระดบไดแก Undergraduate (ตวเลข 1-4) และ Graduated (ตวเลข 5 เปนตนไป) โดยกาหนดใหคนคาเปนชอของระดบการศกษานนๆ (3 คะแนน)
//เมทอด getFaculty(…)แบบ public เพอคนคารหสคณะทเปดสอนวชาดงกลาว โดยรหสคณะคอตวเลขสองหลกแรกของรหสวชาเรมจากทางซายมอ เชน 2110191 ตวเลข 21 แทนรหสคณะ เปนตน
(3 คะแนน)
163
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
//เมทอด getDepartment(…)แบบ public เพอคนคารหสภาควชาทเปดสอนวชาดงกลาว โดยรหสภาควชาคอตวเลขสองหลกท 3-4 ของรหสวชาเรมจากทางซายมอ เชน 2110191 ตวเลข 10 แทนรหสของภาควชา เปนตน (3 คะแนน)
//เมทอด toString(…)แบบ public เพอคนคารายละเอยดของวชาทเกบอยในแอตทรบวทกตวในรปแบบของขอความดงตวอยางเชน 2110191 Innovative Thinking (3) เปนตน (3 คะแนน)
} //End of class
2. ขอบเขตของตวแปร พารามเตอร และแอตทรบว 1) ตวแปร คอ ตวแปรทประกาศอยภายในเมทอด โดยจะปรากฏอยทตวเมทอด (Body) ซงถาตวแปรใดประ
กาศในเมทอดไหนแลวจะเรยกใชงานไดแตเพยงในเมทอดนนเทานน (Local Variable)
2) พารามเตอร คอ ตวแปรทประกาศอยภายในเมทอด แตจะปรากฏอยทหวเมทอด (Head) จงเรยกชอเสย
ใหมวาพารามเตอร ซงพารามเตอรใดๆ นนจะมคณสมบตเชนเดยวกบตวแปร
3) แอตทรบว คอ ตวแปรทประกาศอยภายในคลาสแตอยนอกเมทอดใดๆ ซงถาแอตทรบวประกาศขนแลว
จะสามารถเรยกใชงานไดจากทกเมทอดภายในคลาสนน (Global Variable)
ตวอยาง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public class Test { private static int x = 10; private static int y = 1; public static int getX() { return x; } public static int getX(int x) { return x; } public static int incX(int y) { return x + y; } public static void main(String[] args) { int x = 5; System.out.println(x); 5 System.out.println(y); 1 System.out.println(getX()); 10 System.out.println(getX(2)); 2 System.out.println(incX(x)); 15 } }
x และ y คอ แอตทรบว getX() คนคาแอตทรวบว x
getX(int x) คนคาพารามเตอร
คา x มาจากแอตทรบว x
คา y มาจากพารามเตอร y
แสดงคา x จากตวแปร x
แสดงคา y จากแอตทรบว y
ตวแปร x ในเมทอด main(…) เปนคนละตวกบพารามเตอร x ในเมทอด getX(int x)
164
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
4) ภาพรวมของตวแปร พารามเตอร และแอตทรบว
โจทยขอท 4 [ระดบงาย] จงแสดงผลลพธจากโปรแกรมและตอบคาถามตอไปน (10 คะแนน)
3. ออบเจค (Objects)
1. นยามของออบเจค 1) ออบเจคเปนตวแทนของคลาส ซงใชสาหรบอางองแอตทรบวและเมทอดภายในคลาสนน โดยทวไปคลาสท
สรางขนเปนเพยงคลาสตนแบบทไมสามารถใชงานไดจรง ดงนนการสรางออบเจคกเปนเสมอนการคดลอก
คลาสตนแบบเพอนาไปใชงานนนเอง (การคดลองทาใหคลาสตนแบบไมเสยหาย)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
public class Test { private static int x = 5; private static int y = 2; public static void main(String[] args) { int x = 9; System.out.println(x); System.out.println(getX()); System.out.println(showX()); y = 1; System.out.println(y); System.out.println(getY()); System.out.println(showY()); int y = 11; System.out.println(y); System.out.println(getY()); System.out.println(showY()); } public static int getX() { return x; } public static int getY() { return y; }
public static int showX() { int x = 7; return x; } public static int showY() { int y = 12; return y; } }
1) คา y ในบรรทดท 10 คอแอตทรบว y หรอตวแปร y
2) คา y ในบรรทดท 14 คอแอตทรบว y หรอตวแปร y
public class TestClass { public int add( ) { return … ; } //End of method } //End of class
Attribute 1
Parameter2
Variable 3
ตวแปรกบพารามเตอรประ กาศชอซากนไดหรอไม?
ตวแปรกบแอตทรบวประ กาศชอซากนไดหรอไม?
165
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
2) กระบวนการเรยกและการทางานของออบเจคมดงน
2. การประกาศและสรางออบเจค
1) การประกาศตวแปรออบเจค
เชน Student std; / Car car; / Account obj;
2) การสรางออบเจค (ใชการ new)
เชน std = new Student(52300121); / car = new Car(); / obj = new Account(101);
3) รวมขนตอน 2 ขนตอนในขอ 1 และ 2 เขาดวยกน (นยมประกาศและสรางออบเจคแบบวธน)
เชน Student std = new Student(52300121); / Account obj = new Account(101);
หมายเหต คาพารามเตอรทจะใสเขาไปภายในวงเลบหลงชอคลาสหรอหลงชอตวสรางนน ใหพจารณาจาก
คลาสตนแบบวามตวสรางแบบใดบางทประกาศขนใชงาน
4) ตวอยางการสรางและใชงานออบเจค
<ชอคลาส> <ชอออบเจค>;
<ชอออบเจค> = new <ชอคลาส>(…);
<ชอคลาส> <ชอออบเจค> = new <ชอคลาส>(…);
a.attr1 = 0 a.method1() a.method2()
Attributes
...
Method-1
Method-N
New Object เรยกใช
เหมอนการประกาศตวแปรทวไปเพยงแตมชนดตวแปรเปนชอคลาส
การคดลอก
Constructor
Methods
Attributes
Class A คลาสตนแบบ
Object a
ออบเจคมทกอยางเหมอน
คลาสทกประการ
เรยกใชแอตทรบวและเมทอด
ผานทางออบเจค
<ชอคลาส> <ชอออบเจค> = new <ตวสราง>;
สวนของ <ชอคลาส>(…) กคอตวสราง (Constructor) ของคลาสนนเอง
1 2 3 4 5 6 7 8 9 10 11 12
public class Digit { public int x; Digit() { x = 0; } Digit(int n) { x = n; } public int getX(){ return x; }
} คลาสตนแบบ
1 2 3 4 5 6 7 8 9 10
public class TestDigit { public static void main(String[] args){ Digit d = new Digit(); Digit e = new Digit(1); Digit f = new Digit(2); int digit1 = d.getX(); int digit2 = e.getX(); int digit3 = f.getX(); }
}
ตวสราง แอตทรบวทกตวของ
ออบเจคจะถกกาหนด
คาเรมตนโดยตวสราง
คลาสประมวลผล
ภายในเมทอด main มการเรยกใชงานคลาสตนแบบผานทาง
ออบเจค โดยการเอา ชอออบเจค + จด + สงทจะเรยก
166
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
โจทยขอท 5 [ระดบงาย] จงหาผลลพธจากการทางานของโปรแกรมตอไปน (8 คะแนน)
โจทยขอท 6 [ระดบงาย] จงเขยนคลาส TestNumber ใหสมบรณ เพอเรยกใชงานคลาส Number โดยการสรางออบเจคทมชนดเปน Number และเรยกใชงานเมทอดตามเงอนไขตอไปน (10 คะแนน)
//ประกาศหวคลาส TestNumber import java.util.Scanner; public static void main(String[] args) { Scanner kb = new Scanner(System.in);
//สรางออบเจคชอ no1 ทมชนดเปนคลาส Number (เปนตวแทนของคลาส Number)
1 2 3 4 5 6 7 8 9 10 11 12
public class Student { public int id; public String name; Student() { id = 0; name = ""; } Student(int i, String n) { id = i; name = n; }
public String getName() { return name; } public int getID() { return id; } public char calGrad(int score) { if(score > 60) { return 'S'; } else { return 'U'; } } }
1 2 3 4 5 6 7 8 9 10 11 12
public class TestStudent { public static void main(String args[]){ Student y = new Student(101,"Taksin"); Student z = new Student(102,"Apisit"); Student x = new Student(); System.out.println(x.getID() + "," + x.getName()); System.out.println(y.getID() + "," + y.getName()); System.out.println((z.getID() + 1) + "," + z.getName()); System.out.println(y.getName()+ ":" + y.calGrad(49)); System.out.println(z.getName()+ ":" + z.calGrad(79)); } }
คลาสประมวลผล
คลาสตนแบบ
1 2 3 4 5 6 7 8 9 10 11
public class Number { private double x; private double y; Number() { x = y = 0; } Number(double a, double b) { x = a; y = b; }
public double add() { return x + y; } public double sub() { return x - y; } public double mul() { return x * y; } public double div() { return x / y; } public double mod() { return x % y; } }
คลาสตนแบบ
167
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
//รบคาจานวนจรงจากแปนพมพ 2 คาเพอใชในการสรางออบเจคชอ no2 ทมชนดเปนคลาส Number
//แสดงผลการบวก การลบ การคณ การหาร และการมอด โดยเรยกเมทอดผานทางออบเจค no2
} //End of main } //End of class
4. การกาหนดคณสมบตและการใชงานคลาสและออบเจค
1. การกาหนดตวบงคณลกษณะใหกบแอตทรบวและเมทอด 1) ตวบงคณลกษณะทใชกาหนดขอบเขตการเรยกใชแอตทรบวและเมทอดไดแก public, private และ
protected ซงจะเปนตวบอกวาแอตทรบวและเมทอดจะถกเรยกใชงานจากทไหนไดบาง (Where)
หมายถง เรยกใชเมทอด modifier me(…) จากภายในคลาสเดยวกน (คลาส A)
หมายถง เรยกใชเมทอด modifier me(…) จากตางคลาสกนแตอยภายในแพคเกจเดยวกน
หมายถง เรยกใชเมทอด modifier me(…) จากตางแพคเกจกนแตคลาสทเรยกใชเปนสบคลาสกน
หมายถง เรยกใชเมทอด modifier me(…) จากตางแพคเกจกนหรอจากทใดๆ
2
3
4
Class B
Class A
modifier me(…)
Class D
Package java.test1 Package java.test2
Class C Extends A
Methods in A call modifier me(…)1
Methods in B call modifier me(…)
2
Methods in C call modifier me(…)3
Methods in D call modifier me(…)4
1
168
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
สรปเปนตารางขอบเขตการเรยกใชงานไดดงน
รายละเอยดของ ตวบงคณลกษณะ
คลาสเดยวกน แพคเกจเดยวกน
ตางคลาสกน แพคเกจเดยวกน
เปนสบคลาสกน (คลาสแมลก )
ตางคลาสกน ตางแพคเกจกน
public me(…) private me(…) protected me(…) me(…)
หมายเหต โดยทวไปแอตทรบวนยมประกาศเปน private และเมทอดนยมประกาศเปน public แตถา
ไมเชนนนกใหประกาศไปตามความตองการหรอตามทโจทยกาหนด
2) ตวบงคณลกษณะทใชกาหนดคาประจาคลาสหรอประจาออบเจคของแอตทรบวและเมทอดไดแก static
ซงจะเปนตวบอกวาแอตทรบวและเมทอดจะถกเรยกใชงานอยางไรไดบาง (How)
รายละเอยดของ ตวบงคณลกษณะ
เรยกใชผานทางคลาส เรยกใชผานทางออบเจค
คาประจาคลาส (ม static) คาประออบเจค (ไมม static)
โจทยขอท 7 [ระดบงาย] จงประกาศและสรางแอตทรบวหรอหวเมทอดตามขอกาหนดตอไปน (18 คะแนน) 1) แอตทรบวประจาออบเจคชอ data ชนดจานวนจรง โดยสามารถเรยกใชงานไดจากคลาสใดๆ
2) แอตทรบวประจาคลาสชอ var ชนดจานวนเตม โดยมคาเรมตนเทากบ 10 และสามารถเรยกใชงานไดจากภายในคลาสเดยวกนเทานน
3) แอตทรบวประจาคลาสชอ check ชนดคาความจรง โดยสามารถเรยกใชงานไดจากสบคลาส
4) แอตทรบวประจาออบเจคชอ stdName เกบรายชอนสตจานวน 351 คน โดยสามารถเรยกใชงานไดจากภายในคลาสเดยวกนเทานน
169
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
5) แอตทรบวประจาคลาสชอ m เกบเมตรกซชนดจานวนเตมขนาด 8 x 5 โดยสามารถเรยกใชจากทใดกได
6) เมทอดประจาออบเจคชอ show เพอแสดงชอนสตและผลการเรยนเฉลยทรบจากพารามเตอรขนบนจอภาพ โดยสามารถเรยกใชงานไดเฉพาะคลาสทประกาศเมทอด show นเทานน
7) เมทอดประจาคลาสชอ search เพอใชคนหาตวเลขจานวนเตม x ทรบเขามาวามปรากฎอย ณ ตาแหนงใดในอาเรย num ทรบเขามาเชนกน โดยสามารถเรยกใชงานไดจากคลาสลก หลาน
8) เมทอดประจาออบเจคชอ mulMatrix เพอคานวณคาหาผลคณของเมตรกซสองมตชนดจานวนจรง 2 ตวใดๆ โดยสามารถเรยกใชจากทใดกได
9) เมทอดประจาคลาสชอ union เพอใชยเนยนเซตของจานวนเตม 2 เซตใดๆ โดยเปนแบบสาธารณะ
2. วธการเรยกใชงานแอตทรบวและเมทอด 1) เรยกโดยตรง เปนการเรยกแอตทรบวหรอเมทอดทอยภายในคลาสเดยวกน (ตามหลกการเรยกเมทอดใน
บทท 8-11 ทผานมา) โดยจะพจารณาเมทอดทม static และไมม static ดงเงอนไขตอไปน
2) เรยกผานคลาส เปนการเรยกแอตทรบวหรอเมทอดประจาคลาส (ม static) ทอยตางคลาสกน
(1) เรยกแอตทรบวผานคลาส ซงเรยกแอตทรบวประเภทนวา ตวแปรประจาคลาส (Class Variable)
เชน Math.PI; Color.RED;
<ชอคลาส>.<ชอแอตทรบว>;
ขนตนดวยตวพมพใหญ ลงทายไมมวงเลบ
เมทอดผถกเรยก
ม ไมม
ม
เมทอ
ดผเรยก
ไมม
ม static เรยก ม static ได ม static เรยก ไมม static ไมได ไมม static เรยก ม static ได ไมม static เรยก ไมม static ได
170
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
(2) เรยกเมทอดผานคลาส ซงเรยกเมทอดประเภทนวา เมทอดประจาคลาส (Class Method)
เชน Math.pow(2,3); Time.start();
3) เรยกผานออบเจค เปนการเรยกแอตทรบวหรอเมทอดประจาออบเจค (ไมม static) ทอยตางคลาสกน
(1) เรยกแอตทรบวผานออบเจค ซงเรยกแอตทรบวประเภทนวา ตวแปรประจาออบเจค (Object Variable)
หรอ ตวแปรตวแทน (Instance Variable)
เชน objStd.id; no.x; g.y;
(2) เรยกเมทอดผานออบเจค ซงเรยกเมทอดประเภทนวา เมทอดประจาออบเจค (Object Method) หรอ
เมทอดตวแทน (Instance Method)
เชน std.get(5230121); c.stop();
จงตอบคาถาม
โจทยขอท 8 [ระดบงาย] จงใชตวเลอกตอไปนเพอระบประเภทของแอตทรบวหรอเมทอด (20 คะแนน) (A) Class Variable (B) Class Method (C) Object Variable (D) Object Method
ขอ แอตทรบวหรอเมทอด คาตอบ ขอ แอตทรบวหรอเมทอด คาตอบ
1. Math.sqrt(x) 11. std.grad
2. p.colorCode(s) 12. Sqt.borders(a,b)
3. Array.equals(a, b) 13. in.readLine()
4. v.x 14. System.in
5. System.getProperties() 15. Math.random()
6. Integer.MAX_VALUE 16. in.hasNext()
7. kb.nextInt() 17. i.id_code
8. rectangle.setSize(w, h) 18. out.close()
9. Math.PI 19. String.format("%4d", x)
10. a.appendArrays(x,y) 20. o.name
<ชอคลาส>.<ชอเมทอด>(…);
<ชอออบเจค>.<ชอแอตทรบว>;
<ชอออบเจค>.<ชอเมทอด>(…);
แอตทรบวหรอเมทอดทเปนแบบ static จะสามารถเรยกใชงานผานทางออบเจคไดหรอไม ……………………………………………………………………………………………………………….. ได เราสามารถเรยกใชทกอยางผานทางออบเจคไดไมวาจะเปน static หรอไมกตาม
ขนตนดวยตวพมพใหญ ลงทายมวงเลบ
ขนตนดวยตวพมพเลก ลงทายไมมวงเลบ
ขนตนดวยตวพมพเลก ลงทายมวงเลบ
171
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
โจทยขอท 9 [ระดบปานกลาง] จงหาผลลพธจากการทางานของโปรแกรมตอไปน (15 คะแนน)
โจทยขอท 10 [ระดบปานกลาง] จงเขยนคลาส Dice ซงเปนตวแทนของลกเตา n หนาใดๆ เชน ลกเตา 6 หนา ลกเตา 12 หนาเปนตน และเขยนคลาส TestDice เพอเรยกใชเมทอดจากคลาส Dice (20 คะแนน)
public class Dice {
//แอตทรบวประจาออบเจคแบบ public ชอ face เพอเกบจานวนหนาของลกเตา //แอตทรบวประจาออบเจคแบบ public ชอ value เพอเกบหมายเลขหนาหงายของลกเตา
//ตวสรางแบบไมมพารามเตอร เพอกาหนดจานวนหนาของลกเตาเปน 2 และกาหนดหนาหงายของ ลกเตาโดยการสมคา
1 2 3 4 5 6 7 8 9 10 11 12
public class Val { public static int x; public static int y; public static String s; public Val() { x = 0; y = 0; s = ""; } public Val(int x, int y) { this.x = x; this.y = y; } public static int getX() { return x; } public static int getY() { return y; } public static int getY(int y) { return y; } public static String getS() { return s; } public static String getS(String s) { return s; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public class Test { public static void main(String[] args) { System.out.println(Val.x + "," + Val.y); Val.x = 6; Val.y = 10; System.out.println(Val.getX()+ "," + Val.getY()); Val.s = "Good By A"; System.out.println(Val.getS()); System.out.println(Val.getS("See You F")); Val v = new Val(); System.out.println(v.x + "," + v.y); v.x = 5; v.y = 7; System.out.println(v.getX() + "," + v.getY()); System.out.println(Val.getX() + "," + Val.getY()); Val w = new Val(9, 7); System.out.println(w.getX() + "," + w.getY()); System.out.println(v.getX() + "," + v.getY()); v.s = "I love Java"; System.out.println(w.getS()); } }
ขอนแสดงใหเหนถงผลกระ
ทบในการประ กาศแอตทร-
บวใหเปนแบบ static ซง
จะทาใหคาของแอตทรบวนน
เปลยนแปลงแบบ Global
172
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
//ตวสรางแบบมพารามเตอรหนงตว เพอกาหนดจานวนหนาของลกเตาตามตวเลขทระบทางพารามเตอร และกาหนดหนาหงายของลกเตาโดยการสมคา
//ตวสรางแบบมพารามเตอรสองตว เพอกาหนดจานวนหนาของลกเตาและกาหนด หนาหงายของลกเตา ตามตวเลขทระบทางพารามเตอรตามลาดบ
//เมทอดประจาออบเจคชอ roll เพอใชโยนลกเตา ซงจะสมหมายเลขหนาหงายของลกเตาทมคาตงแต 1 จนถงจานวนหนาทเปนไปไดของลกเตานน และเมอสมหนาหงายไดแลว กจะนาไปกาหนดคาใหกบ แอตทรบว value ทเกบหมายเลขหนาหงายของลกเตา โดยทเมทอดนไมตองมการคนคากลบ
//เมทอดประจาออบเจคชอ setValue เพอใชในการพลกหนาหงายของลกเตาตามทตองการ ซงจะรบ คาหมายเลขหนาหงายของลกเตา ผานทางพารามเตอร และจะนาไปกาหนดคาใหกบแอตทรบว value ทเกบหมายเลขหนาหงายของลกเตา โดยทเมทอดนไมตองมการคนคากลบ
//เมทอดประจาออบเจคชอ getFace เพอคนคาจานวนหนาของลกเตา
173
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
//เมทอดประจาออบเจคชอ getValue เพอคนคาหมายเลขหนาหงายของลกเตา //เมทอดประจาออบเจคชอ show เพอแสดงจานวนหนาและหมายเลขหนาหงายของลกเตาทละบรรทด
} //End of class public class TestDice {
/* สรางลกเตาขนมา 3 ลก ในรปของออบเจคทมชอเปน d1, d2 และ d3 ตามลาดบมรายละเอยดดงน ออบเจค d1 เปนลกเตาทไมไดระบจานวนหนาและหมายเลขหนาหงาย ออบเจค d2 เปนลกเตา 13 หนา ทไมไดระบหมายเลขหนาหงาย ออบเจค d3 เปนลกเตา 30 หนา ทมหมายเลขหนาหงายเปน 9 พรอมทงแสดงขอมลของลกเตาทง 3 ลกขนบนจอภาพ แลวทาการโยนลกเต าทง 3 ลกพรอมๆ กน 20 ครง โดยในแตละครงใหแสดงหมายเลขหนาหงายของลกเตาทง 3 ลก ขนบนจอภาพ */
} //End of class
174
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
โจทยขอท 11 [ระดบปานกลาง] จงเขยนคลาส RealNumber ซงเปนตวแทนของจานวนจรงใดๆ หนงจา-นวน และเขยนคลาส TestRealNumber เพอเรยกใชเมทอดจากคลาส RealNumber (15 คะแนน) public class RealNumber {
//แอตทรบวประจาออบเจคแบบ public ชอ num เพอเกบคาจานวนจรง
//ตวสรางแบบไมมพารามเตอร เพอกาหนดคาใหกบแอตทรบว num ตามคา Default //ตวสรางแบบมพารามเตอร เพอกาหนดคาใหกบแอตทรบว num ตามคาทระบ
//เมทอดประจาออบเจคชอ plus เพอรบคาจานวนจรงหนงจานวนเขามาทางพารามเตอร แลวนามาหา ผลบวกระหวางแอตทรบว num กบคาตวเลขนนพรอมทงคนคากลบ
//เมทอดประจาออบเจคชอ diff เพอรบคาจานวนจรงหนงจานวนเขามาทางพารามเตอร แลวนามาหา ผลตางระหวางแอตทรบว num กบคาตวเลขนนพรอมทงคนคากลบ
} //End of class
175
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
public class TestRealNumber {
/* สรางจานวนจรง 1 จานวนในรปของออบเจค r ทมคาเปน 70 ประเภท RealNumber พรอม คานวณหาคาผลบวกของตวเลขนนกบ 15 และผลตางของตวเลขนนกบ 50 พรอมทงแสดงผลลพธ ขนบนจอภาพ*/
} //End of class
โจทยขอท 12 [ระดบปานกลาง] จงสรางคลาส Account ใหสมบรณ ซงเปนคลาสทใชในการ ดาเนนการเกยวกบระบบบญชธนาคาร โดยมรายละเอยดดงตอไปน (10 คะแนน) 1) แอตทรบวชอ balance ซงเปน Object Variable เพอเกบยอดเงนในบญช 2) คอนสตรกเตอร 2 แบบเพอใชในการกาหนดคาเรมตนใหกบยอดเงนเมอเรมเปดบญช
ถาไมไดระบจานวนเงนเมอเรมตนเปดบญชใหยอดเงนเปน 0 บาท ถามการระบจานวนเงนเมอเรมตนเปดบญชใหยอดเงนเปนไปตามคาทระบ
3) เมทอด deposit(…) ซงเปน Object Method เพอใชในการฝากเงนตามจานวนเงนทระบโดยไมมการคนคากลบ
4) เมทอด withdraw(…) ซงเปน Object Method เพอใชในการถอนเงนตามจานวนเงนทระบและตองตรวจสอบยอดเงนกอนเสมอวามเพยงพอในการถอนเงนหรอไม พรอมทงคนเงนทถอนดวย
5) เมทอด getbalance(…) ซงเปน Object Method เพอคนคายอดเงนคงเหลอในบญช
176
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
ใหสรางคลาส TestAccount เพอเรยกใชงานคลาส Account โดยใหเปดบญชขนมา 1 บญชพรอมฝากเงนเรมตนเปดบญชจานวน 2000 บาท หลงจากนนจงทาการถอนเงน 1500 บาท และฝากเพมอก 800 บาท ตามลาดบ (ในแตละกระบวนการใหแสดงยอดเงนในบญชหลงทารายการทกครง) (10 คะแนน)
177
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
โจทยขอท 13 [ระดบปานกลาง] จงสรางคลาส PiggyBank ใหสมบรณเพอสรางกระปกออมสนลกหมซง เกบเฉพาะเหรยญ 1 บาท 2 บาท 5 บาท และ 10 บาท โดยมรายละเอยดดงตอไปน (20 คะแนน)
public class PiggyBank {
(1) แอตทรบวประจาออบเจคแบบ public ชอ one, two, five และ ten ตามลาดบ เพอเกบจานวนของเหรยญแตละเหรยญ
(2) แอตทรบวประจาออบเจคแบบ public ชอ size เพอเกบความจของคาเงนรวมสงสดทสามารถเกบไดในกระปก
(3) ตวสราง 2 แบบเพอกาหนดคาเรมตนของกระปก 1) ถาไมมการกาหนดคาใดๆ ใหแอตทรบว size เปน 100 แอตทรบวอนเปน 0 2) ถามการกาหนดคาใหกบแอตทรบว size กให size เทากบคาทกาหนดมาสวนแอตทรบวอน
เปน 0
(4) เมทอดประจาออบเจคชอ clear(…) เพอทาการนาเหรยญออกจากกระปกโดยไมมการคนคากลบ (การนาเหรยญออกจากกระปกคอใหจานวนเหรยญทกเหรยญเทากบ 0)
178
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
(5) เมทอดประจาออบเจคชอ getTotal(…) เพอคนคาเงนรวมทงหมดทเกบสะสมในกระปก
(6) เมทอดประจาออบเจคชอ full(…) เพอตรวจสอบวากระปกเตมหรอไม ถาเตมจะคนคา true
ถาไมเตมจะคนคา false
(7) เมทอดประจาออบเจคชอ addOne(…) เพอใชหยอดเหรยญ 1 บาท ตามจานวนเหรยญทระบลงในกระปก โดยกอนหยอดเหรยญจะตองตรวจสอบกอนวากระปกออมสนเตมหรอไม
(8) เมทอดประจาออบเจคชอ addTwo(…) เพอใชหยอดเหรยญ 2 บาท ตามจานวนเหรยญทระบลงในกระปก โดยกอนหยอดเหรยญจะตองตรวจสอบกอนวากระปกออมสนเตมหรอไม
179
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java Classes and Objects - 12
(9) เมทอดประจาออบเจคชอ addFive(…) เพอใชหยอดเหรยญ 5 บาท ตามจานวนเหรยญทระบลงในกระปก โดยกอนหยอดเหรยญจะตองตรวจสอบกอนวากระปกออมสนเตมหรอไม
(10) เมทอดประจาออบเจคชอ addTen(…) เพอใชหยอดเหรยญ 10 บาท ตามจานวนเหรยญทระบ
ลงในกระปก โดยกอนหยอดเหรยญจะตองตรวจสอบกอนวากระปกออมสนเตมหรอไม
}//End of class
180
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 12 - Classes and Objects
จงสรางคลาส TestPiggyBank เพอเรยกใชงานคลาส PiggyBank โดยสรางกระปกออมสนขนาดความจ 500 บาท พรอมทงมการเกบเหรยญสองบาท 34 เหรยญ และเหรยญสบบาท 13 เหรยญ โดยในการเพมเหรยญแตละครงใหแสดงคาเงนรวมทงหมดในกระปกใหเหนทกครง
public class TestPiggyBank { public static void main(String[] args) { }//End of main }//End of class