บทที่4. การวิเคราะห์และออกแบบงานด้วย Object-Oriented

    หลักการในการออกแบบ

    การออกแบบเป็นขั้นตอนตามลำดับ โดยจะเน้นที่การยกตัวอย่างการออกแบบจริงๆ จากหลักการในการออกแบบ 5 ข้อต่อไปนี้

     1.หาข้อมูล และความต้องการของระบบ

        อันดับแรกของการออกแบบ คือ อ่านโจทย์ของระบบที่ต้องการการออกแบบและให้ทำความเข้าใจตามหลักความจริงในการทำงานของระบบ   ยกตัวอย่างเช่น โทรศัพท์มือถือ ต้องมองได้ว่า โทรศัพท์นี้มีองค์ประกอบภายนอกอะไรบ้าง เช่น โทรออกได้ สามารถรับสายได้ มีปุ่มกด 12 ปุ่มหรือมาก กว่า มีสัญญาณไฟติดเมื่อยกหูโทรศัพท์ สามารถตั้งระบบเสียงต่างๆ ได้ สามารถรับสัญญาณเสียงได้ ใช้ได้โดยคน เป็นต้น

      2.แยก class ออกจากข้อมูลที่ได้มา

            จากข้อมูลที่วิเคราะห์ได้ในข้อ 1 ให้แยก class ออกมาจากข้อมูลนั้นให้ได้ โดย class นั้นเปรียบได้กับคำนาม (Noun) ซึ่งคำนามเป็นได้ทั้ง คน สิ่งของ สถานที่ ฯลฯ เช่น จากตัวอย่างในข้อ 1 สามารถหา class ออกมาได้คือโทรศัพท์ คนแต่โดยหลักความจริงแล้วระบบที่มีขนาดใหญ่มักจะมี class มากมายซับซ้อนที่หาได้จากข้อมูล ดังนั้นควรพิจารณาเฉพาะ class ที่ จำเป็นเท่านั้น class ใดที่ซ้ำซ้อนกันให้นำมารวมกันเป็น   class เดียว

     3.เก็บข้อมูลพฤติกรรมของ class

      ให้แจกแจงรายละเอียดของ class ที่เลือกมาว่า สามารถทำอะไรได้บ้างในระบบ เพื่อให้ทราบถึงความสำคัญของ class นั้นๆ ที่จะส่งผลต่อการทำงานของระบบ เพื่อให้ทราบถึงหน้าที่การทำงานของ class นั้น ซึ่งบางทีอาจบอกได้ว่ามีความ   สัมพันธ์กับ class อื่นอย่างไร เช่น class โทรศัพท์มือถือถูกกดเมื่อมีผู้ใช้ ร้องเรียกเมื่อมีสายเข้าตอบรับได้เองอัตโนมัติ เป็นต้น

      4.สร้างความสัมพันธ์ระหว่าง class

          ในการสร้างความสัมพันธ์ระหว่าง class ขึ้นมา ซึ่งทั้งนี้ในการสร้างความสัมพันธ์ระหว่าง class ต้องประกอบด้วย การส่ง message ซึ่งทำให้ได้ข้อมูลใยส่วนของ attribute และ method เพิ่มขึ้นมา โดยความสัมพันธ์เหล่านี้ และนำไปสร้างโปรแกรมต่อไปได้ง่ายขึ้น เช่น ความสัมพันธ์ระหว่าง คน  กับโทรศัพท์มือถือ คือ โทรศัพท์ส่งเสียงเรียงมายังคน คนรับโทรศัพท์ คนส่งสัญญาณเสียงไปยังโทรศัพท์ เป็นต้น

      5.สร้าง class model

       นำ class ต่างๆ มาสร้างภาพความสัมพันธ์ที่สมบูรณ์ ตามหลักการออกแบบทาง Object-Orientedด้วยแผนภาพ UML ซึ่งทำให้สามารถเข้าใจได้ง่ายทั้ง นักออกแบบ และโปรแกรมเมอร์

    จากหลักการทั้ง 5 ข้อนี้ สามารถนำมาใช้ในการออกแบบระบบต่างๆ ในแบบ Object-Orientedได้ แต่สิ่งที่ต้องจำไว้อยู่เสมอเมื่อต้องการเกี่ยวข้องกับระบบObject-Orientedคือจะต้องมองทุกองค์ประกอบภายในระบบให้เป็น object ต่อจากนี้ไปจะเป็นกรณีตัวอย่างในการออกแบบระบบงานด้วย Object-Oriented

      กรณีตัวอย่างเรื่อง “เกม Blackjack

         การออกแบบระบบการทำงานของเกม Blackjack นั้น เริ่มแรกจะต้องทราบ กฎ กติกา ในการเล่นอย่างชัดเจนเสียก่อน เพื่อนำข้อมูลเหล่านี้มาวิเคราะห์ และสรุปรวบรวมหา class ของโครงสร้างภายในระบบต่อไป

      หาข้อมูล และองค์ประกอบในความต้องการของระบบ

