Described in Bertrand Meyer
's famous text on object-oriented programming
-- Object Oriented Software Construction
, the principle of knowledge ownership states that any knowledge that exists in a software system must only be maintained in one place in the program.
To illustrate: A phonebook program would no doubt have a list of people and their phone numbers. The urge to duplicate it might arise when there is more than one entity making use of this list. One component might be in charge of synchronizing the list's contents with a disk file. Another component might use the list to display its contents to a window. Duplicating the list would make maintenance harder, since any change in one instance of it should be duplicated at all other instances. This sort of synchronization is much wasted effort. Instead, there should be one component, preferrably one whose sole task is to maintain the list, and which provides services to the outside world via services, of functions.