Tutorial

OOP 101 - What is OOP?

By Arnon Puitrakul - 17 December 2014 - 1 min read min(s)

ตอนนี้ก็หมดเทอมแรกแล้ว เกรดจะออกมาเป็นยังไงน้าาา
แต่ช่างก่อน มีหลายๆคนบอยากรู้ว่า OOP คืออะไรกันแน่ เห็นผมพูดบ่อยมาก แล้วไล่ให้ไปเรียนเอาในเทอม 2
วันนี้จะมาบอกกัน
จริงๆแล้ว OOP มันย่อมาจาก Object Oriented Programming มันคือการเขียนโปรแกรมแบบหนึ่งที่ เราพยายามมองทุกอย่างเป็นวัตถุ (เป็นก้อนๆนั่นแหละ) ซึ่งอีก้อนๆเนี่ย
มันก็มีหน้าตาของมันซึ่งคือ Attribute มันจะเป็นตัวกำหนด หน้าตาของมัน อีก้อนๆนี้มีมีสีอะไร ขนาดเท่าไหร่ มีหางมั้ย มีขามั้ย มีกี่แขน
ส่วนอีกอย่างคือ Method อันนี้พูดง่ายๆมันก็คือการบอกว่าอีก้อนๆนี้มันทำอะไรบ้าง
อาจจะยังนึกภาพไม่ออก งั้นลองยกตัวอย่างหน่อย เช่น หมา
หมา มี 4 ขา มีหาง สีน้ำตาล พวกนี้คือ Attribute
หมาตัวนี้ เห่าได้ กินได้ เดินได้ พวกนี้ก็คือ Method ของมัน
ซึ่งเราสามารถทำการ Implement ไว้ก่อนได้ในรูปแบบของ Class แล้วค่อยเอามาสร้างเป็น Object

หลายๆคนก็จะถามต่อว่า แล้ว Class กับ Object มันคืออะไร ?

มองง่ายๆครับ เหมือนเราจะสร้างบ้านสักหลังครับ เราจะต้องมีพิมพ์เขียว หรือแบบบ้านเราใช่มั้ยครับ นั่นให้มองเป็น Class
หลังจากนั้นเราเอาแบบบ้านเมื่อกี้ไปสร้างเป็นบ้านจริงๆ อันนั้นเราจะเรียกว่า Object
ความเจ๋งมันอยู่ตรงนี้ OOP เนี่ยมันจะมีคุณสมบัติของมัน หลักๆมีอยู่ 3 ข้อ
1. Encapsulation ให้พูดง่ายๆมันก็คือ ไม่ว่าเราจะทำอะไรกะอีก้อนๆวัตถุ เราไม่สามารถเขียนบอกวัตถุว่าเปลี่ยนไอ้นี่ไอ้นั่นได้โดยตรง เราจะต้องทำผ่าน Method เท่านั้น เช่น
สมมุติว่า เราสร้าง Class ประตูมาบานนึง จู่ๆเราจะบอกว่า
แกเปลี่ยนสีตัวเองสิ!! ไม่ได้ใช่มั้ยครับ
แต่ เราจะต้องเป็นคนทาสีให้มันเอง ไม่ใช่ให้มันเปล่ียนสีเอง
มันก็เหมือนกันครับ เราจะเปลี่ยน Attribute โดยตรงเลยไม่ได้ จะต้องผ่าน Method เท่านั้น
2. Inheritance อันนี้เป็นอะไรที่ผมชอบมากถึงมากที่สุด ตามชื่อเลยครับ Class สามารถสืบทอดได้ครับ โดยลักษณะคือจะเป็นการเพิ่มความสามารถให้ทำงานได้มากกว่า Class ที่มันสืบทอดมา ผมว่าเราอาจจะมองไม่เห็นภาพ ผมจะลองยกตัวอย่างดู เช่น
ผมมี Class ชื่อ Animal เป็นสัตว์ก็ต้อง กินได้,เดินได้,นอนได้ (สมมุติเฉยๆนะ) ไอ้ที่ว่ามาพวก กินได้ เดินได้ เนี่ยคือ Method
ที่นี้ผมสร้าง Class อีกอันนึงชื่อ Dog หรือหมา โดยที่สืบทอดต่อมาจาก Class Animal นะครับ แต่ทีนี้ ผมเพิ่มความสามารถหรือ Method ให้มันได้ เช่นผมบอกว่า ให้มันมี Method bark คือเห่านั่นเอง ไม่ใช่แค่เพิ่ม Method ได้อย่างเดียว แต่มันยังเพิ่ม Attribute ได้เหมือนกัน เช่น Class Dog เมื่อกี้ ผมอาจจะเพิ่ม Attribute ชื่อ Colour ไปด้วยก็ได้เป็นต้น เพราะฉะนั้น Class Dog ที่ผมสร้างขึ้นมาใหม่นั้นจะ มี
Attribute : สีตัว
Method : กิน,เดิน,นอน,เห่า
จะเห็นได้ว่า Method กิน เดิน เห่า มันไม่ได้อยู่ใน Class Dog แต่จริงๆแล้วมันอยู่ใน Class Animal แต่ Class Dog มันสืบทอดมาจาก Class Animal เลยมีความสามารถของ Class Animal ทั้งหมด
**3. Polymorphism ** อันนี้ก็เป็นอีกคุณสมบัติที่ค่อนข้างเจ๋งอยู่พอสมควร เจ้า Polymorphism คือ สภาวะที่ Method มีหลายแบบ เช่น วันนึงผมอยากให้ เพื่อนวาดรูปสักรูปนึง ถ้าเราบอกเพื่อนว่า
"วาดรูปให้หน่อยสิ!!" เพื่อนก็จะหันกลับมาถามว่า "แล้วให้วาดรูปอะไรล่ะ?" ถ้าเราไม่บอก เพื่อนก็จะวาดไม่ได้ใช่มั้ยครับ เพราะมันยังเป็นนามธรรมที่อยู่ในหัวเราอยู่ เราจะต้องบอกเพิ่มไป สมมุตินะ บอกว่า "วงกลม" เพราะฉะนั้นการที่เราจะได้รูปสักรูปนึง เราจะต้องกำหนดรายละเอียด ใน Method Draw ของ Class วงกลม เพิ่ม
(ถ้ายังไม่เข้าใจ อารมณ์มันประมาณว่า เราสามารถมี Method อันเดียว แต่สามารถใช้ได้หลายๆ Class แต่เราจำเป็นต่้องกำหนดว่าถ้าสั่งมาจาก Class นี้ให้ทำยังไง)
4. Abstraction อันนี้ผมว่ามัน ฮ่ามาก คือ "นามธรรม" มันคือการสร้าง Method แบบลอยๆขึ้นมาเลยครับ แล้วอีกอย่างใน Method ลอยๆนี้ก็ไม่ได้บอกว่ามันทำอะไร ถามว่าเพื่ออะไร? มันมีมาเพื่อให้เราสามารถสร้าง Method เพื่อใช้กับคุณสมบัติ Polymorphism ได้ นั่นเอง

