Traditionally, programming is taught as a bottom-up approach. This model fits very well with procedural programming, even more with non-modular languages, such as Fortran and Basic. Object-oriented concepts, however, should be learned and used in a top-down approach, starting from modeling objects and object interactions.
Although some object-oriented languages follow the object metaphor down to the statement level, like Smalltalk, the most widely known languages of today, i.e. C++, Object Pascal and Java follow an almost procedural notation.
So, to devise a good object-oriented program, one should first devise an effective model and later implement the model in the chosen language.