Just another WordPress.com site

สำหรับคำประกาศหน้า method หรือตัวแปร ที่ชื่อว่า public, private หรือ protected นั้น ใช้สำหรับบอกว่า ใครที่สามารถจะใช้ method หรือตัวแปรนั้นๆ ได้บ้าง ถ้าเราจินตนาการว่า class คือ เจ้าสำนักนักแล้วล่ะก็ method หรือตัวแปรต่างๆ ก็เหมือนเคล็ดวิชาครับ โดยถ้าเป็น

1. public คือ เคล็ดวิชานั้นๆ จะสามารถถ่ายทอดให้กับบุคคลทั่วๆไป

2. privated คือ เคล็ดวิชาที่จะถ่ายทอดให้กับผู้ที่จะสืบทอดวิทยายุทธ์ต่อเท่านั้น (subclass เท่านั้นจึงจะใช้ method นี้ได้)

3. private คือ เคล็ดวิชาที่เจ้าสำนักไม่ยอมบอกใครทั้งสิ้น

ต่อไปผมจะสร้าง class ที่ชื่อว่า myCal ในไฟล์ที่ชื่อว่า someClass.cpp ดังรูป

ใน class นี้ผมจะตั้งสถานะ method ให้ setXY กับ sumOfSquare เป็น public คือ ใครๆก็เรียกใช้ method นี้ได้ ส่วนตัวแปร x, y ผมจะตั้งสถานะเป็น private คือไม่มีใครสามารถเรียกใช้ได้เลยนอกจาก class myCal เท่านั้น

ผมจะลองทดสอบดู method ใน class myCal ในไฟล์ที่ชื่อ test2.cpp ดูดังนี้ครับ

ทั้ง method setXY และ method sumOfSquare ผมตั้งสถานะไว้เป็น public ผมสามารถเรียกใช้งานทั้งสอง method นี้ได้จากไฟล์ test2.cpp

ทีนี้ถ้าผมจะลองเรียกตัวแปร x และ y ดู เมื่อทำการ compile มันจะเกิด error ฟ้องว่า x, y มีสถานะเป็น private ไม่สามารถเรียกใช้ได้ ดังนี้ครับ

ต่อไปนะครับผมจะสร้าง subclass ของ myCal ชื่อว่า extend_myCal ขึ้นมาในไฟล์ที่ชื่อ myExtend.cpp ดังนี้ครับ

อันนี้ไม่มีปัญหาครับ เพราะ sumOfSquare เป็น method ที่มีสถานะเป็น public

ทีนี้ถ้าผมลองเพิ่มบรรทัดนี้เข้าไป

มันก็จะฟ้อง error ครับเพราะว่าเราไปเรียกใช้ตัวแปร x, y ซึ่งมีสถานะเป็น private

ถ้าผมวางแผนการเขียนโปรแกรมเอาไว้ว่าผมอยากให้เฉพาะ subclass เท่านั้นเรียกใช้ตัวแปร x, y ได้ ผมจะไปเปลี่ยนสถานะของตัวแปร x, y ใน class myCal บนไฟล์ someClass.cpp เป็น private ดังนี้ครับ

เมื่อลองทำการรันดูก็จะไม่พบปัญหาแล้วครับ

ต่อไปนะครับผมจะแก้ไขไฟล์ myExtend.cpp โดยตัดส่วนของ main ทิ้งไปให้เหลือดังนี้ครับ

ต่อไปนะครับผมจะแก้ไขไฟล์ใน test2.cpp โดยเรียกใช้ subclass extend_myCal ดังนี้ครับ

จะพบว่าเมื่อทำการรันไม่พบปัญหาอะไร

ทีนี้ถ้าผมลองใส่โค้ด 2 บรรทัดนี้เข้าไป

จะเห็นว่าเมื่อทำการ compile จะเกิด error ขึ้นครับ เพราะตัวแปรที่เราอ้างถึงนั้นมีสถานะเป็น protect ซึ่งจะเรียกใช้ได้เฉพาะใน subclass เท่านั้นครับ

ในการดีไซน์โปรแกรมนั้นเราต้องแบ่งกลุ่ม method หรือตัวแปร ที่อนุญาตให้ใช้เฉพาะภายใน class เท่านั้น (โดยประกาศเป็น private) หรือใช้ได้แค่ใน subclass (โดยประกาศเป็น protected) หรือใช้ได้ทั่วๆไป(โดยประกาศเป็น public) แต่เรื่องการแบ่งกลุ่มเหล่านี้มันไม่มีกฎเกณฑ์ตายตัวนะครับ ขึ้นอยู่กับว่าผู้เขียนโปรแกรมอยากจะดีไซน์โปรแกรมของตนเองอย่างไรเป็นสำคัญครับ

แต่โดยทั่วไปถ้าหากเราเขียนโปรแกรมเล็กๆ ซึ่งมักจะไม่ต้องสร้าง subclass เราอาจจะใช้แค่ public กับ private ก็พอครับ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: