A collaborative constraint-based intelligent system for learning object-oriented analysis and design using UML