กลยุทธ์การออกแบบซอฟต์แวร์

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

การออกแบบซอฟต์แวร์มีหลายรูปแบบ ให้เราศึกษาสั้น ๆ :

การออกแบบที่มีโครงสร้าง

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

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

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

โมดูลเหล่านี้จัดเรียงตามลำดับชั้น พวกเขาสื่อสารกัน การออกแบบโครงสร้างที่ดีมักจะปฏิบัติตามกฎบางประการสำหรับการสื่อสารระหว่างโมดูลต่างๆกล่าวคือ -

Cohesion - การจัดกลุ่มองค์ประกอบที่เกี่ยวข้องกับหน้าที่ทั้งหมด

Coupling - การสื่อสารระหว่างโมดูลต่างๆ

การออกแบบที่มีโครงสร้างที่ดีมีการเชื่อมต่อกันสูงและการจัดเตรียมการเชื่อมต่อที่ต่ำ

การออกแบบเชิงฟังก์ชัน

ในการออกแบบที่เน้นฟังก์ชันระบบประกอบด้วยระบบย่อยขนาดเล็กจำนวนมากที่เรียกว่าฟังก์ชัน ฟังก์ชันเหล่านี้สามารถทำงานที่สำคัญในระบบได้ ระบบถือเป็นมุมมองด้านบนของฟังก์ชันทั้งหมด

การออกแบบที่เน้นฟังก์ชันสืบทอดคุณสมบัติบางประการของการออกแบบโครงสร้างโดยใช้วิธีการแบ่งแยกและพิชิต

กลไกการออกแบบนี้แบ่งทั้งระบบออกเป็นฟังก์ชันย่อย ๆ ซึ่งให้วิธีการที่เป็นนามธรรมโดยการปกปิดข้อมูลและการทำงานของมัน .. โมดูลการทำงานเหล่านี้สามารถแบ่งปันข้อมูลระหว่างกันโดยการส่งผ่านข้อมูลและใช้ข้อมูลที่มีอยู่ทั่วโลก

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

กระบวนการออกแบบ

  • ทั้งระบบถูกมองว่าข้อมูลไหลในระบบโดยใช้แผนภาพกระแสข้อมูล
  • DFD แสดงให้เห็นว่าฟังก์ชันเปลี่ยนแปลงข้อมูลและสถานะของระบบทั้งหมดอย่างไร
  • ระบบทั้งหมดถูกแบ่งออกเป็นหน่วยย่อยอย่างมีเหตุผลซึ่งเรียกว่าฟังก์ชันบนพื้นฐานของการทำงานในระบบ
  • จากนั้นแต่ละฟังก์ชั่นจะถูกอธิบายโดยรวม

การออกแบบเชิงวัตถุ

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

ให้เราดูแนวคิดที่สำคัญของ Object Oriented Design:

  • Objects - เอนทิตีทั้งหมดที่เกี่ยวข้องกับการออกแบบโซลูชันเรียกว่าอ็อบเจ็กต์ ตัวอย่างเช่นบุคคลธนาคาร บริษัท และลูกค้าถือเป็นวัตถุ ทุกเอนทิตีมีคุณลักษณะบางอย่างที่เกี่ยวข้องและมีวิธีการบางอย่างที่จะดำเนินการกับแอตทริบิวต์
  • Classes - คลาสคือคำอธิบายทั่วไปของออบเจ็กต์ วัตถุคือตัวอย่างของการเรียน. คลาสกำหนดแอตทริบิวต์ทั้งหมดซึ่งอ็อบเจ็กต์สามารถมีและเมธอดซึ่งกำหนดการทำงานของอ็อบเจ็กต์

    ในการออกแบบโซลูชันแอตทริบิวต์จะถูกจัดเก็บเป็นตัวแปรและฟังก์ชันต่างๆจะถูกกำหนดโดยวิธีการหรือขั้นตอน

  • Encapsulation - ใน OOD แอตทริบิวต์ (ตัวแปรข้อมูล) และวิธีการ (การดำเนินการกับข้อมูล) รวมเข้าด้วยกันเรียกว่าการห่อหุ้ม การห่อหุ้มไม่เพียง แต่รวมข้อมูลสำคัญของวัตถุเข้าด้วยกัน แต่ยัง จำกัด การเข้าถึงข้อมูลและวิธีการจากโลกภายนอกด้วย สิ่งนี้เรียกว่าการซ่อนข้อมูล
  • Inheritance - OOD ช่วยให้คลาสที่คล้ายกันสามารถสแต็กอัพตามลำดับชั้นโดยที่คลาสต่ำกว่าหรือคลาสย่อยสามารถอิมพอร์ตใช้งานและใช้ซ้ำตัวแปรและวิธีการที่อนุญาตจากซุปเปอร์คลาสทันที คุณสมบัติของ OOD นี้เรียกว่ามรดก สิ่งนี้ทำให้ง่ายต่อการกำหนดคลาสเฉพาะและสร้างคลาสทั่วไปจากคลาสเฉพาะ
  • Polymorphism - ภาษา OOD จัดให้มีกลไกที่วิธีการทำงานที่คล้ายกัน แต่แตกต่างกันในอาร์กิวเมนต์สามารถกำหนดชื่อเดียวกันได้ สิ่งนี้เรียกว่า polymorphism ซึ่งทำให้อินเทอร์เฟซเดียวดำเนินงานสำหรับประเภทต่างๆ ขึ้นอยู่กับวิธีเรียกใช้ฟังก์ชันส่วนต่างๆของโค้ดจะถูกเรียกใช้งาน

