A principle, used when developing an overall program structure, that each component of a program should encapsulate or hide a single design decision. The principle was first expounded by David Parnas, who advocated an approach to program development in which a list is prepared of design decisions that are particularly difficult or likely to change; individual components, known as modules, are then defined so that each encapsulates one such decision. The interface to each module is defined in such a way as to reveal as little as possible about its inner workings.
This approach leads to modules that are readily understood and can be developed independently. More important, it also leads to programs that are easy to change, with many desired changes requiring modification of only the inner workings of a single module.