บทที่ 2 ปัญหาการเขียนโปรแกรมโดยใช้โปรแกรมย่อย
ปัญหาการเขียนโปรแกรมโดยใช้โปรแกรมย่อย
ในการเขียนโปรแกรมคอมพิวเตอร์จะประกอบด้วยคำสั่ง
(Statement) หลายๆ คำสั่งมาต่อเรียงกัน
ถ้าหากต้องการรวมหลายๆ คำสั่งให้เป็นคำสั่งใหม่สามารถทำได้โดยการสร้างเมธอด (Method)
เมื่อมีการเรียกเมธอดที่สร้างขึ้นมาทำงาน คำสั่งต่างๆ
ที่รวมอยู่ในเมธอดนั้นจะถูกเรียกใช้งานอัตโนมัติ
การสร้างเมธอดขึ้นมาใช้งานนี้สามารถช่วยลดการเขียนโค้ดโปรแกรมที่ซ้ำซ้อนได้
ทำให้สะดวกในการแก้ไขโปรแกรมในภายหลัง
ในการออกแบบโปรแกรมผู้เขียนโปรแกรมมักจะแบ่งปัญหาออกเป็นส่วนๆ
แล้วให้โปรแกรมหลักเรียกส่วนๆ ของโปรแกรมนั้นขึ้นมาทำงาน
ส่วนของโปรแกรมเหล่านี้ก็คือเมธอดนั่นเอง แต่ภาษาบางภาษาอาจะเรียกว่าโปรแกรมย่อย
หรือซับรูทีน (Subroutine) บางภาษาเรียกว่า โปรแกรมย่อย (Procedure) หรือฟังก์ชั่น (Function) เป็นต้น
สำหรับในบทนี้จะขอเน้นการศึกษาเกี่ยวกับปัญหาของการเขียนโปรแกรมโดยใช้เมธอดในกรณีต่างๆ
เพื่อให้นักศึกษาได้เห็นภาพของปัญหาของการเขียนโปรแกรมเชิงโครงสร้างซึ่งนักศึกษาจะได้นำไปต่อยอดในการเขียนโปรแกรมเชิงวัตถุ
เนื่องจากการเขียนโปรแกรมเชิงวัตถุนั้นพื้นฐานที่สุดก็คือเรื่อง “วัตถุ”
โดยที่ส่วนประกอบของวัตถุจะประกอบไปด้วย พฤติกรรม(เมธอด) และคุณสมบัติของวัตถุ (พร็อพเพอร์ตี้)
ดังนั้นนักศึกษาควรต้องมีความอดทน ค่อยๆ
ทำความเข้าใจศึกษาเรื่องของเมธอดไปทีละส่วนเพื่อความเข้าไปในการเขียนโปรแกรมเชิงวัตถุต่อไป
แนวคิดเกี่ยวกับเรื่องของเมธอดหรือฟังก์ชั่นในที่นี้นั้นเราจะสนใจประเด็นอยู่
3 ประเด็น คือ
1. ค่าที่เราต้องส่งเข้าไปในฟังก์ชั่น
(อาร์กิวเมนต์ )
2. ค่าที่ฟังก์ชั่นต้องส่งกลับออกมาให้เรา (Return)
3. และหากเป็นฟังก์ชั่นของระบบซึ่งในกระบวนการทำงานในฟังก์ชั่นจะทำงานเช่นไรก็ไม่จำเป็นที่จะต้องทราบ (Process)
2. ค่าที่ฟังก์ชั่นต้องส่งกลับออกมาให้เรา (Return)
3. และหากเป็นฟังก์ชั่นของระบบซึ่งในกระบวนการทำงานในฟังก์ชั่นจะทำงานเช่นไรก็ไม่จำเป็นที่จะต้องทราบ (Process)
หากจะเปรียบเทียบกับกระบวนการทำงานของคอมพิวเตอร์แล้ว
การที่จะส่งค่าเข้าไปเพื่อประมวลผลนั้นก็คือการ Input ค่าเข้าไป
และการที่เมธอดได้ส่งค่ากลับนั้นหมายถึงการ Output ส่วนกระบวนการภายในเมธอดเพื่อให้ได้ Output
ออกมานั้นจะเรียกการ Process ดังภาพ
สำหรับหลักในการตั้งชื่อเมธอดนั้น เนื่องจากเมธอดคือ
พฤติกรรมที่บ่งบอกการทำงานของวัตถุ ดังนั้นหากต้องการตั้งชื่อของเมธอดให้เป็นไปตามแนวคิดการเขียนโปรแกรมเชิงวัตถุส่วนมากแล้วจะตั้งชื่อให้แสดงถึงพฤติกรรมซึ่งจะใช้คำกริยาบอกอาการของวัตถุ
เช่น doGrade() getData() SaveData()
ประเภทของเมธอดหรือโปรแกรมย่อย.
สำหรับเมธอดในภาษา Vb.NET
เราสามารถแบ่งได้ตามพฤติกรรมการส่งค่ากลับได้ 2 ประเภท คือ โปรแกรมย่อยชนิดไม่คือค่ากลับ
(Sub Routine) และ โปรแกรมย่อยชนิดคือค่ากลับ
(Function)
1. การใช้งานโปรแกรมย่อยชนิด Sub
Routine เป็นโปรแกรมย่อยที่เมื่อจบการทำงานแล้ว จะไม่มีการส่งผล
การทำงานกลับมาให้ทราบ จึงมักเขียน Sub Routine ที่ต้องการเฉพาะผลของงาน
แต่ไม่ต้องการเน้นผลลัพธ์การทำงานกลับมาให้ ซึ่งในบางครั้งอาจจะเรียกว่า Procedure
รูปแบบการประกาศเมธอด
|1| Sub ชื่อของเมธอด ([รายการพารามิเตอร์])
|2|
|3| ...ประโยคคำสั่ง....
|4|
|5| End Sub
ตัวอย่างที่ 1
เป็นการเขียนชุดคำสั่งของโปรแกรมย่อยชนิดไม่คืนค่ากลับ โดยการทำงานของตัวอย่างนี้เพื่อให้กลุ่มของ
Textbox มีสถานะทำงานหรือไม่ทำงานในตัวอย่างนี้จะเห็นว่าจะต้องสร้างโปรแกรมย่อยชนิดไม่คืนค่า
(Sub routine) โดยไม่มีการส่งผ่านค่าของตัวแปรพารามิเตอร์
ซึ่งกรณีดังกล่าวจะต้องเขียนโปรแกรมออกเป็น 2 เมธอด คือ
การเขียนโค้ดคำสั่งเมธอดแบบไม่ส่งค่ากลับ
|1| Sub
enableObjectTrue()
|2| txtScore1.Enabled
= True
|3| txtScore2.Enabled
= True
|4| txtScore3.Enabled
= True
|5| txtScore4.Enabled
= True
|6| txtScore5.Enabled
= True
|7| txtScore6.Enabled
= True
|8| txtScore7.Enabled
= True
|9| txtScore8.Enabled
= True
|10| txtScore9.Enabled
= True
|11| txtScore10.Enabled
= True
|12| End Sub
|13| '--------------------------------------
|14| Sub enableObjectFalse()
|15| txtScore1.Enabled
= False
|16| txtScore2.Enabled
= False
|17| txtScore3.Enabled
= False
|18| txtScore4.Enabled
= False
|19| txtScore5.Enabled
= False
|20| txtScore6.Enabled
= False
|21| txtScore7.Enabled
= False
|22| txtScore8.Enabled
= False
|23| txtScore9.Enabled
= False
|24| txtScore10.Enabled
= False
|25| End Sub
จาก 2 เมธอดในโค้ดด้านบน
โปรดสังเกตหน้าที่ของเมธอดจะมีหน้าที่คล้ายกันคือ การกำหนดค่าสำหรับคุณสมบัติ Enable
เพื่อสั่งให้ Textbox
มีสถานะทำงานในเมธอด enableObjectTrue และสถานะที่ไม่ทำงานในเมธอด enableObjectFalse ด้วยหน้าที่ทั้งสองเมธอดนี้มีความซ้ำซ้อนกัน
ดังนั้นนักศึกษาสามารถปรับปรุงการเขียนโค้ดใหม่ให้เหลือเพียงเมธอดเดียว คือเมธอด enableObject
โดยให้รับค่าผ่านตัวแปรพารามิเตอร์ที่มีชื่อว่า prmVal ซึ่งตัวแปรนี้จะรับค่าคือ True หรือ False ดังโค้ดด้านล่าง
การปรับปรุงเมธอดเพื่อให้รับค่าผ่านตัวแปรพารามิเตอร์
|1| Sub enableObject(prmVal
As Boolean)
|2| txtScore1.Enabled
= prmVal
|3| txtScore2.Enabled
= prmVal
|4| txtScore3.Enabled
= prmVal
|5| txtScore4.Enabled
= prmVal
|6| txtScore5.Enabled
= prmVal
|7| txtScore6.Enabled
= prmVal
|8| txtScore7.Enabled
= prmVal
|9| txtScore8.Enabled
= prmVal
|10| txtScore9.Enabled
= prmVal
|11| txtScore10.Enabled
= prmVal
|12| End Sub
การเรียกใช้เมธอดนี้สามารถเรียกใช้ผ่านเหตการณ์ต่างๆ จากฟอร์มซึ่งในตัวอย่างต่อไปนี้จะเป็นการเรียกเมธอด
ผ่านเหตุการณ์เมื่อมีการโหลดของฟอร์ม โดยจะส่งค่าอาร์กิวเมนต์เข้าไปคือค่า False
การเรียกใช้เมธอดและการส่งค่าอาร์กิวเมนต์
|1| Private Sub Form1_Load()
Handles MyBase.Load
|2|
|3| enableObject(False)
|4|
|5| End Sub
ความคิดเห็น
แสดงความคิดเห็น