กระบวนการออกแบบ

กระบวนการออกแบบซอฟต์แวร์สามารถรับรู้ได้ว่าเป็นชุดของขั้นตอนที่กำหนดไว้อย่างดี แม้ว่าจะแตกต่างกันไปตามแนวทางการออกแบบ (เชิงฟังก์ชันหรือเชิงวัตถุ แต่อาจมีขั้นตอนต่อไปนี้ที่เกี่ยวข้อง:

  • การออกแบบโซลูชันถูกสร้างขึ้นจากข้อกำหนดหรือระบบที่ใช้ก่อนหน้านี้และ / หรือแผนภาพลำดับระบบ
  • อ็อบเจ็กต์ถูกระบุและจัดกลุ่มเป็นคลาสในนามของความคล้ายคลึงกันในลักษณะแอ็ตทริบิวต์
  • มีการกำหนดลำดับชั้นและความสัมพันธ์ระหว่างกัน
  • มีการกำหนดกรอบการใช้งาน

แนวทางการออกแบบซอฟต์แวร์

วิธีการทั่วไปสองวิธีในการออกแบบซอฟต์แวร์มีดังนี้

การออกแบบจากบนลงล่าง

เราทราบดีว่าระบบประกอบด้วยระบบย่อยมากกว่าหนึ่งระบบและประกอบด้วยส่วนประกอบหลายอย่าง นอกจากนี้ระบบย่อยและส่วนประกอบเหล่านี้อาจมีชุดของระบบย่อยและส่วนประกอบและสร้างโครงสร้างลำดับชั้นในระบบ

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

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

การออกแบบจากบนลงล่างจะเหมาะสมกว่าเมื่อต้องออกแบบโซลูชันซอฟต์แวร์ตั้งแต่เริ่มต้นและไม่ทราบรายละเอียดเฉพาะ

การออกแบบด้านล่าง

รูปแบบการออกแบบจากด้านล่างขึ้นบนเริ่มต้นด้วยส่วนประกอบที่เฉพาะเจาะจงและพื้นฐานที่สุด ดำเนินการกับการแต่งส่วนประกอบในระดับที่สูงขึ้นโดยใช้ส่วนประกอบระดับพื้นฐานหรือต่ำกว่า มันสร้างส่วนประกอบระดับที่สูงขึ้นไปเรื่อย ๆ จนกว่าระบบที่ต้องการจะไม่ได้รับการพัฒนาเป็นส่วนประกอบเดียว ในแต่ละระดับที่สูงขึ้นปริมาณของนามธรรมจะเพิ่มขึ้น

กลยุทธ์ด้านล่างเหมาะกว่าเมื่อระบบจำเป็นต้องสร้างขึ้นจากระบบที่มีอยู่บางส่วนซึ่งสามารถใช้ไพรมารีพื้นฐานในระบบที่ใหม่กว่าได้

ทั้งสองวิธีจากบนลงล่างและจากล่างขึ้นบนไม่สามารถใช้งานได้ทีละวิธี แต่จะใช้ทั้งสองอย่างร่วมกัน