วันจันทร์ที่ ๑๐ ธันวาคม พ.ศ. ๒๕๕๐

Design Pattern 4 กลยุทธ์วางแผนรบ ใน OO ยุทธภพ

หลายคนคงอาจจะก๊งๆๆ เอ๋อ ๆ กันอยู่ว่า อะไรครับ อะไรคะ คุณพี่ ช่วงนี้ไม่มีกระจิตกระใจจะทำอะไรนอกจาก Assignment ที่หิน ๆ ของแต่ละวิชา แล้วไหนจะวันสอบที่ใกล้เข้ามาอีก กลัวจะอ่านหนังสือไม่ทันจริ๊ง ๆๆๆ สู้ต่อไปครับ (บอกตัวเองด้วย เฮ้อๆๆๆ)

ว่ากันด้วยวิชาที่สุดแสนจะกังวลของหลาย ๆ คน คือ OO เพราะแม้ว่ามันจะพยายามบอกว่า represent real world แต่ให้ตายเหอะมันเข้าใจย๊ากยาก ไม่เห็นจะเหมือนชีวิตจริงตรงไหน อะ เฮียนอกเรื่องไปไกล วกเข้าเรื่องตรงประเด็น เลยดีกว่า วันนี้หลังจากเอาไฟล์บรรยายเสียงที่ ชาย อัดไว้ให้ทุกครั้งมานั่งเปิด ก็เลยคิดว่าจะสรุปแบบไม่ได้คิดเอง ตัดมาเฉพาะเรื่อง Design Pattern ว่าแต่ว่า เฮียกำลังสอนตัดเย็บเหรอ กำลังสอนดีไซน์ แพทเทิร์นเสื้อผ้าเหรอ ... สาธุใครคิดแบบนี้ขอแช่งให้สอบผ่าน แบบผ่านไปเลย ไม่ต้องเจอกันอีก

แล้วดีไซน์ แพทเทิร์น มันคืออะไร?
จริง ๆ มันก็คือการออกแบบคำสั่ง อะอะ หยุดเลย อย่าเพิ่งไปคิดถึงคำสั่งโปรแกรม คือ มันก็คือการออกแบบทางเดิน วางแผน การคิดอย่างมีระบบ ว่าจะใช้ใคร (คลาส) ทำอะไร จะเอาข้อมูลมาจาก (คลาส)ไหน โดยที่มันก็มีหลักการพอเป็นแนวทาง เออ ต้องบอกก่อนนะว่า เรื่อง Design Pattern เขาพูดหลังจากที่เราได้ Class Diagram มาแล้ว ที่มัน (คลาส) โยงกันไปโยงกันมา มันก็คือความสัมพันธ์ คราวนี้หละพอมัน (คลาส) มีความสัมพันธ์กัน ... อย่าลืมนะ ว่าคลาสมันมีชีวิตจิตใจ คิดได้ แสดงพฤติกรรมได้ แถมสร้างลูกหลาน instance มาเพล่นพล่านได้ด้วยนะ ..เปรียบได้ดั่งคนเรานี่หละ... ก็ต้องอาศัยคัมภีร์พิชัยสงคราม ขงเบ้ง คอยเป็นไกด์ว่าจะใช้ขุนพล (คลาส) ตัวไหน ให้ทำอะไร งานถึงจะบรรลุตามเป้าหมายในแต่ละงาน (Trigger) อย่างแยบยล เพื่อบรรลุภารกิจ (Use Case) ที่ได้รับมอบหมาย

เอาไปใช้ทำอะไรหละเจ้า Design Pattern?
ตอบสั้น ๆ ถ้าสอบ ก็บอกว่า เอาไว้เป็นไกด์ช่วยเชียน Interaction Diagram หือ อะไรอะ รู้จักแต่ Sequence Diagrm อือใครตอบแบบนี้ แสดงว่าโดดบ่อย Interaction Diagram = Sequence Diagram + Communication Diagram ครับกระผม ถ้าไม่รู้จักศัตรูและขุนพลแห่งตน (คลาสทั้งหลายไง) และกลยุทธ์แห่งศึกสงคราม (ดีไซน์แพทเทิร์นไง) อย่าริอาจวางแผนรบ (อย่าเขียน Sequence Diagramไง)

4 กลยุทธ์วางแผนรบ ใน OO ยุทธภพ
Design Pattern 4 กลยุทธ์วางแผนรบ ใน OO ยุทธภพ แห่งสำนัก BSD ณ หุบเขา IT Studio ยอดที่ 9
อาจารย์ข้ากล่าวว่า จักทำการใหญ่ ในสมรภูมิแห่ง OO ยุทธภพ ที่เต็มไปด้วย Class มากมายนั้น เจ้าต้องรู้จักมันให้ลึกซึ้งถึงสายสัมพันธ์ (association) ที่ Class เหล่านั้นมีต่อกันให้ถ่องแท้เสียก่อน แล้วเจ้าจงเลือกใช้ กลยุทธ์แห่งข้าไปใช้ เจ้าจะได้รับผลแห่งชัยชนะที่เจ้าพึงประสงค์ในที่สุด

