This principle is a further elaboration of the previous one. In describing the
behaviour of any system element, you should clearly separate what its environment
perceives and how it operates internally. Thus, the user of that system element does
not need to be concerned with its inner working and only has to understand what it
shows to the outside world. A prime example of this principle is the use of the
service concept. Following its definition in Chap. 5, a service should only describe
the externally observable behaviour of a system, not how that behaviour is realised.
Such encapsulation has long been a guiding principle in software development
(e.g., see Dijkstra 1968). It provides a mechanism for being truly platform independent,
for substituting different implementations with the same external behaviour,
or interchanging different suppliers of services.