Introduction to OOP: Chapter 2: Responsibility Driven Design:
A software component is simply an abstract design entity with which we
can associate responsibilities for different tasks.
May eventually be turned into a class, a function, a module, or something
A component must have a small well defined set of responsibilities
A component should interact with other components to the minimal extent possible
Intro OOP, Chapter 2, Slide 12