A Phased Highly-Interactive Approach to Teaching UML-based Software Development