3.3 การใช้ Getter และ Setter
3.3 การใช้ Getter และ Setter
การใช้ Getter และ Setter เป็นแนวทางหนึ่งที่สำคัญในการ Encapsulation (การห่อหุ้มข้อมูล) ในโปรแกรมเชิงวัตถุ (OOP) ซึ่งช่วยให้สามารถเข้าถึงหรือปรับเปลี่ยนข้อมูลของตัวแปรในคลาสได้อย่างปลอดภัย โดยไม่ต้องเปิดเผยข้อมูลภายในคลาสหรืออนุญาตให้มีการเปลี่ยนแปลงข้อมูลโดยตรงจากภายนอก
Getter: เป็นเมธอดที่ใช้เพื่อดึงข้อมูล (หรือค่าของตัวแปร) ของอ็อบเจกต์ โดยมักจะมีชื่อเป็น getX() ซึ่ง X คือชื่อของตัวแปรที่เราต้องการดึงข้อมูล
Setter: เป็นเมธอดที่ใช้เพื่อกำหนดค่าใหม่ให้กับตัวแปร โดยมักจะมีชื่อเป็น setX() ซึ่ง X คือชื่อของตัวแปรที่เราต้องการตั้งค่า
การใช้ Getter และ Setter ช่วยให้:
ข้อมูลที่เป็น private สามารถเข้าถึงหรือปรับเปลี่ยนได้ผ่านเมธอดเหล่านี้
สามารถควบคุมการเข้าถึงข้อมูล เช่น การตรวจสอบค่าที่กำหนดเข้าไปใน setter ก่อนที่จะเปลี่ยนแปลงค่าของตัวแปร
การเปลี่ยนแปลงวิธีการเก็บข้อมูลภายในคลาสไม่กระทบต่อผู้ใช้ภายนอก เพราะจะใช้ getter และ setter เป็นตัวกลางในการเข้าถึงข้อมูล
ตัวอย่างการใช้ Getter และ Setter
1. ตัวอย่างในภาษา Python
ใน Python, เราสามารถสร้าง getter และ setter ได้ง่ายๆ โดยใช้เมธอด
class Person:
def __init__(self, name, age):
self.__name = name # ตัวแปร private
self.__age = age # ตัวแปร private
# Getter สำหรับ name
def get_name(self):
return self.__name
# Setter สำหรับ name
def set_name(self, name):
if len(name) > 0:
self.__name = name
else:
print("Name cannot be empty!")
# Getter สำหรับ age
def get_age(self):
return self.__age
# Setter สำหรับ age
def set_age(self, age):
if age > 0:
self.__age = age
else:
print("Age must be greater than 0!")
# สร้างอ็อบเจกต์ของคลาส Person
person1 = Person("Alice", 30)
# ใช้ getter และ setter เพื่อเข้าถึงและปรับเปลี่ยนข้อมูล
print(person1.get_name()) # Output: Alice
person1.set_name("Bob") # เปลี่ยนชื่อ
print(person1.get_name()) # Output: Bob
print(person1.get_age()) # Output: 30
person1.set_age(35) # เปลี่ยนอายุ
print(person1.get_age()) # Output: 35
2. ตัวอย่างในภาษา Java
ใน Java, การใช้ getter และ setter มีรูปแบบที่คล้ายกัน แต่ใน Java ตัวแปรภายในคลาสต้องระบุประเภท (type) และจะใช้เมธอดในการเข้าถึงหรือปรับเปลี่ยนข้อมูล
public class Person {
private String name; // ตัวแปร private
private int age; // ตัวแปร private
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter สำหรับ name
public String getName() {
return name;
}
// Setter สำหรับ name
public void setName(String name) {
if (name != null && name.length() > 0) {
this.name = name;
} else {
System.out.println("Name cannot be empty!");
}
}
// Getter สำหรับ age
public int getAge() {
return age;
}
// Setter สำหรับ age
public void setAge(int age) {
if (age > 0) {
this.age = age;
} else {
System.out.println("Age must be greater than 0!");
}
}
public static void main(String[] args) {
// สร้างอ็อบเจกต์ของคลาส Person
Person person1 = new Person("Alice", 30);
// ใช้ getter และ setter เพื่อเข้าถึงและปรับเปลี่ยนข้อมูล
System.out.println(person1.getName()); // Output: Alice
person1.setName("Bob"); // เปลี่ยนชื่อ
System.out.println(person1.getName()); // Output: Bob
System.out.println(person1.getAge()); // Output: 30
person1.setAge(35); // เปลี่ยนอายุ
System.out.println(person1.getAge()); // Output: 35
}
}
ปกป้องข้อมูล: เราสามารถทำให้ข้อมูลเป็น private และให้สามารถเข้าถึงได้เฉพาะผ่านเมธอด getter และ setter ซึ่งช่วยป้องกันการเข้าถึงข้อมูลโดยตรงจากภายนอก
การตรวจสอบข้อมูล: Setter สามารถใช้เพื่อตรวจสอบหรือควบคุมค่าที่ตั้งให้กับตัวแปร เช่น ตรวจสอบว่าอายุเป็นค่าบวกหรือชื่อไม่ว่างเปล่า
ความยืดหยุ่นในการเปลี่ยนแปลง: เราสามารถเปลี่ยนแปลงวิธีการเก็บข้อมูลในคลาสได้โดยไม่กระทบต่อโค้ดภายนอก เพราะโค้ดภายนอกจะเข้าถึงข้อมูลผ่าน getter และ setter เท่านั้น
การขยายและบำรุงรักษา: ถ้าต้องการเปลี่ยนแปลงวิธีการจัดการข้อมูลในอนาคต เราสามารถทำได้โดยไม่กระทบกับการใช้งานจากโค้ดภายนอก
การใช้ Getter และ Setter