สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

การเขียนโปรแกรมเชิงวัตถุ OOP (Object Oriented Programming)

แนะนำการเขียนโปรแกรมเชิงวัตถุ

       OOP (Object Oriented Programming) เป็นวิธีการเขียนโปรแกรม โดยอาศัยแนวคิดของวัตถุชิ้นหนึ่ง มีความสามารถในการปกป้องข้อมูล และการสืบทอดคุณสมบัติ ซึ่งทำให้แนวโน้มของ OOP ได้รับการยอมรับและพัฒนามาใช้ในระบบต่าง ๆ มากมาย  เช่น ระบบปฏิบัติการ วินโดวส์ เป็นต้น 
       ในที่นี้จะกล่าวถึงความเป็นมา และความหมายของแนวคิดการเขียนโปรแกรมเชิงวัตถุ ข้อควรรู้เกี่ยวกับหลักการเขียนโปรแกรมเชิงวัตถุ ตลอดจนความสำคัญของการเขียนและออกแบบระบบงานก่อนเขียนโปรแกรม  รวมถึงประโยชน์ของการเขียนโปรแกรมเชิงวัตถุซึ่งจะทำให้ผู้เขียนได้เข้าใจถึงหลักการเบื้องต้นของแนวความคิดเชิงวัตถุนี้ได้

ความเป็นมาของแนวคิดแบบ  OOP
       แนวความคิดดั้งเดิมของการเขียนโปรแกรม ก็คือ การแก้ปัญหาโดยใช้คอมพิวเตอร์เป็นเครื่องมือ  คล้ายกับการใช้เครื่องคิดเลขในการแก้ปัญหาทางคณิตศาสตร์ 
       แนวความคิดแบบใหม่ที่ใช้ในการเขียนโปรแกรม ก็คือ การเน้นถึงปัญหาและองค์ประกอบของปัญหา (เพื่อแก้ปัญหา) การเน้นที่ปัญหาและองค์ประกอบของปัญหา (Problem Space) จะคล้ายกับแก้ไขปัญหาและชีวิตความเป็นอยู่ของมนุษย์ที่จะต้องมี คน สัตว์ สิ่งของ เพื่อแก้ปัญหา (มีหน้าที่แก้ปัญหา) มากกว่าจะมองที่วิธีการแก้ปัญหานั้น ๆ หรือขั้นตอนในการแก้ปัญหา 
(Solution Space) ซึ่งเป็นวิธีการเขียนโปรแกรมแบบเก่านั่นเอง 
       อาลัน เคย์ (Alan Kay) ได้เสนอกฎ 5 ข้อ ที่เป็นแนวทางของภาษาคอมพิวเตอร์เชิงวัตถุ หรือที่เรียกว่า Object-Oriented Programming (OOP) ไว้ดังนี้

  1. ทุก ๆ สิ่งเป็นวัตถุ (Everything is an Object)
  2. โปรแกรม ก็คือ กลุ่มของวัตถุที่ส่งข่าวสารบอกกันและกันให้ทำงาน (A Program is a Bunch of Object Telling Each Other What to do by Sending Messages)
  3. ในวัตถุแต่ละวัตถุจะต้องมีหน่วยความจำและประกอบไปด้วยวัตถุอื่น ๆ (Each Object has Its Own Memory Made Up of Other Objects)
  4. วัตถุทุกชนิดจะต้องจัดอยู่ในประเภทใดประเภทหนึ่ง (Every Object has a Type)
  5. วัตถุที่จัดอยู่ในประเภทเดียวกันย่อมได้รับข่าวสารเสมือนกัน (All Object of a Particular Type Can Receive the Same Messages)

 

แนวคิดแบบ OOP
       OOP  ก็คือ “ธรรมชาติของวัตถุ” หมายความว่า OOP จะมองสิ่งแต่ละสิ่งถือเป็น “วัตถุชิ้นหนึ่ง” (Object) มันจะมีสีแดงหรือสีเขียว ยาวหรือสั้น มันก็คือวัตถุชิ้นหนึ่งเหมือนกัน และเราสามารถกำหนดประเภทหรือคลาสให้กับวัตถุเหล่านั้นได้ 
      นอกจากนี้ เมื่อ OOP มองทุกสิ่งถือเป็นวัตถุชิ้นหนึ่งแล้ว ยังสามารถคิดต่อไปอีกว่า วัตถุแต่ละอย่างนั้น ต่างก็มีลักษณะและวิธีการใช้งานเป็นของตัวเอง หมายความว่า วัตถุแต่ละชนิดหรือแต่ละชิ้นต่างก็มีรูปร่าง ลักษณะ และการใช้งาน (การกระทำ) ที่แตกต่างกันออกไป เราจะเรียกคุณลักษณะของวัตถุว่า แอตทริบิวต์ (Attribute) และจะเรียกวิธีการใช้งานวัตถุว่า เมธทอด (Method) ตัวอย่างเช่น “ดินสอเป็นวัตถุที่มีลักษณะเรียวยาว ภายในเป็นไส้ถ่านใช้สำหรับเขียน การใช้ดินสอทำได้โดยใช้มือจับและเขียนลงบนวัสดุรองรับ”
  จากข้อความข้างต้น สามารถจับใจความได้ว่า  คุณลักษณะของวัตถุ (Attribute) ก็คือ “ยาวเรียว ภายในเป็นไส้ถ่าน” ส่วนการใช้งาน (Method) ก็คือ “ใช้มือจับและเขียนลงบนวัสดุรองรับ”
       จะเห็นได้ว่าแนวคิดของ OOP นั้นจะมีลักษณะที่คล้ายกับธรรมชาติของสิ่งหนึ่งซึ่งสามารถแบ่งแยกสิ่งต่าง ๆ ออกเป็นแต่ละประเภทได้ ถ้านำเอาแนวคิดของ OOP มาใช้ในการเขียนโปรแกรมและการจัดการข้อมูล จะพบว่าโปรแกรมหรือฟังก์ชันจะมีความเป็นอิสระแก่กันอย่างเห็นได้ชัด ก็คือ โปรแกรมหรือฟังก์ชันแต่ละตัวถึงแม้จะมาจากที่เดียวกันแต่สามารถทำงานในคนละหน้าที่ เก็บข้อมูลคนละค่าได้ โดยจะไม่มายุ่งเกี่ยวกันแต่อย่างใด

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

การเชื่อมต่อ (Interface)
       อินเตอร์เฟส (Interface) หมายถึง การเชื่อมต่อ ถ้าเป็นการเชื่อมต่อระหว่างผู้ใช้กับคอมพิวเตอร์ จะเรียกการเชื่อมต่อนั้นว่า ยูสเซอร์อินเตอร์เฟส (User Interface) แต่ในการเขียนโปรแกรมเชิงวัตถุ การเชื่อมต่อยังรวมไปถึงวัตถุ (Object) เพราะในวัตถุจะต้องมีอินเตอร์เฟส อันเป็นส่วนที่วัตถุนั้น ๆ จะให้บริการหรือเป็นส่วนที่บอกว่าวัตถุนั้น ๆ สามารถทำอะไรได้บ้าง ซึ่งบางครั้งเรียกว่า เมธทอด (Method)
       ข้อดีของการมีอินเตอร์เฟส ก็คือ การเปลี่ยนแปลงที่เกิดขึ้นภายในวัตถุจะไม่กระทบต่ออินเตอร์เฟส ดังนั้น ภายในวัตถุผู้เขียนคำสั่งสามารถดัดแปลง แก้ไข หรือเพิ่มเติมได้ตลอดเวลา นอกจากนี้ ภายในวัตถุยังสามารถเก็บค่าต่าง ๆได้อีกด้วย

การซ่อนรายละเอียด (Encapsulation)
     ส่วนประกอบของวัตถุตามแนวความคิดการเขียนโปรแกรมเชิงวัตถุ จะต้องประกอบไปด้วยสองส่วนเป็นอย่างน้อย คือ ส่วนของคุณสมบัติใช้เก็บข้อมูลรายละเอียด สถานะ โอยใช้ตัวแปรเก็บค่าต่าง ๆ ไว้ และส่วนของเมธทอดทีเป็นตัวเชื่อมการทำงานของวัตถุนั้น ๆ โดยผู้ใช้จะไม่สามารถติดต่อใช้งานกับตัวแปรที่อยู่ข้างในได้ ในภาษา C++ จะใช้คำ Public,Private และ Protected เข้ามาช่วยกำหนดขอบเขตการใช้

การนำวัตถุมาใช้ใหม่ (Reuse the Object)
       จุดประสงค์ใหญ่ของการเขียนโปรแกรมเชิงวัตถุ ก็คือ การนำส่วนต่าง ๆ ของวัตถุที่สร้างขึ้นกลับมาใช้ใหม่หรือที่เรียกในภาษาอังกฤษว่า “Reuse” เมื่อผู้เขียนโปรแกรมสร้างวัตถุมีจำนวนมากพอก็สามารถนำวัตถุที่สร้างขึ้นมาประกอบเป็นวัตถุใหม่ หรือที่เรียกว่าคอมโพสิตชั่น “Composition” 
       นอกจากวิธีการคอมโพสิตแล้ว ผู้ใช้ยังสามารถ Reuse ส่วนของวัตถุโดยการใช้การสืบทอดคุณสมบัติ (Inheritance) จากคลาส ลักษณะเช่นนี้ คือ เป็นการนำส่วนของวัตถุทั้งหมดมาใช้ ซึ่งปกติแล้ววัตถุที่นำมาใช้ในลักษณะนี้จะมีขนาดใหญ่ ถ้าเป็นการคอมโพสิตจะประกอบขึ้นจากส่วนของวัตถุที่มีขนาดเล็กกว่า อย่างไรก็ตาม ขนาดของวัตถุมิได้เป็นตัวกำหนดที่แน่นอนตายตัวเสมอไป

การพ้องรูป (Polymorphism)
       รากฐานของการพ้องรูป (Polymorphism) ก็คือ การถ่ายทอดคุณสมบัติ เพราะถ้าไม่มีการถ่ายทอดคุณสมบัติก็จะไม่เกิดสภาวะการพ้องรูป การถ่ายทอดคุณสมบัติเป็นเครื่องมือยืนยันได้ว่าคลาสลูกที่เกิดจากคลาสแม่เดียวกันย่อมมีคุณสมบัติเหมือนกัน

การเขียนโปรแกรมและการออกแบบระบบงาน 
       ก่อนที่ผู้เขียนโปรแกรมจะสามารถเขียนคำสั่งได้ จะต้องมีการออกแบบระบบงานก่อนแล้วจึงเขียนโปรแกรมเป็นภาษาต่าง ๆ ตามชนิดของงานและความเหมาะสม การเขียนโปรแกรมเชิงวัตถุก็เช่นกัน ตะต้องมีการออกแบบระบบงานก่อน หลักสำคัญสำหรับการออกแบบเชิงวัตถุ ก็คือ การหาวัตถุให้พบ เมื่อพบแล้วจะต้องจำแนกวัตถุออกเป็นส่วนที่เปลี่ยนแปลงและส่วนที่อยู่คงที่ วัตถุที่ไม่เปลี่ยนแปลงสามารถนำไปใช้ได้เมื่อมีการปรับปรุงระบบงานใหม่ นั่นคือเหตุผลที่ทำให้ต้องมีการออกแบบระบบงาน วัตถุที่มีการเปลี่ยนแปลงบ่อยก็ได้แก่ วัตถุที่ทำหน้าที่เป็นอินเตอร์เฟส เป็นต้น 
          
ประโยชน์ของการโปรแกรมแบบ OOP 
       เทคโนโลยีของออบเจ็กต์โอเรียนเท็ดได้นำประโยชนาของการพัฒนาซอฟต์แวร์มาให้ ดังนี้      

  • ความสามารถในการเรียกใช้ได้หลายครั้ง ออบเจ็กต์ได้ถูกออกแบบตามหลักการที่ว่าสามารถเรียกใช้งานได้หลาย ๆ ครั้ง ในหลักการนี้ทำให้ Application ของ OOP ตัวแรกอาจจะทำได้ยาก แต่ว่าโปรแกรมแอปพลิเคชันที่เขียนภายหลังจะสร้างง่ายเพราะสามารถเรียกใช้ออบเจ็กต์ที่ถูกสร้างไว้ตั้งแต่โครงงานแรกได้
  • ความเชื่อถือได้ โปรแกรมแอปพลิเคชันของ OOP จะมีความเชื่อถือได้สูงเพราะจะรวมเอาส่วนย่อยที่ทดสอบจนได้มาตรฐานแล้วมารวมเข้าไว้ด้วยกัน รหัส (Code) ที่เขียนขึ้นมาใหม่ในแต่ละแอพลิเคชั่นจะมีไม่มากนัก เนื่องจากรหัสส่วนใหญ่จะถูกดึงมาจากไลบรารีที่มีความเชื่อถือได้สูงอยู่แล้ว และในการโปรแกรมภาษา C++ ยังมีคุณประโยชน์อื่นอีก
  • ความต่อเนื่องกัน การพัฒนาซอฟต์แวร์แบบ OOP ใน C++ จะเปลี่ยนไปตามฝีมือและจำนวนนักเขียนโปรแกรมภาษา C นักโปรแกรมภาษา C ที่ชำนาญสามารถเรียนรู้หลักการของ OOP ได้ภายในเวลาไม่นาน และสามารถเข้าใจเนื้อหาได้ไม่ยาก อีกทั้งสามารถ แปลงโปรแกรมแอพพลิเคชั่นของ C เป็น C++ ได้
  • ที่มา http://itd.htc.ac.th/st_it50/it5012/P_2/Object%20Oriented%20Programming%201/B1.htm