เรื่องอ็อปเจ็คเป็นเรื่องต่อเนื่องกับเรื่องฟังก์ชัน ต่อไปนี้จะพูดถึงเรื่องคลาสกับอ็อปเจ็คซึ่งเป็นเรื่องสำคัญสำหรับภาษาจาวา
คลาส(Class)
เป็นเหมือนแบบร่างของวัตถุ เป็นเหมือนแปลนหรือแบบของบ้านเวลาจะสร้างบ้าน แต่แบบบ้านไม่ใช่บ้านจริงๆถ้าอยากอยู่ในบ้านได้จริงๆก็ต้องสร้างบ้านตามแบบแปลนขึ้นมาก่อน คลาสก็เช่นเดียวกันเป็นแบบแปลนที่เก็บข้อมูล เมท็อดว่าจะทำงานอะไรบ้าง สำหรับรอการสร้างเป็นอ็อปเจ็คที่สามารถใช้งานได้จริง
รูปแบบของคลาส
(modifier) class ชื่อคลาส[1] {
ประกาศตัวแปรคลาส
เมท็อดต่างๆของคลาส
}
ตัวแปรคลาส
ตัวแปรจะเป็นตัวกำหนดลักษณะ ต้องประกาศภายในวงเล็บของคลาส
modifier ชนิดข้อมูล ชื่อตัวแปรคลาส;
เช่น
public class Student {
public int Stu_Id
public String name
private String phone
}
อ็อปเจ็ค(Object)
เป็นสิ่งที่สร้างขึ้นมาจากแบบแปลที่วางไว้ก็คือการทำให้แบบแปลนสามารถใช้งานได้จริงๆ ซึ่งอ็อปเจ็คจะมีสมบัติอยู่ 2 อย่าง อย่างแรกก็คือ ลักษณะ(attribute หรือ data) ก็คือรูปร่าง ลักษณะของวัตถุ และ สิ่งที่ทำได้(behavior หรือ method) ก็คือความสามารถของวัตถุ
ตัวอย่างเช่น หากเราจะสร้างหุ่นยนต์ขึ้นมา ก็ต้องมีการกำหนดรูปร่างหน้าตาขอหุ่นยนต์ หุ่นยนต์กู้ซากปรักหักพังก็จะมีหน้าตาต่างกับหุ่นยนต์ที่เป็นโอเปอเรเตอร์ต้อนรับคนหน้าโรงแรม ซึ่งเราก็ต้องกำหนดว่าจะมีสี มีรูปร่าง อย่างไร ส่วนการทำงานก็เช่น จะเก็บของอะไรบ้าง จะกระโดข้ามสิ่งกีดขวางหรือบุกไปเลย
หรืออีกตัวอย่างก็เช่นเวลาต้องการสร้างอ็อปเจ็คของพนักงานบริษัท พนักงานบริษัทก็ต้องประกอบไปด้วยคุณลักษณะคือมีรหัสพนักงาน ชื่อ นามสกุล ตำแหน่ง เงินเดือน และเมท็อดหรือสิ่งที่ทำก็เช่นการรับเงินเดือน เป็นต้น
การประกาศตัวแปรอ็อปเจ็ค
ชื่อคลาส ตัวแปรอ็อปเจ็ค ;
Student student;
การสร้างอ็อปเจ็ค
new ชื่อคลาส(พารามิเตอร์);
new Student();
หรือจะประกาศไว้ในบรรทัดเดียวกันก็ได้
Student student = new Student();
เมื่อทำการประกาศตัวแปรอ็อปเจ็คถึงตรงนี้ก็จะทำให้มีอ็อปเจ็คที่สร้างขึ้นมามีคุณลักษณะและการทำงานแบบเดียวกับที่ตัวแปรคลาสและเมท็อดได้กำหนดเอาไว้ โดยที่มี student เป็นตัวอ้างอิงอ็อปเจ็คประเภท Student (เวลาเราสร้างคลาสก็จะถือว่าคลาสนั้นเป้นตัวแปรแบบพิเศษเหมือนพวก Array ก็เลยสร้างด้วยการ new ขึ้นมาได้)
การใช้ตัวแปรและเมท็อดประจำอ็อปเจ็ค
เวลาที่สร้างตัวแปรแปรอ้างอิงอ็อปเจ็คขึ้นมาแล้ว ก็ต้องมีการเรียกใช้ตัวแปรและเมท็อด กล่าวคือ ตัวแปรอ็อปที่สร้างอ็อปเจ็คขึ้นมาจะทำให้อ็อปเจ็คมีรูปร่างหน้าตาและทำงานได้แบบในคลาส เช่น คลาส Student นักเรียน กำหนดว่านักเรียนมีรูปร่างเป็นน้ำหนักกับความสูง มีเมท็อดคือการรับเวลาเข้า-ออกโรงเรียน พอสร้างตัวชี้อ็อปเจ็ค student ขึ้นมา student ก็จะมีน้ำหนักและส่วนสูงได้ แต่ยังไม่ได้บอกว่าเท่าไหร่ ทีนี้ถ้าจะกำหนดค่าน้ำหนักและส่วนสูงให้ student ก็ต้องกำหนดว่าให้น้ำหนักของ student เป็นเท่าๆไหร่ โดยการใช้เครื่องหมาย . (dot operator)ต่อด้วยตัวแปรประจำอ็อปเจ็ค
ตัวแปรอ้างอิงอ็อปเจ็ค. ชื่อตัวแปรประจำอ็อปเจ็ค
เช่น สมมติจะให้ h เก็บความสูง ก็เขียน student. h (อ่าน . ว่าของ ในที่นี้อ่านว่า h ของ student) student. h = 165 เป็นต้น
ในทำนองเดียวกนหากจะให้ตัวแปรอ็อปเจ็คเรียกเมท็อดก็ให้ใช้ เครื่องหมาย .
ตัวแปรอ้างอิงอ็อปเจ็ค. ชื่อเมท็อด();
รูป7-1
สร้างคลาสใหม่ขึ้นมาหนึ่งคลาสประกอบด้วยตัวแปรคลาส 3 ตัวคือ width, height, depth ให้เป็น double พร้อมด้วยเมท็อด volume ที่ทำหน้าที่คำนวณและคืนค่าออกไป สังเกตว่าตัวแปรเป็น double เมื่อเอาคำนวณก็ต้องคืนค่า double ออกไป
รูป 7-2
หลังจากนั้นสร้างขึ้นมาอีก 1 คลาส
บรรทัดที่ 6 : สร้างตัวแปรอ้างอิงอ็อปเจ็ค box1 อ้างอิงตัวแปรประเภท Box
บรรทัดที่ 7 : สร้างตัวแปรอ้างอิงอ็อปเจ็ค box2 อ้างอิงตัวแปรประเภท Box
บรรทัดที่ 9-11 : กำหนดค่าตัวแปรคลาสของอ็อปเจ็ค box1 ด้วย . (dot operator)กลายเป็น width ของ box1
คือ 9
บรรทัดที่ 13-15 : กำหนดค่าตัวแปรคลาสของอ็อปเจ็ค box2 ด้วย . (dot operator) กลายเป็น depth ของ
box2 คือ 12
บรรทัดที่ 17 : ให้แสดงผลออกทางหน้าจอ โดยให้เอาค่าจากการคำนวณของเมท็อด volume มาแสดง ก็ใช้วิธี
เดียวกับตัวแปรคือใช้เครื่องหมาย . เรียกเมท็อด เมื่อทำการ .volume ขึ้นมา width, height, depth ของ box1 จะถูกนำไปคำนวณ
บรรทัดที่ 19 : ให้แสดงผลออกทางหน้าจอ โดยให้เอาค่าจากการคำนวณของเมท็อด volume ของ box 2 มา
แสดง
จะเห็นได้ว่าตอนที่เรียกเมท็อด volume เรียกจากอ็อปเจ็คคนละตัวคือ box1 และ box2 ดังนั้นแม้ในเมท็อด volme จะเขียนว่า width * height * depth แต่ก็จะเป็นค่า width, height, depthที่มาจากคนละค่ากัน ผลลัพธ์ก็จะไม่เหมือนกัน
ผลลัพธ์ที่ได้
รูป7-3
นี่ก็คือตัวอย่างของคลาสและอ็อปเจ็ค คลาส Box ประกอบไปด้วยตัวแปรและมีเมท็อดที่ทำหน้าที่คำนวณ เมื่อสร้างคลาส BoxTest ขึ้นมา ก็สร้างอ็อปเจ็คขึ้นมาโดยที่อ็อปเจ็คนั้นจะใช้ตัวแปรและมีการทำงานแบบที่คลาสกำหนดไว้เลย
Modifier
มี 2 แบบคือ access modifier กับ non- access modifier แต่จะพูดแค่ access modifier ก็คือสิ่งที่ประกาศไว้เพื่อระบุถึงการถูกเข้าถึง จะประกาศหน้าคลาส เมท็อดหรือตัวแปรคลาส ซึ่งได้แก่ public, protected, private และ package (แต่ protected และ private ใช้หน้าคลาสไม่ได้) ที่ได้เห็นกันมาตั้งแต่ในเมท็อด main ตรงด้านหน้า public static void main(String [] args)
เป็นส่วนหนึ่งของเรื่อง OOP เรื่อง encapsulation ทำหน้าที่ในห่อหุ้มข้อมูลไม่ให้ถูกเห็นหรือเรียกใช้งานได้จากภายนอก ดังนั้นข้อมูลก็จะไม่ถูกแก้ไข
รูป 7-4
อธิบายรูป
public – ถ้าประกาศ public หน้าคลาส เมท็อด ตัวแปรคลาสใด คือคลาสอื่นๆจะสามารถนำไปใช้ได้อย่าง
อิสระ
protected – สามารถใช้ได้กับคลาสเดียวกัน package เดียวกัน และ คลาสที่เป็นแม่ลูกกัน แต่กับ package
อื่นๆจะไม่สามารถเรียกใช้ได้
private – จะปิดการเข้าถึงจากภายนอกทั้งหมด (ใช้กับ recursive ฟังก์ชัน)
เกี่ยวกับเมท็อดเพิ่มเติม
เวลาที่กำหนด modifier เป็น private ให้กับตัวแปรคลาส คลาสอื่นเวลาเรียกตัวแปรนี้เอาไปใช้ก็เปลี่ยนแปลงอะไรไม่ได้ แต่ผู้เขียนโปรแกรมก็ต้องใช้วิธีอื่นสำหรับให้ผู้อื่นเปลี่ยนแปลงค่าของตัวแปรเหล่านั้น โดยใช้วิธี Accessor Method กับ Mutator Method
Accessor Method ใช้ดึงค่าจากตัวแปรคลาสแล้วส่งออกไปนอกเมท็อด ใช้คำว่า getตามด้วยตัวแปรที่ถูกตั้งเป็น private
Mutator Method เมท็อดสำหรับการเปลี่ยนแปลงแก้ไข ใช้คำว่า set ตามด้วยตัวแปรที่ถูกตั้งเป็น private
รูป 7-5
สร้างคลาสหนึ่งขึ้นมา สร้างตัวแปรที่เป็น private คือไม่สามารถเปลี่ยนแปลงค่าที่ให้ได้ แต่ก็ให้เมท็อดสำหรับการเปลี่ยนค่าด้วย
บรรทัดที่ 6 : เมท็อด setNumber สำหรับรับเลขที่เป็น int เข้ามาแล้วไปเก็บไว้ในตัวแปร number
บรรทัดที่ 7 : เมท็อด getNumber สำหรับการส่งค่าของเมท็อดที่แก้ไขแล้วออกไป
รูป7-6
บรรทัดที่ 6 : สร้างอ็อปเจ็คเพื่อเรียกใช้สิ่งต่างๆจากคลาส Number
บรรทัดที่ 11 : ให้แสดงค่าของ x ซึ่งเป็นค่าเดียวกับ number ที่ getNumber มา ต้องเป็น 5
บรรทัดที่ 13 : ใช้ เมท็อด setNumber เพื่อเปลี่ยนแปลงค่าให้ให้เป็น 26
บรรทัดที่ 14 : ใช้เมท็อด getNumber อีกครั้งเพื่อแสดงค่าที่เปลี่ยนแปลงแล้วออกมา
ผลลัพธ์
Tag ที่น่าสนใจ: java object-oriented_programming class object attribute method encapsulation access_modifier instance_variable instance_method constructor dot_operator variable_declaration behavior data_type
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM