- หลักการเชิงวัตถุจัดเป็นวิธีการหนึ่ง ที่สนับสนุนการนำซอฟแวร์กลับมาใช้ใหม่ ด้วยคุณสมบัติต่างๆเช่น abstraction,information hiding,polymorphism,inheritance,redefinition
- โดย ชุดlibrary ที่อยู่ในคลาส อาจปรับเปลี่ยนให้เหมาะสมตรงตามความต้องการของผู้ใช้ในระบบ ทำให้ไม่ต้องสร้างชุดคำสั่งขึ้นมาใหม่
- ซึ่งจำเป็นต้องค้นคืนหรือจับคู่ดูว่าในระบบ มีชุดคำสั่งที่สามารถปรับให้เข้ากลับความต้องการของผู้ใช้ใหม่อันเป็นการนำข้อกำหนดที่มีอยู่ มาใช้ใหม่ได้หรือไม่
- วิธีการเดิมในการค้นคืนชุดคำสั่งนั้น ชุดคำสั่งจะอยู่ในรูปของ text-based ซึ่งเป็นการยากในการค้น ขาดความแม่นยำ และ กำกวม ทำให้คุณลักษณะคำสั่งที่ค้นไม่ตรงตามความต้องการที่รับเข้ามา
- จึงได้นำวิธีให้ชุดคำสั่งอยู่ในรูป formal specification แล้วทำการค้นคืนด้วยการจับคู่ชุดคำสั่งดังกล่าว
- ซึ่งงานวิจัยนี้จะกล่าวถึงการจับคู่ ชุดคำสั่งในรูป formal specification เพื่อสามารถนำชุดคำสั่ง ที่มีอยู่มาใช้ให้ตรงกับความต้องการที่เข้ามาใหม่ โดยเขียนให้อยู่ในรูป Object-oriented Components
- ในการจับคู่ชุดคำสั่ง ในงานวิจัยนี้จะให้ความสำคัญในการจับคู่ในส่วน pre / post-condition
- โดยให้เป็นการจับคู่ระหว่าง Query component:Q ซึ่งเป็นกลุ่มความต้องการของผู้ใช้ และ Library component:S ให้เป็นชุดคำสั่งที่มีอยู่ในระบบ
- ซึ่งการจับคู่จะสำเร็จได้เมื่อมีการตอบสนองตามเงื่อนไขทั้ง pre-condition และ post-condition ของ Q และ S โดย S สามารถเข้าแทนที่ Q ได้นั่นเอง
- โดยความถูกต้องของข้อมูลสามารถยืดหยุ่นได้ เช่น กรณีสถานะเงื่อนไขของ S ก่อนที่จะดำเนินการ อาจแทนที่สถานะก่อนดำเนินการของ Q ได้ไม่ดีนัก คือ ผลลัพธ์ข้อมูลอาจตรงตามที่ต้องการบ้าง แต่เมื่อหลังดำเนินการแล้ว S สามารถให้ผลลัพธ์ตรงตามความต้องการ Q ได้ (อาจไม่จำเป็นที่ผลลัพธ์ก่อนดำเนินการ และ หลังดำเนินการถูกต้องเหมือนกันหมด)
รูปแบบการจับคู่ จะ เป็นการจับคู่ระหว่าง Query Class กับ Library Class
เราให้ Query Class ดังนี้
Fig.1 Query class
และ Library Class ดังนี้
Fig.2 Library class

