メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Object-Oriented Programming (OOP): Classes and Objects

บทความนี้เป็นการปูพื้นฐานเรื่องการเขียนโปรแกรมเชิงวัตถุ (OOP) โดยเน้นที่ Classes และ Objects ซึ่ง Class เปรียบเสมือนพิมพ์เขียวที่ใช้อธิบายลักษณะและพฤติกรรมของ O...

Object-Oriented Programming (OOP): Classes and Objects

ในบทเรียนก่อนหน้า เราได้เรียนรู้เกี่ยวกับการ Autoloading Classes ซึ่งเป็นส่วนหนึ่งของการจัดการโค้ดให้เป็นระเบียบและง่ายต่อการบำรุงรักษา ในบทนี้ เราจะเข้าสู่หัวใจสำคัญของการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) นั่นคือ Classes และ Objects ซึ่งเป็นพื้นฐานสำคัญในการสร้างโปรแกรมที่มีโครงสร้างและจัดการได้ง่ายยิ่งขึ้น

ทำไมต้อง OOP?

ก่อนที่เราจะลงมือเขียนโค้ด เรามาทำความเข้าใจกันก่อนว่าทำไม OOP ถึงมีความสำคัญในการพัฒนาซอฟต์แวร์ขนาดใหญ่:

  • การจัดระเบียบโค้ด: OOP ช่วยให้เราสามารถจัดระเบียบโค้ดให้เป็นกลุ่มของ objects ที่ทำงานร่วมกัน ทำให้โค้ดอ่านง่ายและบำรุงรักษาได้ง่ายขึ้น
  • การนำโค้ดกลับมาใช้ใหม่ (Reusability): OOP สนับสนุนการสร้าง components ที่สามารถนำกลับมาใช้ใหม่ได้ในหลายส่วนของโปรแกรม หรือแม้แต่ในโปรเจ็กต์อื่นๆ
  • การซ่อนรายละเอียด (Encapsulation): OOP ช่วยให้เราสามารถซ่อนรายละเอียดการทำงานภายในของ object ได้ ทำให้ผู้ใช้ object ไม่จำเป็นต้องรู้ว่า object ทำงานอย่างไร เพียงแค่รู้ว่าจะใช้งานอย่างไร
  • การขยายขีดความสามารถ (Extensibility): OOP ช่วยให้เราสามารถขยายขีดความสามารถของโปรแกรมได้ง่าย โดยการสร้าง objects ใหม่ที่สืบทอดคุณสมบัติจาก objects เดิม

การใช้ OOP ไม่ได้หมายความว่าโปรแกรมของคุณจะ "ดี" ขึ้นโดยอัตโนมัติ การออกแบบ OOP ที่ดีต้องอาศัยความเข้าใจในหลักการและแนวคิดต่างๆ รวมถึงการตัดสินใจเลือกแนวทางที่เหมาะสมกับปัญหาที่ต้องการแก้ไข

Classes: พิมพ์เขียวของ Objects

Class คือพิมพ์เขียว (blueprint) หรือแม่แบบที่ใช้อธิบายลักษณะและพฤติกรรมของ object ชนิดหนึ่ง เปรียบเสมือนแบบแปลนบ้านที่อธิบายรายละเอียดของบ้าน เช่น จำนวนห้อง ขนาดของห้อง วัสดุที่ใช้ ฯลฯ

ใน PHP เราสามารถสร้าง class ได้โดยใช้ keyword `class` ตามด้วยชื่อ class และปีกกา `{}` ที่ครอบคลุมส่วนประกอบต่างๆ ของ class

<?php

class Dog {
  // Properties (คุณสมบัติ)
  public $name;
  public $breed;
  public $age;

  // Methods (พฤติกรรม)
  public function bark() {
    echo "Woof!";
  }

  public function getAgeInHumanYears() {
    return $this->age * 7;
  }
}

?>

ในตัวอย่างข้างต้น เราได้สร้าง class ชื่อ `Dog` ซึ่งมี:

  • Properties: `$name`, `$breed`, และ `$age` เป็นตัวแปรที่เก็บข้อมูลเกี่ยวกับสุนัขแต่ละตัว
  • Methods: `bark()` และ `getAgeInHumanYears()` เป็นฟังก์ชันที่กำหนดพฤติกรรมของสุนัข

Visibility (การเข้าถึง)

