หากคุณเป็นโปรแกรมเมอร์ไม่ว่าจะอยู่ในช่วงเริ่มต้นศึกษา หรือ เชี่ยวชาญแล้ว คงไม่ว่าจะเขียนภาษาอะไร ก็ต้องเคยได้ยินคำว่า OOP หรือ Object-Oriented Programming กันมาบ้างแน่นอน แล้ว OOP คือ อะไรนะ แน่นอนว่าผู้อ่านที่จบสาย Computer Engineer หรือ Computer Science นั้นต้องเคยได้เรียน Concept OOP กันมาแล้ว บทความนี้ก็จะเป็นตัวช่วยทบทวนความจำให้ผู้อ่าน โดยจะเน้นไปที่ concept สำคัญของ OOP โดยไม่ลงลึกไปในเชิงเขียนโค้ดภาษาใดภาษาหนึ่งมากนัก
Oop คือ ? oop ย่อมาจาก ?
OOP ย่อมากจากคำว่า Object-Oriented Programming โดย OOP concept ประกอบ ด้วยหลักการสี่อย่าง คือ encapsulation, abstraction, inheritance และ Polymorphism หากไปเปิดดูใน Wikipedia ก็อาจเจอกับคำอธิบายที่ดูงงงวยเล็กน้อย ในบทความนี้เราจะมาลองอธิบายให้อ่านแบบง่ายๆ พร้อมยกตัวอย่างในรูปแบบที่เด็กประถมเข้าใจกัน
OOP มีความสำคัญอย่างไร ?
การมีความเข้าใจในหลักการทั้งสี่ของ OOP หรือ Object-Oriented Programming จะทำให้เราสามารถเขียนโค้ดที่สะอาดตาอ่านง่ายและบำรุงรักษาง่ายยิ่งขึ้น และหลายครั้งที่มีการถามถึงเรื่องของ OOP ในการสัมภาษณ์งาน ตำแหน่ง Software Developer หรือ Programmer อีกด้วย ถ้าเราสามารถตอบพร้อมยกคัวอย่างประกอบได้อย่างชัดเจนแล้วก็จะถือเป็นแต้มบวกอย่างมาก
OOP ข้อแรก Encapsulation
คำอธิบายโดยย่อ
Encapsulation คือการปกปิดข้อมูลโดย เก็บคุณสมบัติของ class ให้เป็น private และ ให้เข้าถึงหรือเปลี่ยนแปลงผ่านช่องทางที่เป็น public ที่เรากำหนดไว้เท่านั้น
คำอธิบายฉบับเต็ม
การที่จะเข้าหลักการ Encapsulation นั้นก็ต่อเมื่อ object เก็บ state ให้เป็น private อยู่ใน class โดย object อื่นๆจะไม่สามารถเข้าถึง state ที่เป็น private ได้โดยตรง แต่ถึงเข้าถึงผ่าน public function แทนที่นี้ลองมายกตัวอย่างเผื่ออธิบายชนิดที่เด็กประถมเข้าใจกัน
สมมุติว่าเรากำลังสร้างเกมส์เกี่ยวกับสัตว์เลี้ยง โดยมีคนและสุนัขโดยสามารถติดต่อสื่อสารกันได้เราต้องการ encapsulate คุณสมบัติของสุนัขให้อยู่ใน Class Dog โดยหน้าตาแผนภาพก็จะประมาณนี้

