แนวคิดในการออกแบบ 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 เดียวกันต่างกันไป

                                                                                                                                                                 แบบทดสอบ

                                                                                                                                                          <<<back>>>


                                                         Coppyright 2004 By Webmaster All Right Reserved Comments

 

Hosted by www.Geocities.ws

1