/ OOP

[365 วันแห่งโปรแกรม #day8] Principles of OOP (ตอนที่ 3)

วันที่แปดของ ‪#‎365วันแห่งโปรแกรม‬ วันนี้เราจะมีคุยกันเรื่อง Principles of OOP (ตอนที่ 3)


วันนี้เราจะมาคุยกันเรื่อง Encapsulation ซึ่งเป็นหลักจากข้อที่ 3 ของ Principles of OOP

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

  1. กลไกของตัวภาษาโปรแกรมที่ใช้ในการจำกัดการเข้าถึงข้อมูล

  2. โครงสร้างภาษาโปรแกรมที่สนับสนุนให้มีการรวมกลุ่มของข้อมูล และฟังกชันที่ทำงานเกี่ยวกับข้อมูลนั้นเข้าด้วยกัน

ภาษาที่มีคุณสมบัติของ Encapsulation จำเป็นต้องมีคุณสมบัติอย่างน้อยหนึ่งข้อที่กล่าวมา จริงๆ แล้ว Encapsulation ยังเป็นส่วนหนึ่งของ Information hiding ที่กล่าวถึงการซ่อนข้อมูลจากภายนอก

ในมุมของ Information hiding แล้ว Encapsulation คือกลไกที่ใช้ในการซ่อนข้อมูลและฟังก์ชันจากภายนอกของวัตถุ เช่น การไม่ยอมให้เข้าถึง ตัวแปร (state) ของวัตถุโดยตรง แต่ให้ทำได้ผ่านฟังก์ชันภายในเท่านั้น ในภาษาส่วนใหญ่ไม่มีการปกป้องการเข้าถึงข้อมูลแบบอัตโนมัติ แต่แนะนำให้โปรแกรมเมอร์ใช้ access specifiers (พวก protected, private, public) ควบคุมกันเอาเอง ว่าจะเปิดตรงไหน จะปิดตรงไหน

ทำไมต้องควบคุมการเข้าถึงข้อมูล? การเข้าถึงและแก้ไขข้อมูลจากภายนอกนั้น อาจจะทำให้เกิดผลลัพธ์อันไม่พึงประสงค์ เพราะเราสามารถดูหรือแก้ไขข้อมูลจากที่ไหนก็ได้ที่สามารถอ้างถึง object นั้นๆ และยังทำให้เกิด inter-dependencies ระหว่าง component ซึ่งขัดกับหลักการออกแบบแบบ OO อีกทั้งยังเป็นหายนะของการ Debug อีกด้วย

คลาสถือเป็นการทำ Encapsulation เพราะเป็นการร่วมกลุ่มของข้อมูลและฟังก์ชันเป็น component เดียว

ในหลายภาษายอมให้เข้าถึงตัวแปรหรือฟังก์ชันต่างๆ ทั้งหมดของวัตถุ แม่ว่าจะถูกซ่อนไว้ ผ่าน Reflection API หรือวิธีการอื่นๆ

‪#‎day8‬ #365วันแห่งโปรแกรม ‪#‎โครงการ365วันแห่ง‬...