In Object-Oriented programming, used to describe the knowledge of one programmatic Entity
of the existance of another such Entity
. An entity only knows of another entity if it acquires services from that entity. For instance, a report-generating component would know of a Database
component so it can use it to read and write the data that it uses to generate those reports. This means that the Database component is visible to the report-generating component
An entity (A) that knows of another entity (B) is by definition dependent on it. This is of great significance because entity (A) cannot be reused in a different software environment without entity (B) being available, and changes in entity (B) may require changes in entity (A). For example: changing the Database component so that extra-information has to be supplied when data is read or written requires that the report-generating entity be changed to supply this extra information.
As a general rule, the fewer visibilities there are in a software system, the easier it is to maintain and reuse.