The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by ปิติ เกตุ, 2021-04-04 04:44:55

Java OOP Programming

Java OOP Programming

145

return (ตวั แปรหรือขอ้ มูล);
}
โดยท่ี Modifier เป็ นส่วนท่ีบอกว่ำ เมธอดน้ีสำมำรถใช้ได้ในระดบั ใดในกำรเขียน
โปรแกรมแบบพ้นื ฐำนแลว้ ส่วนน้ีประกอบดว้ ย public static
Return_Type ส่วนน้ีจะบอกวำ่ เม่ือเมธอดน้ีถูกเรียกใชแ้ ลว้ จะมีกำรส่งค่ำกลบั หรือไม่ถำ้
มีจะส่งกลบั เป็นขอ้ มลู ประเภทใด ถำ้ หำกเมธอดไมม่ ีกำรส่งคำ่ กลบั จะนำหนำ้ ดว้ ย void
MethodName เป็นชื่อของเมธอดถำ้ หำกส่วนใดตอ้ งกำรใชเ้ มธอดน้ีก็จะเรียกช่ือเมธอด
ไดเ้ ลย สำหรับกำรต้งั ช่ือใหเ้ ป็นไปตำมกฎกำรต้งั ชื่อตวั แปร
Parameter_list เป็ นตวั แปรท่ีส่งขอ้ มูลเขำ้ ไปในเมธอด ถำ้ หำกมีตวั แปรหลำยตวั จะใช้
เคร่ืองหมำยคอมมำ (,) คนั่ ระหวำ่ งตวั แปรถำ้ ไม่มีกำรส่งตวั แปรวำ่ ใชว้ งเลบ็ วำ่ ง
Return เป็นส่วนท่ีใชส้ ่งค่ำกลบั ใหก้ บั เมธอด ถำ้ เมธอดใดไม่มีกำรส่งค่ำกลบั ก็จะไม่ไม่
ส่วนน้ี สำหรับตวั แปรท่ีส่งค่ำกลบั จะตอ้ งเป็ นประเภทเดียวกันกับที่ประกำศไวใ้ นส่วนหัวของ
เมธอด
จำกท่ีกล่ำวมำสรุปไดว้ ำ่ รูปแบบของเมธอดท่ีใชก้ นั ทว่ั ไปมีดงั น้ี
ส่วนหวั --------> Modifier Return_Type MethodName(Parameter_list)

{ // เริ่มส่วนตวั เมธอด
ส่วนตวั ---------> //เขียนรหสั ตน้ ฉบบั
ส่วนกำรคืนค่ำ-> [return Value_Type]

}// จบส่วนตวั เมธอด
โดยที่ส่วนหัวจะประกอบไปด้วยส่วนของกำรระบุค่ำกำรเขำ้ ถึงเมธอด เช่น public,
private, protected และอำจตำมดว้ ย static เช่น public static เป็นตน้
ส่วนของ Return_Type เป็ นกำรบอกวำ่ เม่ือเมธอดน้ีทำงำนแลว้ จะคืนค่ำใดออกไป ซ่ึง
อำจเป็น int, float หรือขอ้ มูลอำ้ งอิง เช่น อำร์เรยห์ รือวตั ถุของคลำสกไ็ ด้
ส่วนของ MethodName คือกำหนดช่ือของเมธอด โดยเป็ นไปตำมกฎกำรต้งั ชื่อของ
ภำษำ
ส่วนของ Parameter_list คือส่วนกำรระบุพำรำมิเตอร์ที่ตอ้ งใส่ให้กบั เมธอดเมื่อมีกำร
เรียกใชง้ ำน
ส่วนตวั เมธอด ซ่ึงเป็นส่วนกำรเขียนคำสง่ั ต่ำงๆ
ส่วนกำรคืนค่ำ ส่วนน้ีจะตอ้ งคืนเป็ นค่ำตวั แปรหรือค่ำที่ระบุโดยตรงก็ได้ โดยที่ตอ้ ง
ตรงกบั คำ่ ท่ีระบุเอำไวใ้ นส่วนหวั

146

ตวั อยำ่ งเมธอด
public static int Test(int x, int y)

{
int z=x+y;
return z;

}
อธิบำยไดว้ ำ่ public static เป็นส่วนของ Modifier
int เป็น Return_Type
Test เป็น MethodName
int x และ int y เป็น Parameter_list
int z=x+y เป็นส่วนตวั ของเมธอด
return z เป็นกำรกำหนดค่ำท่ีคืนกลบั ไปเม่ือถูกเรียกใชง้ ำน

ประเภทของเมธอด

ธีรวฒั น์ ประกอบผล (2552, หนำ้ 126) แบ่งประเภทของเมธอดไว้ 3 ประเภท คือ
1. static method เป็ นเมธอดที่ประกอบดว้ ย static หมำยควำมวำ่ เมธอดน้ีเรียกใชไ้ ด้

ทนั ทีโดยไม่ตอ้ งมีกำรสร้ำงวตั ถุข้ึนมำใหม่
2. instance method เป็นเมธอดท่ีไม่มีกำรนำหนำ้ ดว้ ย static กำรเรียกใชง้ ำนตอ้ งสร้ำง

วตั ถุข้ึนมำใหม่
3. Overloading method เป็ นเมธอดหลำยๆ เมธอดท่ีมีชื่อเดียวกันแต่มีจำนวน

พำรำมิเตอร์ต่ำงกนั
ส่วนพนิดำ พำนิชกลุ (2554, หนำ้ 218) แบ่งเมธอดออกเป็น 5 ประเภท ดงั น้ี
1. Static method มี คำวำ่ static นำหนำ้ เรียกใชโ้ ดยไม่ตอ้ งสร้ำงวตั ถุ
2. Instance method ไมม่ ี คำวำ่ static นำหนำ้ เรียกใชโ้ ดยตอ้ งสร้ำงวตั ถุ
3. Constructor method เป็นเมธอดที่มีชื่อเดียวกนั กบั คลำส
4. Overloading method เป็ นเมธอดหลำยๆ เมธอดท่ีมีชื่อเดียวกันภำยในคลำส

เดียวกนั แตม่ ีชนิดและจำนวนของอำร์กิวเมนตแ์ ตกต่ำงกนั
5. Overriding method เป็ นเมธอดหลำยๆ เมธอดท่ีนอกจำกจะมีช่ือเดียวกนั ภำยใน

คลำสเดียวกนั แลว้ ยงั มีชนิดและจำนวนอำร์กิวเมนตเ์ หมือนกนั ดว้ ย แต่มีกำรอิมพลี
เมนตภ์ ำยในไม่เหมือนกนั
จำกที่ไดก้ ล่ำวไปแลว้ สรุปประเภทของเมธอดได้ 3 ประเภท ดงั น้ี

147

1. เมธอดที่ใชง้ ำนปกติ (Normal Method) ซ่ึงอำจนำแนกเป็นประเภทยอ่ ยเป็น เมธอดแบบ
ถำวร (Static method) และเมธอดแบบตวั อยำ่ ง(Instance method)

2. เมธอดตวั สร้ำงหรือคอนสตรักเตอร์ (Constructor)
3. แอคเซสเซอร์ (Accessor)
4. เมธอดโหลดเกิน (Overloading method)

การเรียกใช้งานเมธอดแบบไม่คนื ค่า

เมธอดท่ีไม่มีกำรคืนค่ำ จะเป็ นเมธอดท่ีเขียนข้ึนตน้ ดว้ ย void โดยจะมีหลำย ๆ รูปแบบ ท้งั
ที่มีกำรผำ่ นค่ำพำรำมิเตอร์และไม่มีกำรผำ่ นค่ำพำรำมิเตอร์ ตำแหน่งกำรวำงเมธอดในโปรแกรม จะ
เหมือนกนั กบั หวั ขอ้ ที่อธิบำยมำแลว้

ลกั ษณะของเมธอดประเภทน้ีจะ มี void นำหน้ำเมธอด เสมอ และในกำรเรียกใช้งำนก็
สำมำรถเขียนชื่อเมธอดไดท้ นั ที ในเน้ือหำที่ผำ่ นมำที่เป็นตวั อยำ่ งอำจเห็นไดห้ ลำยเมธอด

- การประกาศใช้งานหรือการสร้างเมธอด
กำรประกำศตอนสร้ำงเมธอดจะตอ้ งระบุ void ไวห้ นำ้ ช่ือของเมธอดเสมอ เช่น

public static void main(){
….

}
หมำยถึง เมธอด main ไมม่ ีกำรคืนค่ำ เพรำะมี void กำกบั ไวข้ ำ้ งหนำ้
public void Test(int x){


}

หมำยถึงเมธอด Test ไมม่ ีกำรคืนค่ำ เพรำะมี void กำกบั ไวข้ ำ้ งหนำ้

ตวั อย่างท่ี 5.8 จงเขียนโปรแกรมสร้ำงใหม้ ีเมธอด จำนวน 3 เมธอด คือ inputString ใชใ้ นกำรรับคำ่
สตริงและ inputNumber จำนวนคร้ัง และเมธอด myShow ใชใ้ นกำรแสดงผล โดยประกำศตวั แปร
str และ number เป็นตวั แปรสำธำรณะ
คลาสไดอะแกรมดงั นี้

148

ภาพท่ี 5.8 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.8
โปรแกรม :
import java.io.*;
public class voidMethod1 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

String str1;
int number;
public static void main(String args[]) throws IOException

{
voidMethod1 obj = new voidMethod1();
obj.inputString();
obj.inputNumber();
obj.showData();
}

