A name scope defines the portion of a program in which a name can
be used, or the way it can be used. Scopes are introduced using
lots of different mechanisms:
Classes or interfaces
Packages or Units
Procedures or Functions
in some languages, even Blocks
An advantage of scopes is that the same name can appear in two or more
scopes with no ambiguity.