Self-managing and self-organising mobile computing applications: a separation of concerns approach