public void inputString()throws IOException{
System.out.println("Input String :");
str1=stdin.readLine();

}
public void inputNumber()throws IOException{

149

System.out.println("Input Times :");
number=Integer.parseInt(stdin.readLine());
}

public void showData(){
for(int i=1;i<=number;i++)
System.out.println(str1);

}
}
ผลกำรรันแสดงวำ่ เมธอดใดกำลงั ทำงำน โดยจะใหร้ ับคำ่ กำรป้ อนค่ำ สตริง และจำนวนที่ตอ้ งกำร
แสดง หลงั จำกน้นั จะแสดงสตริงดงั กล่ำวเท่ำกบั จำนวนท่ีป้ อนเขำ้ ไป

Input String :Show Message of Example 3.
Input Times :10
Show Message of Example 3.
Show Message of Example 3.

คาอธิบาย โปรแกรมน้ีแสดงตวั อย่ำงเมธอด void ที่ไม่มีกำรคืนค่ำหลงั กำรทำงำนของคำส่ังใน
เมธอด พร้อมกนั น้ีกำรเรียกใชง้ ำนยงั ไมต่ อ้ งใส่พำรำมิเตอร์อีกดว้ ย

ตวั อย่างท่ี 5.9 จงเขียนโปรแกรมรับค่ำรัศมีของวงกลมจำกผใู้ ช้ และคำนวณหำพ้ืนท่ี แลว้ แสดงผล
ทำงจอภำพโดยใชเ้ มธอด
โปรแกรม :
import java.io.*;
public class voidMethod2 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

String str1;
int number;
double area;
public static void main(String args[]) throws IOException

150

{
voidMethod2 obj = new voidMethod2();
obj.inputData();
obj.calculate();
obj.showData();
}
public void inputData()throws IOException{
System.out.println("Input Radius :");
number=Integer.parseInt(stdin.readLine());
}
public void calculate(){
area=Math.PI*(float)(number*number);
}
public void showData(){
System.out.format("The area is %.2f",area);
}
}
ผลกำรรัน จะใหผ้ ใู้ ชป้ ้ อนรัศมีแลว้ คำนวณพ้ืนท่ีและแสดงผล ตวั อยำ่ งผลกำรรันดงั น้ี
Input Radius :100
The area is 31415.93
คาอธิบาย โปรแกรมน้ีให้ผใู้ ชป้ ้ อนค่ำรัศมีของวงกลมแลว้ โปรแกรมจะทำกำรคำนวณและแสดงผล
ออกมำทำงจอภำพใหผ้ ใู้ ชไ้ ดเ้ ห็นและให้สังเกตกำรประกำศตวั แปรสำธำรณะ (Global variable) ที่มี
กำรเรียกใชไ้ ดท้ วั่ ไปในโปรแกรม กำรประกำศโปรโตไทป์ ของเมธอด และกำรต้งั ช่ือ ตลอดจนกำร
เขียนคำสงั่ ในเมธอดน้นั สรุปไดว้ ำ่ เมธอดเหมือนกบั โปรแกรมหน่ึงทำงำนโดยเฉพำะอยำ่ งใดอยำ่ ง
หน่ึง เช่น Inputdata() ทำหนำ้ ที่รับขอ้ มูล Calculate() ทำหน้ำที่ในกำรคำนวณ Showresult() ทำ
หนำ้ ท่ี ในกำรแสดงผลลพั ธ์เป็นตน้
การเรียกใช้งานเมธอดไม่คืนค่าแบบผ่านค่าพารามิเตอร์
กำรใชง้ ำนเมธอดแบบไม่คืนค่ำจะยดื หยุน่ มำกข้ึนหำกใชก้ ำรผำ่ นค่ำพำรำมิเตอร์เขำ้ มำช่วย
เนื่องจำก กำรเรียกใชเ้ มธอดหำกไม่มีกำรผำ่ นค่ำพำรำมิเตอร์จะทำให้ตอ้ งประกำศตวั แปรสำธำรณะ
มำใช้ ซ่ึงไมน่ ิยมใชล้ กั ษณะดงั กล่ำวน้นั นกั นิยมใชก้ ำรผำ่ นพำรำมิเตอร์มำกกวำ่

151

พารามิเตอร์
พำรำมิเตอร์ คือ ส่ิงท่ีตอ้ งจดั เตรียมที่จะทำตำมที่คลำสกำหนดไวเ้ ม่ือมีกำรเรียกใช้

เมธอด พำรำมิเตอร์ในควำมรู้สึกแล้วจะหมำยถึงตวั แปรที่มนั จะบรรจุค่ำและมีชนิดอำร์กิวเมนต์
(Argument) : ค่ำซ่ึงต้องจดั เตรียมเมื่อมีกำรเรียกใช้เมธอด ค่ำน้ีต้องเป็ นค่ำเดียวกันกบั ค่ำของ
พำรำมิเตอร์ท่ีเก่ียวขอ้ ง (Allen B. Downey, 2011, p. 32) ตวั อยำ่ งเช่น ค่ำท่ีตอ้ งผำ่ นให้กบั เมธอดเมื่อ
มีกำรเรียกใช้ เช่น Syste.out.println(“Test”); ซ่ึงลกั ษณะของกำรสร้ำงเมธอดเรำสำมำรถท่ีจะสร้ำง
เมธอดท่ีเป็นลกั ษณะดงั กล่ำวได้ ขอใหศ้ ึกษำจำกตวั อยำ่ งต่อไปน้ี

ตวั อย่างที่ 5.10 จงเขียนโปรแกรมแสดงคำ่ เลขยกกำลงั สองของค่ำท่ีผใู้ ชป้ ้ อน
โปรแกรม :
import java.io.*;
public class Ex_5_10 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

static int number;
long square;;
public static void main(String args[]) throws IOException

{
Ex_5_10 obj = new Ex_5_10 ();
obj.inputData();
obj.square(number);
obj.showResult();
}

public void inputData()throws IOException{
System.out.println("Input Integer :");
number=Integer.parseInt(stdin.readLine());

}

public void square(int n){

152

square = n*n;
}

public void showResult(){
System.out.println("The Square of "+number +" :"+square);

}
}
ผลกำรรัน ใหผ้ ใู้ ชป้ ้ อนตวั แลขแลว้ แสดงค่ำเลขยกกำลงั สองของตวั เลขที่ป้ อนเขำ้ ไป ตวั อยำ่ งดงั น้ี

Input Integer :100
The Square of 100 :10000

คาอธิบาย จำกตวั อย่ำงของโปรแกรมจะพบวำ่ ตวั อยำ่ งท้งั สองเป็ นตวั อยำ่ งงำนเดียวกนั แต่มีผลกำร
รันเหมือนกนั แต่ลกั ษณะกำรใช้งำนเมธอดแตกต่ำงกนั ซ่ึงกำรทำงำนตวั อย่ำงหลงั จะตอ้ งผ่ำนค่ำ
ตวั เลขเขำ้ ไปถึงจะทำงำนหำกมีกำรเรียกใช้ทุกคร้ังก็ตอ้ งมีกำรผ่ำนค่ำตวั เลขให้ทุกคร้ังของกำร
เรียกใชง้ ำน

ตัวอย่างท่ี 5.11 จงเขียนโปรแกรมเก็บคำ่ อำร์เรยด์ งั น้ี 5, 10 ,15 ,20, 25 หลงั จำกน้นั ผำ่ นค่ำอำร์เรยเ์ ขำ้
ไปในเมธอดเพื่อแปลงเป็นเลยยกกำลงั สองแลว้ แสดงผล
โปรแกรม :
import java.io.*;
public class Ex_5_11 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

static int number[]={5, 10 ,15 ,20, 25};
public static void main(String args[]) throws IOException

{
Ex_5_11 obj = new Ex_5_11();
System.out.println("Data Befor Convert:");
obj.showResult();
obj.convertArray(number);

153

System.out.println("Data After Convert:");
obj.showResult();
}
public void convertArray(int n[]){
for(int i=0;i<n.length;i++)
n[i]*=n[i];
}
public void showResult(){
for(int i=0;i<5;i++)
System.out.println(number[i]);
}
}
ผลกำรรัน จะแสดงขอ้ มลู ก่อนและหลงั กำรแปลงค่ำดงั น้ี
Data Befor Convert:
5
10
15
20
25
Data After Convert:
25
100
225
400
625
คาอธิบาย โปรแกรมน้ีคำนวณโดยกำหนดพำรำมิเตอร์ให้เป็ นค่ำของอำร์เรยท์ ้งั ชุด ดงั น้นั เมื่อมีกำร
เรียกใช้ obj.convertArray(number); ซ่ึงผำ่ นค่ำ number ท่ีภำยในเก็บขอ้ มูลอยทู่ ้งั ห้ำจำนวนและ
เมธอดที่รับค่ำมำแล้วดำเนินกำรแปลงค่ำและเก็บไวท้ ี่เดิม หลังจำกน้ันจึงเรียกเมธอดสำหรับ
แสดงผล

154

เมธอดแบบคนื ค่าเรียกใช้โดยไม่ต้องมพี ารามเิ ตอร์

เมธอดแบบมีกำรคืนค่ำเป็ นลกั ษณะของงำนที่เป็ นเมธอดท่ีใช้กนั เป็ นส่วนมำก เพรำะ
ลกั ษณะของเมธอดน้นั จะตอ้ งเรียกใชง้ ำนแลว้ ได้ผลลพั ธ์ออกมำค่ำหน่ึง หมำยควำมวำ่ กำรสั่งให้
เมธอดทำงำนแลว้ จะไดผ้ ลของกำรประมวลผลออกมำ เพื่อใชป้ ระโยชน์อยำ่ งใดอยำ่ งหน่ึงจำกค่ำท่ี
ไดจ้ ำกกำรทำงำนของเมธอด ลกั ษณะกำรใชง้ ำนเมธอดจะตอ้ งหำตวั แปรชนิดเดียวกนั กบั ค่ำท่ีคืน
ออกมำน้นั มำรับคำ่ ท่ีคืนออกมำจำกเมธอด

พนิดำ พำนิชกุล (2554, หนำ้ 223) กล่ำววำ่ หลงั กำรดำเนินกำรตำมคำส่ังของเมธอดจนได้
ผลลพั ธ์แลว้ กำรส่งค่ำผลลพั ธ์กลบั คืนจะใชค้ ำสงั่ “return” ซ่ึงมีลกั ษณะกำรทำงำนคือ

1. ใชจ้ บกำรทำงำนของเมธอด ถำ้ โปรแกรมพบคำสั่ง return เม่ือใดก็จบกำรทำงำนเมธอด
น้นั ทนั ที

2. ถำ้ หลงั คำสั่ง return มีตวั แปรใดตำมมำก่อนจะส่งค่ำตวั แปรน้นั ใหก้ บั เมธอดที่เรียกมำ
3. ถำ้ มีกำรส่งค่ำกลบั ชนิดของขอ้ มูลจะตอ้ งเป็ นชนิดเดียวกนั กบั ที่ระบุไวใ้ น data_type
ของ Header ของเมธอดน้นั

แอลเลน บี. ดอวน์ ี (Allen B. Downey, 2011, p. 32) กล่ำววำ่ เมธอดบำงเมธอดจะใหค้ ่ำ
กลบั คืนเช่นเมธอดท่ีเรียก Math แต่ในกรณีท่ีบำงเมธอด ก็จะดำเนินกำรโดยไม่ส่งค่ำกลบั คืน เช่น
println เป็นตน้

ส่ิงท่ีสำคญั และแตกต่ำงจำกเมธอดท่ีไม่มีกำรคืนค่ำ คือ จะมีชนิดของขอ้ มูลท่ีคืนกลบั มำ
และคำส่งั return ตำมดว้ ยค่ำท่ีตอ้ งกำรคืนใหต้ รงกบั ชนิดที่ระบุไว้

กำรพิจำรณำว่ำเมธอดใดคืนค่ำใดให้ดูท่ีส่วนหัวเมธอดท่ีจะระบุชนิดของขอ้ มูลท่ีจะคืน
ออกมำ เช่น

public int mytest(float x)
{

System.out.println(“I’ve worked”);
return int(x);
}
public int mytest(float x); เมธอด mytest จะคืนค่ำจำนวนเตม็ ออกมำซ่ึงกำรใชง้ ำนจะตอ้ ง
หำตวั แปรท่ีเป็นจำนวนเตม็ มำรับค่ำ เช่น int k=mytest(20.5); โดยท่ีตวั แปร k จะรับค่ำที่คืนออกมำ
เป็นตน้ เพอื่ ใหเ้ ขำ้ ใจมำกข้ึนแสดงตวั อยำ่ งเมธอดดงั น้ี
return int(x); เป็นกำรคืนคำ่ เป็น integer ที่แปลงค่ำ float x ใหเ้ ป็นจำนวนเตม็ ตำมที่ตอ้ งกำร
กำรเรียกใชจ้ ะใช้

155

int m=mytest(22.77); เรียกใช้โดยผำ่ นค่ำ 22.77 และแปลงให้เป็ น จำนวนเต็มแลว้ เก็บ
ผลลพั ธ์ไวไ้ ดใ้ น m

กำรเรียกใชเ้ มธอดแบบคืนค่ำอำจเรียกใชไ้ ดโ้ ดยตรงโดยไม่ตอ้ งมีตวั แปรมำรับค่ำท่ีคืนหำก
เป็นกำรแสดงผล เช่น ถำ้ ตอ้ งกำรเรียกใช้ mytest ดงั กล่ำวใหแ้ สดงผล ไดด้ งั น้ี

System.out.format(“%d”,mytest(22.77)); ซ่ึงสำมำรถแสดงจำนวนเต็มท่ีผ่ำนกำรแปลง
แลว้ ไดท้ นั ทีโดยไม่ตอ้ งมีตวั แปรมำรับคำ่ อีก

ตัวอย่างท่ี 5.12 จงเขียนโปรแกรมรับค่ำตวั เลขจำนวนหน่ึงแลว้ แสดงผลเลขยกกำลงั สองของเลข
จำนวนน้นั ท่ีป้ อนเขำ้ ไป
โปรแกรม :
import java.io.*;
public class Ex_5_12 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

static int number,square;

public static void main(String args[]) throws IOException
{
Ex_5_12 obj = new Ex_5_12();
obj.inputNumber();
square=calculateSquare(number);
obj.showData();
}

public void inputNumber()throws IOException{
System.out.println("Input Integer :");
number=Integer.parseInt(stdin.readLine());

}
public static int calculateSquare(int n){

n*=n;

156

return n;
}
public void showData(){

System.out.println("The square is "+square);
}
}

ผลกำรรันโปรแกรมน้ี แสดงดงั น้ี
Input Integer :50
The square is 2500

คาอธิบาย โปรแกรมน้ีมีสิ่งท่ีน่ำสนใจ คือ กำรคืนค่ำ float ของเลขกำลงั สอง ดงั น้นั กำรใช้
งำนเมธอดลกั ษณะน้ีตอ้ งหำตวั แปรมำรับคำ่ เพอ่ื รับคำ่ ที่ให้คืนกลบั มำ และตวั แปรท่ีรับค่ำน้นั จะตอ้ ง
เป็ นชนิดเดียวกนั กบั ค่ำที่คืนมำดว้ ย ลกั ษณะเมธอดคืนค่ำดงั ตวั อย่ำงสำมำรถเขียนกำรคืนค่ำได้
หลำยแบบดงั น้ี

public static int calculateSquare(int n){
return n*n;

}

ตวั อย่างท่ี 5.13 จงเขียนโปรแกรมแปลงค่ำกิโลกรัมเป็ นปอนดโ์ ดย 1 ก.ก. เท่ำกบั 2.205 ปอนด์
โปรแกรม :
import java.io.*;
public class Ex_5_13 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

static int kg;
static double pound;
public static void main(String args[]) throws IOException

{
Ex_5_13 obj = new Ex_5_13();
obj.inputNumber();

157

pound=convertToPound(kg);
System.out.println("Pound is "+pound);
}
public void inputNumber()throws IOException{
System.out.println("Input Kilogram :");
kg=Integer.parseInt(stdin.readLine());
}
public static double convertToPound(int k){
double p;
p=((double)k)*2.25;
return p;
}
}
ผลกำรรันโปรแกรมน้ีให้ผใู้ ชป้ ้ อนตวั เลขเขำ้ ไปแลว้ นำค่ำไปแปลงเป็นปอนดแ์ ลว้ แสดงผลออกมำ
ทำงจอภำพ
Input Kilogram :3
Pound is 6.75

ตวั อย่างท่ี 5.14 จงเขียนโปรแกรมรับค่ำตวั เลข 2 ค่ำ โดยกำหนดคำ่ เร่ิมตน้ และคำ่ สุดทำ้ ย แลว้ หำ
ผลรวมของเลขทุกตวั จำกตวั แรกถึงตวั สุดทำ้ ย แลว้ แสดงผล
โปรแกรม :
import java.io.*;
public class Ex_5_14 {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);

static int number1,number2,sum;

public static void main(String args[]) throws IOException
{

158

Ex_5_14 obj = new Ex_5_14();
obj.inputString();
sum=calSum(number1,number2);
System.out.println("Sumation is "+sum);
}

public void inputString()throws IOException{
System.out.println("Input Begining Number :");
number1=Integer.parseInt(stdin.readLine());
System.out.println("Input Ending Number :");
number2=Integer.parseInt(stdin.readLine());

}
public static int calSum(int begin, int end){

int s=0;
for(int i=begin;i<=end;i++)

s+=i;
return s;
}
}
ผลกำรรัน จะให้ผใู้ ช้ป้ อนตวั เลขเร่ิมตน้ และสิ้นสุด หลงั จำกน้ันโปรแกรมจะคำนวณผลรวมและ
รำยงำนผล ดงั ตวั อยำ่ งกำรรันดงั น้ี
Input Beginning Number :1
Input Ending Number :10
Summation is 55

คาอธิบาย โปรแกรมจะใหผ้ ใู้ ชป้ ้ อนจำนวนเริ่ม และสิ้นสุด แลว้ คำนวณหำผลรวมจำกตวั แรกท่ีป้ อน
และตวั สิ้นสุด โปรแกรมน้ีอำจมีขอ้ ผิดพลำดถำ้ ป้ อนขอ้ มูลตวั แรกนอ้ ยกว่ำตวั แรก หรือหำกมีกำร
ป้ อนขอ้ มูลท่ีเป็ นสตริง เพรำะกำรคำนวณจะเพิ่มค่ำทีละ 1 ซ่ึงถำ้ ป้ อนเป็ นเลขจำนวนเต็มจะได้
ผลลพั ธ์ตรงตำมตอ้ งกำร

159

คอนสตรักเตอร์