การเล่นเกม Blackjack นั้น องค์ประกอบที่นำมาใช้ในการเล่น ได้แก่ ไพ่อย่างน้อยที่สุด1สำรับ และจำนวนผู้เล่นที่มากกว่า 1 คนในการเล่นแต่ละครั้ง โดยมีผู้ที่เป็นเจ้ามือ (เจ้าบ้าน) และผู้เล่นทั้งหมดทำการแข่งขันกันเพื่อหาผู้ชนะ

   เกมนี้มีเป้าหมายคือ ต้องได้ผลรวมทั้งหมดในมือเท่ากับ 21 แต้ม หรือให้เข้าใกล้ 21 แต้มให้มากที่สุด แต่ห้ามมากดมากกว่า 21 แต้ม ซึ่งถ้าผู้เล่น  คนใดมีผลรวมของแต้มในมือเกิน 21 แต้ม จะถือว่าผู้นั้นแพ้และต้องออกจากเกม หรือ เริ่มต้นการเล่นใหม่ โดยผู้เล่นแต่ละคนจะได้รับการแจก ไพ่เริ่มแรกคนละ 2 ใบ และถ้าผู้เล่นคนใดได้ผลรวมของไพ่ ใบแรกนี้เท่ากับ 21  แต้มพอดี  ให้ผู้เล่นคนนั้นพูดว่า Blackjack เจ้ามือ ทำหน้าที่แจกไพ่ให้กับผู้เล่นคนอื่น ๆ เจ้ามือจะต้องแสดงจำนวนไพ่ในมือ พร้อมทั้งคำนวณแต้มที่ได้ต้องทราบ จำนวนไพ่ในมือตัวเอง เป็นคนกำหนดตัวผู้ชนะ และเป็นผู้ควบคุมเกมในการเริ่มเกมใหม่ หรือยุติการเล่นของผู้แพ้ บนไพ่ใบหนึ่งๆ จะมีหน้าไพ่ที่แสดงแต้มบนไพ่ และในการเล่นเกมนี้ ไพ่ทั้ง หมดควรจะมาจากสำรับเดียวกันทั้งนี้จำนวนไพ่ที่เหลือจากการแจกจ่ายให้ผู้เล่น จะสามารถแสดงได้จากจำนวนไพ่ในสำรับหักออกด้วยจำนวนไพ่ที่แจกจ่ายไป

  ตลอดการเล่นเกม  ผู้เล่นสามารถร้องขอไพ่จากสำรับไพ่ที่เหลือได้  ผู้เล่นจะต้องแสดงจำนวนไพ่บนมือ ต้องคำนวณแต้มไพ่ในมือ    พร้อมทั้งต้องทราบจำนวนไพ่ในมือตัวเอง และเมื่อเจ้ามือถามผู้เล่นว่าต้องการหยิบไพ่เพิ่มเติม หรือจบเกมการเล่น ผู้เล่นต้องตอบคำถามของเจ้ามือเสมอ

