Computational Approaches for Understanding, Generating, and Adapting User Interfaces