แอลเลน บี. ดอวน์ ี (Allen B. Downey, 2011, p. 32) กล่าววา่ บทบาทของคอนสตรักเตอร์
คือการติดต้งั ค่าเริ่มตน้ ใหก้ บั ตวั แปร โดยไวยากรณ์สาหรับตวั สร้างจะเหมือนกบั เมธอดทว่ั ไปดว้ ย 3
ส่วน ดงั น้ี

1. ชื่อของคอนสตรักเตอร์คือชื่อเดียวกบั ช่ือคลาส
2. คอนสตรักเตอร์ไม่มีชนิดของการคืนค่าและไมม่ ีการคืนคา่
3. คียเ์ วริ ์ด static จะถูกละเอาไวใ้ นฐานท่ีเขา้ ใจ
ไซมอล เคนดลั (Simol Kendal, 2009, p. 60) กล่าววา่ แต่ละคลาสควรจะมีการห่อหุ้ม การ
ติดต้งั คา่ ตา่ งๆ โดยทว่ั ไปจะเก่ียวขอ้ งก้บั การกาหนดคา่ เริ่มตน้ ของตวั แปรตวั อยา่ งของมนั
พนิดา พานิชกุล (2554, หน้า 238) กล่าววา่ ในการเขียนโปรแกรมเมื่อวตั ถุใดๆ ถูกสร้าง
ข้ึนมาภายใตโ้ ครงสร้างของคลาสหน่ึง โปรแกรมจะตอ้ งเรียกใชเ้ มธอดที่มีชื่อเดียวกนั กบั ชื่อคลาสท่ี
การกาหนดการทางานท่ีมีลกั ษณะเช่นน้ีเรียกวา่ คอนสตรักเตอร์ ซ่ึงภายในจะมีขอ้ กาหนดดงั น้ี

1. คอนสตรักเตอร์ตอ้ งมีชื่อเดียวกนั กบั ช่ือคลาส
2. การประกาศใชค้ อนสตรักเตอร์ชื่อเมธอดตอ้ งไม่มีค่า return_data_type หรือ
แมก้ ระทงั่ คียเ์ วริ ์ด void
ดงั น้นั ถา้ ช่ือเมธอดใดๆ ในคลาสเป็ นช่ือเดียวกบั คลาสและมีขอ้ กาหนดตรงกบั 2
ขอ้ แสดงวา่ เมธอดน้นั ถูกกาหนดใหเ้ ป็นคอนสตรักเตอร์ของคลาสที่มีช่ือเดียวกนั

จากที่กล่าวมา คอนสตรักเตอร์ (Constructor) เป็ นเมธอดที่ทางานแรกสุดเมื่อวตั ถุของคลาส
น้นั ๆ ถูกสร้าง โดยคุณลกั ษณะของคอนสตรักเตอร์ มีดงั น้ี

1. เป็นเมธอดท่ีช่ือเดียวกบั ช่ือคลาส
2. ไมม่ ีการคืนค่าใด ๆ
3. ประกาศการเขา้ ถึงเป็นแบบ public

160

ตวั อยำ่ ง เช่น
package javaapplication1;
public class Main {
public Main() { // ส่วนท่ีเป็น Constructor
}
public static void main(String[] args) {

// TODO code application logic here
}
}
จำกโปรแกรมดงั กล่ำวดำ้ นบนอธิบำยไดว้ ำ่ ส่วนของคอนสตรักเตอร์ของ คลำส Main คือ Main() ที่
ทำงำนเริ่มตน้ เม่ือมีกำรสร้ำงวตั ถุ กำรสร้ำงคอนสตรักเตอร์น้นั สำมำรถท่ีสร้ำงใหม้ ีกำรผำ่ นคำ่ เขำ้ ได้
ใหพ้ ิจำรณำ โปรแกรมตวั อยำ่ งดงั น้ี
package javaapplication1;
public class NewClass {

public NewClass() {
System.out.println("ทดสอบ Constructure OK..");

}
public NewClass(int x, int y){

System.out.println("คาตอบ : " +(x+y));
}
}
public class runNewClass {
public static void main(String arg[]){

NewClass m= new NewClass(15,20);
NewClass n= new NewClass(); }
public runNewClass() {
}
}
คำอธิบำย จากตวั อยา่ งคอนสตรักเตอร์ของ NewClass มีพารามิเตอร์ดว้ ย ดงั น้นั การสร้างวตั ถุของ
NewClass m=new NewClass(15,20); จาเป็นตอ้ งระบุพารามิเตอร์ดว้ ยเสมอ

161

เมธอดสำหรับกำรเข้ำถงึ แอตทริบิวต์

วำย. แดเนียล เหลียง (Y. Daniel Leang, 2007, p. 230) กล่ำววำ่ กำรป้ องกนั กำรเขำ้ ไปแกไ้ ข
คุณลกั ษณะ(Properties) ใดโดยตรงน้นั ควรกำหนดฟิ ลดเ์ ป็ น private โดยใชต้ วั modifier วำ่ private
นำหนำ้ ซ่ึงจะทำใหไ้ ม่สำมำรถเขำ้ ถึงไดจ้ ำกคลำสภำยนอกได้ แต่หำกผใู้ ชต้ อ้ งกำรใชโ้ ดยกำรแกไ้ ข
สำหรับค่ำเหล่ำน้นั ตอ้ งทำฟิ ลด์เขำ้ ถึงขอ้ มูลดงั กล่ำวโดยจดั เตรียม get เพื่อคืนค่ำของขอ้ มูลในฟิ ลด์
น้นั และค่ำของฟิ ลดจ์ ะถูกปรับปรุงโดยจดั เตรียมเมธอด set เอำไวส้ ำหรับกำหนดค่ำใหม่ ซ่ึง get จะ
ถูกเรียกวำ่ getter (หรือ accessor) และ set จะถูกเรียกวำ่ setter (หรือ mutator)

ดงั น้นั เมธอดอีกประเภทหน่ึงท่ีจะมีในกำรเขียนโปรแกรมเชิงวตั ถุท่ีจะตอ้ งระบุไวใ้ นคลำส
คือ เมธอดสำหรับกำรเข้ำเขำ้ ถึงแอตทริบิวต์ (Acessor) และกำรกำหนดค่ำให้กับแอตทริบิวต์
(Mutator) ด้วยเหตุว่ำกำรประกำศคลำสจะตอ้ งมีแอตทริบิวต์ซ่ึงตอ้ งมีคุณสมบตั ิของกำรห่อหุ้ม
(Encapsulation) ซ่ึงเป็ นกำรปกป้ องขอ้ มูลไม่ให้ผูท้ ่ีไม่เก่ียวขอ้ งเขำ้ ถึงไดโ้ ดยตรง ซ่ึงรำยละเอียด
จะตอ้ งมีคำศพั ทต์ ่ำงๆ ที่เก่ียวขอ้ งดงั น้ี

Accessibility ของตวั แปร คือ คำ่ ที่ใชก้ ำหนดขอบเขตของกำรใชง้ ำนของตวั แปร
public ใชน้ ิยำมตวั แปรเพ่ือใหเ้ รียกใชไ้ ดจ้ ำกคลำสอ่ืน ใน package เดียวกนั หรือต่ำงกนั กไ็ ด้
protected ใชน้ ิยำมตวั แปรเพื่อให้คลำสท่ีอยภู่ ำยใน package เดียวกนั หรือ Subclass แต่อยู่
ตำ่ ง package กนั สำมำรถเรียกใชไ้ ด้
private ใชน้ ิยำมตวั แปรเพื่อให้เรียกใช้ไดเ้ ฉพำะภำยในคลำสท่ีสร้ำงตวั แปรน้นั ๆ ข้ึนมำ
เทำ่ น้นั
Default ไมม่ ีกำรระบุ Keyword ท้งั 3 คำ่ ขำ้ งตน้ ทำใหค้ ลำสอ่ืน ภำยใน package เดียวกนั
สำมำรถเรียกใชไ้ ด้
รูปแบบกำรเขียนโปรแกรมมีดงั น้ี
Accessor เป็นกำรสร้ำง Message ป้ องกนั กำรเขำ้ ถึงตวั แปร คือกำรสร้ำง
setVarName()
getVarname()
คือ method ที่ให้ read หรือ write attribute ใน คลำสน้นั ๆ ซ่ึงมกั จะต้งั ชื่อเป็น
set….(VarName) เป็นกำร write ค่ำใหแ้ อตทริบิวต์
get getVarname() ….{ return Varname;} เป็นกำร read ค่ำในแอตทริบิวต์

162

ตัวอย่างที่ 5.15 จงเขียนโปรแกรมบวกจำนวนเงินสองจำนวนที่ป้ อนเขำ้ แลว้ แสดงผล โดยเขียน
โปรแกรมเพ่ือกำหนดกำรเขำ้ ถึงตวั แปรดว้ ย
โปรแกรม :
package javaapplication1;
public class Plusoverload {

//Attribute
private int number1=0;
private int number2=0;
private String str="";
private int flag=0;
private int sum=0;
//method-operatin - function-procedure
public String plus(int x, int y, int f){
flag=f;
if(flag==0){
sum=x+y;
}
return "จำนวนเงินรวม "+String.valueOf(sum)+ " บำท ครับเจำ้ นำย ";
}
//Accessor
public void setNumber1(int n){
number1=n;
}
public int getNumber1(int n){
return number1;
}
public void setNumber2(int n){
number2=n;
}
public int getNumber2(int n){

163

return number2;
}
public void setsum(int n){

sum=n;
}
public int getsum(int n){
return sum;
}
public void setstr(String n){

str=n;
}
public String getstr(String n){
return str;
}
public void setflag(int n){

flag=n;
}
public int getflag(int n){
return flag;
}
}//end class

