Design

Designing software is like building something sturdy, useful, and fun. First, you gather lots of different ideas and knowledge from books, catalogs, and your own experiences. Then, you pick the best ideas that match what you need. This process helps you create the final product.

Designing software is always changing and improving. Even though it might not be as formal as other types of engineering, we still have ways to make sure our designs are good. This chapter teaches us the basics of software design, like how to pick the right ideas and make them work together.

Design vs. Code

Untitled

Untitled

Untitled

Design Classes

In the design phase, analysis classes from the requirements model are refined into design classes to enable implementation. There are five types of design classes:

  1. User interface classes: Define abstractions for human-computer interaction, often based on metaphors like a checkbook or order form.
  2. Business domain classes: Refine analysis classes and define attributes and methods needed for business functions.
  3. Process classes: Implement lower-level business abstractions to manage business domain classes.
  4. Persistent classes: Represent data stores, such as databases, that persist beyond software execution.
  5. System classes: Implement software management and control functions for system operation and communication within the computing environment and externally.

Separation of Concerns

Separation of concerns is a design concept that suggests that any complex problem can be more easily handled if it is subdivided into pieces that can each be solved and/or optimized independently. A concern is a feature or behavior that is specified as part of the requirements model for the software. By separating concerns into smaller, and therefore more manageable pieces, a problem takes less effort and time to solve.

Quality Attributes of Design Process

Hewlett-Packard came up with FURPS to help measure software quality. FURPS stands for Functionality, Usability, Reliability, Performance, and Supportability. Here's what they mean: