The most general relationship between two packages, classes, or objects is dependency, shown by a dashed arrow: Strictly speaking, A depends on B if changes to B might necessitate changes to A. In the UML dependency below, usage is a dependency in which one named element (client) requires another named element (supplier) for its full definition or implementation. The abstraction relates two elements representing the same concept but at different levels of abstraction. Meanwhile, abstraction is a dependency relationship that relates two named elements or sets of names representing the same concept but at different levels of abstraction or from different viewpoints.