340 likes | 578 Views
การเขียนโปรแกรมเชิงวัตถุ. วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์) sobree@skt.ac.th. การเขียนโปรแกรมเชิงวัตถุ ( Object-Oriented Programming :OOP).
E N D
การเขียนโปรแกรมเชิงวัตถุการเขียนโปรแกรมเชิงวัตถุ วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์) sobree@skt.ac.th
การเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming :OOP) • เป็นการเขียนโปรแกรมแบบใหม่ที่กำลังได้รับความนิยมจากนักเขียนโปรแกรมและนักออกแบบระบบทั้งหลาย ด้วยแนวความคิดของการพัฒนาโปรแกรมแบบ OOP ที่เป็นขั้นตอนการสร้างออปเจ็คที่จำลองถึงสิ่งที่สนใจได้อย่างชัดเจน
การทำงานของ OOP และเครื่องมือการใช้งาน object ออปเจ็ค (object) เป็น collection ของ data (Attribute , properties) และ function logic ซึ่ง data จะบอกถึงคุณสมบัติหรือสถานะของออปเจ็คและ Method จะบอกถึงพฤติกรรมต่างๆของ object นั้นๆ class คลาส (Class) เป็นพิมพ์เขียวของออปเจ็คไม่สามารถนำมาใช้ได้โดยตรง โดยจะมีการบอกถึง Method ที่ใช้ได้โดยออปเจ็ค และมีการแสดง data type ที่บอกถึงสถานะของออปเจ็ค โดยยังไม่ระบุค่าใน Attribute แต่ละตัว ถ้าเป็นออปเจ็คจะมีการระบุค่าของ Attribute ที่แน่นอน
การทำงานของ OOP และเครื่องมือการใช้งาน Properties คือตัวแปร (Variables) ที่ต้องการกำหนดให้มีใช้ในคลาส (class) นั้นซึ่งการกำหนดตัวแปรมาใช้ภายในคลาสนั้นต้องมี keyword VAR (var พิมพ์ได้ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) อยู่หน้าชื่อตัวแปรเสมอ Methods คือฟังก์ชัน (Function) ที่ต้องการกำหนดให้มีใช้ในคลาส (class) นั้นซึ่งการสร้างฟังก์ชันมาใช้ภายในคลาสนั้นก็เหมือนกับการสร้างฟังก์ชันโดยทั่วไป
การทำงานของ OOP และเครื่องมือการใช้งาน Abstraction (Abstract Class) คือการกำหนดคุณสมบัติต่างๆ ไม่ว่าจะเป็น Properties หรือ Methods ไว้เป็นคลาสต้นแบบเพื่อใช้เป็นคลาสแม่ที่ถ่ายทอดคุณสมบัติไปยังคลาสลูกต่อไป ถ้าภายในคลาสใดมีการกำหนด Methods ให้เป็นแบบ abstract แล้วคลาสนั้นก็ต้องเป็น abstract ด้วย
การทำงานของ OOP และเครื่องมือการใช้งาน Encapsulation คือการรวม Properties และ Methods ที่มีความสัมพันธ์กันไว้ในรูปของคลาส (class) เดียวกัน Polymorphism คือความสามารถที่ยอมให้คลาสลูกเปลี่ยนแปลงรายการคำสั่งภายในฟังก์ชันที่ได้รับมาจากคลาสแม่ได้
การทำงานของ OOP และเครื่องมือการใช้งาน Overloading คือความสามารถที่ยอมให้มีการสร้างฟังก์ชันชื่อเดียวกันแต่มีพารามิเตอร์ (parameter) ที่แตกต่างกันไม่ว่าจะเป็นจำนวนหรือแบบข้อมูล (data type) ของพารามิเตอร์นั้น Constructor Function คือการสร้างฟังก์ชันภายในคลาสที่มีการกำหนดชื่อของฟังก์ชันให้เป็นชื่อเดียวกับชื่อของคลาสที่ฟังก์ชันนั้นอยู่
การทำงานของ OOP และเครื่องมือการใช้งาน This คือ pointer ที่ใช้อ้างถึงตัวแปร (property) ของคลาสนั้น เมื่อมีคำสั่งที่อยู่ภายในคลาสที่ต้องการจะอ่านคือการกำหนดค่าของตัวแปรใดในคลาสนั้นต้องใช้ pointer this อ้างถึงเสมอ รูปแบบการใช้ pointer this คือ $this->ตัวแปรภายในคลาสที่ต้องการ Inheritance คือคุณสมบัติการถ่ายทอดจากคลาสหนึ่ง (คลาสแม่) ไปสู่อีกคลาสหนึ่ง (คลาสลูก)
ทำความรู้จักกับคลาส คือ เซ็ตของออบเจ็กต์ที่มีคุณสมบัติ (Properties) และพฤติกรรม (Methods) เช่นเดียวกัน Class Name : Book Properties : Book-author Book-Category ISBN Published-Year Methods : Add Book( ) UpdateBook ( )
Inheritance • คือคุณสมบัติการถ่ายทอดจากคลาสหนึ่ง (คลาสแม่) ไปสู่อีกคลาสหนึ่ง (คลาสลูก) • กำหนดคลาสชื่อ cls_inventory_item มีรายละเอียดดังนี้ Class Name : cls_inventory_item Properties : Part_number Qty_inventory
PARENT Class Name : cls_inventory_item Properties : Part_number Qty_inventory CHILD Class Name : cls_pen Properties : Part_number Qty_inventory Ink_color
การสร้างคลาสในภาษา PHP class class_name [extends parent_class_name] { Properties . . Methods . . }
ตัวอย่าง <HTML> <HEAD> <TITLE>Figure 6-2</TITLE> </HEAD> <BODY> <? /* define class for tracking users */ class user { /* ** properties */
var $name; var $password; var $last_login; /* ** methods */ // sets all the properties function init($inputName, $inputPassword) { $this->name = $inputName; $this->password = $inputPassword; $this->last_login = time(); } // get the date of the last login function getLastLogin() { return(Date("M d Y", $this->last_login)); } }
/* ** create an instance and then initialize */ $currentUser = new user; $currentUser->init("Leon", "sdf123"); /* ** get the last login date */ print($currentUser->getLastLogin()); print("<BR>\n"); /* ** print the user's name */ print($currentUser->name); print("<BR>\n"); ?> </BODY> </HTML> Apr 09 2000 Leon
การสร้างคลาสโดยการ Inheritance การพัฒนาโปรแกรมแบบ OOP นั้นนอกจากการที่เราต้องสร้างคลาสด้วยวิธีที่กล่าวมาข้างต้นแล้วเรายังสามารถนำคุณสมบัติต่างๆ ของคลาสที่สร้างขึ้นมาแล้วมารวมไว้ในคลาสใหม่ที่สร้างขึ้นได้โดยอาศัยความสามารถของการถ่ายทอด (Inheritance) คุณสมบัติจากคลาสหนึ่งหรือหลายคลาสมาสู่อีกคลาสหนึ่งได้
ตัวอย่าง <? class parent_class { VAR $get; function parent_get($get) { $this->get = $get; } function parent_message() { echo “parent class $this->get”; } }
class child_class extends parent_class { /* คลาสแม่คือ parent_class คลาสลูกคือ child_class */ } $objclass = new child_class; $objclass->parent_get(“Inheritance”); $objclass->parent_message(); ?> parent class Inheritance
การเปลี่ยนคำสั่งภายในฟังก์ชันของคลาสแม่ด้วยคลาสลูก (polymorphism) ความสามารถในการถ่ายทอดคุณสมบัติจากคลาสหนึ่ง (คลาสแม่) มาสู่อีกคลาสหนึ่ง (คลาสลูก) และความสามารถในคลาสลูกที่สามารถเรียกใช้ฟังก์ชันของคลาสแม่ได้ (แต่ไม่สามารถเรียกใช้ตัวแปรที่กำหนดไว้ที่คลาสแม่ได้) และนอกจากที่ได้กล่าวมาคลาสลูกเรียกใช้ตัวแปรไว้ที่คลาสแม่ได้) และนอกจากที่ได้กล่าวมาคลาสลูกยังสามารถที่จะเปลี่ยนรายการคำสั่งที่อยู่ภายในฟังก์ชันของคลาสแม่ได้
ตัวอย่าง <? class parent_class { function show_message() { echo “parent class<br>”; } } class child_class extends parent_class { /* คลาสแม่คือ parent_class คลาสลูกคือ child_class */ function show_message() { echo “child class<br>”; } }
$objclass = new parent_class; $objclass->show_message(); //เรียกใช้ฟังก์ชันของคลาส parent_class $objclass = new child_class; $objclass->show_message(); //เรียกใช้ฟังก์ชันของคลาส child_class $objclass = new parent_class; $objclass->show_message(); //เรียกใช้ฟังก์ชันของคลาส parent_class ?> parent class child class parent class
การสร้างฟังก์ชันที่มีชื่อเหมือนกันในคลาสเดียวกัน (Overloading Function) • เป็นการสร้างฟังก์ชันขึ้นมาใช้งานหลายฟังก์ชัน โดยที่มีการกำหนดชื่อของฟังก์ชันให้เหมือนกันแต่จะมีความแตกต่างกันในเรื่องของจำนวนตัวแปรพารามิเตอร์และแบบข้อมูลที่มีการเรียกใช้ฟังก์ชันนั้นเมื่อโปรแกรมทำงานซึ่งเป็นความสามารถที่สำคัญสำหรับการพัฒนาโปรแกรมเชิงวัตถุ (OOP) • สำหรับภาษา PHP 3 และ 4 (Beta 2,3) นั้นยังไม่สามารถสนับสนุนความสามารถทางด้านนี้ได้ดีเท่ากับภาษา C และ Java
ตัวอย่าง <? class parent_class { function show_message() { echo “parent class<br>”; } } class child_class extends parent_class { /* คลาสแม่คือ parent_classคลาสลูกคือ child_class */ function show_message($arg1) { echo “รับมาหนึ่งค่าคือ $arg1”; } function show_message($arg1,$arg2) { echo “รับมาสองค่าคือ $arg1 , $arg2”; }
function show_message($arg1,$arg2,$arg3) { echo “รับมาสามค่าคือ $arg1 , $arg2 , $arg3””.<BR>\n”; } } $objclass = new child_class; $objclass->show_message(); $objclass->show_message(100); $objclass->show_message(100,200); $objclass->show_message(100,200,300); ?> รับมาสามค่าคือ , , รับมาสามค่าคือ 100 , , รับมาสามค่าคือ 100 , 200 , รับมาสามค่าคือ 100 , 200 , 300
การสร้างฟังก์ชันที่เป็นชื่อเดียวกับคลาส (Constructor Function) • เป็นการสร้างฟังก์ชันชนิดพิเศษคือฟังก์ชันที่มีชื่อเดียวกับชื่อของคลาสและ ฟังก์ชันนี้จะทำงานเองโดยอัตโนมัติเมื่อมีการสร้าง object ของคลาสนั้นขึ้นมาใช้งาน
ตัวอย่าง <? class autorun { function autorun() { echo “First command”; } } $objclass = new autorun; ?> First command
ตัวอย่าง <? class autorun1 { function autorun1() { echo “First command from autorun1”; } } class autorun2 extends autorun1 { function autorun2() { echo “First command from autorun2”; } } $objclass = new autorun2; ?> First command from autorun2
การใช้ตัวแปรอาร์เรย์เพื่อเก็บตัวแปรออปเจ็คการใช้ตัวแปรอาร์เรย์เพื่อเก็บตัวแปรออปเจ็ค • การใช้ตัวแปรอาร์เรย์เก็บตัวแปรออปเจ็คของคลาสต่างๆ ถ้าต้องการเรียกใช้ฟังก์ชันหรือตัวแปรที่อยู่ภายในคลาสนั้นจะไม่สามารถเรียกใช้ในรูปของตัวแปรอาร์เรย์ได้ จะต้องมีการกำหนดตัวแปรขึ้นมารับค่าของออปเจ็คที่อยู่ในตัวแปรอาร์เรย์อีกทีหนึ่งจึงจะสามารถเรียกใช้ฟังก์ชันหรือตัวแปรที่อยู่ภายในคลาสนั้นได้
ตัวอย่าง <? class room { VAR $num; function room($num) { $this->num = $num; } function showroom() { echo "ห้องหมายเลข $this->num<br>"; } } $arrobj = array(); $arrobj[] = new room(101); $arrobj[] = new room(102);
$arrobj[] = new room(103); /* ไม่สามารถใช้คำสั่ง $arrobj[0]->showroom() อย่างนี้ในการเรียกใช้ฟังก์ชันหรือ ตัวแปรที่อยู่ในคลาสได้ */ for ($index = 0;$index < count($arrobj);$index++) { $bufobj = $arrobj[$index]; $bufobj->showroom(); //เรียกใช้ฟังก์ชัน showroom() ผ่านตัวแปร $bufobj } ?> ห้องหมายเลข 101 ห้องหมายเลข 102 ห้องหมายเลข 103
ฟังก์ชันและความสามารถที่เพิ่มขึ้นของ PHP4 string get_class(object objectname); เป็นฟังก์ชันที่ใช้ตรวจสอบคลาสที่นำมาสร้างออปเจค (object) ว่าออปเจคนั้นถูกสร้างมาจากคลาสใด string get_parent_class(object objectname); เป็นฟังก์ชันที่ใช้ในการตรวจสอบคลาสแม่ (base class) ของออปเจค (object) ว่าคลาสที่นำมา สร้างออปเจคนั้นได้รับการถ่ายทอด (Inheritance) มาจากคลาสใด
ฟังก์ชันและความสามารถที่เพิ่มขึ้นของ PHP4 int method_exists(object objectname,string methodname); เป็นฟังก์ชันที่ใช้ตรวจสอบเมธอด (method) ภายในคลาสนั้นมีเมธอดนั้นอยู่จริงหรือไม่
การอ้างถึงคลาสโดยผ่านตัวแปรการอ้างถึงคลาสโดยผ่านตัวแปร ความสามารถในการอ้างถึงคลาสได้โดยผ่านตัวแปรนั้นทำให้การพัฒนาโปรแกรมมีความยืดหยุ่นในการใช้คำสั่ง new มากยิ่งขึ้น
<? class one { function showmessage() { echo "ONE<br>"; } } class two { function showmessage() { echo "TWO<br>"; } } $nameclass = "one"; $objclass = new $nameclass; $objclass->showmessage(); $nameclass = "two"; $objclass = new $nameclass; $objclass->showmessage(); ?>