Cocoa & iPhone Developement : OOP

กุมภาพันธ์ 1, 2009 at 4:14 am 2 ของความคิดเห็น

เรารู้จักอย่างแรกที่ต้องรู้ในการพัฒนา 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 ก็จะขอพูดไว้ประมาณเท่านี้ อาจจะไม่เหมือนในหนังสือซักเท่าไหร่ใช่มั้ยครับ คิดว่าถูกผิดยังไงก็มาแชร์แลกเปลี่ยนความคิดเห็นกันก็ได้นะครับ ยินดีอย่างยิ่งครับ


We already known “MVC Design Pattern”, a first thing for iPhone Application development from entry before. Now, In this entry, We’re talking about a very basic thing for programming in current time. It’s Object-Oriented Programming.

About OOP, Many people will known especially CS Student. But from I know, Many people understood “OOP is programming as Object and coding in Class” but still programming with Procedural Programming paradigm like coding a C or Pascal and finally you got an only one Object of main program.

Are you understood OOP like this ? So, OOP in this entry may be not same as OOP which you ever learn. Let start.

Mostly if you ask “What is OOP ?”. Almost all will answer as “Programming as Object”. OK you not wrong translate but not right for question. As a matter of fact OOP is one of “Thinking Model for Programming” by “Look an each component as object working together until is an Program”. And then we implement by coding as model which we think.

Next question. If we ask “How OOP is work ?”. Almost all will answer “Work by build a class”. Did you ever answer a question or exam like this ?. No, It not. That answer is still not right for question. A one mistake about OOP is “We over focus on Class”. Obviously Class is the last thing to do in OOP process. Class is important too but it is next from Thinking Model.

About concept of OOP is only “Object Communication with Object”. Object1 send action to Object2 to do a method which Object2 can do. When Object2 done, respond a result to Object1. Only this process. Finished OOP in single line.

The most important in OOP is “Thinking Model”. What object you should have and how it’s communication. For next, What object should be, in that time we should think about Class design.

Now, If I ask about model of object and you answer Class. It’s right answer. Class is a characteristic of object, What attribute should have, What methods can work. A property of class is 3 things well known. Inheritance, Encapsulate and Polymorphism.

Inheritance – Sure, Direct from name. A property of inherit from parent class to child class. Child class is have all thing like parent class but you can improve attribute or method without edit Parent class. A really benefit is “Reuse Code” decrease redundancy code.

Encapsulate – Like you ever known, Include attribute and method in same place. A really benefit is “Not confuse, A method use which attribute”. So, We include it in same place.

Polymorphism – is a property “Object still work without edit code even you change an interface” for easy example home electronic plug. Electricity still working even you plug in two-holes plug or three-holes plug.

I finished about OOP in this line. It may be not same as your book ever read. What do you think about it. You can share comment. I’m welcome.

Entry filed under: Cocoa Programming, Computer, iPhone Programming, News & Article. Tags: , , , , .

Book Review : เข็มทิศชีวิต II ตอน กฎแห่งเข็มทิศ Cocoa & iPhone Development : แนะนำแหล่งเรียนรู้เพิ่มเติม

2 ความเห็น Add your own

  • 1. เป้  |  กุมภาพันธ์ 1, 2009 ที่ 11:34 am

    ชอบเรื่องปลั๊กครับ

    เข้าใจง่ายดี

    ขอนำหลายๆประโยคไปใช้ต่อ ทำให้เข้าใจง่ายดีครับ

    รออ่านต่อไป!!

    ตอบกลับ
  • 2. worrawat  |  มิถุนายน 18, 2009 ที่ 10:47 am

    เขียนอ่านเข้าใจง่ายดีครับ

    พอให้ได้ concept OOP ได้ดีเลยทีเดียว

    ขอบคุณครับ

    ตอบกลับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


del.icio.us For iPhone dev

Post Calendar

กุมภาพันธ์ 2009
พฤ อา
« ม.ค.   มี.ค. »
 1
2345678
9101112131415
16171819202122
232425262728  

%d bloggers like this: