The interface of a software module "A" is deliberately defined separately from the implementation of that module. The latter contains the actual code of the procedures and methods described in the interface, as well as other "private" variables, procedures, etc. Another software module "B", for example the client to "A", that interacts with "A" is forced to do so only through the published interface. One practical advantage of this arrangement is that replacing the implementation of "A" with another implementation of the same interface should not cause "B" to fail—how "A" internally meets the requirements of the interface is not relevant to "B", which is only concerned with the specifications of the interface. (See also Liskov substitution principle.)