Architecture Specific Models: Software Design on Abstract Platforms