โดยจะจับคู่เฉพาะหน่วยภายในที่เฉพาะเจาะจงของ method และ attribute ซึ่ง Method 0ะดูที่การจับคู่ของ function ขณะที่ attribute จะดูที่ state schema
จาก Fig.1 Query class จะเป็น MousePointer class บอกลักษณะภายใน class เช่น attribute,method (ให้เป็น public)โดยใน MousePointer class มี attribute 2 attribute คือ posX,posY โดยทั้งคู่จะสร้างขอบเขตค่าพารามิเตอร์ และมี Method คือ move และ setTo
จาก Fig.2 Library class จะเป็น 2Tuple class ซึ่งจะมี 2 attribute คือ first,second โดยมี type คือ T1,T2 มี method 3 method คือ create, getfirst, getsecond และภายในระบบอาจมี library class ที่สืบทอดมาจาก library class หลักวึ่งกรณีที่ Q วึ่งเป็นความต้องการของผู้ใช้ค้นหาแล้วอาจมี attribute ตรงกับ library class หลัก แต่ method อาจไม่ตรงหรือมีมากกว่าดังนั้น
จาก Fig.1 Query class จะเป็น MousePointer class บอกลักษณะภายใน class เช่น attribute,method (ให้เป็น public)โดยใน MousePointer class มี attribute 2 attribute คือ posX,posY โดยทั้งคู่จะสร้างขอบเขตค่าพารามิเตอร์ และมี Method คือ move และ setTo
จาก Fig.2 Library class จะเป็น 2Tuple class ซึ่งจะมี 2 attribute คือ first,second โดยมี type คือ T1,T2 มี method 3 method คือ create, getfirst, getsecond และภายในระบบอาจมี library class ที่สืบทอดมาจาก library class หลักวึ่งกรณีที่ Q วึ่งเป็นความต้องการของผู้ใช้ค้นหาแล้วอาจมี attribute ตรงกับ library class หลัก แต่ method อาจไม่ตรงหรือมีมากกว่าดังนั้น
Fig.3 2DVector Library class สืบทอดจาก 2Tuple Library class
จะเห็นว่า 2DVector สืบทอดมาจาก 2Tuple โดยมี method add,scale,swap เพิ่มเข้ามา
การจับคู่ระหว่าง Query class กับ Library class
- Q จับคู่กับ S ได้ถ้าปรับเปลี่ยนค่าใน S แล้วเมื่อแทนที่ผลการดำเนินการแล้วให้ผลเหมือน attribute และ method ของ Q
- ในกรณีที่มีการสืบทอด method จะทำการจับคู่โดยเปรียบเทียบ method ใน childclass แต่ไม่เปรียบเทียบกับ method ในคลาสแม่(คือไม่ต้องปรับเปลี่ยนใน class แม่สนใจแต่ใน class ลูกแทนโดยดูที่ attribute ที่สืบทอดจากคลาสแม่ และ method ของคลาสลูก) เช่น 2DVector Library class ที่สืบทอดมาจาก 2Tuple library class ทำการจับคู่กับ MousePointer Query เราต้องการดูว่า Q ที่เข้ามาจะจับคู่กับ S ที่มีอยู่ในระบบได้หรือไม่ โดย S นี้เป็นคลาสที่สืบทอดมาจาก Sหลัก เราจะสามารถปรับเปลี่ยนค่าใน 2DVector เพื่อนำไปทดสอบค่า pre-post condition ดังนี้
- ให้
คือค่าที่ปรับเปลี่ยนของ S เพื่อใช้จับคู่กับ Q
(ซึ่งจากค่า
เราจะรู้ได้อย่างไรว่า add ต้องคู่กับ move หรือ create ต้องคู่กับ setTo ซึ่งงานวิจัยนี้หรืองานวิจัยอื่น ก็จะไม่บอกแต่จะมุ่งเน้นไปที่การจับคู่ในส่วน Specification matching หรือ pre/post condition มากกว่า ซึ่งเป็นการนำทฤษฎีที่มีอยู่มาประยุกต์ใช้กับงานวิจัยของตนเอง แต่ส่วนที่ระบุว่าทำไม add ต้องคู่กับ move หรือ create ต้องคู่กับ setTo งานวิจัยจะบอกแต่เพียงว่าให้ดูบริบท หลีกเลี่ยงการดำเนินการที่ขัดแย้ง หรือ ไม่มีความเป็นไปได้เท่านั้น ดังนั้นกระผมจึงคิดว่าจะนำเสนอทางแก้ปัญหาเหล่านี้โดยเพิ่มการจับคู่เชิงความหมายเข้าไปจากเดิมที่มีการจับคู่เฉพาะ Signature(Attribute)และ Specification(method))
จากคุณลักษณะของคลาสใน Object-oriented Components จะแบ่งเป็น attribute และ method ดังนั้นเราจะจับคู่ใน 2 ส่วนดังนี้
Attribute Matching
เราจะจับคู่ Q กับ S ที่อยู่ในรูปการปรับเปลี่ยน
( s(
)) โดยยกตัวอย่าง ค่า attribute posX,posY ใน MousePointerQuery class
กับค่า attribute first,second ของ 2Tuple ซึ่งสืบทอดไปยัง 2DVector Library class
โดยให้ S อยู่ในรูป s(
) โดยให้ type เหมือนกันจะได้
จะพบว่าค่า invariant ของ MousePointer จะ Stronger กว่า 2DVector คือ method ของ library สามารถดำเนินการให้ผลใน method Q ได้ภายใต้ขอบเขตของ attribute Q คือ attribute S ที่จะดำเนินการใน method S แล้วจะสามารถให้ผลเหมือนการดำเนินการใน method Q ได้ต้องอยู่ภายใต้ขอบเขตของค่า invariant ใน attribute Q เท่านั้น
Method matching
Method Q จะจับคู่กับ Method S โดยพิจารณาจากลักษณะเด่น สภาพบริบทที่สอดคล้องกัน โดยงานวิจัยนี้นำทฤษฎีการจับคู่บนเทคนิคพื้นฐาน function specification matching techniques ของ Zaremski and Wing(A.Moormann Zaremski and J.M.Wing : Specification matching of software components,ACM Transactions on Software Engineering,October 1997) โดยแบ่งเป็น exact match กับ plug-in match ในรูปของ pre/post condition ดังนี้
Definition1 :exact match
จะพบว่า create จาก 2DVector เมื่อปรับค่าแล้ว
สามารถจับคู่กับ setTo ของ MousePointer(Q) ด้วยการจับคู่แบบ exact match ดังนี้
Defination2:plug-in match คืออาจไม่เหมือนกันแต่แทนนที่กันได้ โดย S pre-condition นั้น weak กว่า Q pre-condition และ S post-condition strong กว่า Q post-condition
เช่น method add ของ 2DVector กับ method move ของ MousePointer เราพิจารณาในส่วนค่า pre-condition

