Software architectural support for tangible user interfaces in distributed, heterogeneous computing environments