Instiq

3Software design

Practice questions →Glossary →
  • 3.1Principles of module decomposition

    Covers the two yardsticks for module-decomposition quality: cohesion (the strength of relatedness among elements within a module—higher is better) and coupling (the strength of dependency between modules—lower is better), including their orderings and kinds, and how to diagnose the root cause of "a single change rippling across a wide area" using these two axes and decide on a fix.

  • 3.2Object-oriented design and UML

    Covers the three pillars of object-oriented design—encapsulation, inheritance, and polymorphism—the SOLID principles for change-resilient design (single responsibility, open/closed, Liskov substitution, interface segregation, dependency inversion), and how to choose among UML diagrams (class, sequence, state-transition) to visualize different design decisions, together with judging how to respond to a real requirement change.

  • 3.3Design patterns

    Covers the intent of representative examples from the three GoF design-pattern categories—creational (Singleton, Factory Method), structural (Adapter, Facade), and behavioral (Observer, Strategy)—and building the judgment to select the right pattern for a design problem at hand.

  • 3.4Reuse and frameworks

    Covers the difference in call direction among a library, a component, and a framework—your code calling the other versus the other calling your code, i.e. the Inversion of Control (IoC)—along with REST API design principles (resource orientation, statelessness, HTTP method semantics) and versioning strategy, together with judging how to choose a reuse approach for existing assets and how to preserve compatibility for a public API.