Emphasis has primarily been put on the practical aspects of design patterns up until now. In this chapter, I will change to a more analytical and theoretical view. The learning objective of this chapter is to introduce three different perspectives on object-oriented programming, starting by asking the fundamental question: What is an object? Your answer to this question of course influences how you design objectoriented software in its most fundamental way. Knowing that there are indeed different perspectives and understanding the strengths of each will make you a better designer and software architect by extending the set of tools you have available to tackle design challenges.