ความหมายของ instance จัดทำโดย : Mr.POP พิมพ์
 Untitled Document

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

คำว่า instance นั้นในความรู้สึกของผมเองมันก็เหมือนกับที่เราเรียกว่า object นั่นแหละครับ ตั้งแต่บทความแรกๆ หรือบทความที่ผ่านมาผมได้ให้คำนิยามของประโยคต่อไปนี้ว่าการประกาศ object (ถ้าติดตามบทความตั้งแต่ต้นๆ)

Circle myCircle = new Circle();

myCircle คือ object ของคลาส Circle แล้วผมบอกว่า new Circle() คือคำสั่งที่ใช้สร้าง object โดยโหลด Constructor Circle() ของคลาส Circle เข้ามาใน object ด้วย นี้คือในส่วนที่ผมได้กล่าวไว้ ทีนี้ลองมาดูการนิยามแบบ instance บ้างนะครับ

เราสามารถกล่าวใหม่ได้ว่า myCircle คือ instance ของคลาส Circle โดย instance นี้จะเป็นตัวเก็บโครงสร้างของคลาสใดๆ ไว้ไม่ว่าจะเป็นตัวแปรในคลาสหรือ Method ต่างๆ ซึ่ง instance เหล่านี้จะไปจองพื้นที่ในหน่อยความจำไว้เพื่อเก็บโครงสรัางดังกล่าว

ลองมาตัวอย่างอีกแบบหนึ่งครับ ผมให้มีคลาสหนึ่งชื่อ Employee

จากคลาสดังกล่าวผมจะทำการสร้าง instance ขึ้นมาหนึ่งตัวชื่อ p สามารถทำได้ดังนี้

Employee p = new Employee();

ทำให้เราได้ p เป็น instance ของคลาสนี้ดังภาพ

จากรูปเราจะเห็นว่า instance ก็เปรียบเหมือนกล่องใบหนึ่งโดยภายในนั้นจะมี value เป็นพื้นที่ที่ใช้เก็บตัวแปรและ Method ต่างๆ ของคลาสและจะมี address เป็นตัวชี้ไปยัง value ทำหน้าที่คล้าย pointer แต่ในภาษา Java จะไม่เรียก pointer จะเรียก reference แทน ส่วน p จะเป็นชื่อของ reference ที่จะใช้ในการอ้างถึงตัวแปรและ Method ต่างๆ ภายในคลาสนั่นเอง

สรุปได้ว่า
ประโยค Employee p เป็นการประกาศว่า p เป็น reference ของคลาส Employee
ประโยค new Employee() เป็นการสร้าง instance ของคลาส Employee

ถ้าเราประกาศ Employee p ; เฉยๆ จะทำให้ได้ p เป็น reference แต่ไม่มีหน่วยความจำที่เก็บค่าของ instance
ถ้าเราประโยค new Employee() ; เฉยๆ จะทำให้เราได้หน่วยความจำที่เก็บค่าของ instance แต่จะไม่มี reference ซึ่งเราสามารถประกาศแยกกันได้ดังนี้

Employee p ;
p = new Employee() ;

การประกาศลักษณะนี้ก็จะหมายความว่า เราได้ประกาศ p เป็น reference ก่อน จากนั้นบรรทัดที่ 2 จึงสร้าง instance ขึ้นมาแล้วไปกำหนดค่าให้กับ p เราจะได้ p เป็น reference ของ instance นี้ทันที

การใช้งานของ p นั้นคือ เราจะใช้อ้างถึงสมาชิกต่างๆ ที่อยู่ใน instance นั้นโดยใช้เครื่องหมาย dot(.) มาเชื่อม เช่น p.id หรือ p.getName() เป็นต้น

ส่วนในการอ้างถึงสมาชิกใน instance นั้นก็ขึ้นอยู่กับการกำหนด modifiers ของสมาชิกด้วย (modifiers คือ public ,private และ protected) ตัวอย่างเช่น ในคลาส Employee มีสมาชิกชื่อ id เป็น public เราสามารถใช้ p (p.id)อ้างถึงได้จากภายนอกคลาส Employee แต่ถ้านำ p มาอ้างถึงตัวแปร name กับ salary จะไม่สามารถทำได้เนื่องจากมี modifiers เป็น private ซึ่งสามารถใช้ได้ภายในคลาส Employee เท่านั้นจะมาอ้างนอกคลาสไม่ได้เลย จากข้อสังเกตดังกล่าวจะเห็นว่า ตัวแปร name กับ salary เป็น private วิธีที่จะทำให้เรียกใช้ตัวแปรนี้จากนอกคลาสได้ก็คือ ต้องสร้าง Method ที่ใช้ในการอ่านค่าและเขียนค่า ในที่นี้ก็คือ

public void setName(String n) { name = n ; } (Method นี้ใช้เขียนค่า name)
public String getName( ) { return name ; } (Method นี้ใช้อ่านค่า name)
public void setSalary(double s) { salary = s ; } (Method นี้ใช้เขียนค่า salary)
public double getSalary( ) { return salary ; } (Method นี้ใช้อ่านค่า salary)

ที่ทำเช่นนี้ก็เพราะว่าเราต้องการป้องการตัวแปร name กับ salary 2 ตัวนี้ไว้ให้ใช้ได้เฉพาะที่นั่นเองเพื่อความปลอดภัยของตัวแปร วิธีเรียกใช้งานสามารถทำได้ดังนี้

Employee p = new Employee();
p.id = 12345 ;
p.setName("ramet") ;
p.setSalary(6000);
system.out.println(p.id+" , "+p.getName()+" , "+p.getSalary()) ;

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

 

คุณอาจสนใจ
เทคนิคการทำภาพถ่าย กลาย เป็นภาพ เขียน สีน้ำ ด้วย Photoshop
Tung (127,994 - 23 ธ.ค. 50)
แจ้งเตือนฮาร์ดดิสก์ใกล้ตาย
เว็บไทยดีดี (15,551 - 22 ก.ย. 50)
การแทรกรูปภาพ และเก็บใน Folder ที่เราต้องการ
Mr.GuruZ (25,851 - 26 พ.ย. 50)
วิธีแก้-กำจัด ไวรัส toy.exe, toy usb 2.0 , systemnt , mslogon
เว็บไทยดีดี (29,761 - 18 ส.ค. 50)
การใส่รูปภาพลงบนเว็บเพจ HTML
สายลม (81,592 - 04 มิ.ย. 49)
การสร้าง Webboard ด้วย Dreamweaver 8 (ตอนที่ 2)
first (82,129 - 12 ม.ค. 51)
แก้ปัญหา run ภาษาไทย ของ tis620 บน utf-8 ไม่ได้
Tung (44,326 - 19 ธ.ค. 50)
เทคนิคการทำภาพ zoom เข้า zoom ออก
Charoen (110,920 - 28 พ.ย. 50)