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 ParichatKhamung62, 2021-03-18 22:14:17

การเขียนโปรแกรมบนมาตรฐานเปิด

151



string studentID = "S001"; คือ การก าหนดค่าของ attribute studentID ให้มีค่า "S001"; และเปน
ข้อมูลชนิด String


Student student = new student(); คือ การสร้าง object student จาก class student โดยไม่มีการส่งค่า

argument

System.out.println("##Default Constructor##");


System.out.println("Student ID ="

+ StudentID + "\nGrade = " + Student.grade);


คือ การแสดงผลตัวแปร Student ID และข้อมูล grade จาก class Student แต่เนื่องจากไม่มีการสร้าง
Constructor ไว้ จึงท าให้ compiler สร้าง default Constructor ให้โดยอัตโนมัติ จึงได้ค่าเริ่มต้นของ grade

เป็น 0.0



เมื่อท าการรันผลโปรแกรมจะได้ผลดังนี้
















ตัวอย่างของโปรแกรมที่มีการใช้งาน Constructor มีดังนี้

152



จะสังเกตไดว่าโปรแกรมนี้จะมีลักษณะคล้ายกันกับโปรแกรมตัวอย่างที่มีการใช้งาน Default Constructor
ต่างกันเพียงในโปรแกรมที่มีการสร้าง Constructor Student() และก าหนดค่า grade = 3.5()[ เมื่อมีการสร้าง
object จาก class Student จ าท าให้ Constructor ท างานโดยอัตโนมัต ิ




เมื่อรันโปรแกรมจะได้ผลดังนี้















รอใส่รูป







Overloading Constructor




เนื่องจาก Constructor ถือเป็น method ชนิดหนึ่งในภาษา java ดงนั้นจงสามารถใชงาน







Overloading Constructor ไดเชนเดยวกันกับการใชงาน Overloading Method โดยมีหลกการเดยวกันคอ


จ านวนหรือข้อมูลของ argument ที่ส่งไปกับชื่อ class ในเเต่ละ Constructor จะต้องต่างกัน
ตังอย่างของโปรแกรมที่มีการใช้งาน Overloading Constructor

153


สามารถอธิบายโปรแกรมได้ดังนี้

class Student {


String student ID;

float grade;

สร้าง class Student โดยมี attribute studentID เป็นข้อมูลชนิด String และ grade เป็นข้อมูลชนิด float


public student(){

Student ID ="S0002";


}


สร้าง Constructor ชื่อ Student() โดยก าหนดคาของ StudentID ="S0002"
public student(float g){


grade = g;

}

}


สร้าง Constructor ชื่อ student(float g) โดยก าหนดให้ค่าของ grade มีค่าเท่ากับค่าของ parameterg ท ี่
รับเข้ามา


public class OverloadingConstructor {

public static void main (string [ ] args) {


float data = 2.5f; ก าหนดค่า attribute data = 2.5 เป็นข้อมูลชนิด float

Student Student1 =new Student (); สร้าง object student1 ผ่าน class Student โดยไม่มีการส่งค่า

argument โปรแกรมจึงเรียกใช้งาน Constructor student ท าให้ไดค่าStudentID = "S0002"

Student Student2 = new Student (data); สร้าง object Student2 ผ่าน class Student โดยมีการส่งค่า


arugment คือคาของ data เป็นข้อมูลชนิด float ดังนั้นโปรแกรมจึงเรียกใช้งาน Constructor student(float

g)ที่ให้ได้คา grade =2.5f

System.out.println("###Overloading Constructor###");

System.out.println("Student ID =" + student1.studentID + "\nGrade = " +

Student2.grade);

154


เมื่อรันโปรแกรมจะได้ผลดังนี้

























การเรียกใช้ constructor ด้วย keyword this()


ผู้ใชสามารถเรียกใช้งาน constructor ที่อยู่คลาสเดียวกันได้โดยการใช้ keyword this()


ซึ่งจะต้องเป็นค าสั่งแรกสุดของ constructor ที่เปนตัวเรียกใช้งาน โดยจะมีรูปแบบของการใช้งานเหมือนกันกับ
การใช้ค าสั่ง new นั่นคือค าสามารถส่งชนิดข้อมูลของ argument ที่ต้องการได้ ท าให้สามารถใช้งาน

constructor ที่สอดคล้องกันได้

155




สามารถอธิบายโปรแกรมได้ดังนี้



เมื่อมีการสร้าง object student3 ผาน class Student จะมีการเรียกใช้งาน Constructor Student(float g)

เนื่องจากมีการส่งค่า argument data ซึ่งเป็นข้อมูลชนิด float ท าให้ไดค่า grade = 4.0f และ Constructor
Student(float g) จะเรียกใช้งาน keyword this(“S0003”) ท าให้ Constructor Student(String s) ท างาน ท า

ให้ได้ค่า Student ID = “S0003”

จากโปรแกรมข้างต้นจะสังเกตได้ว่า มีการสร้าง object student3 เพียง 1 object เท่านั้น แต่สามารถ

เรียกใช้งาน Constructor ได้ 2 ตัว คือ Student (String S) และ Student (float g)เนื่องจากมีการใช ้

งาน keyword this() ที่สามารถเรียกใช้งาน Constructor ที่อยู่ในClass เดียวกันได้โดยไม่ต้องสร้าง object

ใหม่

เมื่อรันโปรแกรมจะได้ผลดังนี้























Exception

การจัดการข้อผิดพลาด(Exception Handling)

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

จัดการกับความผิดพลาดที่เกิดขึ้นและป้องกัน ให้เกิดความผิดพลาดน้อยทสุด
ี่
ข้อผิดพลาดที่พบเห็นได้บ่อยๆ เช่น การหารด้วยศนย์หรือการป้อนข้อมูลผิดประเภท อาจส่งผลให้ การท างานของ



โปรแกรมล้มเหลวได้ ในการตรวจสอบและดักจบข้อผิดพลาดนั้นสามารถทาได้ โดยการใช้งานException มาช่วย
ั่

ี่
ในการตรวจสอบ ซึ่งถือเป็นวิธีที่นิยมกันมาก เนื่องจากมีการแยกส่วนของชุดค าสง ทใช้สาหรับการท างานของ
ี่

โปรแกรมออกจาก ชุดคาสั่งทใช้ในการจัดการความผิดพลาดท าให้สามารถตรวจสอบได้ตรงจุดและแก้ไขได้สะดวก

156


ในภาษา Java นั้นจะมีกลไกส าหรับการดักจับข้อผิดพลาดโดยจะท าการโยน (throw) ความผิดพลาดที่เกิดขึ้น


ให้กับส่วนชุดค าสั่งที่มีหน้าที่จัดการกับความผดพลาดทเกิดขึ้น โดยใช้งาน class Exception ซึ่งเป็นส่วนหนึ่งของ
ี่
class Throw able

ความแตกต่างระหว่าง Error และ Exception

Error และ Exception นั้นถือเป็นความผิดพลาดที่เกิดขึ้นในโปรแกรมเช่นเดียวกัน ข้อแตกต่าง ระหว่าง

Error และ Exception คือ Error เป็นความผิดพลาดที่โดยทั่วไปแล้วไม่สามารถจัดการได้ เมื่อเกิด Error ขึ้นอาจ
ส่งผลให้การท างานของโปรแกรมล้มเหลวได้ ตัวอย่างของ Error ที่อาจเกิดขึ้นในภาษา Java เช่น java.lang

.DutOfMemoryError หน่วยความจ า, Java. Lang No ClassDefFoundError ไม่พบ class ที่ก าหนดและ
java.lang .UnSupportedClassVersionError เวอร์ชั่นของ class ไม่ได้รับการรองรับ เป็นต้น


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



กับที่ก าหนด เป็นต้น ซึ่งความผดพลาดที่เกิดขึ้นนี้ สามารถดักจับและจดการกับข้อผดพลาดที่เกิดขึ้น เพื่อให้

โปรแกรมสามารถท างานต่อไปได ้
ประเภทของ Error และ Exception ที่พบบ่อยๆ

ประเภทของ Error และค าอธิบาย


Error ค าอธิบาย

AWTE Error(java.awt ) Error ทั่วไปแสดงถึงการเกิดปัญหาขึ้นกับpackage


ชื่อ java.awt

ClassFormatError Format ของ Byte code ในClass fileมีปัญหา

Error(java lang) Root ของ Error Hierarchy


ExceptionInitializeError(java lang) เกิด Exception ขึ้นในStatic Initializer

IllegalaccessError(java lang) มีการเรียกใช้ class method หรือVariable ที่ไม่

สามารถใช้ได ้


IncompatibleclasschangeError(java lang) มี Operation ที่ไม่ถูกต้องเกิดขึ้นกับclass

Instantiations Error(java lang) มีการ Initialize Abstract class หรือ Interface

Internal Error (java. Lang) เกิดปัญหากับ Interpreter


NoClassDefFoundError (java. Lang) ไม่พบนิยามของ Class ที่ระบุ

157


NoSuchfieldError (java. Lang) ไม่พบ field ที่ระบุ

NoSuchMethodError (java. Lang) ไม่พบ method ที่ระบุ


Internal Error (java. Lang) เกิดปัญหากับ Interpreter




ประเภทของ Exception และค าอธิบาย

Awtexception พบปัญหาใน class ของpackage java awt



arithmeticException(java.lang) เกิดความผดพลาดในการค านวณ
ArrayIndexOutOfBounsException(java.lang) ระบุตัวเลขเกินขอบเขตของarray ที่ก าหนดไว้

arrayStoreException (java lang) ใส่ชนิดข้อมูลไม่ตรงกับที่ก าหนดไว้


BindException(java lang) ไม่สามารถเชื่อมต่อ(bound)Socket เข้ากับ
localAddress และ port ได้แปลงชนิดข้อมูลcastไม่

ตรงกัน

ClassCastException(java lang) แปลงชนิดข้อมูลcastไม่ตรงกัน


classNotfoundException(java lang) ไม่พบ class ที่ระบุ

Eofexception (java io) พบรหัส End of file ก่อนจบการท างานของโปรแกรม

ตามปกต ิ


fileNotfoundException(java io) ไม่พบfile ที่ระบุ

IoException(java io) I/O Operation ไม่สามารถท างานได้เสร็จสมบูรณ ์

RuntimeException (java lang) Superclass ของทุกๆUnchecked Rantime

Exception






นอกจากนี้ ยังสามารถแบ่งประเภทของ Exception ออกเป็น 2 ประเภทใหญ่ๆได้ คือ Runtime Exception

และ IO Exception โดยมีรายละเอียดดังนี้

158


RuntimeException เป็นข้อผิดพลาดที่เกิดขึ้นในขั้นตอนการเขียนโปรแกรมเช่น

 ArrayIndexOutOfBounsException เป็นความผิดพลาดที่เกิดจากการอ้างถึงสมาชิกใน array ไม่

ถูกต้องเช่นมีการก าหนดสมาชิกของ array ไว้ 5 ต าแหน่งแต่มีการอ้างถึงสมาชิกในต าแหน่งที่ 6เป็นต้น

 ArithmeticException เป็นข้อผิดพลาดที่เกิดจากการด าเนินการทางคณิตศาสเช่นการหารด้วยศูนย์

เป็นต้น


 NullpointerException เป็นความผดพลาดที่เกิดจากการอ้างถึงค่าที่เป็น Null เช่นกันเรียกใช้

Object ที่ยังไม่ได้ถูกสร้างขึ้นเป็นต้น


IOException เป็นข้อผิดพลาดที่ภาษา Java ก าหนดให้ต้องมีการจัดการหากมีการเรียกใช method ที่อาจเกิด

ข้อผิดพลาดประเภทนี้เช่น


 EOFException เป็นความผิดพลาดทเกิดจากการระบุจุดสิ้นสุดของไฟล์ไม่ถูกต้อง
ี่
 FileNotFoundException เป็นความผิดพลาดที่เกิดจากการไม่พบ File ที่ระบุ


การจัดการข้อผิดพลาดที่เกิดขึ้นด้วย Exception



การจัดการความผิดพลาดที่เกิดขึ้นโดยการใช Exception นั้นสามารถท าได้โดยการใช้งานชุดคาสั่ง2ค าสั่ง
คือ ค าสั่ง try...catch และค าสั่ง throws

การใช้งานค าสั่ง try...catch

มีการทางานที่คลายกับ if statement โดยที่หากตรวจพบความผิดพลาดในคาสั่งที่อยู่หลังค าสั่งtry



โปรแกรมจะท าการตรวจสอบที่ค าสั่งcatch ว่าเป็นความผิดพลาดประเภทใดและจะท างานตามชุดค าสั่งที่อยู่หลัง
ค าสั่งcatch ที่ตรงกับข้อผิดพลาดรูปแบบการใช้งานค าสั่ง try...catch มีดังนี้

try {

[ statements]


}

catch (TheException e) {

[ statements_n]


}

finally{

[finalStatements]


}

159


โดยท ี่


Statements คือชุดค าสั่งที่ต้องการดักจบข้อผดพลาด

TheException e คือประเภทของ Exception ที่ต้องการดักจับ


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























สามารถอธิบายโปรแกรมได้ดังนี้

160


สร้างบล็อค try เพื่อรับข้อมูลเลขจ านวนเต็ม 2 จ านวน

และแสดงค้นหารของเลขสองจ านวนนั้นโดยก าหนดให้จ านวนแรกเป็นตัวตั้งและจ านวนที่สองเป็นตัวหาร









สร้างบล็อกค าสั่ง catch เพื่อจัดการกับข้อผิดพลาดประเภทArithmeticException หรือข้อผิดพลาดที่เกิดจาก
การค านวณทางคณิตศาสตร์









ี่
สร้างบล็อกค าสั่ง catch เพื่อจัดการกับข้อผิดพลาดประเภทInputMismacthException หรือข้อผิดพลาดทเกิด

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

ที่สองเป็น0 จะได้ผลดังนี้
















เมื่อรันโปรแกรมแล้วทดลองใสตัวเลขจ านวนแรกเป็น4และจ านวนที่สองเป็นxจะได้ผลดังนี้


161



เมื่อรันโปรแกรมแล้วทดลองใสตัวเลขจ านวนแรกเป็น10และจ านวนที่สองเป็น 5จะได้ผลดังนี้















การใช้งานค าสั่ง throws


throws เป็นค าสั่งที่ใช้ในการศูนย์ข้อผดพลาดออกไปจัดการด้วย Object ที่ต้องการซึ่งมีรูปแบบในการเรียกใช ้
งานดังนี้


[modifier] return_type MethodName([ parameter]) throws ExceptionType1
,ExceptionType2,..,ExceptionTypen {


[ Statements]

return varvalue;


}

โดยท ี่

modifier คือ keyword ที่ใช้ก าหนดการเข้าถึงของ method


return_type คือ ชนิดของข้อมูลที่ method จะท าการสินค้ากลับในกรณีที่ไม่มีการคุณค่าให้ก าหนด

เป็นvoid


methodName คือ ชื่อของ method

ี่
parameter คือ ตัวแปรทใช้ในการรับข้อมูล
ExceptionType1 คือ ประเภทของข้อผิดพลาดที่ต้องการดักจับ


Exceptiontype2

Exceptiontypen

statements คือ ชุดค าสั่งก าหนดการท างานของ method


varvalue คือ ค่าที่ต้องการส่งกลับหากก าหนด return_type เป็น viod จะไม่มีการส่งค่ากลับ

162


การสร้างเเละใช้งาน Exception ที่สร้างขึ้นเอง

ในการใช้งาน Exception ที่สร้างขึ้นเองนั้นสามารถท าได้โดยกานนิยาม class ใดๆให้สืบทอด (inherit) มาจาก

class Exception โดยจะมี Constructor 2. เเบบ ดังนี้

• Public Exception ()


• Public Exception (String S)


ในการตรวจสอบข้อผดพลาดในชุดค าสั่งจะต้องท าการสร้าง Method ที้ใช้ในการตรวจสอบข้อผิดพลาดท ี่
จะมีการเรียกใช้ค าสั่ง throws เพื่อสร้าง object จาก class Exception ขึ้นมาเพื่อจัดการข้อผิดพลาดทเกิดขึ้น
ี่
ตัวอย่างของโปรเเกรมจัดการข้อผิดพลาดมีดังนี้

163


สามารถอธิบายโปรเเกรมได้ดังนี้


















สร้างclass OutOfRange Exception ซึ่งสืบทอดมาจาก class Exception โดย class นี้ ประกอบด้วย

Method Check ซึ่งใช้ในการตรวจสอบข้อผดพลาด เงื่อนไขในการตรวจสอบคือ ช่วงของข้อมูลจะต้องอยู่ระหว่าง

ค่าต่ าสุดเเละ คาสูงสูดโดยเมื่อเกิดข้อผิดพลาดขึ้นจะท าการส่ง object ประเภท OutOfRangeException.
ออกมา











สร้างmain. Class ชื่อ My Exception โดยมีการก าหนดต่าต่ าสุดของข้อมูลเท่ากับ 0. เเละค่าสูงสุดของข้อมูล
เท่ากับ100










สร้างบล๊อกtry เพื่อใช้ในการตรวจสอบข้อผดพลาดโดยใช Method check() ฝยการตรวขสอบ หากพบ


ข้อผิดพลาด โปรเเกรมจะทาการ throws Exceptiob. ประเภท OutOfRang Exception ออกมา

164


สร้างบล็อก catch เพื่อจัดเก็บ Exception ที่เกิดขึ้นภายในบล็อกค าสั่งtryโดยก าหนดให้เเสดงผล ข้อผิดพลาด

ประเภท OutOfRang Exception ออกมา














สร้างบล็อก catch เพื่อจัดการกับ Exception อื่นๆที่เกิดขึ้นภานในบล็อกคาสั่ง try โดยก าหนดให้เเสดงผล
ข้อผิดพลาดประเภท Input Mismatch Exceptionออกมา











ั่
สร้างบล็อกค าสง finally เพื่อเเสดงผลของข้อมูลที่ถูกต้อง

เมื่อรันโปรเเกรมจะได้ผลดังนี้

กรณีที่มีการใสคะเเนนเป็น120คะเเนน











โปรเเกรมจะเเสดงผล Exceptionประเภท OutOfRang Exception

กรณีที่มีการใสคะเเนนเป็น51.5คะเเนน


165


โปรเเกรมจะเเสดงผลExceptionประเภท Input Mismatch Exceptionออกมา

กรณี ที่มีการใส่คะเเนนเป็น60คะเเนน























โปรเเกรมจะเเสดงผลของคะเเนนที่ถูกต้อง

166


ใบงานที่ 6.4

ค าชี้แจง เขียนโปรแกรมจัดการข้อผิดพลาดที่เกิดขึ้นโดยการสร้าง Exception ขึ้นเองโดยมีข้อก าหนดดังนี้


 โปรแกรมสามารถรับข้อมูลได้โดยสามารถและข้อมูลชนิดเลขจ านวนเต็มเท่านั้น

 โปรแกรมสามารถตรวจสอบชนิดของข้อมูลได้หากชนิดของข้อมูลไม่ตรงกับที่ก าหนดให้แสดง

ข้อความInvalid input Type และจบการท างาน




..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................
..................................................................................................................................................................................

..................................................................................................................................................................................

..................................................................................................................................................................................

167


แบบประเมินผลการเรียนรู้หน่วยที่6


1.จงอธิบายและวิธีการใชmethod

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………


2.method สามารถแบ่งการเรียกใช้งาน method กี่รูปแบบได้แก่อะไรบ้าง

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

……………………………………………………………………………………………………………………………………………………………..

3.จงบอกจุดประสงค์หลักในการสร้าง Constructor และอธิบายรูปแบบการสร้าง Constructorมาให้เข้าใจ

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

168


4.จงบอกความแตกต่างระหว่าง Error และ Exception

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

5.จงบอกวิธีการใช้งานค าสั่ง try...tacth มาให้เข้าใจ

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

169


ี่
ตอนท2จงเลือกค าตอบที่ถูกต้องเพียงข้อเดียว
1.ObjectName.MethodName ();เป็นรูปแบบการประกาศ method ตามข้อใด


ก.method ไม่มีรับค่า parameter และไม่มีการคืนค่าparameter

ข.method มีการรับค่า parameter แต่ไม่มีการคืนค่าparameter

ค.method ไม่มีการรับค่า parameter แต่มีการคืนค่า parameter


ง. method มีทั้งการรับค่าและคืนค่า parameter

2.ถ้าต้องการเรียกใช้งานกรณี method มีการรับค่า parameter แต่ไม่มีการคืนค่า parameter ต้องประกาศ

ตามรูปแบบใด

ก.ObjectName.MethodName();

ข.ObjectName.MethodName ([argument)];


ค.datatypeMethodValue = ObjectName.MethodName ();

ง.datatypeMethodValue = ObjectName.MethodName ([argument]);


3.กรณี method มีการรับค่า parameter และมีการคืนค่า parameter จะมีรูปแบบการเรียกใช้งานดังนี้


datatypeMethodValue = ObjectName ([argument]); อยากทราบว่า argument จะใช้แทนคาในข้อใด
ก.ชื่อของ Object


ข.ชื่อของ method ที่เรียกใช ้

ค.ชนิดข้อมูล


ง.ค่าของข้อมูลที่ต้องการส่งผ่านไปยัง method


4.ข้อใดกล่าวถึง Instanec Method ได้ถูกต้องที่สด
ก. เป็น method ที่เรียกใช้ผ่านชื่อ class โดยไม่ต้องสร้าง Object ก่อน


ข.เป็น method ที่เรียกใช้ผ่านทาง Object ที่สร้างจาก class ด้วย operator new

ค.เป็น method ที่ก าหนดชื่อของ method ให้เป็นชื่อเดียวกันกับ class

ง.เป็นการประกาศ method ใน subclass โดยที่ method มีอยู่ในparent class


5.ข้อใดเป็นรูปแบบการใช้งานของ method ชนิดsqrt()ซึ่ง x คือตัวเลขที่ต้องการถอดรากที่สอง

ก. Math.pow(x,y); ค.Math.sqrt(x)

ข.Math.abs(x) ง.Math.round(x)

170


ใช้ตอบค าถามข้อ6-10.

ต่อไปนี้เป็นการสร้าง method รูปแบบการสร้างConstructor ดังนี้


[modifier] ClassName ([ parameter]) {

[statements]

}


6.อยากทราบว่า keyword ที่ใช้ในการก าหนดการเข้าถึง method คือข้อใด

ก.modifier ข.ClassName


ค. parameter ง.statements


7.statements ใช้แทนค าสั่งชดใด

ก.ใชในการก าหนดการเข้าถึง method ข.ชื่อ Class


ค.ตัวแปรที่ใช้รับข้อมูล argument จาก class ที่เรียกใช ง.ชุดค าสั่งก าหนดการท างาน
8.ตัวแปรที่ใช้รับข้อมูล argument จาก class ที่เรียกใช้งานคือข้อใด

ก.Modifier ข.ClassName


ค. parameter ง. Statements

ใช้ตอบค าถามข้อ 9 และ 10


[ modifier] return_typeMethodName ([ parameter]){

[ method_body]

returnvarValue;


}

9.ข้อใดเป็นการก าหนดชนิดการขึ้นคาของข้อมูลจากmethod

ก.varValue ค.methodName


ข.return_type ง.method_body

10.ชุดค าสั่งส าหรับการท างานของ method คือข้อใด

ก.return_type ค.parameter


ข.methodName ง.method_body

171


ี่
หน่วยที่ 7 การเขียนโปรแกรมบนมาตรฐานเปดทสามารถใช้ได้ในระบบปฏิบัติการทหลากหลาย

ี่
แนวคิด

ภาษา Java เป็นภาษาคอมพิวเตอร์ที่ได้รับความนิยม เนื่องจากการเขียนโปรแกรมโปรแกรมใช้ภาษา
Java สามารถน าไปใช้ระบบปฏิบัติการที่หลากหลาย เช่น Windows OS X Android เป็นต้น จากความสามารถ

ของภาษา Java ที่มีความหลากหลาย จึงมีการพัฒนาโปรแกรมด้วยบริษัทใหญ่ๆ เพื่อใช้ในงานเฉพาะทาง ปัจจบัน

ภาษา Java ได้เข้ามามีบทบามในชีวิตประจ าวันมากขึ้น และความต้องการโปรแกรมเมอร์ภาษา Java ก็สูงมาก
เช่นกัน


สาระการเรียนรู้

1.ภาษา Java กับการเขียนโปรแกรมบนมาตรฐานเปิด

2.หลักปฏิบัตในการเขียนโปรแกรมภาษา Java


ผลการเรียนรู้ที่คาดหวัง

1.อธิบายความเหมาะสมของภาษา Java ในการเขียนโปรแกรมบนมาตรฐานเปิดได ้

2.สามารถใช้หลักปฏิบัติในการเขียนโปรแกรมภาษา Java ได้อย่างเหมาะสม

172


ภาษา Java กับการเขียนโปรแกรมบนมาตรฐานเปิด


ภาษา Java เป็นของบริษัท Sun Microsystem ถูกพัฒนาและเริ่มใชงานประมาณปี พ.ศ.2539 (ค.ศ.



1996) สาหรับการพัฒนาภาษา Java สามารถพัฒนา Application ไดหลากหลายรูปแบบ เชน Application ท ี่
ท างานบน Windows, Mac, Linux หรือบน Wed Application (JSP Java Servlet)
การพัฒนา Application บน Mobile ซึ่งในปัจจบันสามารถพัฒนาไดบน Android และ BlackBerry ดงนั้นใน



ภาษา Java จะมีรุ่นที่ส าคัญแบ่งเป็น 3 รุ่นใหญ่ๆ คือ
ื่
ั้
ี่
1.J2SE ปัจจบันเปลยนชอเป็น SE (Standard Edition) ไว้สาหรับพัฒนาโปรแกรมบนคอมพิวเตอร์ตง


โต๊ะทั่วไป



ี่
ื่
2.J2EE ปัจจบันเปลยนชอเป็น EE (Enterprise Edition) ไว้สาหรับพัฒนาโปรแกรมในองคกรใหญ่ๆ
หรือมีขอบเขตของโครงการกว้างมาก

3.J2ME ปัจจบันเปลยนชอเป็น ME ((Micro Edition) ไว้สาหรับพัฒนาโปรแกรมอุปกรณพกพา เชน

ื่
ี่


โทรศัพท์มือถือ หรือพีดีเอ
ปกตแลวในการพัฒนา Application ดวยภาษา Java ทวๆ ไปจะใชรุ่น SE (Standard Edition) จะมี

ั่



ี่

JDK (Java Development Kit ) ทประกอบไปดวย Compiler และ Dedugger ของภาษา Java สาหรับ



ิ่
ี่
นักพัฒนาดวย Java JRE (Java Runtime Environment) ซึ่งเป็นสงทรวม Library ตางๆ สาหรับการรัน

โปรแกรมที่พัฒนาด้วย Java ซึ่งถ้าติดตั้ง JDK เพียงตัวเดียวก็จะมี JRE รวมอยู่ด้วย
จากข้อมูลข้างต้น จะเห็นได้ว่า ภาษา Java มีความเหมาะสมในการเขียนโปรแกรมบนมาตรฐานเปิดเป็น
อย่างมาก โดยเฉพาะอย่างยิ่ง คณสมบัตการไม่ยึดตดกับการปฏิบัตการ (Operating System) ของภาษา Java




ท าให้ผู้ใช้สามารถน าโปรแกรมที่เขียนโดยภาษา java ไปใช้ปฏิบัติการและอุปกรณ์ที่หลากหลาย

หลักปฏิบัติในการเขียนโปรแกรม

ู้

หลกปฏิบัตในการเขียนโปรแกรมนั้นเป็นสงทสาคญและมีความจาเป็นสาหรับผเขียนโปรแกรมทกคร
ิ่


ี่



เนื่องจากเหตุผลดังต่อไปนี้
 80%ของอายุการใช้งานของซอฟต์แวร์นั้นจะใช้ไปกับการบ ารุงรักษาซอฟต์แวร์
 โดยส่วนใหญ่แล้วการบ ารุงรักษาซอฟต์แวร์นั้นจะท าโดยผู้อื่นที่ไม่ใช้โปรแกมลรมส าหรับซอฟต์แวร์นั้นๆ

173


 หลักปฏิบัตในการเขียนโปรแกรมจะช่วยจะชวยให้สามารถอ่านโปรแกรมได้ง่ายมากขึ้น ท าให้วิศวกร


หรือผู้ที่ท าการบ ารุงรักษาซอฟต์แวร์สามารถเข้าใจโปรแกรมได้ง่าย

 หากผลตภัณฑ์อยู่ในรูป Source code ต้องแน่ใจว่า Source code นั้นถูกสร้างขึ้นมาอย่างด ี

เช่นเดียวกับผลติภัณฑ์อื่นๆ


เพื่อให้หลักปฏิบติในการเขียนโปรแกรมได้ผล ผู้เขยนโปรแกรมทุกคนจะต้องยึดตามหลักปฏิบัตินี้เพื่อเป็น

แนวทางการเขียนโปรแกรม



หลักปฏิบัตในการเขียนโปรแกรมภาษา Java



ส าหรับหลักปฏิบัตในการเขียนโปรแกรมภาษา Java มีดังนี้
1.การตั้งชื่อไฟล์ (File Name)


ในหัวข้อนี้ประกอบด้วยค าลงท้ายไฟล์ และชื่อไฟล์ที่มีการใช้เป็นประจ า

1.1.ค าลงท้ายไฟล์ (File Suffix)

ซอฟต์แวร์ภาษา Java นั้นจะใช้ค าลงท้ายดังต่อไปนี้


ชนิดของไฟล ์ ค าลงท้าย

Java source .java


Java bytecode .class



1.2.ชื่อไฟล์ที่มีการใช้เป็นประจ า


ประกอบด้วยชื่อไฟล์ดังต่อไปนี้

ชื่อไฟล ์ การใช้งาน


ี่
GNUmakefile เหมาะส าหรับใช้ในการตั้งชื่อไฟล์ทสร้างขึ้นมาโดยค าสั่ง makefiles
ี่
README เหมาะส าหรับใช้ในการตั้งชื่อไฟล์ทสรุปรวมเนื้อหาของไดเรกทอรี

174


2. การจัดการไฟล์ (File Organization)

ไฟลแต่ละไฟล์จะประกอบด้วยส่วนต่างๆซึ่งควรแยกออกจากกันด้วยบรรทัดเปล่าและ comment


ส าหรับแตละส่วนนั้นหากเป็นไปได้ควรหลีกเลี่ยงไฟล์ที่มีความยาว 2,000 บรรทัด
2.1Java source file


ในแต่ละ Java source file นั้นจะมี public หรือ interface ได้เพียง1 class/ interface เท่านั้น แต ่
สามารถน า private class/ interface ที่เกี่ยวข้อง public class มาไว้ใน source file เดียวกันได้ โดยจัดให้

public class/interface อยู่อันดับแรกสุดท้ายของ file

Java. Source file ควรมีล าดับดังนี้


 คอมเมนต์เริ่มต้น

 Package หรือ Import statements


 การประกาศ class หรือ interface

2.1.1.คอมเมนต์เริ่มต้น


ทุกๆ source file นั้นควร เริ่มต้นด้วยคอมเม้นในรูปแบบภาษา c(c-style) ซึ่งประกอบด้วยชื่อ คลาส,
ข้อมูลเวอร์ชั่น,วันที่ และลิขสิทธิ์ โดยมีรูปแบบดังนี้


/*Classname

*

*Version infromation


*

*Data

*


*Copyright notice

*/

2.1.2. Package และ import statements


บรรทัดแรกถัดจากคอมเมนต์ใน source file ของภาษา Java ส่วนใหญ่จะเป็นชื่อ Package ตามด้วย
import statements ดังตัวอย่าง


Package Java.Awt;

import Java.util.Scanner;

175


2.1.3.การประกาศ class และ Interface

ล าดับในการประกาศ class มีดังนี้


ล าดับท ี่ การประกาศ class/interface หมายหต ุ
1 คอมเมนต์เริ่มต้น,Class/interface ดูรายละเอียดเพิ่มเติมใน "Documentation

documentation comment (/**...*/) Comments"


2 class/interface statements

3 คอมเมนต์เสริม,Class/interface ควรประกอบด้วยข้อมูลเกี่ยวกับ

implementation comment class/intetface ที่ไม่เหมาะที่จะใส่ไว้ใน
(/*...*/)(ถ้ามี) documentation comments

4 Class (static) variables กระกาศตัวแปรของ public class เป็นอันดับ

แรก ตามด้วย protected class, package

level และ private class ตามลาดับ
5 Instance variables ประกาศตัวแปรของ Public เป็นอันดับแรกตาม

ด้วย protected, package label และ private
ตามล าดับ

6 Constructors

7 Methods ควรจัดกลุ่มของตามการใช้งานมากกว่าการจัด
กลุ่มตามหมวดหมู่หรือการเข้าถึงเช่นสามารถจด

private class methods ไว้รวมกับ public

instance methods ได้เพื่อให้สามารถทาความ
เข้าใจ code ได้ง่าย



3.การย่อหน้า (Indentation)


ควรใช้การเคาะ spacebar 4 ครั้งในการย่อหน้า ไม่ควรใช้ Tabs ในการย่อหน้า และควรตั้งค่า Tabs ให้

เท่ากับการเคาะ space bar 8 ครั้ง

3.1.ความยาวของบรรทัด


ควรหลีกเลี่ยงการเขียนโปรแกรมโดยมีความยาวในแต่ละบรรทัดเกินกว่า 80 ตัวอักษร เนื่องจากอาจไม่ได ้

รับการรองรับในเครื่องมือบางชนิด

176


3.2. การรวบบรรทัด

เมื่อไม่สามารถเขียน code ทั้งหมดให้อยู่ในบรรทดเดียวกันได้ ควรมีการแบ่งปันท าตามหลักดังนี้


 แบ่งบรรทดหลังเครื่องหมายลูกน้ า ","
 แบ่งบรรทัดก่อนตัวด าเนินการ (Operators) เช่น +,-,*,/
 ส่วนแบ่งบรรทัดที่ระดับสูงมากกว่าระดับต่ า

 จัดให้บรรทดที่ทาการแบ่งมีระยะเดียวกันกับบรรทัดก่อนหน้า


หาก ขั้นตอนข้างต้นท าให้การอ่านโค้ดเกิดความสบสนให้ใช้กันย่อหน้าเท่ากับการเคาะ space bar 8 ครั้งแทน



ตัวอย่างของการแบ่ง Methods มีดังนี้
SomeMethod(longExpression1, longExpression2, longExpression3,

longExpression4, longExpression5),

var = someMethod1(longExpression1,

someMethod2((longExpression2,

longExpression 3))
แบ่งบรรทัดของของ Methods ที่มีความยาวเกินไปโดยท าการแบ่งหลังเครื่องหมาย","




ตัวอย่างการแบ่งบรรทัดของ expression ทางคณตศาสตร์มีดังนี้
longName1= longName2 * (longName3 + longName4 - longName5)

+4*longname6;// การแบ่งบรรทัดที่เหมาะสม
longName1= longName2 * (longName3 + longName4

- longName5) + *longname6;//ควรหลีกเลี่ยง

จากตัวอย่างจะเห็นว่าการแบ่งบรรทัดในตัวอย่างแรกมีความเหมาะสม เนื่องจากทาการแบ่งภายนอก

วงเล็บ และเป็นการแบ่งที่ระดับสูง ซึ่งต่างจากการแบ่งบรรทัดในตัวอย่างที่ 2 ซึ่งเป็นการแบ่งบันทัดภายในวงเล็บ

จึงควรหลีกเลี่ยง

177


ตัวอย่างของการใช้ย่อหน้ามีดังนี้


//การใช้ย่อหน้าแบบปกติ

SomeMethod(int anArg, Object antherArg, String yetAnotherArg
Object andStillAnother) {

...

{

// การใช้ย่อหน้าแบบเคาะ Spacebar 8 ครั้ง

private static synchronized horkingLongMrthodName(intanArg,
Object anotherArg, String yetAnotherArg,

Object andStillAnother) !

...

{

จากตัวอย่างข้างต้นจะเห็นได้ว่าตัวอย่างแรกใช้การย่อหน้าแบบปกติคือมีการจดระดับของ argument ให้

ตรงกัน ซึ่งจะแตกต่างจากตัวอย่างที่ 2 เนื่องจากหากใช้การจัดระดับแบบปกตจะท าให้โค้ดอยู่ชิดทางขวามาก

เกินไป จึงใช้การย่อหน้าโดยการ เคาะ Space Bar 8 ครั้งแทน



ตัวอย่างของการแบ่งบรรทัดของ If Statement มีดังนี้

//ไม่ควรใช้การแบ่งบรรทัดในรูปแบบนี้
If ((condition1&& condition2)

ll (conditilon3&& condition4)

ll! (condition5&& condition6)) // { เป็นการแบ่งบรรทัดที่ไม่เหมาะสม

doSomethingAboutlt(); // อาจท าให้มองข้ามบรรทัดนี้ได้

// ควรใช้การแบ่งบรรทัดในรูปแบบนี้
if((condition1&& condition 2)

ll!(condition3&& condition 4)

ll!( condition 5&& condition 6))!

doSomethingAboutlt();

{

178


//หรือใช้การแบ่งบรรทัดในรูปแบบนี้ก็ได ้

If ((condition1&& condition 2) ll (condition3&& condition 4)

ll!( condition 5&& condition 6)) {
doSomethingAboutlt();

{



4.comments
การเขียนโปรแกรมภาษา Java นั้นสามารถสร้าง comment ได้ 2 รูปแบบคือ comment และ

Document preparation Comment โดยที่ implementation Comment คือ comment ที่สร้างขึ้นมาใน

ภาษา C + + ซึ่งใช้สัญลักษณ์ /*...*/ และ // ในขณะที่ Document preparation comments(หรือ "doc

comment)นั้นจะมีเฉพาะในภาษาJava เท่านั้น 1และใช้สัญลักษณ์ /**...*/ ซึ่งdocumentation comment

นั้นสามารถใช้ Java tool ดึงออกมาในรูป HTML files ได ้
Implementation Comment จะใช้คาอธิบายcodeหรือ อธิบายการใช้งานของโค้ชในขณะที่

Document preparation comment จะใช้อธิบายลักษณะโดยรวมของcodeซึ่งไม่เกี่ยวข้องกับการใช้งานโดยมี

เป้าหมายคือให้ผู้พัฒนาได้ท าความเข้าใจกับภาพรวมของcodeได้โดยไม่จ าเป็นต้อง source code



Comment ควรใช้ในการอธิบายภาพรวมของและให้ข้อมูลเพิ่มเติมจากข้อมูลที่อยู่ภายในโคดเพื่อชวยให ้

การอ่านและท าความเข้าใจโปรแกรมเป็นไปได้ง่ายขึ้นควรหลีกเลี่ยงcommentsที่อาจลาสมัยเมื่อโปรแกรมมีการ
พัฒนาขึ้น



หมายเหต ุ การใช้ Comment เป็นจ านวนมากบ่งบอกถึงคุณภาพของ code ที่ไม่ดีหากผู้เขียนโปรแกรม

รู้สึกว่ามีการใช้ comment เพื่ออธิบาย code มากเกินความจ าเป็นควรพิจารณาปรับปรุง

เพื่อให้ง่ายต่อการท าความเข้าใจไม่ควรเขียน comments เป็นบล็อกขนาดใหญ่ภายใน
เครื่องหมาย { } หรือมีตัวอักษรอื่นใน codeผสมอยู่ด้วย และ comments ไม่ควรมีอักขระ

พิเศษ เช่น เครื่องหมาย "\" อยู่ ในcomments



4.1 รูปแบบของ implementation Comment implementation comment formats)

สามารถใช้ comment ได้ 4 รูปแบบในการเขียนโปรแกรมภาษา Java
4.1.1 Block Comment


Block comment ใช้สาหรับเขียนคาอธิบายสาหรับ files, methods, โครงสร้างของข้อมูลและ


อัลกอริทึมเขียน Comment ไว้ที่ต าแหน่งเริ่มต้นของแต่ละ file และก่อนหน้า methods หรืออาจเขียน Block
comments ไว้ที่ต าแหน่งอื่นๆได้เช่นเขียน Block Comment

179


ไว้ภายใน methods โดยที่หากมีการเขียน Block Comment ไว้ภายในฟังก์ชันหรือ methods ควรมีการย่อ

หน้าให้ Comment อยู่ในระดับเดียวกันกับ code ที่อธิบาย


ตัวอย่างของBlock comments มีดงนี้
/*-

*Here is a block Comment with some very special

* Formatting that i want indent(1) to ignore.

*

*one
* two

* three

*/



4.1.2 comment แบบบรรทัดเดียว (Single-line Comments)


Single-line Comments เป็นคอมเม้นสั้นๆที่สามารถเขียนให้อยู่ในบรรทัดเดียวกันได ้

ด้วยควรจัดระยะย่อหน้าให้อยู่ในระดับเดียวกันกับ code ที่จะเขียนตามมา


ตัวอย่างของคอมเมนต์แบบบรรทัดเดียวมีดังนี้


if(condition) {

/*Handle The connection.*/


...


!


4.1.3 Trailing comments


เป็น comment ที่สั้นมากและสามารถอยู่บนบรรทัดเดียวกันกับcodeที่อธิบายได้ ด้วยควรเว้นระยะห่าง
จากตัวให้เหมาะสมเพื่อป้องกันความสับสนในกรณีที่มีการใช้ trailing comments เป็นจ านวนมาก ควรจัดระดับ

ของ Comment ให้ตรงกัน

180




ตัวอย่างของ trailing comments

If (a ==2) {
return TRUE; /* special case*/

} else {

returnisPrime(a); /*works only for odd a*/

}


4.1.4 End-OF-Line comments

เป็น Comments ที่ใช้สัญลักษณ์// น าคอมเมนต์ โดยมีตัวอย่างดังนี้

if (foo>1)

//Do a double-flip.
...

}

else

return false. //Explain why here.

}
//if (bar >1)

//

// //Do a triple-flip.

// ...

//
//else

// return false

//}




4.2 Documentation Comment

Doc comments ใช้อธิบายลักษณะของclass, Interface, constructor, method และfield ในภาษา

Java โดยที่ Doc documents นั้นจะยู่ภายในเครื่องหมาย /**...*/ และควรจัดให้ Doc documents ควรอยู่

ก่อนการประกาศตัวแปร

181


ตัวอย่างของ Doc documents มีดังนี้


/**


/** The Example class provides …

*/


Public Example class { …


5. การประกาศ (Declaration)


5.1 จ านวนของการประกาศต่อบรรทัด


แนะน าให้มีการใช้ 1 การประกาศต่อ 1 บรรทัด เนื่องจากสามารถคอมเมนต์ได้ง่าย ตัวอย่าง เช่น

Int level; // indentation level


Int size // size o table


การประกาศในตัวอย่างด้านบนเป็นการประกาศที่เหมาะสมหว่าประกาศในตัวอย่างด้านล่างซึ่งเป็นการ

ประกาศในบรรทัดเดียวกัน


Int level, size;

ไม่ควรประกาศข้อมูลคนละชนิดไว้ในบรรทัดเดียวกัน


In foo, fooarray; // ประกาศผิดวิธี


5.2 ต าแหน่งของการประกาส


วางต าแหน่งของการประกาสไว้ที่ต าแหน่งเริ่มต้นของบล็อก ไม่ควรรอจนมีการเรียกใช้ ตัวแปรจึงค่อยท า


การประกาศตัวแปรเนื่องจากอาจท าให้เกิดความสบสนขึ้นได้ ตัวอย่างของต าแหน่งการประกาศตัวแปรมีดังนี้
Void myMethod() {


Int int1 = 0; // beginning of Method block


If (condition) {


Int int2 = 0; // beginning of “if’ block



182


หลีกเลี่ยงการประกาศตัวแปรภายในและภายนอกบล็อกที่มีชื่อเหมือนกัน ตัวอย่าวเช่น ควรหลีกเลี่ยงการ

ประกาศตัวแปรดังนี้

Int count;




myMethod() {


if (condition) {


int count;// AVOID!




}




}

5.3 การประกาศ class และ interface


ในการประกาศ class และ interface ส าหรับการเขียนโปรแกรมภา java ควรปฏิบัติตามรูปแบบดงนี้


 ไม่เว้นช่อองว่างระหว่างชื่อ method และ วงเล็บ “(”

 จัดให้เครื่องหมาย “{” อยู่ที่ต าแหน่งด้านท้ายของบรรทัดที่มีการประกาศ class และ interface


 จัดให้เครื่องหมาย “}” อยู่ที่ต าแหน่งเริ่มต้นของบรรทัดและมีระดับเดียวกัน Statements เริ่มต้น

ยกเว้นในกรณีที่เป็น null Statements โดดยจะจัดให้เครื่องหมาย “}” อยู่ต่อจากเครื่องหมาย “{”

ตัวอย่างของการประกาศ class และ interface มีดังนี้


Class Sample extends Object {

Int ivar1;


Int ivar2;

Sample(int i, int j) {


Ivar1=i;


Ivar2=j;

}

183


Int emptyMethod() {}



}

 Method จะถูกแบ่งด้วยบรรทัดเปล่า 1 บรรทัด


6. Statement

6.1 Statement อย่างง่าย (Simple statement)

ควรให้แต่ละบรรทัดประกอบด้วย Statement เพียง 1 Statement เท่านั้น ตัวอย่างเช่น
Argv++; // การเขียน Statement ที่ถูกต้อง

Argc++; // การเขียน Statement ที่ถูกต้อง

Argv++; Argc++; // ควรหลีกเลี่ยง Statement ในรูปแบบนี้

6.2 Statement ที่มีความซับซ้อน (Compound statements)

Compound Statements คือ รายกาของ Statements ที่อยู่ในรูปแบบ “{… statements…”} โดย

ควรจัดรูปแบบของ Compound statements ดงนี้
 Statements ที่ยู่ภายในวงเล็บควรมีการย่อหน้ามากกว่า statements ภายนอก 1 ระดับ


 วงเล็บเปิด “{” ควรอยู่ด้านท้ายของบรรทัดเริ่มต้นของ compound statements และวงเล็บปด
“}” ควรอยู่ต าแหน่งแรกสุดของบรรทัด และจัดระยะย่อหน้าให้ตรงกับต าแหน่งเริ่มต้นของ Compound

statements

 ส าหรับ if-else หรือ for statements ควรใช้วงเล็บ “{ }” ล้อมรอบ Statements ทั้งหมด
เนื่องจากท าให้สามารถเพิ่ม statements ได้ง่าย และไม่ท าให้เกิดข้อมูลผดพลาดจาการลืมใสเครื่องหมายวงเล็บ


6.3 return Statements

ไม่ควรใช้เครื่องหมาย “( )” ส าหรับ return Statements ที่ไม่มีการคืนค่า นอกเสียจากจะท าให้การคืน

ค่ามีความชัดเจนขึ้น ตัวอย่างเช่น

Return;


Return myDisk.size();



Return (size ? size : defaultSize);

184


6.4 if, if-else, if else – if else Statements

If – else statements ควรใช้รูปแบบดังนี้

If (condition) {
Statements;

}



If (condition) {
Statements;

} else {

Statements;

}


If (condition) {

Statements;

} else if (condition) {

Statements;

} else {
Statements;

}



6.5 for Statements

For Statements ควรใช้รูปแบบดังนี้
For (initialization; condition; update) {

}

และส าหรับ empty for statements ควรใช้รูปแบบดังนี้

For (initialization; condition; update);

185


6.6 while Statements

while Statements ควรใช้รูปแบบดังนี้

while (condition) {
statements;

}

และส าหรับ empty while statements ควรใช้รูปแบบดังนี้

(condition);
6.7 do-while Statements

do-while Statements ควรใช้รูปแบบดังนี้

do {

statements;

} while (condition);
6.8 switch Statements

switch Statements ควรใช้รูปแบบดังนี้


switch (condition) {


case ABC:

statements;
/* falls through */

Case DEF:

statements;

break:

Case XYZ:
statements;

break;

default:

statements;

break;
}

ควรมี default ส าหรับทุก switch statements เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้นเมื่อมีการเพิ่ม case

186


6.9 try-catch statements

try-catch statements ควรใช้รูปแบบดังนี้

try {
statements;

} catch (ExceptionClass e) {

Statements;

}
หรือ

Try {

Statements;

} catch (ExceptionClass e) {

Statements;
} finally {

Statements;

}

7. พื้นที่ว่าง (White Space)

7.1 บรรทัดเปล่า (Blank Line)

บรรทัดเปลาจะช่วยแบ่งกลุ่มของ code ออกจากกัน เพื่อช่วยให้สามารถอ่าน code ได้ง่ายขึ้น
ควรใช้บรรทัดเปล่า 2 บรรทัดที่ต าแหน่งดังต่อไปนี้

 ระหว่างกลุ่ม (section) ของแต่ละ source file

 ระหว่างนิยามของ class และ interface ควรใช้บรรทัดเปล่า 1 บรรทัดที่ต าแหน่งดังต่อไปนี้

 ระหว่าง Method

 ระหว่าง local variable ภายใน Method และ statement แรกสุด


 ก่อนหน้าบล็อก หรือ comment แบบบรรทดเดียว
 ระหว่างส่วนของตรรกะ ถายใน Method เพื่อให้อ่าน code ได้ง่ายขึ้น

187


7.2 ช่องว่าง (Black Space)

ควรใช้ช่องว่างในสถานการณ์ต่อไปนี้

ควรใช้ช่องว่างแบ่งระหว่าง Keyword และเครื่องหมาย “( )” ตัวอย่างเช่น
While (true) {



}

ไม่ควรใช้ช่องระหว่างชื่อ Method และเครื่องหมายวงเล็บเปิด “(” เพื่อช่วยในการแยกชื่อระหว่าง Method และ
ให้ชัดเจน

ควรใช้ช่องว่างหลังเครื่องหมายลูกน้ า ในรายการ arguments

ควรใช้ช่องว่างแบ่งระหว่างตัวด าเนินการแบบ binary และตัวถูกด าเนินการ ยกเว้นตัวด าเนินการ “.”

ไม่ควรใช้ช่องว่างแบ่งตัวด าเนินการแบบ unary ตัวอย่างเช่น

A+=c+ d;
A = (a + b) / (c* d);

While (d++ = s++) {

}



Prints(“size is” + foo + “\n”);

Expressions ที่อยู่ภายใน for statements ควรแบ่งด้วยช่องว่าง ดงตัวอย่าง
For (expr1; expr3)



8.หลักการในการตั้งชื่อ

การตั้งชื่อไฟล์ให้ถูกหลักช่วยให้การอ่านโปรแกรมเป็นไปได้ง่ายขึ้น ท าให้สามารถท าความเข้าใจโปรแกรมได้ดีขึ้น

และยังสามารถให้ข้อมูลเกี่ยวกับการทางานขง identifier ได้อีกด้วย ตัวอย่างเช่น สามารถบอกได้ว่า identifier
ี่
นั้นคือ ค่าคงท, packages หรือ class เป็นต้น

188


ชนิดของ Identifier : Packages

กฎในการตั้งชื่อ:ค าน าหน้า (prefix) ของ package นั้นจะใช้ตัวพิมพ์เล็กทั้งหมดในการตั้งชื่อ และควรใช ้

ชื่อโดเมนระดับสูง เช่น com edu gov mal net org หรืออักษรตัวย่อของชื่อประเทศตามที่ระบุไว้ในมาตรฐาน
ISO 3166,1981

ส่วนประกอบอื่นๆ ของชื่อ package นั้นจะแตกต่างกันไปตามหลักในการตั้งชื่อของแต่ละองค์กรโดยอาจ


ใช้การตั้งชื่อเพื่อระบุแผนก โปรเจกต์ หรืออุปกรณที่ใช้งาน
ตัวอย่าง com.sun.eng
Com.apple.quicktime.v2



Edu.cmu.cs.bovik.cheese



ชนิดของ Identifier : Classes
กฎในการตั้งชื่อ:ควรใช้ค านามในการตั้งชื่อ class แลวใช้ตัวอักษรแบบผสมโดยให้ตัวอักษรแรเป็นตัวพิมพ์

ใหญ่ พยายามตั้งชื่อของ class ให้เข้าใจง่าย หลีกเลี่ยงการใช้อักษรย่อในการตั้งชื่อ class นอกเสียจากว่าอักษรย่อ

ี่
นั้นจะเป็นทนิยมใช้อย่างกว้างขวาง เช่น URl HTML เป็นต้น


ตัวอย่าง class Raster;
Class ImageSprite;

ชนิดของ Identifier : Interface

กฎในการตั้งชื่อ:การตั้งชื่อ Interface นั้นจะใช้กลักการเดียวกันกับการตั้งชื่อ class



ตัวอย่าง Interface RasterDelegate;
Interface Storing

189






กฎในการตั้งชื่อ:ควรใช้ค ากิริยาในการตั้งชื่อ Method และใช้อักษรแบบผสม โดยตัวอักษรแรกใชตวพิมพ์
เล็ก และใช้ตัวพิมพ์ใหญ่ส าหรับตัวอักษรแรกของค าถัดไป
ตัวอย่าง run();

runFast();

getBackground();




ชนิดของ Identifier : ตัวแปร (Variables)



กฎในการตั้งชื่อ:ใช้อักษรตัวแบบผสม โดยตัวอักษรแรกใช้ตัวพิมพ์เล็ก และใช้ตัวพิมพ์ใหญ่ส าหรับตัวอักษรแรก

ของค าถัดไป ชื่อของตัวแปรไม่ควรเริ่มต้นด้วยเครื่องหมาย “_” (underscore) หรือ “$” (dollar sign) ชื่อของ
ตัวแปรควรสั้นแต่ได้ใจความ และควรเลือกชื่อที่สามารถจ าได้ง่าย ควรหลีกเลี่ยงการตั้งชื่อตัวแปรด้วยอักษรเพียง

ตัวเดียว ยกเว้นในกรณีของตัวแปรชนิด “throwaway” โดยตัวอย่างของตัวแปรชนิด throwaway ที่พบบ่อยๆ



เช่น I j k m ส าหรับเลขจานวนเต็ม และ c d e สาหรับตัวแปรชนิดอักษร


ตัวอย่าง int I;
Char c;

Float myWidth;



ชนิดของ Identifier : ค่าคงที่ (Conatants)

กฎในการตั้งชื่อ:ควรใช้อักษรตัวพิมพ์ใหญ่ในการประกาสค่าคงที่ของ class และหาค่าคงที่ ANSI และ ใช ้
เครื่องหมาย Underscore “_” ในการแบ่งค า



ตัวอย่าง static final int MIN_WIDTH = 4;

static final int MAX_WIDTH = 999;

static final int GET_WIDTH = 1;

190


9. แนวทางในการเขียนโปรแกรม

9.1 การก าหนดการเข้าถึง Instance และ ตัวแปรของ class


ไม่ควรก าหนดให้การเข้าถึง Instance หรือ ตัวแปรของ class เป็นแบบ public หากไม่มีเหตุผลที่ดพอ
9.2 การอ้างถึงตัวแปรของ Class และ Methods


ื่
หลีกเลี่ยงการใช object ในการเข้าถึงตัวแปรของ Class และ Methods ควรใช้ชอ Class ในการเขาถึง

ตัวอย่างเช่น
classMethods()//OK
AClass.classMethods()//OK

anObject. classMethods()//OKควรหลีกเลี่ยง



9.3 ค่าคงที่

ไม่ควรใช้ค่าคงทแบบตัวเลขโดนตรง ยกเว้น -1, 0, 1 ซึ่งใช้ใน for loop เพื่อใช้ส าหรับการนับรอบ
ี่
9.4 การก าหนดค่าตัวแปร


หลีกเลี่ยงการก าหนดคาตัวแปรหลายๆ คัวให้มีค่าเดียวกันภายในบรรทัดเดียวกัน เนื่องจากท าให้อ่านได ้
ล าบาก ตัวอย่างเช่น

fooBar.fChar = barFoo.lchar = ‘c’;// ควรหลีกเลี่ยง


ไม่ควรใช้ operator ส าหรับการก าหนดคาในต าแหน่งที่อาจท าให้เกิดความสับสนกับ operator ที่ใช ้

แสดงความเท่ากัน ตัวอย่างเช่น

If (c++ = d++) {// AVOID! (Java ไม่อนุญาตให้ใช้รูปแบบนี้)



}


ควรใช้รูปแบบดังนี้

If ((c++ = d++)!= 0) {



}

191


แบบประเมินการเรียนรู้หน่วยที่7



ี่
ตอนท1 จงตอบคาถามต่อไปนี้ใหสมบูรณ ์
ู้

1.จงบอกเหตุผลหลักปฏิบัติในการเขียนโปรแกรมที่มีความสาคัญและความจ าเป็นส าหรับผเขียนโปรแกรมทุกคน
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

……………………………………………………………………………………………………………………………………………………………

2.จงบอกล าดับการประกาศ class และ interface


………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

……………………………………………………………………………………………………………………………………………………………

3.การเขียนโปรแกรมภาษา Java นั้นสามารถสร้าง comment ได้กี่รูปแบบได้แก่อะไรบ้างจงอธิบาย

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

……………………………………………………………………………………………………………………………………………………………

192


4.จงบอกรูปแบบของ lmplementation comments (lmplementations Formats) ในการเขียนโปรแกรม

ภาษา Java

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

…………………………………………………………………………………………………………………………………………………………

5.จงอธิบายการประกาศ (Declaration)ตัวแปรในการเขียนโปรแกรมภาษา Java

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

193


ี่

ตอนท2 จงเลือกคาตอบที่ถูกต้องเพียงข้อเดียว
1. ซอฟต์แวร์ภาษา Java นั้นมักจะใช้ค าลงท้ายอย่างไร

ก.
ชนิดของไฟล์ค า ลงท้าย

java source java


ข.
ชนิดของไฟล์ค า ลงท้าย

java bytecode class


ค .
ชนิดของไฟล์ค า ลงท้าย

Readme java

ง . ข้อ ก และ ข้อ ข.

2.GNUmakefile มีลักษณะการใช้งานอย่างไรบ้าง


ก. ใช้ในการตั้งชื่อไฟล์ทสร้างโดยใชค าสั่งmakefiles ข. ใชในการตั้งชื่อไฟล์ที่สรุปรวมเนื้อหาของไดเร็คทอรี่

ี่

ค. ใชเขียนโปรแกรมได้ทุกชนิด ง. ใช้การเคาะ spacebar

3.ไฟล์ในข้อใดที่เหมาะส าหรับใช้ในการตั้งชื่อไฟลที่สรุปรวมเนื้อหาของไดเรกทอรี่

ก. GNUmakefile ข. ReADME

ค. Java bytecode ง. Java source

4. ไฟล์แต่ละไฟล์จะประกอบด้วยส่วนต่างๆซึ่งควรแยกออกจากกันด้วยบรรทัดเปลา(blank lines)และคอมเม้นต์


ส าหรับแตละส่วนนั้นหากเป็นไปได้ควรหลีกเลี่ยงไฟล์ที่มีความยาวเกินกี่บรรทัด

ก. 500บรรทัด ข. 1,000บรรทด

ค.1,500บรรทัด ง.2,000บรรทัด

5. ในแต่ละ Java source file นั้นจะมี public หรือ interface ได้กี่ class/interface


ก.1class/interface เท่านั้น ข.2class/interface

ค.3class/interface ง.กี่ class/interface ก็ได ้

194


6.การย่อหน้า (Indentation)ควรใช้การเคาะ Spacebar กี่ครั้ง และการตั้งค่า Tabs ให้เท่ากับการเคาะ

Spacebar กี่ครั้ง

ก.1และ2ครั้ง ข.2และ4ครั้ง

ค.3และ6ครั้ง ง.4และ8ครั้ง



7.การเขียนโปรแกรมควรให้มีความยาวในแตละบรรทัดเกินกว่ากี่ตัวอักษรเพื่อรองรับเครื่องมือบางชนิด
ก.50ตัวอักษร ข.80ตัวอักษร

ค.100ตัวอักษร ง.150ตัวอักษร


8.อ้วนใช้ช่องว่าง(Blank Space)ในสถานการณ์แบบใด

ก.ควรใช้ช่องว่างแบ่งระหว่าง keyword และเครื่องหมาย ()

ข.ควรใช้ช่องว่างระหว่างชื่อ method และเครื่องหมายวงเล็บปิด(


ค.ไม่ควรใช้ช่องว่างหลังเครื่องหมายลูกน้ า,ในรายการarguments

ค.ไม่ควรใช้ช่องว่างแบ่งตัวด าเนินการแบบunary


9.กฏในการตั้งชื่อ ค าน าหน้า (prefix)ของ Identfier:Packages นั้นจะใช้ตัวอักษรชนิดใดในการตั้งชื่อ

ก.ตัวพิมพ์ใหญ่ ข.ตัวพิมพ์เล็กทั้งหมด

ค.ตัวพิมพ์เล็ก ง.แบบใดก็ได ้


10.กฏในการตั้งชื่อของ Identifie r: Classes ควรใช้ตัวอักษรแบบใด

ก.ใช้ตัวอักษรแบบผสมโดยให้ตัวอักษรแรกเป็นตัวพิมพ์ใหญ่



ข. ใชตัวอักษรแบบผสมโดยให้ตัวอักษรแรกเป็นตัวพิมพ์เล็ก
ค.ใช้ตัวพิมพ์เล็กเท่านั้น

ง.ใช้ตัวพิมพ์ใหญ่เท่านั้น

195


ใบงานที่7.1


ค าชี้แจง เขียนโปรแกรมโดยใช้รูปแบบตามหลักปฏิบัติในการเขียนโปรแกรมเพื่อควบคุมการทางานของลิฟท์ 2 ตัว
โดยมีข้อก าหนดดังนี้

ลิฟท์ทั้งสองตัวอยู่ในอาคารสูง 10 ชั้น

ลิฟท์ตัวที่ 1จอดเฉพาะชั้น1และฉันที่เป็นเลขค ู่

 ลิฟท์ตัวที่ 2 โจทก์เฉพาะชั้น 1และชั้นที่เป็นเลขค ี่

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

196


ี่
ใบงานท7.2
ค าชี้แจง เขียนโปรแกรมโดยใช้รูปแบบตามหลักปฏิบัติในการเขียนโปรแกรมเพื่อค านวณผลคะแนนของการ

แข่งขันฟุตบอลโดยมีข้อก าหนดดังนี้

จ านวนทีมทั้งหมด32ทีมแข่งในการแข่งขันรอบแรกเป็นการแข่งแบบพบกันหมด


ผลการแข่งขันชนะได้ 3คะแนน

ผลการแข่งขันเสมอไม่ได้ 1คะแนน


ผลการแข่งขันแพ้ได0 คะแนน.

 ทีมที่จะผ่านเขารอบที่ 2 มีทั้งหมด 16 ทีม โดยเรียงตามล าดับของคะแนน


………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………

………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………


Click to View FlipBook Version