This textbook provides a balanced coverage on software design, including design principles, methodologies, and techniques in contexts of designing modules of small and larger sizes with a multi-paradigm viewpoint emphasizing design trade-off. Commonly used design diagrams and patterns are also covered in terms of the design ideas behind and their effective use. The book also explores what (software) design thinking is, the role it plays in a design process, and ways to promote it. Despite object orientation being still the center of attention, there is a strong promotion throughout the book that software design should consider all appropriate design paradigms and methodologies.
Chapter 1 is dedicated to an exploration of what software design may be and entail. Design is a way of thinking; therefore, “design thinking”—a widely publicized mode of critical thinking in the recent years—is prompted in the book. Readers are expected to have appropriate knowledge in data structures. However, it is not assumed that readers have also gained good understanding about the paradigm of object orientation. Thus, Chaps. 2 and 3 are designed to help readers better understand object orientation and the essentials of object-oriented design. Methods, standalone or being part of larger units, are essential program units, and design of methods may significantly impact the design attributes of enclosing modules, subsystems, or even the entire system. Chapter 4 is dedicated to design of methods. Object-oriented design is still the primary design paradigm in the real world; therefore, a good portion of the book also includes topics about design of objects, modeling with the Unified Modeling Language, and use of design patterns (Chaps. 5, 6, and 8, respectively), though the coverage of these topics has a focus on intrigued ideas behind the use of the concepts, techniques, tools, and patterns. Despite object orientation being still the center of attention, there is a strong promotion throughout the book that software design should consider all appropriate design paradigms and methodologies. Larger software elements are often directly responsible for the formation of software architecture.
Chapter 7 covers four kinds of larger software elements—libraries, components, frameworks, and microservices—and their architectural implications. Chapter 9 finally brings the presentation of software design to an end with a coverage on software architecture. However, after a well-proportioned discussion on what software architecture may be, the focus of the chapter is on software architectural views. Case studies are important in learning design. But as the author observed, small design examples may be more effective for students to see the applications of design-enabling techniques than larger case studies where we tend to integrate as many such techniques as possible with possibly insubstantial scenarios and missed learning opportunities in exploring diverse design choices and trade-offs. Chapter 10 then gathers some relatively small design case studies that can be used in earlier chapters as appropriate. These case studies can be extended in different ways to provide additional design opportunities. Besides, Chaps. 5 and 10 also include, as exercises, a variety of larger design questions that can be used partially or entirely when covering the respective contents. This book is an attempt by the author to explore a possible software design curriculum that can be used across computer science programs.
The book has adequate materials to be used in a four-credit course on software design or in a three-credit course with certain contents in Chaps. 7–9 left out. Other academic programs such as software engineering, computer engineering, or professional software development may also use the book as either a primary textbook or as a reference. The depth of the book makes it also appropriate for a design textbook at beginning graduate level. It is also appropriate to use the book as a primary reference in a software engineering course. Professionals may also find the book useful in their professional development.
Author(s): Chenglie Hu
Publisher: Springer International Publishing
Year: 2023
Language: English
Pages: 368
1. What Is Software Design?
2. The Paradigm of Object Orientation and Beyond
3. Essentials of Object-Oriented Design
4. Design of Methods
5. Design of Objects
6. Software Modeling Languages and Tools
7. Design of Larger Software Elements
8. Software Design Patterns
9. Software Architecture and Architectural Views
10. Design Case Studies