แล้วถามว่า แล้ว OOP มันมีข้อดียังไงต่างจาก Structured Programming ยังไง?

จริงๆแล้วครั้งแรกที่มี Structured Programming นั่น เขาออกแบบมาเพื่อรับมือกับปัญหาที่ไม่ซับซ้อนมาก แต่ OOP มันเกิดมาเพื่อสิ่งนี้เลย OOP สามารถนำมาใช้ในการแก้ปัญหาที่ซับซ้อนได้ดีกว่า เพราะเรามองทุกๆอย่างเป็นวัตถุ หรือ Subproblem นั่นเอง
อีกเรื่องคือการ Reuse จะสังเกตได้ว่า OOP นั่นมีคุณสมบัติเยอะแยะมากมายที่ทำให้เราเขียนโค๊ตน้อยลง เช่นการ Inheritance ที่ทำให้เราสืบทอด Class มาใช้งานได้ หรือจะเป็นเรื่องของ Class กับ Object ก็เหมือนกัน
เรื่องสุดท้ายคือ การบำรุงรักษา เมื่อเราเขียนโปรแกรมใหญ่ๆ การที่เราจะมาต่อขยายโปรแกรมนั่นเป็นเรื่องที่ใหญ่มาก แต่ด้วยการออกแบบตาม Concept แบบ OOP ทำให้เราสามารถต่อโปรแกรมออกไปเหมือนกับเล่นตัวต่อเลย แล้วถ้าเราเขียนโปรแกรมไปแล้วมันดันเกิด Error เราสามารถแก้มันได้ง่ายมา เพียงแค่วิ่งเข้าไปแก้ที่ตัว ตัวต่ออันนั้นอันเดียว ไม่ใช้ทั้งโปรแกรม

เชื่อว่าหลายๆคนยังน่าจะ งงๆ กันอยู่ แนะนำให้ไปลองเขียนจริงๆแล้วจะเข้าใจ 4 สมบัติที่ว่ามาหมดเลย