This document discusses the evolution of software components from modules and procedures to classes and objects. It provides definitions of software components from several experts as logically cohesive and loosely coupled modules that perform specific functions. The document discusses the granularity of components as either high-level and specialized or low-level and generic. It also covers software component interfaces in terms of service contracts and formal contracts. Finally, it briefly introduces design patterns, frameworks, and specific patterns like Adapter and Bridge.