Encapsulation

ในบทเรียนนี้ เราจะพูดเกี่ยวกับ encapsulation (คุณสมบัติการห่อหุ้ม) ในภาษา Java และอธิบายแนวคิดในการนำไปใช้งานและพัฒนาโปรแกรม

Encapsulation คืออะไร

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

Encapsulation in Java

แนวคิดของ Encapsulation ที่มีตัวแปรที่ถูกปกปิดไว้ภายใน

มันเป็นคำพูดแบบนามธรรมที่จะอธิบายความหมายของ encapsulation ได้อย่างชัดเจน ยกตัวอย่างเช่น คุณสั่งอาหารและในอีกไม่กี่นาทีต่อมาคุณได้รับอาหารที่สังไป คุณไม่จำเป็นต้องทราบขั้นตอนในการที่จะได้อาหารมา เช่น เริ่มต้นด้วยพนักงานรับรายการอาหารจากคุณ ต่อไปจัดเตรียมส่วนประกอบและอุปกรณ์ในการทำอาหาร ลงมือเริ่มต้นทำอาหารและนำมาบริการให้กับคุณ

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

ตัวอย่างการใช้งาน encapsulation

ต่อไปมาดูตัวอย่างการพัฒนาโปรแกรมที่มีคุณสมบัติในการปกปิดข้อมูล ซึ่งเป็นโปรแกรมนาฬิกานับเวลา

// TestTimer.java
public class TestTimer {
public static void main (String[] args) {
Timer time = new Timer();
time.setTime(9, 30, 55);

while (true) {
time.increaseTime();
System.out.println(time.getTime());

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println(ex);
}
}
}
}

class Timer {
public int timeStamp = 0;

private int second = 0;
private int minute = 0;
private int hour = 0;

public void setTime(int h, int m, int s) {
second = s; minute = m; hour = h;
timeStamp = (hour * 3600) + (minute * 60) + second;
}

public void increaseTime() {
timeStamp = (timeStamp + 1) % 86400;
updateMembers ();
}

private void updateMembers () {
second = timeStamp % 60;
minute = (timeStamp / 60) % 60;
hour = (timeStamp / 3600) % 24;
}

public String getTime() {
return String.format("%02d:", hour) +
String.format("%02d:", minute) +
String.format("%02d", second);
}
}

ในตัวอย่างเป็นโปรแกรมแสดงนาฬิกาเหมือนในคอมพิวเตอร์ของเรา เราได้สร้างคลาส Timer ซึ่งเป็นคลาสของนาฬิกา และภายในจะมีสมาชิกตัวแปรที่เป็น private ได้แก่ second minute hour และสมาชิกเมธอด updateMembers () นั่นหมายความว่าข้อมูลเหล่านี้ถูกห่อหุ้ม เราไม่สามารถเข้าถึงมันได้โดยตรง

ทางเดียวที่เราสามารถทำได้คือเข้าถึงข้อมูลโดยเมธอดหรือตัวแปรที่เป็น public ในคำสั่ง

time.increaseTime();

เป็นการเพิ่มเวลาขึ้นไป 1 วินาที เราทราบว่าเมื่อเมธอดนี้ทำงานเวลาจะเพิ่มขึ้นไป 1 วินาที แต่ภายในการทำงานของมันว่าเป็นยังไง เราไม่ได้ทราบ และคำสั่งต่อไป

System.out.println(time.getTime());

เช่นเดียวกัน เราทราบว่าเมธอดนี้จะส่งค่าเวลากลับมาให้เรา และเราไม่ทราบว่ามันส่งข้อมูลมาแบบไหน หรือประเภทข้อมูลที่เก็บนั้นเป็นแบบใด สิ่งเหล่านี้เองเราเรียกกว่า Encapsulation

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println(ex);
}

คำสั่งนี้เป็นการหยุดโปรแกรมเป็นเวลา 1 วินาที ก่อนที่จะทำครั้งต่อไป เพื่อให้โปรแกรมสมจริงมากขึ้น สำหรับเรื่อง exception คุณจะได้เรียนภายหลัง

09:30:56
09:30:57
09:30:58
09:30:59
09:31:00
09:31:01
09:31:02
09:31:03
09:31:04
09:31:05
.
.
.

และนี่เป็นผลลัพธ์ของโปรแกรม มันจะนับเวลาและแสดงเวลาไปเรื่อยๆ เพราะเราให้ infinity loop คุณต้องออกจากโปรแกรมเพื่อจบมัน

ในความจริง encapsulation นั้นมีอยู่รอบตัวหรือคุณใช้มันมาแล้ว เช่น เมธอด println() ซึ่งมีเบื้องหลังการทำงานที่จะต้องทำการติดต่อกับจอภาพ และอื่นๆ อีกมากมาย แต่เราใช้มันแค่เพียงคำสั่งเดียวและได้ผลลัพธ์ออกมา หรือแม้กระทั่งคุณขับรถยนต์แล้วเปลี่ยนเกียร์ ซึ่งมีกลไกลต่างๆ ที่เกิดขึ้นมากกว่าที่คุณเห็นบนหน้าปัด แต่มันถูกปกปิดไว้

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


บทความเกี่ยวกับ Encapsulation

Encapsulation ในภาษา C#

Encapsulation (คุณสมบัติการห่อหุ้ม) เป็นคุณสมบัติหนึ่งของการเขียนโปรแกรมเชิงวัตถุ ซึ่งเป็นการกำหนดความสามารถในการเข้าถึงสมาชิกภายในคลาส ไม่ว่าทั้งจากภายนอกและภ...

Encapsulation ในภาษา Visual Basic

ในบทนี้ คุณจะได้เรียนเกี่ยวกับคุณสมบัติการห่อหุ้มข้อมูลหรือ encapsulation ในภาษา Visual BasicEncapsulation คือคุณสมบัติในการห่อหุ้มข้อมูลในการเขียนโปรแกรมเชิงวั...

Encapsulation ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Encapsulation ในภาษา PHP ซึ่งเป็นคุณสมบัติที่สำคัญในการเขียนโปรแกรมเชิงวัตถุอย่างหนึ่ง และแนวคิดของการห่อหุ้มของข้อมูลในการประ...