Skip to main content

Introduction

Term Definition

  • Design: Deliberative, purposive planning
  • Engineering: Skillful or artful contrivance applying scientific and mathematical principles
  • Craft: skilled occupation
  • Art: user of skill, taste, and imagination in the production of aesthetic objects.

Software Design

The process of building a program while satisfying a problem's functional requirements and not violating its non-functional constraints.

Two stages

  • Architectual Design: the process of identifying and assigning the responsibility for aspects of behavior to various modules or components of a software.
  • Detailed design: the process of specifying the behavior of each of the system components that you've identified during architectural design.

Design Notations for algorithms

  • Pseudo code
  • structured programming
  • Flow chart
  • Decision tables

Approaches' aspects

  • Design method: a particular way of viewing the problem.
    • OOD
    • Structure design
    • Role based design
  • design representation
  • how that design is going to be validated.

Design issues

  • top down, bottom up, inside up?
  • Procedures, functions or nouns, objects.
  • conceptual integrity vs cooperative development.
  • trades-off between Long term maintainability and short term schedule
  • What tools to use?

How to validate the design?

  • Independence of validators
  • Dependence on design methods
  • On-going versus after-the-fact

Design Concepts

  • Conceptual integrity
    • Coupling: the extent two components depends on each other for successful execution.
    • Cohension: The extent that the module or component has a single purpose or function.
  • Information hiding: eencapsulating the capabilities that a particular module has behind an abstract interface.
  • Abstraction and Refinement
    • Arrays, structs, record, objects
    • class hierarchy and generation

Aesthetics

  • Beauty, elegance, resolve to wholeness, harmony and radiance.
  • It takes a lot of time and energy to come up with an elegant solution that looks quite simple on the surface, but really satisfies the complex requirements.

Design philosophy

Piete En related software design to four important philosophers.

  1. Descartes - analytic geometry.
  2. Marx - social processes and classes
  3. Martin Heidegger - tools
  4. Wittgenstein - the concept of language games, inventing a vocabulary for a particular problem.