Self-assembled molecular arrays on surfaces