วันอาทิตย์ที่ 21 พฤศจิกายน พ.ศ. 2553

oop vs procedural

พูดถึงตัวแปร global ก่อนนะครับ
ถ้าใช้ตัวแปร global แสดงว่าทุก function สามารถเข้าถึงตัวแปร global ได้หมด
เวลาเกิด error ขึ้นในโปรแกรม โดยเฉพาะ error จาก logic เราจะไม่สามารถวิเคราะห์ได้ว่า
ภายใน function ไหนที่เป็นตัวเข้าไปแก้ไขทำใ้ห้ตัวแปร global หรือโปรแกรมของเราทำงานผิดพลาด
ดังนั้นภายในโปรแกรมควรจะจำกัดตัวแปร global ให้น้อยที่สุดครับ

ถึงจะมีข้อแนะนำว่าไม่ควรใช้ตัวแปร global หรือใช้น้อยที่สุด
แต่ว่าบางโปรแกรมที่จำเป็นต้องใช้ตัวแปรร่วมระหว่าง function ครับ
f1($a); ต้องการตัวแปร $x ไปประมวลผล
f2($a,$b); ต้องการตัวแปร $x ไปประมวลผล
f2($c,$d); ต้องการตัวแปร $x ไปประมวลผล
ซึ่งถ้าเราไม่ใช้ตัวแปร global เราก็ต้องเขียนแบบนี้ครับ
f1($a,$x);
f2($a,$b,$x);
f2($c,$d,$x);
แต่ว่าปัญหาเกิดครับ มีโค้ดซ้ำ ได้แก่ ,$x ซึ่งทำให้โปรแกรมเขียนและอ่านยากขึ้น
และเราไม่สามารถบอกได้ว่า function f1,f2,f3 มีความสัมพันธ์ต่อเนื่องกันหรือไม่
ซึ่งถ้าเขียนแบบ function ก็ทำได้ครับเช่น mysql_connect, mysql_query อันนี้เป็นการระบุความสัมพันธ์จาก คำหน้าหน้าชื่อ function

สำหรับการเขียนแบบ class นะครับ
เป็นการแก้โจทย์ปัญหาเกี่ยวกับตัวแปรร่วมที่ใช้ function ต่างๆ โดยไม่ต้องส่ง parameter ไปมา
การสร้างเป็น class นั้น ตัวแปรที่เป็นตัวแปรร่วมจะเรียกว่า member ของ class
ส่วน function จะเรียกว่าเป็น behavior ของ class (บรรทัดนี้และบรรทัดบนนี้ไม่รู้ถูกป่าวนะผมก็แค่ฟังๆผ่านๆจาก lecture ที่มหาวิทยาลัย)
ประโยชน์อย่างหนึ่งก็คือจัดกลุ่มของ function ที่สัมพันธ์กันโดยไม่ต้องมี คำนำหน้าเดียวกัน และไว้ที่เดียวกัน
ประโยชน์อีกอย่างคือ ตัวแปร member จะถูกแก้ไขโดย function และำคำสั่งภายใน class เท่านั้น
ทำให้พอจะระบุตำแหน่งของ error ได้ง่ายขึ้น เพราะในการเขียนแบบ oop ไม่จำเป็นต้องใช้ตัวแปร global มากมายอย่างในแบบ procedural
ประโยชน์อีกอย่างก็คือการจัดรูปแบบของ program จะมีลักษณะเป็นวัตถุกลุ่มก้อนมากขึ้น
การมองการเขียนโปรแกรมในรูปแบบ oop จะต่างจาก function ซึ่งเพียงแต่จะเน้นเพียงวัตถุประสงค์ให้โปรแกรมทำงานสำเร็จลุล่วง
แต่จะมองว่าเป็นการพยายามทำให้วัตถุต่างๆ ในโปรแกรมสื่อสารโต้ตอบกัน ใน oop เรียกว่าส่ง message การทำแบบนี้จะทำให้โปรแกรมที่ค่อนข้างซับซ้อน สามารถนำกลับมาใช้ใหม่ได้สะดวกครับ แต่การเขียนแบบอิสระก็จะทำให้เกิดความไม่เป็นระเบียบได้เหมือนกันจึงมีผู้ออกแบบ oop design pattern ที่ใช้กันบ่อยๆ ขึ้นมาครับ ซึ่งแม้ว่าการเขียนแบบ function ธรรมดาก็ทำได้เช่นเหมือนกัน แต่จะจัดระเบียบยุ่งยากกว่าแบบ class อยู่พอควรครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น