Software Design First Principles Flashcards
A principle is a?
Fundamental truth or proposition that serves as the foundation for a system of belief or behaviour or for a chain of reasoning.
Latin origin of principle?
Principium - beginning, origin, source, foundations
Software design principles are the?
Foundation of the software design field and its methodologies, practices and strategies
Software Design First Principles?
Suitability Simplicity Code Reuse Modularization Separation of Concerns Module Cohesiveness Module Encapsulation Abstraction
Suitability?
The software design represents a system that satisfies its requirements and serves its purpose
Simplicity?
The optimal software design is the simplest design that can be used to build a suitable system
Separation of Concerns?
A software system is made of separate modules that communicate with each other through their connections
Types of Coupling?
Tight Coupling
Loose Coupling
Tight Coupling?
Strong and lasting connections between modules
Loose Coupling?
Weaker and temporary connections between modules
Types of Cohesiveness?
High Cohesiveness
Low Cohesiveness
High Cohesiveness?
Concerns of a module are highly related to each other
Low Cohesiveness?
Concerns of a module are very little or not related to each other
Objects communicate through two major types of relationships?
Dependencies
Associations
Dependency?
Dependencies are temporary relationships that exist only while a method is executing
Associations?
Are permanent relationships that exist for the entire life time of an object
Encapsulation is also called?
Information hiding
Proposed in 1971 by David Parnas
Module Encapsulation Principle?
A software module design shall maximize the information and functionality of the module that is hidden from other modules and minimize its interface
Software Reuse Principle?
A software design shall maximize reuse by ensuring n artefact or parts of an artefact are duplicated.
Abstraction Principle?
Software design is simplified by defining and maximizing dependencies on abstractions
GRASP?
General Responsibility Assignment Software Patterns or Principles
Software Degradation?
Software degradation is the aging effect of software loosing its qualities as it evolves over time
Measures of Software Degradation?
Rigidity Fragility Immobility Viscosity Needless Complexity Needless Repetition Opacity
Rigidity?
Software is difficult to change
Fragility?
Change results in unpredictable behaviour and bugs
Immobility?
Reuse and separation of concerns is hard
Viscosity?
Original software design is hard to be preserved
Needless Complexity?
Design and code that is not used
Needless Repetition?
Reuse through copy and paste
Opacity?
Software is difficult to understand