Implementation of interface declarations
There are three flavors of declarations:
Declarations are used to simply name declared interfaces.
ImplementsDeclarations are used to express the interfaces that a
class implements (that instances of the class provides).
Implements specifications support inheriting interfaces.
ProvidesDeclarations are used to express interfaces directly
provided by objects.