3.2 ตัวปรับแต่งความเป็นส่วนตัว (Access Modifiers)
3.2 ตัวปรับแต่งความเป็นส่วนตัว (Access Modifiers)
Access Modifiers (ตัวปรับแต่งความเป็นส่วนตัว) ในการเขียนโปรแกรมเชิงวัตถุ (OOP) ใช้เพื่อกำหนดสิทธิ์ในการเข้าถึงข้อมูลและฟังก์ชัน (หรือเมธอด) ภายในคลาส ตัวปรับแต่งความเป็นส่วนตัวช่วยให้คุณสามารถควบคุมว่าผู้ใช้หรืออ็อบเจกต์อื่นๆ สามารถเข้าถึงสมาชิก (เช่น ตัวแปรหรือเมธอด) ของคลาสได้หรือไม่ และสามารถปรับแต่งการเข้าถึงข้อมูลได้ตามความต้องการ
โดยทั่วไปแล้วในภาษาการเขียนโปรแกรม OOP จะมี สามประเภทหลัก ของตัวปรับแต่งความเป็นส่วนตัว:
Public
Private
Protected
ความหมาย: สมาชิกที่ถูกประกาศเป็น public สามารถเข้าถึงได้จากภายนอกคลาสหรือภายนอกแพคเกจ (ในบางภาษา) โดยไม่มีข้อจำกัด
การใช้งาน: หากต้องการให้ข้อมูลหรือเมธอดสามารถใช้งานได้ทั่วโลก (จากทุกคลาสในโปรเจ็กต์) ก็สามารถตั้งเป็น public
ตัวอย่าง
Python:
class Person:
def __init__(self, name, age):
self.name = name # public variable
self.age = age # public variable
def greet(self): # public method
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
p1 = Person("Alice", 30)
p1.greet() # สามารถเรียกใช้ได้จากภายนอก
Java:
public class Person {
public String name; // public variable
public int age; // public variable
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void greet() { // public method
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Alice", 30);
p1.greet(); // สามารถเรียกใช้ได้จากภายนอก
}
}
ความหมาย: สมาชิกที่ถูกประกาศเป็น private จะไม่สามารถเข้าถึงได้จากภายนอกคลาสที่ประกาศไว้ มักใช้เพื่อปกป้องข้อมูลและซ่อนรายละเอียดของการทำงานภายในคลาส
การใช้งาน: ใช้เพื่อไม่ให้ข้อมูลสำคัญหรือกระบวนการภายในคลาสถูกดัดแปลงหรือเข้าถึงจากภายนอก
ตัวอย่าง
Python:
Copy code
class Person:
def __init__(self, name, age):
self.__name = name # private variable
self.__age = age # private variable
def __get_name(self): # private method
return self.__name
p1 = Person("Bob", 25)
# print(p1.__name) # จะเกิดข้อผิดพลาด เนื่องจาก __name เป็น private
Java:
Copy code
public class Person {
private String name; // private variable
private int age; // private variable
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private void display() { // private method
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Bob", 25);
// p1.display(); // จะเกิดข้อผิดพลาด เนื่องจาก display() เป็น private
}
}
ความหมาย: สมาชิกที่ประกาศเป็น protected สามารถเข้าถึงได้จากคลาสภายในแพคเกจเดียวกันและคลาสที่สืบทอด (subclass) จากคลาสนี้
การใช้งาน: ใช้เมื่อคุณต้องการให้การเข้าถึงข้อมูลนั้นๆ เป็นไปได้ในคลาสที่สืบทอดมาจากคลาสนี้ แต่ไม่ให้เข้าถึงจากภายนอก
ตัวอย่าง
Python:
class Person:
def __init__(self, name, age):
self._name = name # protected variable
self._age = age # protected variable
def _greet(self): # protected method
print(f"Hello, my name is {self._name} and I am {self._age} years old.")
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def show_details(self):
self._greet() # สามารถเข้าถึง _name และ _age ได้จากคลาสที่สืบทอด
print(f"My student ID is {self.student_id}")
s1 = Student("Charlie", 20, "S12345")
s1.show_details() # สามารถเรียกใช้ได้จากคลาสที่สืบทอด
Java:
public class Person {
protected String name; // protected variable
protected int age; // protected variable
public Person(String name, int age) {
this.name = name;
this.age = age;
}
protected void greet() { // protected method
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
public class Student extends Person {
private String studentId;
public Student(String name, int age, String studentId) {
super(name, age);
this.studentId = studentId;
}
public void showDetails() {
greet(); // สามารถเข้าถึง method greet() จากคลาสที่สืบทอด
System.out.println("My student ID is " + studentId);
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student("Charlie", 20, "S12345");
s1.showDetails(); // สามารถเรียกใช้ได้จากคลาสที่สืบทอด
}
}
Public: สามารถเข้าถึงได้จากทุกที่
Private: สามารถเข้าถึงได้เฉพาะภายในคลาสเท่านั้น
Protected: สามารถเข้าถึงได้จากคลาสภายในแพคเกจเดียวกันและจากคลาสที่สืบทอด
Default (Package-Private): สามารถเข้าถึงได้ภายในแพคเกจเดียวกัน
ตัวปรับแต่งความเป็นส่วนตัว (Access Modifiers)
อ่านบทความเพิ่มเติมได้ที่ 👇👇