A taxonomy of uncertainty for dynamically adaptive systems
design patterns : elements of reusable object - oriented software .