สมมุติว่าเรากำลังสร้างเกมส์เกี่ยวกับสัตว์เลี้ยง โดยมีคนและสุนัขโดยสามารถติดต่อสื่อสารกันได้เราต้องการ encapsulate คุณสมบัติของสุนัขให้อยู่ใน Class Dog โดยหน้าตาแผนภาพก็จะประมาณนี้
ให้มี Class Dog ที่มีคุณสมบัติคือ
- Hungry (ความหิว)
- Energy (พลังงาน)
และมีความสามารถ คือ
- bark() หรือการเห่า
คิดตามหลักความเป็นจริงแล้วสิ่งที่พูดถึงด้านบนนั้นเป็น คุณสมบัติและความสามารถส่วนตัวของสุนัข โดยคนไม่สามารถเปลี่ยนแปลงหรือทำให้สิ่งเหล่านั้นเกิดขึ้นได้ ดังนั้นๆ Hungry และ Energy จึงเป็น Private Field ส่วน Bark กับเป็น Private Method
แต่สิ่งที่คนสามารถทำได้คือ ให้อาหาร และ เล่นกับสุนัข โดยการเล่นและให้อาหารสุนัขจะทำให้คุณสมบัติส่วนตัวของสุนัขเกิดการเปลี่ยนแปลงได้ ดังนั้น
Play และ Feed จึงเป็น Public Method
OOP ข้อสอง Abstraction
คำอธิบายโดยย่อ
Abstractiion Concept คือการที่ Class เปิดเผยเฉพาะส่วนที่จำเป็น โดยไม่จำเป็นให้ส่วนที่เรียกใช้ต้องรู้รายละเอียดภายใน
คำอธิบายฉบับบเต็ม
Concept Abstraction นั้นเป็นเหมือนส่วนต่อขยายของ Encapsulation โดยส่วนใหญ่เมื่อ Codebase ของเรามีขนาดใหญ่ขึ้นเรื่อยก็จะมีการติดต่อสื่อสารระหว่าง Object มากขึ้นเรื่อยๆ และ ทำให้เกิดปัญหา Code ซับซ้อนขึ้นโดยปริยาย
Abstraction คือ concept ที่ออกแบบมาเพื่อแก้ปัญหาเหล่านี้
การใช้ Concept Abstraction หมายความว่า Object ควรที่จะเปิดเผยเฉพาะ ส่วนที่จำเป็นต่อการใช้งาน object นั้น โดยระบบการทำงานที่เปิดเผยให้ object อื่นเห็นนั้นควรจะซ่อนความซับซ้อนในการทำงานไว้ภายใน class โดยไม่จำเป็นต้องเปิดเผยให้ภายนอกรู้
ตัวอย่าง Abstraction (1)
ยกตัวอย่างให้เข้าใจง่ายๆ เครื่องชงกาแฟ มันทำงานหลายอย่างและส่งเสียงดังมากมาย แต่เราเพียงแค่ใส่กาแฟลงไปและกดปุ่มเท่านั้น โดยไม่ต้องสนใจว่าภายในเครื่องนั้นทำงานอย่างไร
ถ้าจะให้ดี ส่วนที่เปิดเผยออกไปนั่นไม่ควรเปลี่ยนแปลงบ่อย ถ้าจะพูดให้เจาะจงในเชิง coding ก็คือส่วนที่เปิดเผยนั้นควรเป็น public method จำนวนหนึ่งที่ class อื่นๆสามารถเรียกได้โดยไม่จำเป็นที่จะต้องรู้ว่า ข้างในทำงานอย่างไร
ตัวอย่าง Abstraction (2)
ยกตัวอย่างอีกเรื่องลองนึกถึงโทรศัพท์มือถือ
เราสามารถใช้งาน สิ่งเหล่านี้โดยไม่จำเป็นต้องรู้ว่าเบื้องลึกมันทำงานอย่างไร
- ปุ่ม Home
- ปุ่ม Volumes
- ช่องชาร์จไฟ
และการ update software ภายในก็ไม่ส่งผลกระทบต่อ รายการข้างต้น หรือ ไม่กระทบต่อ abstraction ของตัวมือถือนั่นเอง
OOP ข้อสาม Inheritance
คำอธิบายโดยย่อ
แนวคิดในการแชร์ Logic ที่เหมือนกันระหว่าง class โดยการสืบทอดความสามารถจาก parent class ไปยัง child class
คำอธิบายฉบับบเต็ม
อีกเรื่องหนึ่งที่เป็นปัญหาของการเขียน OOP คือ Object ที่เขียนขึ้นมานั้นคล้ายกันมาก โดยมีการใช้ Logic เดียวกันแต่ไม่ได้เหมือนกันทั้งหมด
Inheritance concept ถูกนำมาช่วยให้เราสามารถ ใช้งาน. Logic ที่เหมือนกันร่วมกันได้ และแยกส่วนที่ต่างกันออกไปในแต่ละ classs
Inheritance แปลเป็นไทยว่าการสืบทอด concept คือการสร้าง (child) class ที่สืบทอดมาจากอีก (parent) class หนึ่ง Child class โดย child class สามารถใช้ field และ method ของ parent class ได้ และ สามารถเพิ่มเติมส่วนที่เป็นเอกลักษณ์ของตัวเองลงไป
อย่างที่เห็นว่ามีการ reuse common logic กันและเพิ่มเติมเฉพาะส่วนที่สำคัญ คือ Dog, Cat และ Bird จะสืบทอด field ไปจาก Pet ซึ่งเป็น parent class และ reuse ข้อมูลส่วนนี้ร่วมกันโดยไม่ต้องเขียนใหม่ได้ และ ยังเพิ่มเติม logic ที่เฉพาะเจาะจงต่อแต่ละ class ไปได้อีกเ เช่น ขนาดเขี้ยว และ ขนาดปีก
OOP ข้อสี่ Polymorphism
คำอธิบายโดยย่อ
ต่อเนื่องจาก Inheritance Polymorphism คือการที่ Parent class กำหนดคุณสมบัติไว้และให้ child class ไประบุรายละเอียดของคุณสมบัติเหล่านั้นเอง
คำอธิบายฉบับเต็ม
เมื่อมีการใช้ Inheritance แล้วลองนึกถึงสถานการณ์ที่เราต้องการเก็บ Child Class เข้าไปใน List โดยเราจะมองว่าทุก element ใน list มีคุณสมบัติเหมือนกัน แม้ว่าจะมีการระบุรายละเอียดที่แตกต่างกันก็ตาม เช่น สุนัข(Dog), แมว(Cat) และ นก(Bird) เราสามารถมองทั้งสามเป็นสัตว์เลี้ยงเหมือนกัน แต่ก็มีลักษณะที่แตกต่างกันอยู่ ในตัวอย่างนี้เราจะยกเรื่องการออกเสียงมาพูดถึง
- แม้ class dog (สุนัข) กับ class cat (แมว) จะมีคุณสมบัติสามารถเปล่งเสียงได้ แต่การเปล่งเสียงของทั้งสอง class ย่อมต่างกัน
- โดยการที่จะทำแบบนี้ได้ ต้องใช้ concept ของ polymorphism คือการที่ Parent class กำหนดคุณสมบัติไว้และให้ child class ไประบุรายละเอียดของคุณสมบัติเหล่านั้นเอง
สรุป
เรื่อง concept OOP เป็นเรื่องที่สำคัญไม่แพ้ ความรู้ด้านอื่นๆในสายโปรแกรมิ่ง เช่น SOLID Principle สิ่งที่ยากกว่าการเรียนรู้และเข้าใจ concept OOP ก็คือการนำไปปรับใช้ในการทำงานจริง เมื่อทำงานไปเรื่อยลองกลับมาอ่าน เรื่อง OOP ดูใหม่ก็อาจพบวิธีการเขียนโค้ดที่มีประสิทธิภาพและดีกว่าก็เป็นได้
ถนอมสายตาด้วย ไฟ LED เส้น ดูแลดวงตาก่อนจะสาย
ไฟถนอมสายตา ไฟ LED เส้น หรือ Led Light Strip นั้นสามารถช่วยถนอมสายตาจากการดู TV...
Read Moreแนะนำจอ Monitor เขียนโปรแกรม 2022
สำหรับโปรแกรมเมอร์ จอ Monitor เขียนโปรแกรมนั้นมีความสำคัญ เวลาที่เราต้องเขียน Code เป็นเวลานาน เป็นเรื่องสำคัญที่เราควรมีจอมอนิเตอร์คู่ใจ ที่ช่วยให้ไม่ปวดตา โดยขนาดของมอนิเตอร์ที่เลือกนั้นควรจะมีขนาดพอเหมาะ...
Read Moreคุณสมบัติ อาชีพ โปรแกรมเมอร์ Junior programmer และ Senior programmer?
ความแตกต่างของคุณสมบัติ อาชีพ โปรแกรมเมอร์ระหว่างการเป็น Junior Programmer หรือ Senior Programmer วัดกันที่จำนวนปีของการทำงานอย่างเดียวเท่านั้นหรือ? หลายๆคนอาจสงสัยว่าเขาใช้อะไรเป็นมาตรฐาน...
Read More5 อุปนิสัยของ อาชีพ โปรแกรมเมอร์ที่ดี
การทำงานในสาย อาชีพ โปรแกรมเมอร์นั้น ต้องมีการเรียนรู้และพัฒนาตัวเองอยู่เสมอ แต่นอกจากการเรียนกรู้และพัฒนาตัวเองแล้วเราสามารถทำอะไรเพื่อทำให้เราก้าวหน้าได้อีกกันนะ? บทความนี้จะกล่าวถึง 5 อุปนิสัยที่อาชีพโปรแกรมเมอร์ควรมีโดยผู้อ่านสามารถลองไปประยุกต์ใช้ดูเพื่อทำให้เรามีการพัฒนาและเติบโตในสายงาน อาชีพ โปรแกรมเมอร์...
Read More