Five object-oriented design principles to improve the quality of self-Adaptivity using mape loops