เมธอดโอเวอร์โหลดดงิ้

พนิดำ พำนิชกุล (2554, หนำ้ 239) ให้ควำมหมำยวำ่ ในภำษำจำวำเรำสำมำรถสร้ำงเมธอด
ภำยในคลำสเดียวกนั ที่มีช่ือเดียวกนั ไดห้ ลำยๆ เมธอด โดยมีขอ้ กำหนดว่ำเมธอดท่ีมีช่ือเดียวกนั น้ี
จะตอ้ งมีชนิดและจำนวนพำรำมิเตอร์ไม่เหมือนกนั ในแต่ละเมธอดและเม่ือมีกำรเรียกใช้ เมธอด
ดังกล่ำว ตัวแปรภำษำจะตรวจสอบหรือจับอำร์กิวเมนต์ท่ีส่งไปว่ำตรงกับชนิดหรือจำนวน
พำรำมิเตอร์ของเมธอดใด ตวั แปลภำษำกจ็ ะเรียกเมธอดตวั น้นั ข้ึนทำงำนเองโดยอตั โนมตั ิ

164

ส่วนไซมอล เคนดลั (Simol Kendal, 2009, p. 96) ไดก้ ล่ำวไวว้ ำ่ กำรโอเวอร์โหลดดิ้งคือ
ช่ือถูกใหไ้ ปแนวคิดหลำยๆ เมธอดท่ีอำจมีควำมจำเป็ นตอ้ งใชใ้ นตวั ดำเนินกำรเดียวกนั ซ่ึงนนั่ คือช่ือ
ซ้ำกนั โดยเจอำร์อี (JRE) จะแยกเมธอดเหล่ำน้นั ดว้ ยกำรมองหำรำยกำรพำรำมิเตอร์ ถำ้ มีเมธอดต้งั แต่
สองหรือมำกกวำ่ น้นั มีชื่อเดียวกนั ดงั น้นั เมธอดเหล่ำน้นั ตอ้ งมีพำรำมิเตอร์ที่ต่ำงกนั

ขณะที่ เดวดิ อีเทอริดจ์ (David Etheridge, 2009, p. 68) กล่ำววำ่ เมธอดท่ีมีชื่อเดียวกนั แต่มี
พำรำมิเตอร์ตำ่ งกนั เรียกวำ่ เมธอดโอเวอร์โหลดดิ้ง ในมุมมองของกำรโหลดเกิน หมำยถึง เมธอดท่ี
หน่ึงชื่อมีมำกกวำ่ หน่ึงควำมหมำย

ดงั น้ันจึงสรุปได้ว่ำ เมธอดโอเวอร์โหลดดิ้ง (Overloading Method) คือ เมธอดที่มีชื่อ
เหมือนกบั เมธอดท่ีมีอยแู่ ลว้ ซ่ึงจะมีขอ้ แตกตำ่ งกนั ท่ี ค่ำที่คืน พำรำมิเตอร์ที่ป้ อน และกำรดำเนินกำร
ขำ้ งในเมธอด ซ่ึงตอนใชง้ ำนผเู้ ขียนโปรแกรมตอ้ งเรียกใชใ้ ห้ถูกตอ้ งตำมวตั ถุประสงคท์ ี่ตนตอ้ งกำร
พจิ ำรณำตวั อยำ่ งดำ้ นล่ำงน้ี

