บทที่ 7 การออกแบบซอฟต์แวร์
วัตถุประสงค์ • • • • •
เพื่อทำควำมรู้จักกับกำรออกแบบซอฟต์แวร์ เพื่อให้เรียนรู้ปัจจัยที่ทำให้ซอฟต์แวร์มคี ุณภำพ เพื่อให้เรียนรู้หลักกำรออกแบบซอฟแวร์ เพื่อหลักกำรออกแบบเชิงกระบวนคำสั่ง เพื่อให้เรียนรู้แบบจำลองกำรออกแบบในรูปแบบต่ำง ๆ
บทนา การออกแบบซอฟต์แวร์ เป็นขั้นตอนที่ทำหลังจำกขั้นตอนของกำรวิเครำะห์ซอฟแวร์ ซึ่งกำร ออกแบบซอฟต์แวร์หมำยถึง • กระบวนกำรกำหนดสถำปัตยกรรม • ส่วนประกอบ • ส่วนต่อประสำน • และด้ำนอื่น ๆ ผลลัพธ์ที่ได้จากการออกแบบซอฟต์แวร์ คือ แบบจาลองการออกแบบ เพื่อจะนำไปใช้สำหรับ • ขั้นตอนของกำรเขียนโปรแกรม • กำรทดสอบซอฟต์แวร์ • กำรบำรุงรักษำซอฟต์แวร์
บทนา การออกแบบซอฟต์แวร์ที่ดี เพื่อให้ได้ • ซอฟต์แวร์ที่มีคุณภำพ • มีควำมยืดหยุ่น • ควำมซับซ้อนต่ำ • จัดกำรง่ำย
• • • •
ขยำยตัวง่ำย เคลื่อนย้ำยง่ำย บำรุงรักษำง่ำย สำมำรถนำกลับมำใช้ใหม่ได้
แนวทางการออกแบบซอฟต์แวร์ กำรออกแบบซอฟต์แวร์ คือกำรนำแบบจำลองกำรวิเครำะห์ ข้อกำหนดกระบวนกำร และ ต้นแบบมำกำหนดโครงสร้ำงของซอฟต์แวร์พร้อมทั้งกำหนดรำยละเอียดโครงสร้ำงภำยในของ ซอฟต์แวร์ เพื่อนำไปใช้สำหรับขั้นตอนกำรเขียนโปรแกรมและกำรทดสอบซอฟต์แวร์
Analysis Model Prototype
PSPEC Design
แนวทางการออกแบบซอฟต์แวร์ นักพัฒนาซอฟต์แวร์มีการออกแบบซอฟต์แวร์ที่ดี ง่ำยต่อกำรเขียนโปรแกรม
ง่ำยต่อกำรบำรุงรักษำซอฟต์แวร์
นักพัฒนาซอฟต์แวร์ขา้ มขั้นตอนของการออกแบบซอฟต์แวร์ ยำกต่อกำรทดสอบซอฟต์แวร์ ยำกต่อกำรเขียนโปรแกรม ยำกต่อกำรบำรุงรักษำซอฟต์แวร์
แนวทางการออกแบบซอฟต์แวร์
Maintenance
Test Implementation Design
แนวทางการออกแบบซอฟต์แวร์
Implementation
Without Design
การแปลงแบบจาลองการวิเคราะห์เป็นแบบจาลองการออกแบบ
แบบจาลองการวิเคราะห์ แบบจำลองกำรวิเครำะห์ ประกอบด้วย • แบบจาลองเชิงฉากบรรยาย (แผนภำพยูเคส แผนภำพกิจกรรม แผนภำพสวิมเลน)
• แบบจาลองข้อมูลและคลาส (แผนภำพควำมสัมพันธ์เอนทิตี้ แผนภำพคลำส และแผนภำพ Collaboration)
• แบบจาลองการไหล (แผนภำพกำรไหลของข้อมูล)
• แบบจาลองเชิงพฤติกรรม (แผนภำพสถำนะ และแผนภำพลำดับ)
แบบจาลองการวิเคราะห์นี้ จะใช้สร้างแบบจาลองการออกแบบ และนาไปใช้ในขั้นตอนของการออกแบบซอฟต์แวร์
แบบจาลองการวิเคราะห์ แบบจำลองกำรออกแบบ แบ่งเป็น 4 ประเภทได้แก่
กำรออกแบบข้อมูลหรือคลำส
กำรออกแบบเชิงสถำปัตยกรรม
กำรออกแบบส่วนต่อประสำน
กำรออกแบบระดับส่วนประกอบ
การออกแบบข้อมูลหรือคลาส
การออกแบบข้อมูลหรือคลาส (Data / Class Design) คือกำรออกแบบข้อมูลที่จะใช้ในระบบ หรือ กำรออกแบบคลำสลักษณะประจำ และควำมสัมพันธ์ ระหว่ำงคลำสต่ำง ๆ
การออกแบบเชิงสถาปัตยกรรม การออกแบบเชิงสถาปัตยกรรม (Architectural Design) คือ กำรแสดงให้ผู้ใช้มองเห็นถึงส่วนประกอบควำมสัมพันธ์ระหว่ำง ส่วนประกอบเชิงโครงสร้ำงของซอฟต์แวร์ และรูปแบบเชิงสถำปัตยกรรม ซึ่งนำมำจำกแบบจำลองกำรวิเครำะห์และข้อกำหนดของระบบ เพื่อรองรับควำมต้องกำรของผู้ใช้
การออกแบบส่วนต่อประสาน
การออกแบบส่วนต่อประสาน (Interface Design) คือ การออกแบบหน้าจอที่ใช้สาหรับติดต่อกับผู้ใช้เพื่อใช้งาน ซอฟต์แวร์ ซึ่งต้องคานึงถึงลาดับและขั้นตอนการทางานของซอฟต์แวร์ และ ระบบอื่นที่จะใช้บริการ โดนไม่จาเป็นต้องทราบถึงรายละเอียดการทางานในระบบย่อย
การออกแบบระดับส่วนประกอบ
การออกแบบระดับส่วนประกอบ (Component-Level Design) คือ กำรออกแบบโปรแกรมย่อยฟังก์ชันย่อย หรือมอดูลย่อยต่ำง ๆ ของซอฟต์แวร์ที่ประกอบกันเป็นระบบ
เป้าหมายหลักของการบวนการพัฒนาซอฟต์แวร์ • ได้ซอฟต์แวร์ที่มีคุณภำพ • ตอบสนองควำมต้องกำรของผู้ใช้ซอฟต์แวร์
คุณภาพของซอฟต์แวร์ • กำรปรับปรุงผลิตภัณฑ์ • กำรเปลีย่ นผลติภัณฑ์ • กำรใช้ผลิตภัณฑ์
ปัจจัยที่ทาให้ซอฟต์แวร์ มีคุณภาพ Maintainability Flexibility Testability PRODUCT REVISION
Portability Reusability Interoperability PRODUCT TRANSITION
PRODUCT OPERATION Correctness Usability Efficiency Integrity Reliability
การใช้ผลิตภัณฑ์ การใช้ผลิตภัณฑ์ (Product Operation) หมำยถึง มุมมองควำมสำมำรถกำรทำงำน ของซอฟต์แวร์ประกอบด้วย 5 ลักษณะ ดังนี้ • ความถูกต้อง (Correctness) • ความเชื่อถือได้ (Reliability) • ความสามารถในการใช้งาน (Usability)
• ความบูรณภาพ (Integrity) • ประสิทธิภาพ (Efficiency)
การเปลี่ยนผลิตภัณฑ์ การเปลี่ยนผลิตภัณฑ์ (Product Transition) หมำยถึง ควำมสำมำรถในกำร นำซอฟต์แวร์ไปติดตั้งใช้งำน ประกอบด้วย 3 ลักษณะ ดังนี้ • ความสามารถในการใช้งานได้หลายระบบ (Portability) • ความสามารถในการนากลับมาใช้ใหม่ (Reusability) • ความสามารถในการใช้งานร่วมกัน (Interoperability)
การปรับปรุงผลิตภัณฑ์ การปรับปรุงผลิตภัณฑ์ (Product Revision) หมำยถึง ควำมสำมำรถในกำรปรับปรุง เปลี่ยนแปลงกำรทำงำนของซอฟต์แวร์ ประกอบด้วย 3 ลักษณะ ดังนี้ • ความสามารถในการบารุงรักษา (Portability) • ความยืดหยุ่น (Flexibility) • ความสามารถในการทดสอบ (Testability)
หลักการออกแบบซอฟต์แวร์ มุมมองของวิศวกรรมซอฟต์แวร์ หลักกำรออกแบบซอฟต์แวร์ มีวัตถุประสงค์ เพื่อให้ทีมพัฒนำซอฟต์แวร์ประยุกต์ใช้หลักกำรและแนวคิดพื้นฐำนสำหรับออกแบบ ซอฟต์แวร์ภำยในองค์กรได้เป็นอย่ำงดี เนื่องจำกแต่ละหยักกำรตะเหมำะสมกับกำร ออกแบบซอฟต์แวร์ที่ต่ำงกัน
การกาหนดสาระสาคัญ การกาหนดสาระสาคัญ (Abstraction) เป็นแนวคิดพื้นฐำนของกำรออกแบบซอฟต์แวร์ ที่จะช่วยลดควำมซับซ้อนของระบบ เมื่อพิจำรณำถึงแนวทำงของกำรแก้ไขปัญหำ กำร กำหนดสำระสำคัญแบ่งเป็นหลำยระดับ โดยระดับบนสุดอธิบำยภำพรวมของปัญหำและ สภำพแวดล้อมภำยนอก และระดับถัดมำอะธิบำยวิธีกำรแก้ปัญหำที่มีควำมละเอียด กำรกำหนดสำระสำคัญ แบ่งเป็น 2 ประเภทคือ การกาหนดสาระสาคัญเชิงกระบวนการคาสั่ง การกาหนดสาระสาคัญเชิงข้อมูล
การกาหนดสาระสาคัญเชิงกระบวนการคาสั่ง (Procedural Abstraction) คือกำรสร้ำงลำกับชุดคำสั่งของฟังก์ชันใดฟังก์ชันหนึ่งและทำหน้ำที่เฉพำะเจำะจง อย่ำงหนึ่ง โดยชื่อของกำรกำหนดสำระสำคัญเชิงกระบวนกำรคำสั่ง ได้แก่ ชื่อของ ฟังก์ชัน แต่จะไม่ระบุถึงรำยละเอียดภำยในฟังก์ชัน เช่นเมื่อพิจำรณำปัญหำเรื่องกำรเดิน จำกห้อง ก ผ่ำนไปห้อง ข ต้องแก้ไขปัญหำด้วยกำรเปิดประตูลักษณะแนวคิดนี้ จะทำให้ เกิดกำรกำหนดสำระสำคัญเชิงกระบวนคำสั่งที่ชื่อว่ำ “เปิด (Open)” หมำยถึง ขั้นตอน อื่นที่ต่อเนื่องเป็นลำกับก่อนจะเปิดประตู เช่น เดินไปที่ประตู จับลูกบิด หมุนลูกบิด ดึง ประตู เดินออกจำกห้อง ก ไปห้อง ข เป็นต้น
การกาหนดสาระสาคัญเชิงกระบวนการคาสั่ง (Procedural Abstraction)
ตัวอย่ำงกำรกำหนดสำระสำคัญเชิงกระบวนคำสั่ง
การกาหนดสาระสาคัญเชิงข้อมูล (Data Abstraction) คือ ชื่อของออบเจ็กต์ที่อยู่ในกำรกำหนดสำระสำคัญเชิงกระบวนกำรคำสั่ง ได้แก่ ประตู ซึ่งมีลักษณะประจำ เช่น ข้อมูลผู้ผลิตหมำยถึงเลขรุ่น รูปแบบ ทิศทำงกำรหมุน เป็นต้น
สถาปัตยกรรม สถาปัตยกรรม (Architecture) คือ โครงสร้ำงของซอฟต์แวร์ที่แสดงให้เห็นถึง โครงสร้ำงของมอดูลหรือโปรแกรมย่อย และฟังก์ชันกำรทำงำนของโปรแกรมย่อย พร้อมทั้งแสดงโครงสร้ำงข้อมูลที่ถูกใช้ในแต่ละโปรแกรมย่อยด้วยกำรออกแบบเชิง สถำปัตยกรรม
แบบอย่าง แบบอย่ำง (Pattern) หรือแบบอย่ำงกำรออกแบบ (Design Pattern)
• อธิบำยถึงโครงสร้ำงตัวแบบที่ช่วยแก้ปัญหำของกำรออกแบบซอฟต์แวร์ หรือเป็น วิธีกำรแก้ปัญหำที่นำมำใช้กับปัญหำชนิดเดียวกันที่เกิดขึ้นซ้ำได้ • กำรใช้ pattern จะช่วยให้งำนผลิตซอฟต์แวร์ดำเนินไปได้อย่ำงรวดเร็ว ประหยดเวลำ ในกำรออกแบบ
ความเป็นมอดูล ในมุมมองของศำสตร์ทำงด้ำนวิศวกรรมซอฟต์แวร์ ความเป็นมอดูล (Modularity) คือ หน่วยที่ประกอบด้วยชุดคำสั่งที่ใช้ในกำรประมวลผล โครงสร้ำงข้อมูล และควำมสัมพันธ์ ระหว่ำงข้อมูล โดยแต่ละมอดูลสำมำรถแยกนำไป Compile หรือใช้ร่วมกับมอดูลอื่นได้ ดังนั้น บำงโปรแกรมอำจอยู่ในรูปของมอดูล ซอฟต์แวร์ที่ประกอบด้วยมอดูล คือ ลดควำมซ้ำซ้อน สะดวกในกำรจัดกำรเมื่อมีกำรเปลี่ยนแปลงมีกำรพัฒนำแบบขนำน และสำมำรถนำมอดูล กลับมำใช้ใหม่ได้
การซ่อนสารสนเทศ นักออกแบบได้เล็งเห็นถึงปัญหำที่ระบบออกแบบเป็นมอดูลย่อย เมื่อนำมอดูลมำ ต่อประสำกัน ทำให้เกิดควำมยุ่งยำกในกำรใช้ข้อมูลร่วมกัน จึงได้ออกแบบซอฟต์แวร์ โดนให้แต่ละมอดูลซ่อนสารสนเทศ (Information Hiding) หรือซ่อนรำยละเอียดกำร ทำงำน ไม่ว่ำจะเป็นขั้นตอนวิธี เมธอด หรือข้อมูลของมอดูลก็ตำม เพื่อป้องกันกำร เข้ำถึงข้อมูลในโมดูลโดยไม่จำเป็น ที่อำจทำให้เกิดควำมผิดพลำดได้ ข้อดีของหลักกำร ซ่อนสำรสนเทศในกำรออกแบบมอดูล คือ ทำให้ง่ำยต่อกำรกำรปรับปรุง ทดสอบ และ กำรบำรุงรักษำซอฟต์แวร์
การซ่อนสารสนเทศ
Method #1
Metrhod #2 Data
Metrhod #6 Metrhod #5
Metrhod #3 Metrhod #4
ความเป็นอิสระเชิงฟังก์ชัน ความเป็นอิสระเชิงฟังก์ชัน (Functional Independence) เป็นปัจจัยสำคัญของกำร ออกแบบ กำรออกแบบให้มอดูลมีควำมอิสระต่อกันภำยในมอดูลมีฟังก์ชันทำหน้ำที่อย่ำงเดียว ซึ่งสำมำรถประเมินควำมอิสระเชิงฟังก์ชันของมอดูลได้จำกกำรเกำะกลุ่มกัน (Cohesion) และกำรพึ่งพำกัน (Coupling) ส่วนพึ่งพากัน เป็นกำรวัดควำมสัมพันธ์หรือส่วนต่อประสำรระหว่ำงมอดูลซึ่งกำรพึ่งพำกันของมอดูลจะ ผ่ำนส่วนต่อประสำน สำมำรถตรวจสอบว่ำ มีควำมซับซ้อนและกำรพึ่งพำกันของมอดูล มำกน้อย เพียงใด
ความเป็นอิสระเชิงฟังก์ชัน โครงสร้างของมอดูลที่ดี มีระดับกำรพึ่งพำกันของมอดูลน้อย (Low Coupling)
ลักษณะของมอดูลที่ดี มีกำรเกำะกลุ่มของฟังก์ชันในมอดูลสูง (High Cohesion)
ข้อดีของมอดูลที่เป็นอิสระต่อกัน • ง่ำยต่อกำรบำรุงรักษำซอฟต์แวร์ • ลดกำรแพร่กระจำยควำมผิดพลำด
การแบ่งละเอียด
การแบ่งละเอียด (Refinement) คือกำรลงรำยละเอียดเพิ่มเติมของกระบวนกำรทำงำน ที่ระบุหน้ำที่ไปทีละขั้นตอนจนกว่ำจะได้ภำษำโปรแกรม
การปรับโครงสร้างการออกแบบ การปรับโครงสร้างการออกแบบ (Refactoring) คือ กำรแยกส่วนประกอบใหม่ หรือ กำรจัดระเบียบมอดูลใหม่ เพื่อให้กำรออกแบบมอดูลย่อยหรือโปรแกรมง่ำยขึ้น โดยไม่ เปลี่ยนแปลงพฤติกรรมกำรทำงำน
การออกแบบคลาส คลาสของข้อมูล อธิบำยส่วนประกอบของโดเมนปัญหำที่มองเห็นได้จำกมุมมองของ ผู้ใช้งำนหรือลูกค้ำ แสดงให้เห็นโครงสร้ำงภำยใน กำรออกแบบคลำสมี 5 ประเภท • • • • •
คลำสส่วนต่อประสำนกับผู้ใช้ (User Interface Class) คลำสโดเมนธุรกิจ (Business Domain Class) คลำสกระบวนกำร (Process Class) คลำสที่คงอยู่นำน (Persistent Class) คลำสระบบ (System Class)
การออกแบบเชิงกระบวนคาสัง่ การออกแบบเชิงกระบวนคาสั่ง (Procedural Design) คือ กำรออกแบบ กระบวนกำรทำงำนของซอฟต์แวร์ และแสดงรำยละเอียดของขั้นตอนวิธี โดยใช้ภำษำ โปรแกรม และรหัสเทียม เช่นภำษำกำรออกแบบโปรแกรม เป็นต้น กำรออกแบบเชิง กระบวนคำสั่ง สำมำรถเขียนเป็นแผนภำพได้ 4 ลักษณะ ได้แก่
• • • •
ผังงำน แผนภำพกล่อง ตำรำงกำรตัดสินใจ ต้นไม้กำรตัดสินใจ
ผังงาน ผังงาน (Flowchart) เป็นแผนภำพที่ใช้อธิบำยกรทำงำนของคำสั่ง โดยมีกำรทำงำน แบบเรียงลำดับตัดสินใจ และวนซ้ำ สัญลักษณ์ของผังงำน
Sequential
ผังงาน
T
F
If-then-else
Selection CASE
ผังงาน
Do While
Repeat Util
แผนภาพกล่อง
แผนภาพกล่อง (Box Diagram) ใช้อธิบำยกำรทำงำนของคำสั่ง แบบเรียงลำดับ ตัดสินใจ และวนซ้ำ
ตารางการตัดสินใจ ตารางการตัดสินใจ (Decision Table) ใช้แสดงเงื่อนไข (Condition) ของกำรตัดสินใจ ซึ่งมีค่ำ เป็น T และ F และใช้สัญลักษณ์ X เพื่อเลือกกำรทำงำนหรือทากิจกรรม (Action) ภำยใต้เหตุกำรณ์ ของเงื่อนไขที่ระบุ แต่ถ้ำเงื่อนไขไม่เป็นไปตำมที่กำหนด จะเกิดความผิดพลาด (Prompt Error)
ตารางการตัดสินใจ ร้ำนค้ำแห่งหนึ่ง กำหนดส่วนลดสำหรับลูกค้ำที่เข้ำมำซื้อของในร้ำนค้ำ คือ ถ้ำซื้อสินค้ำด้วยเงินสด รำคำ 100-1,000 บำท จะได้รับส่วนลด 5% รำคำ 1,001-10,000 บำท จะได้รับส่วนลด 10% และรำคำ 10,0001 บำทขึ้นไป จะได้รับส่วนลด 5% แต่ถ้ำลูกค้ำซื้อสินค้ำด้วยบัตรเครดิต รำคำ 100-1,000 บำท จะไม่ได้รับส่วนลด รำคำ 1,001-10,000 บำท จะได้รับส่วนลด 5% และรำคำ 10,001 บำทขึ้นไป จะ ได้รับส่วนลด 10% จำกเงื่อนไขดังกล่ำว สำมำรถเขียนตำรำงกำรตัดสินใจได้ดังนี้
ต้นไม้การตัดสินใจ ต้นไม้การตัดสินใจ (Decision Tree) เป็นแผนภำพที่ใช้อธิบำยกำรทำงำนของกระบวนกำรที่ มีเงื่อนไขกำรตัดสินใจ ซึ่งแสดงอยู่ในรูปของโหนด และ เชื่อมต่อกับเงื่อนไขของกำรตัดสินใจอีกเงื่อนไขหนึ่งด้วย เส้นตรง โดยเส้นทำงกำรตัดสินใจของแต่ละเงื่อนไขจะ สิ้นสุดลงที่กิจกรรม ซึ่งอยู่ในรูปวงรี
ต้นไม้การตัดสินใจ จำกตัวอย่ำงกำรซื้อสินค้ำในตำรำงแสดงกำรตัดสินใจของลูกค้ำ สำมำรถวำดต้นไม้กำรตัดสินใจได้ดังนี้
แบบจาลองการออกแบบ แบบจาลองการออกแบบ (Design Model) คือ แบบจำลองที่ใช้ในกระบวนกำรของกำรออกแบบ ซอฟต์แวร์ นักออกแบบระบบจะนำแบบจำลองกำรวิเครำะห์และข้อกำหนดกระบวนกำรมำแปลงเป็น แบบจำลองกำรออกแบบ ตัวอย่ำงของแบบจำลองกำรออกแบบ ได้แก่ แผนภำพคลำสแผนภำพ ส่วนประกอบ และแผนภำพ Deployment
แบบจาลองการออกแบบ
Maps Model
Analysis Model
Design Model
แสดงกำรแปลงจำกแบบจำลองกำรวิเครำะห์เป็นแบบจำลองกำรออกแบบ
แบบจาลองการออกแบบ
PSPEC One or more “components” in the software design แสดงกำรแปลงจำกข้อกำหนดกระบวนกำรเป็นส่วนประกอบต่ำง ๆ
แบบจาลองการออกแบบ
แผนภาพคลาสในขั้นตอนการออกแบบซอฟต์แวร์นักออกแบบระบบใช้แผนภาพคลาส จากการวิเคราะห์ซอฟต์แวร์เขิงละเอียดเพื่อเป็นประโยชน์ในการเขียนโปรแกรม
การออกแบบคลาสสาหรับสั่งซื้อสินค้าและความสัมพันธ์ระหว่างคลาส
แผลภาพสาหรับสั่งซื้อสินค้าของ Online UTCC Book Center System ประกอบด้วยคลำส Custumer Shopping Cart Item Credit Card Center Vendor Search Request Product Order Student Marketing Information Alumni, Visitor Product Review Product List Author Information Order Item Sample Chapter
แผนภาพส่วนประกอบ แผนภาพส่วนประกอบ (Component Diagram) เป็นแผนภำพที่แสดงถึงโครงสร้ำงทำงกำรภำพของซอฟต์แวร์ ประกอบด้วยส่วนประกอบ (Component) ซึ่งเป็นส่วนประกอบย่อยของซอฟต์แวร์ และควำมสัมพันธ์ระหว่ำงส่วนประกอบ ภำยในแผนภำพส่วนประกอบเหมือนกับควำมสัมพันธ์ภำยในแผนภำพคลำสเช่น Interface, Dependancy เป็นต้น สัญลักษณ์ ของแผนภำพส่วนประกอบดังรูป
แผนภาพ Deployment แผนภาพ Deployment เป็นแผนภำพที่แสดงถึงระบบสถำปัตยกรรมหรือโครงสร้ำงของฮำร์ดแวร์หรือซอฟต์แวร์ รวมทั้ง ควำมสันพันธ์ระหว่ำงฮำร์ดแวร์หรือซอฟต์แวร์ ควำมสัมพันธ์ภำยในแผนภำพ Deployment จะเหมือนกับควำมสัมพันธ์ ภำยในแผนภำพคลำส สัญลักษณ์ของแผนภำพ Deployment ดังรูป
คาถามท้ายบท • • • • •
วิศวกรรมกำรออกแบบคืออะไร และมีเป้ำหมำยหลักอย่ำงไร ควำมเป็นอิสระเชิงฟัก์ชันคืออะไร และมีควำมสำคัญอย่ำงไร อธิบำยควำมแตกต่ำงระหว่ำงตำรำงตัดสินใจและต้นไม้กำรตัดสินใจ แบบจำลองกำรออกแบบคืออะไร พร้อมทั้งยกตัวอย่ำงประกอบ แผนภำพส่วนประกอบคืออะไร และมีควำมสำคัญอย่ำงไร