This document discusses how the Scala programming language unifies functional programming and object-oriented programming concepts to better support component-based software development. It presents three ways Scala unifies previously separate concepts: 1) algebraic data types are implemented as class hierarchies, 2) functions are treated as objects, and 3) modules are implemented as objects. This allows Scala to leverage the strengths of both paradigms while removing limitations of existing languages for component programming.