““Abstraction is useful in software because it allows the programmer to: • hide irrelevant detail, and concentrate on essentials. • present a “black box” interface to the outside world. The interface specifies the valid operations on the object, but does not indicate how the object will implement them internally. • break a complicated system down into independent components. This in turn localizes knowledge, and prevents undisciplined interaction between components. • reuse and share code.””