Transitioning a developer from a procedural to an object-oriented environment is both difficult and time consuming. This doesn't mean it can't or shouldn't be done, it just means you will need a lot of patience. Managers often underestimate the time required to make this transition because learning the syntax of an object-oriented language, in itself, can be a simple task. Truly understanding object-oriented technologies and becoming a skilled object-oriented designer are much harder tasks to complete. Here are some of the observations we have seen when developers are simply taught an object-oriented language without taking the time to learn object-oriented technologies.
Without a strong foundation in object-oriented design technologies, developers often may not see the real advantages of object-oriented programming and will revert back to their level of comfort . You can, for instance, write a C++ program that uses absolutely no C++ unique language feature and in fact compiles correctly with a standard C compiler. We have seen many FORTRAN programmers, who after a short course in C++ can program in the language. All too often, however, their C++ coding structures looks surprisingly like FORTRAN, complete with liberal use of "goto" statements and a lack of classes.
The developers learn object-oriented design but the senior software architects continue to design in a procedural model. What results is you may have low level design details that are implemented in an object-oriented fashion, but overall the application behaves very much like a procedural program.