คำว่า `public` ที่อยู่หน้า properties และ methods เป็นตัวกำหนดระดับการเข้าถึง (visibility) ซึ่งมี 3 ระดับ:

  • `public`: สามารถเข้าถึงได้จากทุกที่ ทั้งภายในและภายนอก class
  • `protected`: สามารถเข้าถึงได้จากภายใน class และจาก class ที่สืบทอด (inheritance) เท่านั้น
  • `private`: สามารถเข้าถึงได้จากภายใน class เท่านั้น

การกำหนด visibility ช่วยให้เราสามารถควบคุมการเข้าถึงข้อมูลและพฤติกรรมของ object ได้ เพื่อป้องกันการแก้ไขข้อมูลโดยไม่ตั้งใจ หรือการใช้งาน methods ที่ไม่ควรถูกเรียกจากภายนอก

Objects: สำเนาที่สร้างจาก Class

Object คือสำเนา (instance) ที่สร้างขึ้นจาก class เปรียบเสมือนบ้านที่สร้างขึ้นตามแบบแปลน `Dog` class เป็นเพียงพิมพ์เขียว แต่ object คือสุนัขจริงๆ ที่มีชื่อ พันธุ์ และอายุ

เราสามารถสร้าง object ได้โดยใช้ keyword `new` ตามด้วยชื่อ class:

<?php

$myDog = new Dog();

?>

ในตัวอย่างนี้ เราได้สร้าง object ชื่อ `$myDog` จาก class `Dog` ตอนนี้ `$myDog` เป็นตัวแทนของสุนัขตัวหนึ่งที่เราสามารถกำหนดคุณสมบัติและเรียกใช้พฤติกรรมต่างๆ ได้

การเข้าถึง Properties และ Methods

เราสามารถเข้าถึง properties และ methods ของ object ได้โดยใช้ operator `->`:

<?php

$myDog = new Dog();
$myDog->name = "Buddy";
$myDog->breed = "Golden Retriever";
$myDog->age = 3;

echo "My dog's name is " . $myDog->name . ".\n";
echo "He is a " . $myDog->breed . ".\n";
echo "He is " . $myDog->age . " years old.\n";
echo "He is " . $myDog->getAgeInHumanYears() . " years old in human years.\n";

$myDog->bark(); // Outputs: Woof!

?>

ในตัวอย่างนี้ เราได้:

  • กำหนดค่าให้กับ properties `$name`, `$breed`, และ `$age` ของ `$myDog` object
  • เรียกใช้ method `getAgeInHumanYears()` เพื่อคำนวณอายุของสุนัขในหน่วยปีมนุษย์
  • เรียกใช้ method `bark()` เพื่อให้สุนัขเห่า

ข้อควรจำและแนวปฏิบัติที่ดี

  • ตั้งชื่อ Class ให้สื่อความหมาย: ชื่อ class ควรสื่อถึงสิ่งที่ class นั้นเป็นตัวแทน เช่น `Dog`, `Car`, `User`
  • กำหนด Visibility ให้เหมาะสม: กำหนด visibility เพื่อควบคุมการเข้าถึงข้อมูลและพฤติกรรมของ object
  • ใช้ Properties อย่างระมัดระวัง: หลีกเลี่ยงการใช้ properties ที่มีข้อมูลซ้ำซ้อน หรือสามารถคำนวณได้จาก properties อื่นๆ
  • ใช้ Methods เพื่อจัดการพฤติกรรม: กำหนดพฤติกรรมของ object ผ่าน methods แทนที่จะแก้ไข properties โดยตรง
  • คิดถึงการ Reusability: ออกแบบ class ให้สามารถนำกลับมาใช้ใหม่ได้ในหลายส่วนของโปรแกรม

สรุป

ในบทนี้ เราได้เรียนรู้เกี่ยวกับ Classes และ Objects ซึ่งเป็นพื้นฐานสำคัญของการเขียนโปรแกรมเชิงวัตถุ (OOP) เราได้เรียนรู้ว่า:

  • Class คือพิมพ์เขียวที่ใช้อธิบายลักษณะและพฤติกรรมของ object
  • Object คือสำเนาที่สร้างขึ้นจาก class
  • เราสามารถเข้าถึง properties และ methods ของ object ได้โดยใช้ operator `->`
  • การกำหนด visibility ช่วยให้เราสามารถควบคุมการเข้าถึงข้อมูลและพฤติกรรมของ object ได้

ในบทเรียนถัดไป เราจะลงลึกในรายละเอียดเกี่ยวกับ Properties และ Methods มากยิ่งขึ้น รวมถึงเรียนรู้เกี่ยวกับ Constructor และ Destructor ซึ่งเป็น methods พิเศษที่ใช้ในการเริ่มต้นและสิ้นสุดการทำงานของ object

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る