วันพุธที่ 13 ตุลาคม พ.ศ. 2553

Object Oriented Programming

Object Oriented Programming เป็นการเขียนโปรแกรมโดยการมองสิ่งต่างๆ เป็นวัตถุ ซึ่งใน Realworld สิ่งต่างๆ รอบๆ ตัวเราก็เป็นวัตถุ โดยมีแนวคิดที่ว่า สิ่งที่ประกอบกันเป็นวัตถุนั้นจะประกอบไปด้วย

* Attribute(ลักษณะที่สามารถอธิบายได้ว่าวัตถุนี้คืออะไร อย่างเช่น คนสิ่งที่อธิบายได้ว่าเป็นคน อาจจะเป็น มีหู ตา จมูก ปาก แขน ขา อะไรพวกนี้)
* Method(พฤติกรรมของวัตถุนั้นว่าสามารถทำอะไรได้ พูดง่ายๆ การกระทำนั่นแหละ)

เราสามารถทำการ Implement ได้โดยการทำให้อยู่ในรูปของ Class ซึ่งเปรียบเหมือนกับต้นแบบที่ไว้ สร้าง Object (Class ไม่ใช่ object นะ) คุณสมบัติที่สำคัญของ OOP ก็คือ

1. Encapsulation
เป็นการห่อหุ้ม Attribute ไว้ด้วย Method หมายความว่าการที่เราต้องการเข้าไป เปลี่ยนแปลงหรือใช้ค่า Attribute นั้นต้องกระทำผ่าน Method ยกตัวอย่างเช่นเด็กหญิงนิดกับเด็กหญิงหน่อยเป็นเพื่อนกัน มีอยู่วันหนึ่งนิดเดินเหยียบเท้าหน่อย หน่อยรู้สึกไม่พอใจ (ตอนนี้ค่า Attribute อารมณ์ของหน่อยเพิ่มขึ้น) แต่นิดยังไม่รู้ เมื่อหน่อยแสดงสีหน้าไม่พอใจ เมื่อนิดเห็นแบบนั้นนิดรู้สึกผิด(หน่อยก็ยังไม่รู้เพราะ นิดคิดอยู่ในใจ) จึงกล่าวขอโทษ หน่อยได้ยินแบบนั้นจึงหายโกรธ

ตัวหนา คือ Method
ตัวหนาเอียง คือ Attribute

จะเห็นได้ว่าค่า Attribute นั้นก็คือค่าที่อยู่ภายในการที่จะให้ Object อื่นรับรู้ได้ก็จำเป็นที่จะ ต้องแสดงค่านั้นออกมาผ่านทาง Method สิ่งที่ส่งออกมาให้ Object อื่นรับรู้นั้นเราเรียกว่า Message จากตัวอย่างจะเห็นว่ามีการเปลี่ยนแปลงค่า Atrribute ตอนที่นิดเหยียบเท้าหน่อยนั้น การเหยียบเท้าคือ Method ที่แสดงออกมาทำให้อารมณ์ ซึ่งเป็น Attribute อยู่ภายในเปลี่ยนแปลง และ การกล่าวขอโทษก็เป็น Method ที่ทำการเปลี่ยนแปลงค่า Attribute ดังนั้นภาพของ Object ในหัวก็จะเป็นลักษณะที่ Method ห่อหุ้ม Attribute ไว้ วัตถุทุกตัวจะแสดงออกให้รับรู้ถึงสิ่งที่อยู่ภายในหรือสิ่งที่ต้องการผ่าน ทางการกระทำ
2. Inheritance
เป็นการทำให้ Class สามารถสืบทอดต่อกันได้ โดยลักษณะของการสืบทอดนั้นก็เพื่อเพิ่มเติมความสามารถให้สามารถทำงานได้ มากกว่าคลาสแม่ที่สืบทอดมา เช่น คลาสของคนสืบทอดมาจากคลาสของสัตว์เลี้ยงลูกด้วยนม โดยที่ Method พื้นฐานของสัตว์เลี้ยงลูกด้วยนมนั้น สมมุติให้มีเพียง กินอาหาร สืบพันธุ์ ขับถ่าย Class ของคนที่สืบทอดมาจากสัตว์เลี้ยงลูกด้วยนม สิ่งที่คนทำได้แตกต่าง เช่น การพูด ก็จะถูกเพิ่มเข้าไปในคลาสของคน สรุปว่าคนสามารถ กิน,สืบพันธุ์,ขับถ่าย และ พูด ได้
3. Abstraction
เป็นการสร้าง Method แบบลอยๆ ขึ้นมายังไม่ได้ระบุรายละเอียดว่า Method นั้น ทำงานอย่างไรจะมีการระบุการทำงานในส่วนของ Subclass ที่รับสืบทอดมา สาเหตุที่มีการทำแบบนี้ก็เพื่อให้สามารถใช้ Polymorphism ได้นั่นเอง
4. Polymorphism
คือสภาวะที่ Method มีหลายรูปแบบ​ เป็น​วิธีการกำ​หนดรูปแบบการกระทำ​ที่​เหมือน​กัน​แต่​ได้​ผลที่​แตกต่างกัน สมมุติว่ามี คลาสแม่(Superclass) ที่เป็นคลาสของสัตว์เลี้ยงลูกด้วยนม โดยมีคลาสลูก(Subclass) คือ คลาสของคนกับสุนัข ซึ่งทั้งคนกับสุนัขมี Method ที่ใช้ในการเปล่่งเสียงซึ่งการเปล่งเสียงระหว่างคนกับสุนัขนั้นไม่เหมือนกัน แต่มันก็คือการเปล่งเสียง ดังนั้นเมื่อได้รับ Message ที่บอกให้ทำการเปล่งเสียงทั้งคนและสุนัขก็สามารถเปล่งเสียงได้เพียงแต่มี เสียงที่แตกต่างกันเท่านั้นเอง เพื่อให้สามารถเข้าใจได้ง่ายเราก็จะสร้าง Method ที่ชื่อว่า เปล่งเสียง( ) มาเพียงชื่อเดียวแล้วใช้หลักการ polymorphism นี้เพื่อให้สามารถเปล่งเสียงได้หลายๆ รูปแบบ

การสร้างโครงสร้างการ Design แบบ OO ที่ดีนั้นควรพยายามสร้างตามหลักข้างบนให้ได้นะครับ จะช่วยได้มากเลยทีเดียว แต่ที่แน่ๆ พยายามทำให้คลาสของเรามีลักษณะที่เป็น Encapsulation ตามข้อแรกให้ได้ครับ

นี่ก็เป็นหลักการในการเขียนโปรแกรมแบบ OO ที่ผมสรุปมาจากความเข้าใจของตัวเองนะครับไม่ได้อ้างอิงมาจากที่ไหน ถ้ามีส่วนใดที่ผิดก็แสดงความคิดเห็นมาได้ครับ คราวต่อไปจะมาเล่าเรื่องปัญหาที่เกิดจากการ Design ให้ฟังครับ


ที่มา:http://thitipat.wordpress.com/2007/02/04/object-oriented-programming-oop/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น