กลยุทธ์การออกแบบซอฟต์แวร์
การออกแบบซอฟต์แวร์เป็นกระบวนการในการกำหนดความต้องการของซอฟต์แวร์ในการใช้งานซอฟต์แวร์ การออกแบบซอฟต์แวร์ถือเอาความต้องการของผู้ใช้เป็นความท้าทายและพยายามหาโซลูชันที่เหมาะสมที่สุด ในขณะที่ซอฟต์แวร์กำลังอยู่ในแนวความคิดแผนจะถูกคำนวณเพื่อค้นหาการออกแบบที่ดีที่สุดเท่าที่จะเป็นไปได้สำหรับการนำโซลูชันที่ต้องการไปใช้
การออกแบบซอฟต์แวร์มีหลายรูปแบบ ให้เราศึกษาสั้น ๆ :
การออกแบบที่มีโครงสร้าง
การออกแบบโครงสร้างเป็นการกำหนดแนวความคิดของปัญหาให้เป็นองค์ประกอบต่างๆของการแก้ปัญหา โดยพื้นฐานแล้วจะเกี่ยวข้องกับการออกแบบโซลูชัน ประโยชน์ของการออกแบบโครงสร้างคือช่วยให้เข้าใจวิธีการแก้ปัญหาได้ดีขึ้น การออกแบบที่มีโครงสร้างยังช่วยให้ผู้ออกแบบจดจ่อกับปัญหาได้ง่ายขึ้น
การออกแบบโครงสร้างส่วนใหญ่เป็นไปตามกลยุทธ์ 'แบ่งและพิชิต' ซึ่งปัญหาจะแบ่งออกเป็นปัญหาเล็ก ๆ หลายปัญหาและปัญหาเล็ก ๆ แต่ละปัญหาจะได้รับการแก้ไขทีละปัญหาจนกว่าปัญหาทั้งหมดจะได้รับการแก้ไข
ปัญหาเล็ก ๆ น้อย ๆ ได้รับการแก้ไขโดยใช้โมดูลโซลูชัน การออกแบบที่มีโครงสร้างเน้นว่าโมดูลเหล่านี้ได้รับการจัดระเบียบอย่างดีเพื่อให้ได้โซลูชันที่แม่นยำ
โมดูลเหล่านี้จัดเรียงตามลำดับชั้น พวกเขาสื่อสารกัน การออกแบบโครงสร้างที่ดีมักจะปฏิบัติตามกฎบางประการสำหรับการสื่อสารระหว่างโมดูลต่างๆกล่าวคือ -
Cohesion - การจัดกลุ่มองค์ประกอบที่เกี่ยวข้องกับหน้าที่ทั้งหมด
Coupling - การสื่อสารระหว่างโมดูลต่างๆ
การออกแบบที่มีโครงสร้างที่ดีมีการเชื่อมต่อกันสูงและการจัดเตรียมการเชื่อมต่อที่ต่ำ
การออกแบบเชิงฟังก์ชัน
ในการออกแบบที่เน้นฟังก์ชันระบบประกอบด้วยระบบย่อยขนาดเล็กจำนวนมากที่เรียกว่าฟังก์ชัน ฟังก์ชันเหล่านี้สามารถทำงานที่สำคัญในระบบได้ ระบบถือเป็นมุมมองด้านบนของฟังก์ชันทั้งหมด
การออกแบบที่เน้นฟังก์ชันสืบทอดคุณสมบัติบางประการของการออกแบบโครงสร้างโดยใช้วิธีการแบ่งแยกและพิชิต
กลไกการออกแบบนี้แบ่งทั้งระบบออกเป็นฟังก์ชันย่อย ๆ ซึ่งให้วิธีการที่เป็นนามธรรมโดยการปกปิดข้อมูลและการทำงานของมัน .. โมดูลการทำงานเหล่านี้สามารถแบ่งปันข้อมูลระหว่างกันโดยการส่งผ่านข้อมูลและใช้ข้อมูลที่มีอยู่ทั่วโลก
ลักษณะเฉพาะของฟังก์ชันอีกประการหนึ่งคือเมื่อโปรแกรมเรียกใช้ฟังก์ชันฟังก์ชันจะเปลี่ยนสถานะของโปรแกรมซึ่งบางครั้งโมดูลอื่นไม่สามารถยอมรับได้ การออกแบบที่เน้นฟังก์ชั่นทำงานได้ดีโดยที่สถานะของระบบไม่สำคัญและโปรแกรม / ฟังก์ชั่นจะทำงานกับอินพุตมากกว่าสถานะ
กระบวนการออกแบบ
- ทั้งระบบถูกมองว่าข้อมูลไหลในระบบโดยใช้แผนภาพกระแสข้อมูล
- DFD แสดงให้เห็นว่าฟังก์ชันเปลี่ยนแปลงข้อมูลและสถานะของระบบทั้งหมดอย่างไร
- ระบบทั้งหมดถูกแบ่งออกเป็นหน่วยย่อยอย่างมีเหตุผลซึ่งเรียกว่าฟังก์ชันบนพื้นฐานของการทำงานในระบบ
- จากนั้นแต่ละฟังก์ชั่นจะถูกอธิบายโดยรวม
การออกแบบเชิงวัตถุ
การออกแบบเชิงวัตถุทำงานรอบ ๆ เอนทิตีและลักษณะเฉพาะแทนที่จะเป็นฟังก์ชันที่เกี่ยวข้องกับระบบซอฟต์แวร์ กลยุทธ์การออกแบบนี้มุ่งเน้นไปที่เอนทิตีและลักษณะเฉพาะ แนวคิดทั้งหมดของโซลูชันซอฟต์แวร์เกี่ยวข้องกับหน่วยงานที่มีส่วนร่วม
ให้เราดูแนวคิดที่สำคัญของ Object Oriented Design:
- Objects - เอนทิตีทั้งหมดที่เกี่ยวข้องกับการออกแบบโซลูชันเรียกว่าอ็อบเจ็กต์ ตัวอย่างเช่นบุคคลธนาคาร บริษัท และลูกค้าถือเป็นวัตถุ ทุกเอนทิตีมีคุณลักษณะบางอย่างที่เกี่ยวข้องและมีวิธีการบางอย่างที่จะดำเนินการกับแอตทริบิวต์
Classes - คลาสคือคำอธิบายทั่วไปของออบเจ็กต์ วัตถุคือตัวอย่างของการเรียน. คลาสกำหนดแอตทริบิวต์ทั้งหมดซึ่งอ็อบเจ็กต์สามารถมีและเมธอดซึ่งกำหนดการทำงานของอ็อบเจ็กต์
ในการออกแบบโซลูชันแอตทริบิวต์จะถูกจัดเก็บเป็นตัวแปรและฟังก์ชันต่างๆจะถูกกำหนดโดยวิธีการหรือขั้นตอน
- Encapsulation - ใน OOD แอตทริบิวต์ (ตัวแปรข้อมูล) และวิธีการ (การดำเนินการกับข้อมูล) รวมเข้าด้วยกันเรียกว่าการห่อหุ้ม การห่อหุ้มไม่เพียง แต่รวมข้อมูลสำคัญของวัตถุเข้าด้วยกัน แต่ยัง จำกัด การเข้าถึงข้อมูลและวิธีการจากโลกภายนอกด้วย สิ่งนี้เรียกว่าการซ่อนข้อมูล
- Inheritance - OOD ช่วยให้คลาสที่คล้ายกันสามารถสแต็กอัพตามลำดับชั้นโดยที่คลาสต่ำกว่าหรือคลาสย่อยสามารถอิมพอร์ตใช้งานและใช้ซ้ำตัวแปรและวิธีการที่อนุญาตจากซุปเปอร์คลาสทันที คุณสมบัติของ OOD นี้เรียกว่ามรดก สิ่งนี้ทำให้ง่ายต่อการกำหนดคลาสเฉพาะและสร้างคลาสทั่วไปจากคลาสเฉพาะ
- Polymorphism - ภาษา OOD จัดให้มีกลไกที่วิธีการทำงานที่คล้ายกัน แต่แตกต่างกันในอาร์กิวเมนต์สามารถกำหนดชื่อเดียวกันได้ สิ่งนี้เรียกว่า polymorphism ซึ่งทำให้อินเทอร์เฟซเดียวดำเนินงานสำหรับประเภทต่างๆ ขึ้นอยู่กับวิธีเรียกใช้ฟังก์ชันส่วนต่างๆของโค้ดจะถูกเรียกใช้งาน
กระบวนการออกแบบ
กระบวนการออกแบบซอฟต์แวร์สามารถรับรู้ได้ว่าเป็นชุดของขั้นตอนที่กำหนดไว้อย่างดี แม้ว่าจะแตกต่างกันไปตามแนวทางการออกแบบ (เชิงฟังก์ชันหรือเชิงวัตถุ แต่อาจมีขั้นตอนต่อไปนี้ที่เกี่ยวข้อง:
- การออกแบบโซลูชันถูกสร้างขึ้นจากข้อกำหนดหรือระบบที่ใช้ก่อนหน้านี้และ / หรือแผนภาพลำดับระบบ
- อ็อบเจ็กต์ถูกระบุและจัดกลุ่มเป็นคลาสในนามของความคล้ายคลึงกันในลักษณะแอ็ตทริบิวต์
- มีการกำหนดลำดับชั้นและความสัมพันธ์ระหว่างกัน
- มีการกำหนดกรอบการใช้งาน
แนวทางการออกแบบซอฟต์แวร์
วิธีการทั่วไปสองวิธีในการออกแบบซอฟต์แวร์มีดังนี้
การออกแบบจากบนลงล่าง
เราทราบดีว่าระบบประกอบด้วยระบบย่อยมากกว่าหนึ่งระบบและประกอบด้วยส่วนประกอบหลายอย่าง นอกจากนี้ระบบย่อยและส่วนประกอบเหล่านี้อาจมีชุดของระบบย่อยและส่วนประกอบและสร้างโครงสร้างลำดับชั้นในระบบ
การออกแบบจากบนลงล่างจะใช้ระบบซอฟต์แวร์ทั้งหมดเป็นเอนทิตีเดียวจากนั้นจึงสลายตัวเพื่อให้ได้ระบบย่อยหรือส่วนประกอบมากกว่าหนึ่งระบบตามลักษณะบางอย่าง จากนั้นระบบย่อยหรือส่วนประกอบแต่ละส่วนจะถือว่าเป็นระบบและย่อยสลายต่อไป กระบวนการนี้จะทำงานต่อไปจนกว่าจะบรรลุระดับต่ำสุดของระบบในลำดับชั้นจากบนลงล่าง
การออกแบบจากบนลงล่างเริ่มต้นด้วยรูปแบบทั่วไปของระบบและกำหนดส่วนที่เฉพาะเจาะจงมากขึ้นเรื่อย ๆ เมื่อส่วนประกอบทั้งหมดประกอบด้วยระบบทั้งหมดก็จะเกิดขึ้น
การออกแบบจากบนลงล่างจะเหมาะสมกว่าเมื่อต้องออกแบบโซลูชันซอฟต์แวร์ตั้งแต่เริ่มต้นและไม่ทราบรายละเอียดเฉพาะ
การออกแบบด้านล่าง
รูปแบบการออกแบบจากด้านล่างขึ้นบนเริ่มต้นด้วยส่วนประกอบที่เฉพาะเจาะจงและพื้นฐานที่สุด ดำเนินการกับการแต่งส่วนประกอบในระดับที่สูงขึ้นโดยใช้ส่วนประกอบระดับพื้นฐานหรือต่ำกว่า มันสร้างส่วนประกอบระดับที่สูงขึ้นไปเรื่อย ๆ จนกว่าระบบที่ต้องการจะไม่ได้รับการพัฒนาเป็นส่วนประกอบเดียว ในแต่ละระดับที่สูงขึ้นปริมาณของนามธรรมจะเพิ่มขึ้น
กลยุทธ์ด้านล่างเหมาะกว่าเมื่อระบบจำเป็นต้องสร้างขึ้นจากระบบที่มีอยู่บางส่วนซึ่งสามารถใช้ไพรมารีพื้นฐานในระบบที่ใหม่กว่าได้
ทั้งสองวิธีจากบนลงล่างและจากล่างขึ้นบนไม่สามารถใช้งานได้ทีละวิธี แต่จะใช้ทั้งสองอย่างร่วมกัน