ไพ่แต่และใบจะมีแต้มแสดงอยู่บนด้านหน้า ยกเว้น A, Jack, Queen และ King โดย A หรือ Ace จะนับแต้มเป็น  1 หรือ 11  แล้วแต่การตกลงของสมาชิก ส่วน Jack, Queen, King นั้นจะนับแต้มเป็น 10

               กฎของเกมคือ ถ้าผลรวมบนไพ่ทั้งหมดของผู้เล่นมีแต้มใกล้ 21 และมีค่ามากกว่าผลรวมบนไพ่ทั้งหมดของเจ้ามือ แสดงว่าเป็นผู้ชนะใน  เกมนั้นและได้รางวัลเท่ากับเดิมพันที่วางลงกองกลาง หรือถ้าผู้ชนะเคยชนะพร้อมทั้งได้ Blackjack และชนะ 3 ใน 5 ครั้ง โดยที่เจ้ามือไม่เคยได้ Blackjack ผู้เล่นจะได้รางวัลกองกลางทั้งหมด (Blackjack หมายถึง ได้แต้มเท่ากับ 21 ภายในไพ่ 2 ใบแรก) แต่ถ้าผลรวมบนไพ่ทั้งหมดของผู้เล่นมีแต้มเกิน 21 แล้วก็จะสูญเสียเดิมพันไป นอกจากนี้ผู้ที่มีจำนวนไพ่น้อยกว่าและได้แต้มใกล้ 21 ย่อมดีกว่าจำนวนไพ่มากกว่าและได้แต้มเท่ากันถ้าผู้เล่นและเจ้ามือมีแต้มเท่ากันโดยแต้มที่ได้นั้นมากกว่าหรือเท่ากับ 17 แล้ว  ให้พิจารณาว่าเสมอกันและให้ผู้เล่นเป็นผู้ได้รางวัล  จากข้อมูลข้างต้นจะสามารถนำไปวิเคราะห์เพื่อหา class ที่เป็นองค์ประกอบสำคัญภายในระบบ Object-Orientedเนื่องจาก object คือหัวใจสำคัญของObject-Orientedในการออกแบบระบบการทำงานของเกม Blackjack

  แยก class ของจากข้อมูลเกม Blackjack

          โดยทั่วๆ ไปแล้ว class นั้นเปรียบได้กับคำนาม หรือ noun เช่น class ของ คน, สิ่งของ, สถานที่ ฯลฯ ดังนั้นการหา class ของเกม Blackjack นั้นจึงหาได้จากข้อมูลที่นำมาแยกเอาเฉพาะคำนามออกมา ซึ่งโดยปกติแล้วในการหาคำนามจากข้อมูลข้างต้นของแต่ละคน  จะได้ออกมาไม่เหมือนกัน บางคนอาจจะหาได้มาก หรือน้อย แต่สุดท้าย class ที่หามาได้นั้นจะต้องนำมาตัดทอนให้ได้เฉพาะส่วนที่สำคัญ และไม่ซ้ำซ้อนกันเท่านั้น ซึ่งผลสุดท้ายที่ออกมามักจะทำให้ได้ class ที่ตรงกันจากข้อมูลเกม Blackjack สามารถหา class จากคำนามออกมาได้ดังราบชื่อต่อไปนี้

-เกม -Blackjack

-เจ้ามือ-เจ้าบ้าน-ผู้เล่นทั้งหมด-ผู้เล่น (คนเดียว)

-ไพ่ทั้งหมด-ไพ่ (ใบเดียว)-สำรับไพ่-มือ-แต้มบนไพ่-การร้องขอ

-ผู้ชนะ-A หรือ Ace-หน้าไพ่-King-Queen-เดิมพัน

 จากรายชื่อ class ทั้งหมดที่ได้มาจะต้องนำมาตัดกลุ่มที่มีการกล่าวซ้ำออกไป เพื่อให้ได้ class ที่แท้จริง ดังนั้นในขั้นตอนที่กล่าวมาข้างต้นนี้ ถ้าแต่ละคนสามารถหารายชื่อ class ออกมาไม่เหมือนกันหรือไม่เท่ากัน ก็ไม่ใช่เรื่องแปลก เนื่องจากเมื่อนำ class ทั้งหมดมาผ่านการตัดส่วนที่ซ้ำออกตามกระบวนต่อไปนี้ ก็จะได้ class ที่มีความใกล้เคียงกันมากขึ้น (ชื่อ class ที่มีเส้นขีดทับ คือ class ที่ได้รับการตัดทิ้งเพื่อลดความซ้ำซ้อน)

เกม  Blackjack คือชื่อของเกม ดังนั้นจึงสามารถรวมเป็นคำนามคำเดียวได้ว่า เกม

เจ้ามือ ในการเล่นเกมจะไม่สามารถขาดเจ้ามือได้ เนื่องจากเจ้ามือจะเกี่ยวข้องกับบุคคลทุกคนที่ เล่นเกม ซึ่งจริงๆ แล้วเจ้ามือก็คือผู้เล่น คนหนึ่ง แต่ class เจ้ามือจะต้องมี attribute เพิ่มเติมขึ้นมาจาก class ผู้เล่นมากพอควร ดังนั้นจึงควรเก็บ class เจ้ามือไว้ ในการเล่นควรมีผู้เล่นหลายๆ คน แต่ในการสร้าง classใด ๆ จะแทนที่ด้วยสิ่ง ๆ หนึ่ง เท่านั้นดังนั้นในที่นี้จะแทนด้วย class

ผู้เล่นคนเดียว เก็บ class นี้ไว้ จากเหตุผลข้อก่อนหน้านี้ สำหรับ class นี้จะใช้เหตุผลเดียวกับ class ผู้เล่น คือในการเล่นเกมจำเป็นต้องมีไพ่หลายๆ ใบแต่ในการจัด    สร้าง class จะแทนที่ด้วยไพ่เพียงใบเดียว ซึ่งไพ่ใบอื่น ๆ ที่มีลักษณะเหมือนกันสามารถใช้การ inheritance ได้ ถ้าต้องการ

ไพ่ (ใบเดียว) เก็บ class นี้ไว้ จากเหตุผลข้อที่กล่าวมาแล้ว

สำรับไพ่  การกระทำหลายๆ อย่างในเกมจะเกี่ยวข้องกับสำรับไพ่ เช่น การสับไพ่ การแจกไพ่ เป็นต้น ดังนั้น สำรับไพ่จึงเป็น class ที่จำเป็นต่อเกม

มือ   ผู้เล่นแต่ละคนในเกมนี้ จะกำหนดให้มีเพียง มือ เดียว (หมายถึง เล่นในตำแหน่งของคนเพียงคน   เดียว) ซึ่งถ้าเป็นเช่นนี้แล้วก็ ไม่จำเป็นจะต้องกำหนดให้เป็น class ก็ได้ แต่ในทางปฏิบัติเกมนี้สามารถให้ผู้   เล่นหนึ่งคนเล่นได้หลายมือ รวมทั้งในเกมอื่น ๆ ก็มีกฎอนุญาตให้ผู้เล่นๆ ได้หลายมือได้เช่นกัน และตามหลักการออกแบบที่ดีแล้ว ก็ควรสร้าง class ที่สามารถนำมาใช้ซ้ำ(reuse) ได้ใน ดังนั้นจึงควรสร้าง class นี้

แต้มบนไพ่แต้มบนไพ่ นี้สามารถนำไปเป็น attribute ของ class ไพ่ ได้

ผู้ชนะ class ผู้ชนะ ซึ่งผู้ชนะก็เป็นผู้เล่นคนหนึ่ง ดังนั้นสามารถนำไปรวมกับ class ผู้เล่นได้

หน้าไพ หน้าไพ่ นี้ สามารถนำไปเป็น attributeของ class ไพ่ ได้

A หรือ Ace ค่า A นี้ สามารถนำไปเป็น attribute ของ class ไพ่ ได้

King ค่า King นี้ สามารถนำไปเป็น attribute ของ classไพ่ ได้

Queen ค่า Queen นี้ สามารถนำไปเป็น attribute ของ classไพ่ ได้

                                 

บทที่1  >>  บทที่2  >>  บทที่3  >>  บทที่4  >>  บทที่5  >>  บทที่6  >>  บทที่7  >>  TEST  >>  Main manu

              Page 1>>> Page 2 >>> Page 3 >>> Home                                                                    


                                             Coppyright 2004 By Webmaster All Right Reserved Comments

 

 

Hosted by www.Geocities.ws

1