A big problem with the uses relation is its
transitivity. I would be better if we could verify a part by
only checking the ones it is directly connect to.
A specification tells us exactly what a part
should do, but does not actually implement it.
Always separate specification from
implementation.
We say that a part realizes if it implements
it correctly.
Specifications are represented by an abstract interface
class in an UML diagram.