กลยุทธ์ที่ 1 : ผู้สร้าง (Creator)
เจ้าจงจำว่าในยุทธภพแห่ง OO คลาสบางตัว มันมิอาจเกิดขึ้นเองได้ มันต้องอาศัย คลาส ที่เหนือกว่า หรือบางทีมันก็เป็นบริวาร (is a part) ของคลาสหลัก ที่มีบุญคุณกันอย่างเหนียวแน่น บางทีมันก็เป็นทายาทกัน บางทีมันก็อุปการะกัน บางทีก็สามีภรรยากัน คลาสเยี่ยงนี้เจ้าจักจำไว้ เจ้าคลาสลูกๆ หรือคลาสบริวารเหล่านี้ เจ้ามิต้องเสียเวลาไปเจรจากับมัน จงเข้าหาคลาสพ่อและแม่ หรือคลาสผู้มีอุปการะคุณแห่งมันก็พอ จักให้มันสั่งการกันเอง

Sales --creates--> Sale line items

กลยุทธ์ที่ 2: ม้าเร็ว (Informaion Expert)
คลาส ในยุทธภพ OO บางคลาสแม้จะไม่ได้มีความสัมพันธ์แนบแน่นที่มีบุญคุณต่อกัน แต่ก็เสมือนมิตรแห่งกันที่ไปมาหาสู่กันเป็นประจำ เข้านอกออกในคุ้นเคยกันดีอยู่ เจ้ามิต้องคิดเสียเวลาไปติดต่อทุกคลาส เจ้าจงยืมม้าเร็วในคลาสที่เจ้ารู้จัก ให้อาสาไปนำสิ่งที่ต้องการจากคลาสแห่งเพื่อนของเขาที่เจ้ามิคุ้นเคยมาให้เจ้าเถิด มิจักต้องเสียเวลาแห่งการเจรจา เพื่อนย่อมเข้าใจเพื่อนของเขาได้ดีกว่าคนนอก จงใช้เพื่อนไปหาเพื่อน อย่าจักใช้คนนอกที่เขาไม่คุ้นเคยไปเจรจาเลย
Sales --สร้าง--> Sale line items <-- อธิบาย-- Product Desc.

คกลยุทธ์ที่ 3: สมานฉันท์ (Low Coupling)
คลาส ในยุทธภพ OO จักมีธรรมเนียมปฏิบัติต่อกันอยู่อย่างเคร่งครัด แม้ความสัมพันธ์แห่งกันจะสามารถสร้างใหม่ได้ แต่กระนั้น เจ้าจงพิจารณาดูธรรมเนียมปฏิบัติทั่วไปที่เขานิยมให้ถ่องแท้ แล้วเดินตามธรรมเนียมปฏิบัตินิยมนั้น อย่าริคิดสร้างธรรมเนียมปฏิบัติของเจ้าเอง แม้นเจ้าจักทำได้ก็จะเป็นการสร้างความวุ่นวายในยุทธภพแห่ง OO ด้วยเช่นกัน


Sales -- สร้าง --> Payment
Register --สร้าง --> Payment
(ทำได้แต่ไม่ Low coupling เพราะ register รองรับ connect เยอะมากอยู่แล้ว)

กลยุทธ์ที่ 4: พระราชา (Controller)
แคว้นทุกแคว้นย่อมมีปกครองด้วยพระราชา คลาสในยุทธภพ OO ก็เช่นกัน หากเจ้าพึงประสงค์จักเข้าถึงทุกคลาสแล้ว เจ้าจงเข้าหาพระราชาผู้ปกครองแคว้นแห่งคลาสนั้นเสียก่อน หากแคว้นแห่งคลาสเหล่านั้น มิได้มีคลาสใดเป็นผู้ปกครอง เจ้าจงตั้งตนเป็นพระราชา รวบรวม ปกครองสมานฉันท์เอาคลาสเหล่านั้นเสีย


POS, Register, CarRentalSystem etc.

พิชัยยุทธ์มิอาจจักเป็นประโยชน์ได้ หากไม่เคยล่วงรู้การเอาไปใช้ อาจารย์หญิงแนะนำว่า หากเจ้าเลือกใช้กลยุทธ์ทั้งสี่นี้ จะเข้าไปตีแคว้นใด เจ้าจงเลือกที่จะมองพระราชาเสียก่อน (Controler) แล้วมุ่งไปที่คลาสที่เป็นครอบครัว (Creator) เลือกดูคลาสที่เป็นเพื่อนกันเพื่อใช้ม้าเร็ว (Information Expert) แล้วจงพิจารณาเอาทางที่ง่าย และสับสนน้อยที่สุด (Low Coupling) ตามลำดับ เจ้าจักได้รับชัยชนะในการรับมือกับคลาสในยุทธภพ OO


OO in Real World พอหรือยังครับ ...?
แค่อยากให้อ่านสนุก ๆ แบบให้เข้าใจธรรมชาติของ OO ในแบบชีวิตจริงครับ ส่วนเรื่องของรายละเอียดทีถูกต้องตามหลักวิชาการ หาอ่านได้จากในเอกสาร และตำราทั่วไป มีความคิดเห็นอย่างไร แนะนำทิ้งกันไว้ได้ครับยินดีน้อมรับทุกคำแนะนำครับ

ไม่มีความคิดเห็น: