Programming Pervasive and Mobile Computing Applications: the TOTA Approach