สัปดาห์ที่ 6 Object-Oriented Programming

จุดประสงค์การเรียนรู้

  1. อธิบายแนวคิด OOP และเปรียบเทียบกับ Procedural Programming ได้
  2. ออกแบบ Class และ Object ได้
  3. ใช้ Constructor และ Destructor เพื่อจัดการวงจรชีวิตของ Object ได้

เนื้อหา

แนวคิด OOP

OOP มองโปรแกรมเป็นกลุ่มของ Object ที่มีข้อมูลและพฤติกรรม ช่วยให้โปรแกรมใหญ่แบ่งส่วนได้ชัดเจน นำกลับมาใช้ซ้ำได้ และลดการพึ่งพากันของโค้ด

Class และ Object

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

Constructor/Destructor

Constructor ใช้กำหนดค่าเริ่มต้นเมื่อสร้าง Object ส่วน Destructor ใช้คืนทรัพยากรเมื่อ Object สิ้นสุดอายุการใช้งาน เช่น ปิดไฟล์หรือคืนหน่วยความจำ

Workshop

ออกแบบ Class พื้นฐานสำหรับระบบจัดการข้อมูล พร้อมกำหนด Attribute, Method, Constructor และ Destructor

รายละเอียดการเรียนรู้

ผู้เรียนเริ่มจากการวิเคราะห์คำนามและคำกริยาในโจทย์เพื่อหา Class, Attribute และ Method จากนั้นพิจารณาว่าแต่ละ Class ควรรับผิดชอบเรื่องใด ไม่ควรให้ Class เดียวทำทุกอย่าง เพราะจะทำให้แก้ไขยากและทดสอบยาก

การออกแบบ Constructor ควรทำให้ Object อยู่ในสถานะที่พร้อมใช้งานทันที ส่วน Destructor หรือขั้นตอน cleanup ควรรับผิดชอบการคืนทรัพยากร เช่น ไฟล์ หน่วยความจำ หรือการเชื่อมต่อระบบ

แนวปฏิบัติ

  1. ให้ Class มีหน้าที่ชัดเจน
  2. ซ่อนข้อมูลภายในเท่าที่จำเป็น
  3. ตั้งชื่อ Method เป็นพฤติกรรม
  4. หลีกเลี่ยง Constructor ที่ทำงานหนักเกินไป

แบบฝึกหัด

ออกแบบ Class Diagram อย่างง่าย แล้วเขียน Class อย่างน้อย 2 คลาสที่มีความสัมพันธ์กัน

รูปแบบการนำเสนอเพิ่มเติมตามแม่แบบ

Object-Oriented Programming (OOP) คือแนวคิดการออกแบบโปรแกรมโดยมองระบบเป็นกลุ่มของ Object ที่มีข้อมูลและพฤติกรรมในตัวเอง

%%{init: {'theme': 'base', 'themeVariables': {'background': '#282828','primaryColor': '#3c3836','primaryTextColor': '#fbf1c7','primaryBorderColor': '#fabd2f','lineColor': '#83a598','secondaryColor': '#504945','tertiaryColor': '#665c54'}}}%%
classDiagram
  class Student {
    +string id
    +string name
    +showInfo()
  }
  class Course {
    +string code
    +string title
    +addStudent()
  }
  Course "1" --> "*" Student : enrolls / ลงทะเบียน

สมการความซับซ้อนของ Class อย่างง่าย

K=a+m

ตัวอย่างโค้ดทดลอง

#include <iostream>
using namespace std;

class Student {
private:
    string id;
    string name;

public:
    Student(string studentId, string studentName) {
        id = studentId;
        name = studentName;
    }

    void showInfo() {
        cout << id << " " << name << endl;
    }
};

int main() {
    Student s("66001", "Anan"); // สร้าง object จาก class
    s.showInfo();               // expected: 66001 Anan
    return 0;
}
องค์ประกอบ ความหมาย ตัวอย่าง
Class แม่แบบของ object Student
Object สิ่งที่สร้างจาก class s
Attribute ข้อมูลภายใน object id, name
Method พฤติกรรมของ object showInfo()

กลับรายวิชา