Abstract :
One of the growing trends in software design is separating interface from implementation. The principle is about separating modules into public and private parts so that you can change the private part without coordinating with other modules. However, there is a further distinction-the one between public and published interfaces. This distinction is important because it affects how you work with the interface