Encapsulation คือการรวมข้อมูลและเมธอดไว้ใน Class เดียวกัน พร้อมจำกัดการเข้าถึงข้อมูลภายในด้วย Access Modifier เช่น private, protected และ public เพื่อป้องกันการใช้งานผิดวิธี
Inheritance ช่วยให้คลาสลูกสืบทอดคุณสมบัติจากคลาสแม่ ลดโค้ดซ้ำ และสร้างโครงสร้างที่สะท้อนความสัมพันธ์ของวัตถุได้
Override คือการเขียนเมธอดในคลาสลูกเพื่อปรับพฤติกรรมจากคลาสแม่ให้เหมาะกับบริบทเฉพาะ
สร้างลำดับชั้นของ Class จากโจทย์ เช่น บุคคล-นักศึกษา-อาจารย์ หรือสินค้า-สินค้าดิจิทัล-สินค้ากายภาพ
ผู้เรียนฝึกตัดสินใจว่าข้อมูลใดควรเป็น private, protected หรือ public โดยยึดหลักว่าภายนอกควรเข้าถึงผ่านพฤติกรรมที่ควบคุมได้ ไม่ควรแก้ข้อมูลภายในโดยตรงหากมีเงื่อนไขทางธุรกิจเกี่ยวข้อง
การใช้ Inheritance ต้องพิจารณาความสัมพันธ์แบบ "เป็นชนิดหนึ่งของ" เช่น Student เป็น Person ไม่ใช่แค่ "มีข้อมูลคล้ายกัน" หากใช้ผิดจะทำให้โครงสร้างซับซ้อนและแก้ไขยาก
สร้างคลาสแม่ 1 คลาสและคลาสลูกอย่างน้อย 2 คลาส พร้อมเมธอดที่ถูก override และตัวอย่างการเรียกใช้งาน
Encapsulation คือการซ่อนข้อมูลภายใน class และเปิดให้เข้าถึงผ่าน method ที่ควบคุมได้ ส่วน Inheritance คือการสร้าง class ใหม่จาก class เดิมเพื่อลดโค้ดซ้ำและแสดงความสัมพันธ์แบบ "เป็นชนิดหนึ่งของ"
%%{init: {'theme': 'base', 'themeVariables': {'background': '#282828','primaryColor': '#3c3836','primaryTextColor': '#fbf1c7','primaryBorderColor': '#fabd2f','lineColor': '#8ec07c','secondaryColor': '#504945','tertiaryColor': '#665c54'}}}%%
classDiagram
class Person {
-string name
+setName()
+getName()
}
class Student {
-string studentId
+showRole()
}
class Teacher {
-string employeeId
+showRole()
}
Person <|-- Student
Person <|-- Teacher
#include <iostream>
using namespace std;
class Person {
protected:
string name;
public:
void setName(string value) { name = value; }
};
class Student : public Person {
public:
void showRole() {
cout << name << " is a student" << endl;
}
};
int main() {
Student s;
s.setName("Anan");
s.showRole(); // expected: Anan is a student
return 0;
}
| แนวคิด | จุดประสงค์ | ข้อควรระวัง |
|---|---|---|
| private | ซ่อนข้อมูล | ภายนอกเข้าถึงไม่ได้โดยตรง |
| protected | ให้ class ลูกใช้ | อย่าเปิดกว้างเกินจำเป็น |
| override | ปรับพฤติกรรม class ลูก | ต้องรักษาความหมายเดิม |