[iOS Dev] Object Oriented Programming [Shared Blog]
เรารู้จักอย่างแรกที่ต้องรู้ในการพัฒนา Application บน iPhone กันไปแล้ว คือ MVC Design Pattern จาก Entry ก่อนหน้านี้ ใน Entry นี้ เราจะคุยกันถึงเรื่องพื้นฐานที่สุดอีกเรื่องหนึ่งในการโปรแกรมมิ่งในปัจจุบัน ซึ่งก็คือเรื่องของ Object-Oriented Programming
เรื่องนี้อาจเป็นเรื่องที่หลายๆคน โดยเฉพาะนักเรียน CS เคยเรียนกันมาแล้ว แต่เท่าที่ผมทราบ หลายคนเข้าใจว่า “OOP คือการเขียนโปรแกรมแบบ Object โดยการเขียนโปรแกรมให้อยู่ใน Class” แล้วก็เขียนโปรแกรมด้วยแนวคิดเดิมแบบ Procedural เหมือนกับที่เขียนในภาษา C, Pascal เป็นต้น ทั้งที่จริงแล้วมันก็คือ Object ของ Main Program ตัวเดียวเท่านั้นเอง
กำลังเข้าใจ OOP อย่างที่กล่าวอยู่ข้างต้นรึเปล่าครับ ? ดังนั้น OOP ใน Entry นี้ อาจไม่เหมือนที่เราเคยเรียนนะครับ เริ่มเลยดีกว่า
ส่วนมากถ้าพูดถึง OOP คืออะไร แทบทั้งหมดจะตอบว่า “การโปรแกรมมิ่งเชิงวัตถุ” ก็แปลไม่ผิดนะครับ ถูกแล้วแต่ไม่ตรงคำถาม OOP เป็น “แนวคิดในการ Programming ครับ” โดยมีโมเดลทางความคิดที่ว่า “มองส่วนประกอบ(Component) ส่วนต่างๆของโปรแกรมให้เป็นวัตถุแต่ละชิ้น ที่ทำงานร่วมกันเป็น Program หรือ Application” ซึ่งด้วยโมเดลความคิดนี้เราก็เอาไปต่อยอดในการเขียนโปรแกรมต่อไป
และข้อต่อไป เมื่อถามว่า OOP ทำงานอย่างไร แทบทั้งหมดเช่นกันก็จะตอบว่า “ทำงานโดยการสร้าง Class” เคยตอบคำถามหรือข้อสอบแบบนี้รึเปล่า ไม่ใช่นะครับ ตอบไม่ตรงคำถามอีกเช่นกัน ความเข้าใจผิดที่สุดเรื่องหนึ่งคือ “เราโฟกัสเรื่องเกี่ยวกับ OOP ที่ Class มากเกินไป” ซึ่งที่จริงแล้ว Class เป็นสิ่งสุดท้ายด้วยซ้ำไปใน OOP ไม่ใช่ว่าไม่สำคัญนะครับ แต่เป็นสิ่งสุดท้ายหลังจากเรา โมเดลความคิดเสร็จแล้ว
หลักการของ OOP จริงๆมันหมายถึงแค่ “การสื่อสารระหว่าง Object กับ Object” พูดให้ง่ายกว่านั้นอีกนิดก็คือ “การคุยกันระหว่าง Object” นั่นเอง “Object ตัวหนึ่งจะไปสั่งให้ Object ทำงานอย่างหนึ่งที่มันทำได้ (ก็คือ method ของ Object นะครับ) มันก็ทำไปตามที่ถูกสั่งมา ทำเสร็จมันก็ Return ผลลัพธ์กลับไป” เท่านี้แหละครับ จบ OOP ในหนึ่งบรรทัด
สิ่งที่สำคัญที่สุดใน OOP คือการที่เราโมเดลความคิดว่า “Object อะไรบ้างที่คุยกันแล้วมันจะได้งานที่เราต้องการ” แล้ว Object แต่ละตัวจะเป็นอย่างไร ถึงตอนนั้นก็ค่อยมาออกแบบคลาสกันอีกที
คราวนี้ถ้าถามถึง โมเดลของ Object แล้วตอบว่า Class เนี่ย ก็ถึงจะถูก Class หมายถึงคุณลักษณะของวัตถุว่าจะมีคุณสมบัติอย่างไร ทำงานอย่างไร โดยคลาสก็มีคุณสมบัติสามประการอย่างที่รู้กัน คือ Encapsulate, Polymorphism, Inheritance แล้วแต่ละคุณสมบัติอย่างไร
Inheritance – แน่นอนครับ คุณสมบัติการสืบทอดคลาส เพื่อเป็นการขยายคุณสมบัติของคลาสโดยการคงตัวแม่แบบเอาไว้ คลาสที่สืบทอดออกมาจะมีคุณสมบัติเช่นเดียวกับต้นแบบทุกประการและเราสามารถเพิ่มเติมคุณสมบัติได้ ประโยชน์ของคุณสมบัตินี้ คือ มีการ reuse code ลดความซ้ำซ้อนนั่นเอง
Encapsulate – อย่างที่เคยเรียนกันมาครับ คือการรวมเอา attribute และ method รวมกันไว้ด้วยกัน ประโยชน์จริงๆก็คือ “ทำให้ไม่งงว่า method ไหนใช้ attribute ไหนบ้างเวลาทำงาน” ก็เลยรวมมันไว้ซะใน Class เดียว แค่นี้ก็ไม่งงละ
Polymorphism – แปลกันมานานว่า “คุณสมบัติการพ้องรูป” แท้จริงแล้วมันพ้องอะไร ? ที่จริงแล้วการพ้องรูปของมันก็คือรูปของการทำงานนั่นเอง หมายความว่า แม้ว่า Interface ที่สั่งให้มันทำงานจะถูกเปลี่ยนไปก็ตาม แต่ด้วยคุณสมบัตินี้ ก็ทำให้ Object สามารถทำงานได้เหมือนเดิม โดยที่เราไม่ต้องแก้โค้ดเลย ตัวอย่างง่ายๆ เมื่อก่อนปลั๊กไฟบ้านเราจะมีแค่สองรู แต่หลังๆมีสามรูคือมีสายดินด้วย แต่เราต้องเรียนรู้วิธีการเสียบปลั๊กสามรูใหม่มั้ยครับ ? ไม่ต้อง แม้ว่ามันจะเป็นปลั๊กสองรูหรือสามรู เราก็เสียบมันเหมือนเดิม หรือ อุปกรณ์ไฟฟ้าก็ทำงานของมันอยู่ได้เหมือนเดิม ประมาณนี้แหละครับ พอเห็นภาพมั้ย
ในเรื่องของ OOP ก็จะขอพูดไว้ประมาณเท่านี้ อาจจะไม่เหมือนในหนังสือซักเท่าไหร่ใช่มั้ยครับ คิดว่าถูกผิดยังไงก็มาแชร์แลกเปลี่ยนความคิดเห็นกันก็ได้นะครับ ยินดีอย่างยิ่งครับ
Credit :: @onoaonoa
Comments
Post a Comment