Building self-adaptive systems by adaptation patterns integrated into agent methodologies