โมเดลวัตถุ (Object Model)
โมเดลวัตถุคืออะไร?
โมเดลวัตถุ (Object Model) คือแนวทางการออกแบบและการจัดระเบียบข้อมูลในรูปแบบของวัตถุ (Object) ซึ่งเป็นหน่วยพื้นฐานในการพัฒนาโปรแกรมในแนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming: OOP) โดยโมเดลวัตถุจะประกอบด้วยข้อมูล (Attributes) และฟังก์ชันหรือวิธีการ (Methods) ที่ทำงานเกี่ยวข้องกับข้อมูลนั้นๆ
การออกแบบโมเดลวัตถุช่วยให้โปรแกรมมีโครงสร้างที่สามารถขยายและดูแลรักษาได้ง่ายยิ่งขึ้น โดยใช้แนวคิดของการจัดกลุ่มข้อมูลและฟังก์ชันที่เกี่ยวข้องเข้าด้วยกันในลักษณะของวัตถุที่มีการติดต่อสื่อสารระหว่างกัน
หลักการของการเขียนโปรแกรมเชิงวัตถุ (OOP)
การพัฒนาโปรแกรมโดยใช้โมเดลวัตถุจะยึดหลักการสำคัญ 4 ประการ ได้แก่:
1. การห่อหุ้มข้อมูล (Encapsulation)
การห่อหุ้มข้อมูลหมายถึงการปิดกั้นการเข้าถึงข้อมูลโดยตรงจากภายนอกวัตถุ และแทนที่ด้วยการใช้เมธอด (Methods) เพื่อเข้าถึงและปรับเปลี่ยนข้อมูลได้ การห่อหุ้มข้อมูลช่วยให้โปรแกรมมีความปลอดภัยและง่ายต่อการบำรุงรักษา
ตัวอย่าง:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # การห่อหุ้มข้อมูล (Encapsulation)
def deposit(self, amount):
self.__balance += amount # ใช้เมธอดในการเปลี่ยนแปลงข้อมูล
def get_balance(self):
return self.__balance # ใช้เมธอดในการเข้าถึงข้อมูล
2. การสืบทอด (Inheritance)
การสืบทอดช่วยให้สามารถสร้างคลาสใหม่ที่มีคุณสมบัติและพฤติกรรมของคลาสที่มีอยู่แล้ว และสามารถปรับแต่งหรือเพิ่มเติมความสามารถใหม่ๆ ให้กับคลาสนั้นได้
ตัวอย่าง:
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal): # Dog สืบทอดจาก Animal
def speak(self):
print("Dog barks")
dog = Dog()
dog.speak() # Output: Dog barks
3. การพหุกรรม (Polymorphism)
การพหุกรรมคือความสามารถในการใช้ชื่อเมธอดเดียวกันเพื่อให้ทำงานได้แตกต่างกันไปตามชนิดของอ็อบเจ็กต์ที่ใช้งาน เมธอดเดียวกันสามารถทำงานแตกต่างกันในแต่ละคลาส
ตัวอย่าง:
class Cat(Animal):
def speak(self):
print("Cat meows")
animals = [Dog(), Cat()]
for animal in animals:
animal.speak() # Output: Dog barks, Cat meows
4. การแยกความรับผิดชอบ (Abstraction)
การแยกความรับผิดชอบหมายถึงการซ่อนรายละเอียดการทำงานภายในและเปิดเผยแค่เมธอดที่จำเป็นต่อผู้ใช้งาน การแยกความรับผิดชอบทำให้โปรแกรมสามารถเข้าใจได้ง่ายและยืดหยุ่นในการใช้งาน
ตัวอย่าง:
class Car:
def start(self):
self._engine_start() # การซ่อนรายละเอียด
print("Car started")
def _engine_start(self): # การซ่อนรายละเอียดการทำงานภายใน
print("Engine started")
องค์ประกอบหลักของโมเดลวัตถุ
โมเดลวัตถุจะประกอบด้วยองค์ประกอบหลักที่สำคัญดังนี้:
1. วัตถุ (Object)
วัตถุคืออินสแตนซ์ของคลาส ซึ่งเป็นตัวแทนของข้อมูลและพฤติกรรมในโปรแกรม โดยวัตถุจะมีสถานะ (State) และพฤติกรรม (Behavior) ที่เกี่ยวข้องกับข้อมูลที่เก็บอยู่ในนั้น
2. คลาส (Class)
คลาสคือแม่แบบในการสร้างวัตถุ ซึ่งกำหนดคุณสมบัติ (Attributes) และวิธีการ (Methods) ที่จะใช้กับวัตถุที่สร้างจากคลาสนั้นๆ
3. คุณสมบัติ (Attributes)
คุณสมบัติหรือที่เรียกว่าแอตทริบิวต์ คือข้อมูลที่เก็บในแต่ละวัตถุ เช่น ชื่อ, อายุ, ที่อยู่ เป็นต้น
4. วิธีการ (Methods)
วิธีการหรือเมธอดคือฟังก์ชันที่ถูกกำหนดไว้ในคลาส เพื่อใช้ดำเนินการต่างๆ กับข้อมูลภายในวัตถุ
5. การเชื่อมต่อระหว่างวัตถุ (Object Interaction)
วัตถุในระบบ OOP สามารถมีการติดต่อสื่อสารและแลกเปลี่ยนข้อมูลกันได้ โดยการเรียกใช้เมธอดจากวัตถุอื่นๆ ในระบบ ซึ่งการติดต่อสื่อสารนี้ช่วยให้ระบบสามารถทำงานได้ร่วมกันอย่างมีประสิทธิภาพ
ตัวอย่างการออกแบบโมเดลวัตถุ
สมมติว่าเรามีระบบการจัดการห้องสมุด เราสามารถออกแบบโมเดลวัตถุได้ดังนี้:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
self.is_checked_out = False
def check_out(self):
self.is_checked_out = True
def check_in(self):
self.is_checked_out = False
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def list_books(self):
for book in self.books:
status = "Checked out" if book.is_checked_out else "Available"
print(f"{book.title} by {book.author} - {status}")
ในตัวอย่างนี้ Book และ Library เป็นวัตถุที่มีคุณสมบัติและวิธีการที่เกี่ยวข้องกับการจัดการหนังสือในห้องสมุด โดย Library จะทำหน้าที่ในการเก็บรวบรวมและจัดการข้อมูลของหนังสือทั้งหมด
สรุป
โมเดลวัตถุ (Object Model) เป็นแนวทางในการออกแบบและจัดระเบียบข้อมูลในโปรแกรมโดยใช้แนวคิดของวัตถุ ซึ่งมีลักษณะเป็นข้อมูลที่มีพฤติกรรมที่เกี่ยวข้องกับข้อมูลเหล่านั้น การออกแบบโมเดลวัตถุช่วยให้โปรแกรมมีความยืดหยุ่นและสามารถขยายตัวได้ง่าย โดยใช้หลักการของการเขียนโปรแกรมเชิงวัตถุ (OOP) เช่น การห่อหุ้มข้อมูล, การสืบทอด, การพหุกรรม และการแยกความรับผิดชอบ