In programming, there is a familiar and important distinction between abstraction and representation. An abstraction captures the essence of a programming idea, and may be expressed as a specification of the observable behavior. A representation is the realization of that essence in code.