จะพบว่า S นั้น weak กว่า Q
ขอบเขตของค่า invariant ใน Spost(
) มีค่าเท่ากับ Qpost
ส่วนหัวข้อถัดไปคือ advance matching ในงานวิจัยนี้ ผมขอไม่กล่าวถึงเนื่องจากวิธีนี้จะมุ่งไปที่ค่า coupling invariant ซึ่งเกินขอบเขตของงานวิจัยที่ข้าพเจ้าสนใจ โดยยังใช้วิธีการจับคู่เหมือนเดิมคือ แบ่งการจับคู่เป็น attribute matching และ method matching แต่จะสนใจไปที่ค่า coupling invariant
สรุปงานวิจัยนี้ และส่วนที่คาดว่าจะสามารถนำมาพัฒนาต่อ
- จะใช้คุณสมบัติขององค์ประกอบของคลาสใน object-oriented component ในการพิจารณาการจับคู่คือ attribute method การสืบทอดคลาส
- พิจารณาการจับคู่ในส่วน Specification matching (pre/post condition)เป็นสำคัญ
- ในส่วนการเลือกว่า method ไหนต้องจับคู่กับ method อะไรไม่มีรายละเอียดเลยเพียงบอกแต่ว่า เลือก method นี้มาจับคู่กับ Method นี้เท่านั้น
การจับคู่ระหว่าง Query class กับ Library class
- Q จับคู่กับ S ได้ถ้าปรับเปลี่ยนค่าใน S แล้วเมื่อแทนที่ผลการดำเนินการแล้วให้ผลเหมือน attribute และ method ของ Q
- ในกรณีที่มีการสืบทอด method จะทำการจับคู่โดยเปรียบเทียบ method ใน childclass แต่ไม่เปรียบเทียบกับ method ในคลาสแม่(คือไม่ต้องปรับเปลี่ยนใน class แม่สนใจแต่ใน class ลูกแทนโดยดูที่ attribute ที่สืบทอดจากคลาสแม่ และ method ของคลาสลูก) เช่น 2DVector Library class ที่สืบทอดมาจาก 2Tuple library class ทำการจับคู่กับ MousePointer Query เราต้องการดูว่า Q ที่เข้ามาจะจับคู่กับ S ที่มีอยู่ในระบบได้หรือไม่ โดย S นี้เป็นคลาสที่สืบทอดมาจาก Sหลัก เราจะสามารถปรับเปลี่ยนค่าใน 2DVector เพื่อนำไปทดสอบค่า pre-post condition ดังนี้
- ให้
จากคุณลักษณะของคลาสใน Object-oriented Components จะแบ่งเป็น attribute และ method ดังนั้นเราจะจับคู่ใน 2 ส่วนดังนี้
Attribute Matching
เราจะจับคู่ Q กับ S ที่อยู่ในรูปการปรับเปลี่ยน
Method matching
Method Q จะจับคู่กับ Method S โดยพิจารณาจากลักษณะเด่น สภาพบริบทที่สอดคล้องกัน โดยงานวิจัยนี้นำทฤษฎีการจับคู่บนเทคนิคพื้นฐาน function specification matching techniques ของ Zaremski and Wing(A.Moormann Zaremski and J.M.Wing : Specification matching of software components,ACM Transactions on Software Engineering,October 1997) โดยแบ่งเป็น exact match กับ plug-in match ในรูปของ pre/post condition ดังนี้
Definition1 :exact match
จะพบว่า S นั้น weak กว่า Q
ส่วนหัวข้อถัดไปคือ advance matching ในงานวิจัยนี้ ผมขอไม่กล่าวถึงเนื่องจากวิธีนี้จะมุ่งไปที่ค่า coupling invariant ซึ่งเกินขอบเขตของงานวิจัยที่ข้าพเจ้าสนใจ โดยยังใช้วิธีการจับคู่เหมือนเดิมคือ แบ่งการจับคู่เป็น attribute matching และ method matching แต่จะสนใจไปที่ค่า coupling invariant
สรุปงานวิจัยนี้ และส่วนที่คาดว่าจะสามารถนำมาพัฒนาต่อ
- จะใช้คุณสมบัติขององค์ประกอบของคลาสใน object-oriented component ในการพิจารณาการจับคู่คือ attribute method การสืบทอดคลาส
- พิจารณาการจับคู่ในส่วน Specification matching (pre/post condition)เป็นสำคัญ
- ในส่วนการเลือกว่า method ไหนต้องจับคู่กับ method อะไรไม่มีรายละเอียดเลยเพียงบอกแต่ว่า เลือก method นี้มาจับคู่กับ Method นี้เท่านั้น