Reuse และ Framework
ระบบโครงสร้างของ software โดยทั่วๆ ไปจะมีส่วนประกอบหลายๆ ส่วนที่ทำหน้าที่คล้ายๆ กันทำให้ระบบ software ใหม่ๆ ที่สร้างขึ้นในปัจจุบัน ได้นำส่วนประกอบบางส่วนมาจากส่วนประกอบของ software เดิมที่มีอยู่ ซึ่งการนำส่วนที่มีอยู่มาใช้ซ้ำนั้น จะเรียกว่า reuse
Reuse คือ กระบวนการในสร้าง software จากส่วนประกอบของ software ที่มีอยู่เดิม
การ reuse มีประโยชน์มากต่อการเขียนโปรแกรม เช่น ช่วยเพิ่มความสะดวกในการสร้าง software ช่วยให้ software มีคุณภาพมากขึ้นและราคาถูกลง การ reuse จะเป็นประโยชน์ต่อทั้งผู้ใช้โปรแกรมและผู้ทำการพัฒนาโปรแกรม
สิ่งสำคัญที่ได้จากการ reuse คือ การลดความสูญเสียที่เกิดขึ้น เนื่องจากการสร้าง software โดยไม่ใช้การ reuse จะต้องสิ้นเปลืองทรัพยากรประมาณ 70 – 80% เพื่อสร้าง software ที่มีลักษณะคล้ายระบบเดิมที่มีอยู่ เป็นต้นว่า ในการเขียนโปรแกรมบางครั้งอาจจะต้องเขียนโค้ดเป็นแสนบรรทัดต่อหนึ่งโปรแกรม ซึ่งถ้าพิจารณาจาก source code ของโปรแกรมแล้ว จะพบว่าภายใต้โค้ดแสนบรรทัดนั้น จะมีจำนวนบรรทัดที่สั่งงาน ในลักษณะเดียวกัน ซ้ำกันมากถึง 70 – 80% ของโครงสร้างทั้งหมด จากจำนวนโค้ดที่ได้รับการเขียนขึ้นมาใหม่จริงๆ ที่มีเพียง 20 – 30% เท่านั้น ดังนั้น ถ้าผู้ทำการพัฒนาโปรแกรมมีทักษะการเขียนโปรแกรมที่ดีพอ และเข้าใจถึงหลักการของการ reuse แล้ว โปรแกรมนี้อาจจะใช้พื้นที่เพียงประมาณห้าหมื่นบรรทัดหรือน้อยกว่านี้ ซึ่งเป็นการลดการสูญเสียพื้นที่ และลดการจองตัวแปรต่างๆ ลงมาได้มาก ทั้งนี้ยังเป็นการสะดวกในการปรับปรุงแก้ไขในภายหลังอีกด้วย ดังนั้นในการสร้างโปรแกรมที่ดีจึงต้องศึกษาหลักการของการ reuse ไว้ด้วย
ในระบบ OBJECT-ORIENTED programming นั้น ถือได้ว่าการ reuse เป็นหัวใจสำคัญอย่างมากต่อการพัฒนาโปรแกรมในแบบ object-oriented เนื่องจาก OBJECT-ORIENTED programming จะมีกลไกหลายๆ อย่างภายในโครงสร้าง ที่เอื้ออำนวยต่อการ reuse ให้ส่วนประกอบต่างๆ สามารถนำกลับมาใช้ได้ใหม่ แต่การ reuse นั้น ก็ไม่ใช่จะมีเฉพาะภายในระบบ OBJECT-ORIENTED programming เท่านั้น ระบบ non OBJECT-ORIENTED programming เช่นCobal, C ฯลฯ ก็สามารถใช้หลักหาร reuse เพิ่มประสิทธิภาพการทำงานได้เช่นกัน ตัวอย่างเช่น การสร้าง function หรือ procedure เพื่อให้สามารถเรียกใช้งานภายในโปรแกรมได้หลายๆ ครั้ง แต่จุดแตกต่างของการ reuse ระหว่างการเขียนโปรแกรมทั้งสองแบบก็คือ
-ในแบบ OBJECT-ORIENTED programming นั้นการ reuse จะเป็นการ reuse โค้ดของ class ทั้ง class
-ในแบบ non OBJECT-ORIENTED programming นั้นการ reuse จะเป็นการ reuse ในส่วนของ function
ซึ่งถ้าเปรียบเทียบกันแล้ว การที่สามารถหยิบ class ทั้ง class ไปใช้ใหม่ย่อมดีกว่าการนำส่วนประกอบย่อยๆ ของ function หรือ procedure ไปใช้งาน และจากความแตกต่างในส่วนนี้ ทำให้การ reuse ในแบบ OBJECT-ORIENTED programming นั้นมีประสิทธิภาพมากกว่า สามารถทำได้ โดยสะดวกมากกว่า
การ reuse software สามารถเกิดขึ้นได้ตั้งแต่ขั้นตอนของ การออกแบบ การสร้างข้อกำหนดต่างๆ ขั้นตอนการปฏิบัติงานของ software เอกสารสำหรับ user ฯลฯ แม้แต่เมื่อ software ได้รับการสร้างเสร็จเรียบร้อยแล้ว การพัฒนา และการดูแลรักษา software ก็ยังต้องมีส่วนของการ reuse เข้ามาเกี่ยวข้อง
ข้อดีของการ reuse
software ที่จะได้รับการ reuse นั้นต้องมีหลักการที่ดี เพื่อจะทำให้ software ที่ออกมานั้นมีคุณภาพมีความน่าเชื่อถือ และราคาถูก นอกจากนี้แล้วการ reuse ยังทำให้ software ที่ได้ ส่งผลดีต่อไปในระยะยาวอีกด้วย โดยข้อดีของการ reuse มีดังนี้
-มีส่วนช่วยเพิ่มผลิตภัณฑ์ของ software
-ลดเวลาในการพัฒนา software
-Software ได้รับการพัฒนากับกลุ่มคนจำนวนน้อยก่อน
-การเคลื่อนย้ายส่วนประกอบต่างๆ จากระบบงานหนึ่งไปยังอีกระบบงานหนึ่งสามารถทำได้ง่าย
-ลดราคา software
-ทำให้ software ที่ผลิตออกมามีคุณภาพมากขึ้น
ทั้งหมดที่ได้กล่าวมาข้างต้นเป็นประโยชน์หลักๆ ที่ได้จากการ reuse แสดงให้เห็นได้ว่าในการสร้าง software ใหม่ขึ้นมานั้น ไม่ควรเริ่มสร้างตั้งแต่แรกเริ่ม แต่ควรสร้างจากส่วนประกอบที่มีอยู่เดิม และนำมาประยุกต์ใช้ให้เหมาะสมกับระบบที่จะทำการสร้างขึ้นมาใหม่นั้น และต่อไปนี้ก่อนที่จะได้ทราบถึงวิธีการ reuse ในระดับสูงนั้นจำเป็นจะต้องทราบข้อมูลของ API อย่างคร่าวๆ ซึ่งเป็นส่วนของการ reuse ประเภทหนึ่งเพื่อจะทำ ให้สามารถเข้าใจได้ง่ายเกี่ยวกับวิธีการสร้างระบบจากการ reuse ต่อไป
อะไรคือ API
API ย่อมาจาก Application Programming Interface ความหมายคือก็คือ ใช้ทำหน้าที่เป็น interface ของ software ที่สามารถเรียกใช้ได้โดยโปรแกรมอื่นๆ หรือ class อื่นๆ ถ้าเปรียบเทียบกับเครื่องคิดเลขที่มีแป้นกดเป็น interface ดังนั้น API ก็คือ interface ของระบบปฏิบัติการ (Operating System หรือ OS) ภายใน OS แต่ละบริษัทที่ผลิตขึ้นมานั้นจะมีส่วนของ API ไม่เหมือนกัน และส่วน API ของ OS เป็นสิ่งที่ทำให้ OS ต่างๆ นั้นไม่สามารถเข้ากันได้ ยกตัวอย่างเช่น software ที่ดำเนินการ (run) บนพื้นฐานของเครื่อง Macintosh จะไม่สามารถนำมาใช้กับเครื่อง Window 98 ได้ทั้งนี้เพราะ ระบบเครื่อง Macintosh และ Window98 มีส่วนของ API ที่แตกต่างกัน และโปรแกรมหลายๆ โปรแกรมได้รับการพัฒนาให้ทำงานได้ภายใต้ระบบใดระบบหนึ่งเท่านั้น แต่ก็มีบาง function ที่ทำหน้าที่ในการแปลง (convert) ส่วนของการเรียกใช้งานบนระบบ (OS) ที่ต่างกัน ทำให้บาง software สามารถทำงานบน API ที่ต่างกันได้
จริงๆ แล้วการศึกษา API เป็นพื้นฐานการเขียนโปรแกรมในระดับสูง ซึ่งส่วนของ API จะไม่สามารถดำเนินการ (execute) ด้วยตนเอง แต่ API จะเรียกใช้ได้โดยโปรแกรมอื่นๆ และส่วนของ API นี้จะได้รับการเรียกใช้บ่อยมากภายใต้การทำงานของ OS ยกตัวอย่างเช่น เมื่อโปรแกรมต่างๆ ต้องการเขียน data ลง disk โปรแกรมนั้นจะไม่ทำการส่งคำสั่งนี้ไปยัง harddisk ด้วยตัวเอง แต่จะเป็นหน้าที่ของ OS ที่คอยจัดการให้ ซึ่งการจัดการในลักษณะนี้เป็นข้อดีที่ทำให้ผู้ออกแบบ software ไม่ต้องกังวลเกี่ยว กับการจัดการขั้นพื้นฐาน ที่มีอยู่ในทุกๆ software ไม่ว่าจะเป็นการจัดการกับส่วนการเข้าถึง disk, การจัดการ memory, การแสดงภาพ หรือสิ่งใดๆ บนจอภาพ ฯลฯ สื่งต่างๆ เหล่านี้ช่วยให้การสร้าง software ประหยัดเวลา และยังทำให้ software มีขนาดเล็กลงด้วย นอกจากนี้แม้ว่าในภายหลังได้มีการปรับปรุงระบบการแสดงผลบนจอภาพเพื่อเพิ่มประสิทธิภาพให้กับการแสดงผล ซึ่งแต่ละโปรแกรมที่ต้องการจะเพิ่มเติมประสิทธิภาพในส่วนนี้ก็สามารถทำได้ไม่ยาก เมื่อโปรแกรมทั้งหมดทำงานอยู่ภายใต้ API แค่ เพียงเพิ่มเติมประสิทธิภาพการแสดงผลบนจอภาพเก็บไว้ในส่วนของ API ภายใน library เพียงที่เดียว ก็จะทำให้โปรแกรมทุกๆ โปรแกรมที่ทำงานภายใต้ OS เดียวกันนี้ได้รับการเปลี่ยนแปลงไปด้วย จากการใช้งานบน OS ที่มี API เป็นส่วน interface
API จะได้รับการสร้างและเก็บไว้ที่ library ของระบบ ถ้าเป็นระบบปฏิบัติการ Window ส่วนของ API จะเก็บอยู่ที่ file นามสกุล DLL ในdirectory System โดยที่ file นามสกุล DLL เหล่านี้จะอนุญาตให้เรียกใช้ได้โดยโปรแกรมอื่นๆ ภายนอกที่ทำงานอยู่บนพื้นฐานของระบบปฏิบัติการ Window เท่านั้น
เทคโนโลยี OBJECT-ORIENTED กับการ Reuse
สิ่งสำคัญของ object-oriented programming คือการ reuse และส่วนใหญ่แล้วประเภทของการ reuse ก็คือ library โดยส่วนต่างๆ ที่ใช้งาน library สามารถแสดงได้ด้วยแผนผังของการ reuse
Libraries
เป็นส่วนที่เก็บ class ต่างๆ ที่เกี่ยวกับระบบปฏิบัติการ และส่วนของ API ที่ได้รับการสร้างขึ้น โดยจะเก็บอยู่ที่ Libraries เพื่อให้สามารถเรียกใช้ได้โดยโปรแกรมต่างๆ ภายใต้ OS เดียวกัน
ADTs และ Algorithms
เป็นส่วนโครงสร้างของภาษาโปรแกรม (data structure) และ โค้ดต่างๆ ที่สร้างขึ้นภายในโปรแกรมซึ่งสามารถเรียกใช้ซ้ำได้ โดยไม่จำเป็นต้องสร้างขึ้นมาใหม่เพื่อใช้งานในลักษณะเดิม ยกตัวอย่างเช่นส่วนของ function , procedure หรือ class ที่สามารถ reuse ได้ เป็นต้น
Design Patterns
ในระดับนี้การ reuse ยังคงแทนได้ด้วยการออกแบบโปรแกรมใหม่ โดยการรวมบางส่วนของรูปแบบโปรแกรมที่มีอยู่เดิมมาใช้
Component
แต่ละส่วนของโปรแกรมที่สามารถติดต่อสื่อสารกันได้ระหว่าง classนั้นจะต้องอยู่ภายใต้รูปแบบที่เป็นข้อตกลงระหว่างกัน (protocal) เช่น CORBA หรือ DCOM โดยที่ protocal ที่ใช้ในการสื่อสารกันระหว่าง class นั้นสามารถ reuse ได้โดยไม่จำเป็นต้องออกแบบ และสร้างขึ้นมาใหม่สำหรับทุกๆ software ที่มีรูปแบบในการสื่อสารเช่นเดียวกัน
Frameworks
การ reuse ในปัจจุบันนี้มักจะทำในส่วนของ framework ซึ่งเป็นการออกแบบในระดับสูง โดยในการออกแบบส่วนของ framework ที่ดีและมีประสิทธิภาพ จะทำให้ software ที่ได้นั้นมีราคาถูกลง และง่ายต่อการพัฒนาต่อไป
ดังนั้นในทาง OBJECT-ORIENTED programming มีมากมายหลายวิธีที่จะทำการ reuse ส่วนประกอบของ software กลับมาใช้ใหม่ ซึ่งวิธีหนึ่งที่เป็นที่นิยม และจะได้กล่าวถึงต่อไปในบทนี้คือ การสร้าง frameworksในบทก่อนได้กล่าวถึงการ reuse โค้ดจาก class อื่นกลับมาใช้ใหม่ด้วยการ inheritance แต่การสร้าง framework จะเกี่ยวกับการ reuse บางส่วนหรือทั้งหมดของระบบตั้งแต่การออกแบบ เพื่อให ้ framework ที่ได้สามารถนำไปใช้งานได้แพร่หลาย โดยมีเครื่องมือช่วยในการสร้าง framework คือ interface และ abstract class
Framework
Framework เป็นแนวคิดอย่างหนึ่งของการ reuse ซึ่งเป็นการแสดงถึงความเป็นมาตรฐานของรูปแบบที่ทำให้ software ต่างๆ มีรูปแบบที่เป็นแนวทางเดียวกัน นอกจากนี้การใช้งาน framework สามารถทำการติดตั้งและใช้งานได้ทันที หรือที่เรียกกันทั่วไปว่า plug and play ดังจะเห็นได้ จากหน้า desktop ของโปรแกรมประเภท Microsoft Office ที่ทั้ง Microsoft Word, Microsoft Excel, Microsoft PowerPoint ฯลฯ จะมี menu option คล้ายคลึงกัน ไม่ว่าจะเป็น File, Edit, View, Insert, Format, Tool ฯลฯ ตลอดจนโครงสร้างรูปแบบพื้นฐานต่างๆ ที่ใช้ทำงานก็มีลักษณะคล้ายกัน
Framework โดยทั่วๆ ไป จะสร้างให้มีความง่ายและสะดวกในการเรียนรู้ และสามารถใช้งานส่วนประกอบต่างๆภายใต้สภาพแวดล้อมเดียวกัน (ทำงานบน API เดียวกัน) และรวมทั้งรูปแบบภายใต้สภาพการทำงานของ Window ที่มี main title bar , screen , minimozes/maximizes , การเปิด/ปิด โปรแกรมที่ปุ่มมุมบนขวา ซึ่งทั้งหมดนี้ ก็คือส่วนของ framework ด้วย ดังจะเห็นได้จาก software ต่างๆ ที่ใช้งานจะมีส่วนของ framework ของระบบปฏิบัติการ window อยู่แทบทั้งสิ้น
การใช้ framework ผู้พัฒนาจะทราบล่วงหน้าเกี่ยวกับรูปแบบของ interface ที่จะใช้สร้างโปรแกรมหนึ่งๆ ขึ้นมา เนื่องจากรูปแบบของ interface จะเป็นไปตามมาตรฐานของ framework ซึ่งมีข้อดี 2 ข้อคือ
1. End user (ผู้ที่ใช้งานที่โปรแกรมโดยตรง) ไม่ต้องเรียนรู้วิธีการใช้งานใหม่ เนื่องจากในทางธุรกิจ ผู้ใช้ทั่วไปจะไม่เสียเวลาในการเรียนรู้สิ่งใหม่โดยไม่จำเป็น
2. ผู้พัฒนาโปรแกรมสามารถใช้โค้ดที่ได้รับการเขียนขึ้นมาและทดสอบอย่างถูกต้องเรียบร้อย ซึ่งมั่นใจได้ว่ามีความถูกต้องเชื่อถือได้
ในโครงสร้างของโปรแกรมหลายๆ โปรแกรมส่วนของ framework ได้ถูกสร้างขึ้น และเก็บไว้ใน class library ซึ่งจะเรียกใช้ได้โดยเรียกผ่าน API ของระบบ
framework จะช่วยให้การ reuse มีประสิทธิภาพต่อ software เป็นอย่างมาก ดังจะเห็นได้จากส่วนของ framework ที่สร้างขึ้นไม่ว่าจะเป็นของ micorsoft office หรือของ microsoft window ทั้งนี้ framework มีหลักการในการคิดและออกแบบอย่างไร จึงจะทำให้ software นั้นมีประสิทธิภาพมากขึ้น
ข้อตกลง (Contract)
Contyact หมายถึง การเห็นด้วยระหว่างกลุ่มคนมากกว่า 1 คน ที่จะทำตามกฎข้อบังคับที่ได้สร้างขึ้น ข้อตกลงนี้จะทำให้ผู้พัฒนาระบบ , ผู้ใช้ระบบ และผู้เกี่ยวข้องกับระบบทุกคนทำตามเงื่อนไขของระบบที่ได้สร้างขึ้น โดยเงื่อนไขที่สร้างขึ้นนี้จะต้องสร้างขึ้นภายใต้ API ของระบบปฏิบัติการ ดังจะเห็นได้จากปุ่มต่างๆ ที่เกิดขึ้นบน framework ของ Microsoft Office แต่ละปุ่มจะมีหนัาที่ต่างกัน ปุ่ม save เป็นที่เข้าใจและยอมรับของทุกคนที่ใช้งานว่ามีไว้เพื่อบันทึกการทำงาน , ปุ่ม exit ก็เป็นที่เข้าใจและยอมรับกันว่ามีไว้เพื่อจบการทำงานของโปรแกรม แต่การสร้างข้อตกลงนี้จะต้องขึ้นอยู่กับความต้องการของผู้ใช้ และผู้พัฒนาระบบด้วยเพื่อสร้างส่วนของข้อตกลงนี้บรรลุผลสำเร็จตามที่ต้องการ
ในภาษา Java จะมีเครื่องมืออยู่ 2 อย่าง ที่จะใช้ในการสร้างรูปแบบของข้อตกลงนี้ คือ abstract class และ interface โดยก่อนที่จะกล่าวถึงต่อไป ควรที่จะได้รับรู้ถึงความแตกต่างของ abstract ละ interface ก่อน
Coppyright 2004 By Webmaster All Right Reserved Comments