For an introductory course in programming, I'm not so sure you do.
(Of course, if you use Java as the language you pretty much have
to, but then I'm not sold on Java as a good choice for teaching
programming.)
OO is all about "programming in the large." It's about how to
structure the code to make a large program manageable and
understandable.
Students in an introductory course, though, are still struggling
with "programming in the small" : what a variable is, how to
track program flow, loops and conditionals, what a method or
functional call is, call-by-reference vs. call-by-value,
arrays and data structures, the idea of libraries and using
them, what compilation is, I/O, how to debug and all that
other jazz that seasoned programmers barely even think about.
I think introducing OO concept at this stage (except possibly
as a final "this is where you go from here" at the very end)
would just be so much magical "because that's just how it is"
that'd only serve to distract and confuse the students from
those core concept they really need to focus on.
More than once I've noted how much Java programming is effectively
procedural [1]. I've usually made these comments as a critique, insofar
as someone is claiming to be leveraging objects but really isn't. The
flip side of this criticism is that large portions of an OO program are
necessarily procedural, and there's nothing wrong with that if it's
intentional and justified.
Sticking to Java, we all know that a main() in a "Main" class is much
less OO than it is procedural, and a whole bunch of methods in a typical
Java program are effectively procedural too. One can argue - I certainly
have - that there is often way too much procedural in Java apps, and OO
possibilities are not being leveraged, but that doesn't detract from the
fact that judicious use of procedural in a Java program is perfectly
acceptable. In a typical OO app many of our business logic methods are
really procedures: data-context-interaction (DCI) formalizes this concept.
Having said that, it strikes me that if you're teaching programming with
an OO-capable language, that it's sort of hard to avoid OO, and probably
not desirable. I wouldn't leave it to a final "this is where you go from
here", is what I'm saying.
The first time you use a non-primitive
datatype and call a String method, say, or do something with a List or a
Map, I don't know how you avoid discussing either objects or program
flow, honestly. And in some depth, besides.
AHS