แนวคิดในการออกแบบ OBJECT-ORIENTED ด้วยเทคนิค Composition
มองทุกสิ่งเป็น object แต่ละ object ที่มีการทำงานเฉพาะตัว ไม่มีความสัมพันธ์กันในลักษณะสืบทอดคุณสมบัติ
object อื่นๆ ที่ประกอบกันขึ้นเป้น class หนึ่ง class จะมีความสัมพันธ์กันในลักษณะที่แต่ละ object ย่อยนี้ทำงานร่วมกัน เพื่อให้ class นั้นมีการทำงานที่สมบูรณ์
การออกแบบจะมีลักษณะเป็นแบบ Top to Down คือมองจากด้านบนก่อน แล้วจึงแตกรายละเอียดออกเป็น object อื่นๆ ลงมาเป็นลำดับชั้น ในรูปแบบของต้นไม้
ความสัมพันธ์ระหว่าง object มีรูปแบบเป็น has a relationship
UML กับ Composition
การแทนที่สัญลักษณ์ในการออกแบบด้วยวิธี Composition แทนรูปแบบของ has a relationship หรือ การที่ object หนึ่งประกอบด้วยอีก object หนึ่ง เช่น a Car has a SteeringWheel
ตัวอย่างการออกแบบ OBJECT-ORIENTED ด้วยเทคนิคการ Composition
1. หาความต้องการของระบบ
ระบบรถยนต์ ต้องมีส่วนประกอบต่างๆ เพื่อให้รถทำงานได้ นอกจากนี้ก็ควรมีสิ่งอำนวยความสะดวกภายในรถด้วย เช่น วิทยุ เป็นต้น
2. หา class ของระบบ
Car class
แนวคิดขั้นที1 เริ่มคิดจาก Car class ซึ่งเป็น Superclass เป็นหลักอันดับแรก ต่อจากนั้นให้มองจากTop to Down จะพบว่า Car class ควรประกอบจาก 3 class คือ engine class, stereo class และ door class
Engine class
Stereo class
Door class
แนวคิดขั้นที่2 มองที่ engine class เป็นหลักจะพบว่า engine class ประกอบขึ้นจาก pistons class และ sparkPlugs class ถ้ามองที่ stereo class เป็นหลักจะพบว่าStereo class ประกอบขึ้นจาก radio class และ cassette class ถ้ามองที่ door class เป็นหลักจะพบว่าdoor class ประกอบขึ้นจาก handle class
Pistons class
SparkPlugs class
Radio class
Cassette class
Handle class
แนวคิดขั้นที่สาม มองที่ radio class เป็นหลักจะพบว่า radio class ประกอบขึ้นจาก tuner class
Tuner class
3.พิจารณาพฤติกรรมของแต่ละ class
Car class
รถจะสามารถเคลื่อนที่ได้ ต้องประกอบด้วยส่วนประกอบของ object อื่นภายใน
Engine class
สร้างกำลังการขับเคลื่อนให้กับรถ
Stereo class
สร้างความบันเทิงให้กับรถ
Door class
สร้างความปลอดภัยในการขับขี่ให้กับรถ
4Pistons class
ทำหน้าที่สูบถ่ายน้ำมันรถ
4SparkPlugs class
ทำหน้าที่ start เครื่องรถยนต์
4Radio class
ทำหน้าที่จับสัญญาณคลื่นวิทยุ
4Cassette class
ทำหน้าที่อ่านเทป
4Handle class
ทำหน้าที่เปิด ปิดประตูรถ
- Tuner
ทำหน้าที่เปิด ปิดเสียงวิทยุ
4. สร้างความสัมพันธ์ระหว่าง class
Car class
รถ จะมี เครื่องยนต์ เป็นส่วนประกอบ
รถ จะมี stereo เป็นส่วนประกอบ
รถ จะมี ประตู เป็นส่วนประกอบ
● Engine class
● Stereo class
ภายใน stereo จะมี วิทยุ เป็นส่วนประกอบ
ภายใน stereo จะมี เครื่องเล่นเทป เป็นส่วนประกอบ
● Door class
ภายใน ประตู จะมี ที่เปิดประตู เป็นส่วนประกอบ
4 Pistons class
4 SparkPlugs class
4 Radio class
ภายใน วิทยุ จะมี ที่ปรับระดับเสียงเป็นส่วนประกอบ
4 Cassette class
4 Handle class
- Tuner class
- ฯลฯ
ข้อดีของการออกแบบ OBJECT-ORIENTED ด้วยเทคนิคการ Composition
1.ไม่เกิดปัญหาต่อการ Encapsulate
เนื่องจาก class แต่ละ class ยังคงความเป็นอิสระต่อกัน แม้ว่าจะทำการเปลี่ยนแปลงแก้ไข object ใด object หนึ่ง ก็จะไม่มีผลกระทบต่อ object ที่อยู่ภายนอก เป็นไปตามกฎของการ Encapsulate
2. สามารถใช้สร้าง class ที่มีความซับซ้อนได้มากว่าวิธี Inheritance
เนื่องจากวิธีการของ Inheritance การกระทำของ object ที่เป็น Superclass จะส่งผลกระทบต่อ Subclass อย่างหลีกเลี่ยงไม่ได้ ดังนั้นในการ เปลี่ยนแปลงหรือแก้ไขใดๆ หรือในการออกแบบงานที่ซับซ้อน ย่อมจะมีโอกาสที่จะกระทบต่อความมั่นคงของระบบ ในลักษณะของผลกระทบที่เป็นลูกโซ่ต่อเนื่องไป ส่วนวิธี Composition จะไม่สร้างความสัมพันธ์ในลักษณะนี้ และแต่ละ object ก็สามารถที่จะทำงานได้เป็นอิสระต่อกัน การแก้ไขใดๆ จึงไม่ส่งผลกระทบต่อไปยัง object อื่นๆ
ตัวอย่างการใช้เทคนิคการ Inheritance ที่ผิดวิธี
การออกแบบ Graphic User Inherface (GUI) ของระบบปฏิบัติการ Window จากรูปร่างโดยทั่วไปแล้วจะเห็นได้ว่า รูปแบบของ GUI มีส่วนสี่เหลี่ยมเป็นจำนวนมาก ดังนั้นถ้าทำการสร้าง GUI โดยใช้เทคนิคการ Inheritance โดยการสืบทอดลักษณะของความเป็นสี่เหลี่ยม มาสร้างเป็น GUI
menubar และ statusbar ซึ่งลักษณะเป็นสี่เหลี่ยม เมื่อจะใช้การสืบทอดลักษณะ inheritance นี้ โดยในทุกครั้งที่ทำการเรียกใช้ menubar จะต้องทำการระบุขนาดความกว้าง ความยาวของลักษณะสี่เหลี่ยมที่ต้องการใช้ด้วยทุกครั้ง และในการสร้าง window ขึ้นมาหนึ่งหน้าต่างนั้นจะใช้สี่ เหลี่ยมจำนวนมาก ทำให้เกิดความยุ่งยากในการใช้งาน
จะพบว่า GUI ของ Window หนึ่งๆ ไม่ได้ประกอบไปด้วยสี่เหลี่ยมขนาดเท่ากัน รูปร่างของสี่เหลี่ยมในแต่ละตำแหน่งก็จะไม่เหมือนกัน ดังนั้นการใช้วิธีการ Inheritance มาใช้ด้วยวิธีการนี้ถือว่าเป็นวิธีการที่ไม่ถูกต้องนัก แต่ถ้าเปลี่ยนมาใช้วิธีการ Composition
ดังนั้นผู้ทำการออกแบบระบบควรจำกัดขอบเขตระบบงานให้ดี ไม่ว่าจะเป็นการออกแบบด้วยเทคนิค Inheritance หรือเทคนิค Composition ก็ควรคำนึงถึงหลักการนี้เป็นสำคัญ เนื่องจากระบบงานที่ดีนั้นไม่จำเป็นว่าจะต้องเป็นระบบที่มีความละเอียดและครอบคลุมในทุกๆ ส่วนทั้งหมดของงาน เพราะถ้าเป็นเช่นนั้นแล้ว นอกจากจะทำให้มีความกว้างใหญ่มากจนเกินขอบเขตแล้ว ยังส่งผลให้เกิดความลำบาก ในการแก้ไขหรือดูแลรักษาอีกด้วย เปรียบได้กับต้นไม้ที่แตกกิ่งก้านสาขาออกไปใหญ่โตมากย่อมเสี่ยงต่อการทานน้ำหนักตนเองไม่ไหวและสามารถล้มลงมาได้อย่างง่ายๆ
Polymorphism
Polymorphism หมายถึง การที่ object แต่ละ object สามารถตอบสนองต่อ message ที่ส่งมายัง object นั้นๆ ได้ด้วยตนเอง จะเห็นได้อย่างชัดเจนใบลักษณะของ Inheritance ซึ่งแต่ละ subclass จะสืบทอด ลักษณะของ Interface มาจาก superclass แต่ภายใน method ของแต่ละ subclass นั้นจะบรรจุลักษณะของ method ตนเอง ทำให้การตอบสนองต่อ message เดียวกันต่างกันไป
Coppyright 2004 By Webmaster All Right Reserved Comments