ตวั อย่างท่ี 5.16 จงเขียนโปรแกรมสร้ำงโอเวอร์โหลดเมธอดสำหรับกำรบวกค่ำตวั เลขท่ีป้ อน
โปรแกรม :
package javaapplication1;
public class Plusoverload {

//Attribute
int number1=0;
int number2=0;
String str="";
int flag=0;
int sum=0;
public int plus(int x, int y){
sum=x+y;
return sum;
}
public String plus(int x, int y, int f){
flag=f;
if(flag==0){
sum=x+y;

165

}
return "จำนวนเงินรวม "+String.valueOf(sum)+ " บำท ครับเจำ้ นำย ";
}
public String plus(int x, int y, String s){
str=s;
for(int i=x;i<=y;i++)
sum+=i;
return String.valueOf(sum)+str;
}
}
//--------------------------------------------------------------------------------------------------------------------
public class form_overload extends javax.swing.JFrame {
Plusoverload cal=new Plusoverload();
public form_overload() {
initComponents();
jTextField1.setText("เติมตวั เลข");
jTextField2.setText("เติมตวั เลขอีก");
jTextField3.setText("รออยำ่ งเดียว");
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
int n1,n2;
n1=Integer.parseInt(jTextField1.getText().trim());
n2=Integer.parseInt(jTextField2.getText().trim());
cal.sum=0;
jTextField3.setText(cal.plus(n1,n2," ครับทำ่ น"));
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
int n1,n2;
n1=Integer.parseInt(jTextField1.getText().trim());
n2=Integer.parseInt(jTextField2.getText().trim());

166

jTextField3.setText(cal.plus(n1,n2,0));
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

int n1,n2,result;
n1=Integer.parseInt(jTextField1.getText().trim());
n2=Integer.parseInt(jTextField2.getText().trim());
result=cal.plus(n1,n2);
jTextField3.setText(String.valueOf(result)); }
ผลการรัน โปรแกรมน้ีใชง้ านจาวาสวงิ ในการออกแบบส่วนการติดต่อกบั ผใู้ ชง้ าน โดยผลการรันจะ
ใหผ้ ใู้ ชป้ ้ อนตวั เลขแลว้ คลิกท่ีป่ ุม $ หากคิดเป็นเงิน แต่ถา้ เป็นตวั เลขธรรมดาใหค้ ลิก + ผลการรันจะ
ไดด้ งั ตวั อยา่ งดงั น้ี

ภำพที่ 5.9 แสดงผลการบวกแบบธรรมดา

167

ภำพที่ 5.10 แสดงผลการบวกแบบอธิบายรายละเอียด
คาอธิบาย กำรเรียกใชง้ ำนของคลำสน้ีจะทำกำรโอเวอร์โหลดดิ้งเมธอดดงั น้ี

public int plus(int x,int y){

public String plus(int x,int y,int f){

public String plus(int x,int y,String s){


สรุป

คลำส คือ แม่แบบของวตั ถุท่ีประกอบด้วยแอตทริบิวต์และเมธอด และกำรขบั เคลื่อน
โปรแกรมต่ำง ๆ ผำ่ นเมธอดที่เป็นพฤติกรรม หรือฟังกช์ นั กำรทำงำนของโปรแกรม โดยเมธอดแบ่ง
ออกเป็นเมธอดที่มีกำรคืนค่ำ และเมธอดที่ไม่มีกำรคืนค่ำ กำรกำหนดเขำ้ ถึงแอตทริบิวต์ และเมธอด
สำหรับคอนสตรักเตอร์ท่ีเป็นเมธอดสำหรับกำหนดค่ำต่ำงๆ เมื่อมีกำรเรียกใชง้ ำนหรือกำรสร้ำงวตั ถุ
เป็นคร้ังแรก นอกจำกน้นั ยงั มีคุณสมบตั ิของกำรโอเวอร์โหลดดิ้ง สำหรับสร้ำงคุณสมบตั ิต่ำง ๆ ของ
เมธอดเดียวกนั แตส่ ำมำรถทำงำนไดห้ ลำยหนำ้ ที่

168

แบบฝึ กหดั ท้ายบท

1. จงอธิบำยข้นั ตอนของกำรสร้ำงคลำส และวตั ถุ
2. จงอธิบำยวำ่ เมธอดคืออะไร ทำหนำ้ ที่อยำ่ งไร
3. จงอธิบำยวำ่ แอคเซสเซอร์คืออะไร ตอ้ งดำเนินกำรอยำ่ งไรบำ้ ง
4. จงอธิบำยกำรสร้ำงโอเวอร์โหลดเมธอด และอธิบำยว่ำโอเวอร์โหลดสำมำรถทำกบั
คอนสตรักเตอร์ไดห้ รือไม่อยำ่ งไร
5. จงยกตวั อยำ่ งโปรแกรมท่ีใชง้ ำนเมธอด ใน main() โดยไม่ตอ้ งสร้ำงวตั ถุ
6. จงเขียนโปรแกรมโดยใชค้ อนสตรักเตอร์แบบหลำยๆ แบบ
7. จงอธิบำยวำ่ คอนสตรักเตอร์กบั กำรโอเวอร์โหลดสนบั สนุนกำรทำงำนกนั อยำ่ งไร
8. จงอธิบำยและยกตวั อยำ่ งเมธอดท่ีมีกำรผำ่ นคำ่ พำรำมิเตอร์และมีกำรคืนคำ่ เม่ือเรียกใชง้ ำน
9. จงออกแบบคลำสของโปรแกรมคำนวณค่ำไฟฟ้ ำโดยแบ่งตำมกำรใช้ของหน่วยดงั น้ี 0-5
หน่วยไมเ่ ก็บ 6-10 เสียค่ำใชจ้ ่ำย 30 บำทต่อหน่วย และ 11 หน่วยข้ึนไปเสียหน่วยละ 40 บำท
10. จงเขียนโปรแกรมแสดงช่ือสัตวท์ ่ีมีอยู่ในสวนสัตว์ โดยให้ผใู้ ชป้ ้ อนช่ือสัตวแ์ ลว้ โปรแกรม
จะแสดงช่ือและแหล่งที่อยอู่ อกมำ
11. จงเขียนโปรแกรมเครื่องบวกเลยเลขโดยกำหนดใหส้ ำมำรถคำนวณไดท้ ุกชนิดของตวั เลขท่ี
ป้ อน หรือหำกป้ อนเป็นสตริงใหเ้ อำสตริงมำต่อกนั
12. กำหนดใหม้ ี int x; int y; String s; จงเขียนเมธอด set และ get ค่ำเหล่ำน้ี
13. กำหนดให้เมธอด xxx() ไม่มีกำรทำงำนใดๆ ให้เขียนโปรแกรมสร้ำงหน้ำท่ีให้ เมธอด
ดงั กล่ำวใหม้ ีหนำ้ ที่สำมำรถทำงำนได้ 3 หนำ้ ท่ีท่ีแตกตำ่ งกนั
14. จงเขียนโปรแกรมโดยใช้ JFrame เป็ นโปรแกรมหลักที่เรียกใช้งำนคลำสหำคู่โดย
กำหนดใหผ้ ใู้ ชป้ ้ อนเพศและอำยุของตนเขำ้ ไปแลว้ ให้โปรแกรมแสดงกำรทำนำยวำ่ เน้ือคู่ของเขำจะ
เป็นอยำ่ งไร
15. จงออกแบบคลำสและเขียนโปรแกรมสำหรับกำรตรวจสอบกำรเขำ้ เรียนของนกั ศึกษำใน
แต่ละคร้ังของกำรเรียน โดยกำหนดใหผ้ เู้ ขำ้ เรียนตอ้ งป้ อนรหสั ตวั เองตอนเขำ้ เรียนและป้ อนรหสั อีก
คร้ังก่อนออกจำกหอ้ งเรียน

169

เอกสารอ้างองิ

กิตติ ภกั ดีวฒั นกลุ . (2543 ก). JAVA ฉบบั พนื้ ฐาน. กรุงเทพฯ: ไทยเจริญกำรพิมพ.์
_________. (2543 ข). JAVA ฉบับโปรแกรมเมอร์. กรุงเทพฯ: ไทยเจริญกำรพมิ พ.์
กิตติ ภกั ดีวฒั นะกุล และ ศิริวรรณ อมั พรดนยั . (2544). Oject-Oriented ฉบับพนื้ ฐาน. กรุงเทพฯ:

KTP Comp&Consult.
กิตติพงษ์ กลมกล่อม. (2552). การวเิ คราะห์และออกแบบระบบเชิงวัตถุด้วย UML. กรุเทพฯ: เคทีพี

แอนด์ คอนซลั ท.์
ธีรวฒั น์ ประกอบผล. (2552). คู่มือการเขียนโปรแกรมภาษา Java. กรุงเทพฯ: ซคั เซส มีเดีย.
_________. (2553). คู่มือการเขียนโปรแกรมภาษา Java. กรุงเทพฯ: ซิมพลิฟลำย.
พนิดำ พำนิชกุล. (2548). Object-Oriented ฉบับพนื้ ฐาน. กรุงเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
_________. (2554). การเขียนโปรแกรมคอมพิวเตอร์เบือ้ งต้นด้วยภาษาจาวา. พิมพ์คร้ังท่ี 5.

กรุงเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
พิเชษฐ์ ศิริรัตนไพศำลกุล. (2553). หลกั การเขียนโปรแกรมเบอื้ งต้นด้วยภาษา JAVA. กรุงเทพฯ:

ซีเอด็ ยเู คชนั .
Allen B. Downey.(2011). How to Think Like a Computer Scientist Java Version. Ventus

Publishing Aps. [Online]. Available: http://www.BookBoon.com
Bruce Eckel. (2000). Thinking in Java. 2nd . USA: Prentice Hall PTR Prentice-Hall.
Cay Horstmann. (2002). Object-Oriented Design & Patterns. USA: John Wiley & Sons.
David Etheridge. (2009). Java:The Fundamentals of Objects and Classes-An Introduction to

Java Programming. Ventus Publishing Aps. [Online]. Available:
http://www.BookBoon.com.
Simol Kendal. (2009). Object Orientted Programming using Java. Ventus Publishing Aps.
[Online]. Available: http://www.BookBoon.com.
Y. Daniel Liang. (2007). Introduction to Java Programming. USA: Pearson Prentice Hall
Pearson Education, Inc.
Yacov Fain. (2004). JavaTM Programming for kid, parents and grandparents. [Online].
Available: http://www.BookBoon.com.

บทที่ 6
ความสัมพนั ธ์ของคลาส

พ้ืนฐานของการสื่อสารระหวา่ งวตั ถุตอ้ งมีวตั ถุหน่ึงเป็นผสู้ ่งเมสเซจไปยงั อีกวตั ถุหน่ึงท่ีเป็ น
ตวั รับ เม่ือวตั ถุรับเมสเซจมาแลว้ จะดาเนินการตามตวั ดาเนินการท่ีสร้างไว้ หลงั จากน้นั อาจคืนค่า
กลบั ออกมาให้ หรือบางคร้ังอาจไม่คืนก็ได้ จากแนวคิดดงั กล่าวน้ี ทาให้การสร้างคลาสเพ่ือเป็ น
แม่แบบของวตั ถุจะตอ้ งกาหนดความสัมพนั ธ์เอาไว้ เพื่อใชส้ าหรับการส่ือสารดงั กล่าว บทน้ีเสนอ
วธิ ีการกาหนดความสัมพนั ธ์ของคลาสแบบต่างๆ ไดแ้ ก่ ดีเพนเดนซี แอคกรีเกชนั คอมโพสสิชนั
แอสโสสิเอชนั ซ่ึงนาเสนอโดยกาหนดโครงสร้างพ้ืนฐานของความสัมพนั ธ์ สัญลกั ษณ์ ลกั ษณะการ
ใชง้ าน โครงโปรแกรม และตวั อยา่ งของแตล่ ะโปรแกรม

ความสัมพนั ธ์แบบดเี พนเดนซี

กิตติ ภักดีวฒั นะกุล และ กิตติพงษ์ กลมกล่อม (2548, หน้า 17) ได้เขียนไวว้ ่า
“Dependency ใชเ้ พื่ออธิบายวา่ ของสองส่ิงมีความสัมพนั ธ์กนั แบบข้ึนต่อกนั หรือมีอิทธิพลต่อกนั
(การเปลี่ยนแปลงในส่ิงหน่ึงจะส่งผลกระทบต่ออีกสิ่งหน่ึง)”

ความสมั พนั ธ์แบบดีเพนเดนซีคือความสมั พนั ธ์ที่ข้ึนต่อกนั ท่ีอีกคลาสหน่ึงเรียกใชอ้ ีกคลาส
หน่ึงโดยกาหนดให้เป็ นแอตทริบิวต์ภายในเมธอดยอ่ ย หรืออาจเป็ นพารามิเตอร์ หรือค่าท่ีคืนก็ได้
ซ่ึงใชส้ ัญลกั ษณ์คือ

ภาพที่ 6.1 แสดงความสัมพนั ธ์ของ MainDependence กบั MyReferenced แบบ Dependence

171

โครงโปรแกรมที่ใช้ ดงั น้ี
โครงโปรแกรม :
classs MainDependence {

public void methodOne(){
MyReferenced m;

}
public void methodTwo(MyReferenced p){

}
public MyReferenced methodThree(){

return MyReference;
}
}
พจิ ารณาโครงโปรแกรมของคลาส MainDependence โดยท่ีเมธอด methodOne น้นั พบวา่ มี

แอตทริบิวต์ชื่อ MyReferenced m; ซ่ึงเป็ นแอตทริบิวหน่ึง สาหรับ methodTwo() จะมี
MyReferenced p; เป็ นพารามิเตอร์ ส่วน methodThree() มี MyReferenced เป็ นค่าท่ีคืน return
MyReferenced ตวั อยา่ งต่อไปน้ีแสดง ความสมั พนั ธ์แบบน้ี

ตัวอย่างที่ 6.1 จงเขียนโปรแกรมแสดงช่ือ สกุล ที่อยขู่ องตนเอง โดยกาหนด ShowNameApp เป็ น
คลาสหลกั ท่ีมีความสัมพนั ธ์แบบ Dependence กบั คลาส ShowName โดยให้คลาส ShowName
เป็นแอตทริบิวตห์ น่ึงของคลาสหลกั
คลาสไดอะแกรม

ภาพท่ี 6.2 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งที่ 6.1

172

โปรแกรม :
คลาสแสดงผล
public class ShowName {

public void showMyName(){
System.out.println("Mr.Incredible");

}
public void showMySurname(){

System.out.println("Jone");
}
public void showMyAddress(){

System.out.println("Thailand.");
}
}
คลาสสาหรับรัน
public class ShowNameApp {
public static void main(String args[]){

ShowName name = new ShowName();
name.showMyName();
name.showMySurname();
name.showMyAddress();
}
}

ผลการรัน แสดงดงั น้ี
Mr.Incredible
Jone
Thailand.

173

ตัวอย่างที่ 6.2 จากตวั อย่างท่ี 6.1 จงเขียนโปรแกรมส่วนของคลาส ShowNameAppPara ซ่ึง
กาหนดใหเ้ รียกใชง้ านคลาส ShowName ผา่ นเมธอด activateName(ShowName name)
คลาสไดอะแกรม

ภาพที่ 6.3 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งท่ี 6.2
โปรแกรม :
คลาสรัน
public class ShowNameAppPara {

public static void main(String args[]){
ShowNameAppPara m= new ShowNameAppPara();
ShowName n = new ShowName();
m.activateName(n);

}
public void activateName(ShowName name){

name.showMyName();
name.showMySurname();
name.showMyAddress();
}

}
คาอธิบาย ในกรณีน้ีตอ้ งสร้างวตั ถุใหมข่ ้ึนมาดว้ ย

ShowNameAppPara m= new ShowNameAppPara(); // สาหรับเป็ นวตั ถุหลกั
ShowName n = new ShowName(); //สร้างวตั ถุที่จะผา่ นคา่ ใหเ้ มธอดทางานของactivateName

174

ตวั อย่างที่ 6.3 จงเขียนคลาส
1. KeepResult เพื่อคานวณและเก็บผลการคานวณภาษีโดยมีเมธอดสาหรับ การคานวณ

คือ calculate(float taxRate, float money) และมีเมธอด สาหรับ setTax() และ getTax() เพื่อแสดงค่า
ภาษี

2. TaxCalculation โดยเมธอดสาหรับ public KeepResult sendToValue(float r, float m)
โดยคา่ r เป็นอตั ราภาษี และ m เป็นจานวนเงินที่จะคานวณ
คลาสไดอะแกรม

ภาพท่ี 6.4 แสดงความสัมพนั ธ์ของคลาสตวั อยา่ งท่ี 6.3
โปรแกรม :
คลาสคานวณ
public class KeepResult {
private float Tax;
public void calculate(float taxRate, float m){
setTax(taxRate*m);
}
public float getTax() {
return Tax;
}

public void setTax(float t) {
Tax = t;

}
}

175

คลาสรัน
public class TaxCalculation {

public static void main(String args[]){
TaxCalculation t=new TaxCalculation();
KeepResult kr;
double taxrate=0.05, money=50000;
kr=t.calculation((float)taxrate, (float)money);
System.out.println(kr.getTax());

}

public KeepResult calculation(float r,float m){
KeepResult k=new KeepResult();
k.calculate(r, m);
return k;

}
}

คาอธิบาย คลาสน้ีแสดงการทางานโดยการคืนค่า KeepResult เป็ นค่าที่คืนไปใหส้ าหรับผู้
เรียกใชง้ าน

โดยปกติแลว้ การใชง้ านน้นั อาจเรียกใชง้ านโดยมีคลาสหลกั เป็ นศูนยก์ ลางแลว้ เรียกใชง้ าน
คลาสที่มีความสมั พนั ธ์กนั แบบน้ี เช่นดงั ภาพที่ 6.5

ภาพที่ 6.5 ลกั ษณะความสมั พนั ธ์แบบศูนยก์ ลาง

176

กาสร้างความสัมพนั ธ์อาจมีลกั ษณะของการเรียกใช้งานแบบต่อเน่ืองเป็ นเส้นตรงอาจ
เป็ นไปไดเ้ ช่นกนั แสดงดงั ภาพท่ี 6.6 หรืออาจมีลกั ษณะการผสมผสานกนั ท้งั สองแบบก็ได้ ลาดบั
ต่อไปตวั อยา่ งความสัมพนั ธ์ของท้งั สองรูปแบบ

ภาพท่ี 6.6 ลกั ษณะความสัมพนั ธ์แบบต่อเน่ือง
ตัวอย่างที่ 6.4 จงเขียนโปรแกรมคานวณภาษี โดยกาหนดให้มีคลาสหลัก คลาสของคน
คลาสคานวณ และคลาสรายงาน ใหอ้ อกแบบโปรแกรมโดยใชค้ วามสมั พนั ธ์แบบ Dependence
คลาสไดอะแกรม

ภาพที่ 6.7 แสดงความสัมพนั ธ์ของคลาสตวั อยา่ งที่ 6.4
โปรแกรม :
คลาสหลกั
public class MainTaxCalculation {

public static void main(String args[]){
Person p=new Person();
Calculation c=new Calculation();

177

Report r=new Report();
p.setName("Somporn");
p.setSurname("Somjai");
r.reportPerson(p.getName(), p.getSurname());
r.reportTax(c.calTax(0.05, 700000));
}

}
คลาสรายงาน
public class Report {

public void reportPerson(String name,String surname){
System.out.println("Name:"+name+" Surname:"+surname);

}
public void reportTax(double tax){

System.out.println("Tax:"+tax);
}
}
คลาสบคุ คล
public class Person {
private String name;
private String surname;
public String getName() {

return name;
}
public void setName(String name) {

this.name = name;
}
public String getSurname() {

return surname;
}

178

public void setSurname(String surname) {
this.surname = surname;

}
}
คลาสคานวณ
public class Calculation {

public double calTax(double r,double m){
return r*m;

}
}
ผลการรัน แสดงดงั น้ี
Name:Somporn Surname:Somjai
Tax:35000.0

ตัวอย่างที่ 6.5 จากตวั อยา่ งที่ 6.4 จงเขียนโปรแกรมติดต่อผใู้ ชโ้ ดยใช้ Swing GUI สาหรับติดต่อกบั
ผใู้ ชส้ าหรับการคานวณภาษี
คลาสไดอะแกรม

ภาพท่ี 6.8 แสดงความสัมพนั ธ์ของคลาสตวั อยา่ งที่ 6.5

179

สาหรับคลาสไดอะแกรมน้ีมีสัญลกั ษณ์ของการสืบทอดคุณสมบตั ิเพิ่มข้ึนมาซ่ึงเป็ นส่วน
ของการติดต่อผใู้ ชโ้ ดยใชจ้ าวาสวงิ ซ่ึงจะกล่าวในบทต่อไป
โปรแกรม :
public class Person {

private String name;
private String surname;
public String getName() {

return name;
}
public void setName(String name) {

this.name = name;
}
public String getSurname() {

return surname;
}
public void setSurname(String surname) {

this.surname = surname;
}
}
คลาสคานวณ
public class Calculation {

public double calTax(double r,double m){
return r*m;

}
public void activateReport(){
// Report r=new ReportTax()
}
}

180

คลาสรายงาน
public class Report {

public String reportPerson(String name,String surname){
return "Name:"+name+" Surname:"+surname;

}
public String reportTax(double tax){

return "Tax:"+tax;
}
}
หลงั จากน้นั ออกแบบสวงิ ใหไ้ ดด้ งั น้ี

ภาพที่ 6.9 แสดงการออกแบบดว้ ยโปรแกรมตวั อยา่ ง 6.6 ดว้ ยสวงิ

ส่วนของ jButtion1ActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

Calculation c = new Calculation();
Person p=new Person();
Report r=new Report();
p.setName(jTextField1.getText());
p.setSurname(jTextField2.getText());
double tax =c.calTax(Double.parseDouble(jTextField3.getText()),

Double.parseDouble(jTextField4.getText()));

181

String report=r.reportPerson(p.getName(), p.getSurname())+
" "+r.reportTax(tax);

jTextField5.setText(report);
}
ผลการรัน แสดงไดด้ งั ภาพ

ภาพที่ 6.10 แสดงผลการรันโปรแกรมที่ 6.5

ความสัมพนั ธ์แบบ แอคกรีเกชัน

พนิดา พานิชกุล (2548, หนา้ 25) กล่าววา่ Aggregation หมายถึง การท่ีวตั ถุยอ่ ยหลาย ๆ

วตั ถุถูกนามาประกอบเขา้ กบั วตั ถุหลกั หน่ึงตวั เพอื่ สามารถทางานบางอยา่ งได้

แอคกรีเกชนั เป็ นความสัมพนั ธ์ has-a ซ่ึงหมายถึง มี โดยท่ีระหว่างสองคลาสจะมีคลาส

หน่ึงมีแอตทริบิวตเ์ ป็นของอีกคลาสหน่ึงอยู่ เช่น คลาส class A has a class B หมายถึง คลาส A จะมี

แอตทริบิวตอ์ ยา่ งนอ้ ยหน่ึงแอตทริบิวตเ์ ป็นคลาส B ใชส้ ญั ลกั ษณ์ A B

ความสัมพนั ธ์แสดงไดด้ งั ภาพภาพต่อไปน้ี

ภาพท่ี 6.11 แสดงความสัมพนั ธ์แบบ แอคกรีเกชนั

182

MainAggregate มีแอตทริบิวต์ aggObj เป็นชนิด AggReference ถา้ เขียนโครงของคลาสจะไดด้ งั น้ี
โครงโปรแกรม :
class MainAggregate{

AggReference aggObj;

}
class AggReference {

}

ตัวอย่างท่ี 6.6 จงเขียนโปรแกรมแสดงช่ือตนเองโดยมีคลาส AggApp เป็ นคลาสหลกั และใชค้ ลาส
AggShowName สาหรับแสดง ชื่อ สกุล และที่อยู่
คลาสไดอะแกรม

ภาพที่ 6.12 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งท่ี 6.6
โปรแกรม :
----------------------------------------------------------------------------------------------------------------------
public class AggApp {

AggShowName aggObj = new AggShowName();
public static void main(String args[]){

AggApp myApp = new AggApp();
myApp.aggObj.showMyName();
myApp.aggObj.showMySurname();
}

183

}
----------------------------------------------------------------------------------------------------------------------
public class AggShowName {

public void showMyName(){
System.out.println("Mr.Hero");

}
public void showMySurname(){

System.out.println("Thaifamily");
}
}

ผลการรัน แสดงดงั น้ี
Mr.Hero
Thaifamily

ตัวอย่างที่ 6.7 จงเขียนโปรแกรมแสดงการคานวณคา่ น้า ถา้ 0-5 หน่วยไม่คิดคา่ 6-10 คิดหน่วยละ 30
บาท 11-50 คิดหน่วยละ 40 บาท และ 51 หน่วยข้ึนไปคิดหน่วยละ 50 บาท โดยยกตวั อยา่ งการ
คานวณคา่ น้าของ นาย สมร จานวนหน่วยของน้าที่ใชค้ ือ 105 หน่วย

แนวคิด ควรจะมีคลาส การคานวณ คลาสอตั ราการคานวณ และคลาสสาหรับรันเป็ นหลกั
คลาสไดอะแกรม

ภาพที่ 6.13 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งท่ี 6.7

184

โปรแกรม :
---------------------------------------------------------------------------------------------------------------------
public class CalWater {

WaterRate w=new WaterRate();
public int cal(int u){

int total=0;
if(u<=5)

total+=w.rateA(u);
else

if((u>5)&&(u<=10)){
total+=w.rateB(u);
}else
if((u>10)&&(u<=50)){
total+=w.rateB(5);
total+=w.rateC(u-5);
}else

if(u>50){
total+=w.rateB(5);
total+=w.rateC(40);
total+=w.rateC(u-40);

}
return total;
}
}
---------------------------------------------------------------------------------------------------------------------
public class WaterRate {
public int rateA(int u){
return u*0;
}
public int rateB(int u){

185

return u*30;
}
public int rateC(int u){

return u*40;
}
public int rateD(int u){

return u*50;
}
}
----------------------------------------------------------------------------------------------------------------------
public class MainCalWater {
public static String name="สมร";
public static int unit=105;
public static CalWater cw=new CalWater();
public static void main(String args[]){

System.out.println("----------------");
System.out.println(" ค่าน้าของนายสมร");
System.out.println("----------------");
System.out.println(" "+cw.cal(unit));
System.out.println("----------------");

}
}
----------------------------------------------------------------------------------------------------------------------
ผลการรัน แสดงดงั น้ี
----------------
คา่ น้าของนายสมร
----------------
4350
----------------

186

ตัวอย่างที่ 6.8 จงเขียนโปรแกรมคานวณภาษีในตวั อยา่ งที่ 6.4 โดยใชค้ วามสัมพนั ธ์แบบ แอคกรีเก
ชนั
คลาสไดอะแกรม

ภาพท่ี 6.14 แสดงความสัมพนั ธ์ของคลาสตวั อยา่ งท่ี 6.8
โปรแกรม :
----------------------------------------------------------------------------------------------------------------------
public class TaxAppAgg extends javax.swing.JFrame {

Calculation c = new Calculation();
Person p=new Person();
Report r=new Report();
----------------------------------------------------------------------------------------------------------------------
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
p.setName(jTextField1.getText());
p.setSurname(jTextField2.getText());
double tax =c.calTax(Double.parseDouble(jTextField3.getText()),

Double.parseDouble(jTextField4.getText()));
String report=r.reportPerson(p.getName(), p.getSurname())+

" "+r.reportTax(tax);
jTextField5.setText(report);
}

187

ตัวอย่างที่ 6.9 จงเขียนโปรแกรมเครื่องคิดเลข โดยรับขอ้ มูลจากแป้ นพิมพโ์ ดยตรง
คลาสไดอะแกรม

ภาพที่ 6.15 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งท่ี 6.9
โปรแกรม :
----------------------------------------------------------------------------------------------------------------------
public class EasyCalculator {

public double plus(double number1, double number2){
return number1+number2;

}
public double minus(double number1, double number2){

return number1-number2;
}
public double multiply(double number1, double number2){

return number1*number2;
}
public double divide(double number1, double number2){

return number1/number2;
}

}
---------------------------------------------------------------------------------------------------------------------
import java.io.*;
public class calculatorApp {

static EasyCalculator casio =new EasyCalculator();

188

public static void main(String args[]) throws IOException
{ InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);
double number1,number2;
System.out.println("Input number 1 :");
number1=Double.parseDouble(stdin.readLine());
System.out.println("Input number 2 :");
number2=Double.parseDouble(stdin.readLine());

System.out.println("----Your input----");
System.out.println(" number 1:"+number1);
System.out.println(" number 2:"+number2);
System.out.println("------------------");
System.out.println(" Plus result:"+casio.plus(number1, number2));
System.out.println(" Plus result:"+casio.minus(number1, number2));
System.out.println(" Plus result:"+casio.multiply(number1, number2));
System.out.println(" Plus result:"+casio.divide(number1, number2));
System.out.println("------------------");
}
}
---------------------------------------------------------------------------------------------------------------------
ผลการรัน จะใหผ้ ใู้ ชป้ ้ อนตวั เลขสองจานวนแลว้ แสดงดงั ตวั อยา่ ง
Input number 1 :
50
Input number 2 :
25
----Your input----
number 1:50.0
number 2:25.0
------------------

189

Plus result:75.0
Plus result:25.0
Plus result:1250.0
Plus result:2.0
------------------

ตัวอย่างที่ 6.10 จงเขียนโปรแกรมเครื่องคิดเลขโดยกาหนดใหใ้ ช้ Swing GUI ในการติดต่อผใู้ ช้
คลาสไดอะแกรม

ภาพท่ี 6.16 แสดงความสัมพนั ธ์ของคลาสตวั อยา่ งท่ี 6.10
โปรแกรม :
ส่ วนตอนต้ นของคลาส
public class SwingCalculator extends javax.swing.JFrame {

EasyCalculator casio = new EasyCalculator();
ส่วนของเมธอดสาหรับป่ ุม

double plusResult,minusResult,multiplyResult,divideResult;

190

plusResult=casio.plus(Double.parseDouble(jTextField1.getText())
,Double.parseDouble(jTextField2.getText()));

minusResult=casio.minus(Double.parseDouble(jTextField1.getText())
,Double.parseDouble(jTextField2.getText()));

multiplyResult=casio.multiply(Double.parseDouble(jTextField1.getText())
,Double.parseDouble(jTextField2.getText()));

divideResult=casio.divide(Double.parseDouble(jTextField1.getText())
,Double.parseDouble(jTextField2.getText()));

jTextField3.setText(String.valueOf(plusResult));
jTextField4.setText(String.valueOf(minusResult));
jTextField5.setText(String.valueOf(multiplyResult));
jTextField6.setText(String.valueOf(divideResult));
}

ภาพท่ี 6.17 การออกแบบโปรแกรมตวั อยา่ งที่ 6.10
ผลการรัน แสดงดงั น้ี

191

ภาพท่ี 6.18 ผลการรันโปรแกรมตวั อยา่ งท่ี 6.10

ตวั อย่างท่ี 6.11 จงเขียนโปรแกรมบนั ทึกประวตั ิบุคคล และแสดงผล โดยกาหนดใหเ้ กบ็ ขอ้ มลู ได้
สูงสุดจานวน 10 คน เก็บโดยใชอ้ าร์เรยข์ องวตั ถุ
คลาสไดอะแกรม
แนวคิด ควรมีคลาสดงั น้ี ฐานขอ้ มูลสาหรับบนั ทึก บุคคล คลาสแสดงผล และคลาสสาหรับรัน
โปรแกรมหลกั แสดงดงั ภาพที่ 6.18
โปรแกรม :
public class DBMS {

private Person data[]=new Person[10];
public DBMS(){

for(int i=0;i<10;i++) data[i]=new Person();
}
public Person getData(int Recordnumber) {

return data[Recordnumber];
}
public void setData(Person p,int Recordnumber) {

this.data[Recordnumber] = p;
}
}

192

ภาพท่ี 6.19 แสดงความสมั พนั ธ์ของคลาสตวั อยา่ งที่ 6.11
----------------------------------------------------------------------------------------------------------------------
public class Person {

private String name;
private String surname;
public String getName() {

return name;
}
public void setName(String name) {

193

this.name = name;
}
public String getSurname() {

return surname;
}
public void setSurname(String surname) {

this.surname = surname;
}
}
----------------------------------------------------------------------------------------------------------------------
public class Report {
public String reportName(Person p){

return p.getName();
}
public String reportSurName(Person p){

return p.getSurname();
}
}
----------------------------------------------------------------------------------------------------------------------
หลงั จากน้นั สร้างส่วนของ DBApplication โดยออกแบบดงั ภาพ

ภาพที่ 6.20 การออกแบบโปรแกรมตวั อยา่ งท่ี 6.11

194

ส่ วนหัวคลาส
public class DBApplication extends javax.swing.JFrame {

private DBMS db = new DBMS();
private Person[] p=new Person[10];
private Report r=new Report();
private int RecordNumber=0;
private int ReportRec=0;
ป่ ุมบนั ทึก
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Person[] p=new Person[10];

if(RecordNumber<10){
p[RecordNumber]= new Person();
p[RecordNumber].setName(jTextField1.getText());
p[RecordNumber].setSurname(jTextField2.getText());
db.setData(p[RecordNumber],RecordNumber); //บนั ทึก
RecordNumber++;
jTextField3.setText(String.valueOf(RecordNumber));
javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(),
"บนั ทึกสาเร็จ", "โตต้ อบการบนั ทึก",
javax.swing.JOptionPane.INFORMATION_MESSAGE);

}
else

javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(),
"ไม่สามารถบนั ทึกได"้ , "โตต้ อบการบนั ทึก",
javax.swing.JOptionPane.ERROR_MESSAGE);

}
ป่ ุม <

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
if(ReportRec<10){


Click to View FlipBook Version