Some students may answer you on this one -- In the meanwhile I'll take a stab at it. Classes are like in Plato's cave where he argued that there was a pure category for everything in the world -- for example an ordinary tree was just a "shadow" of the pure, abstract "tree" that existed somewhere.
Perhaps only the Gods had the pure template for creating trees. One thing to be sure, that template, if it existed, had to account for all the possible attributes of a tree (bark, leaves, branches) and all their possible behaviors (growth, shedding leaves in winter -- or not doing so -- etc).
OO programming works at defining these templates. When the program runs it creates actual trees (object) from the class definitions. We call this instantiation.
The great thing is this, unlike structured programming where the logic flows top to bottom in a structured hierarchy -- in OOP we define the objects and let them interact according to their definitions. Of course it is not 100% different from structured programming because you still have structure and a sequence of events unfolding over time. Its just a different perspective and a different approach. The goal is "plug and play" and reusability of code. In reality we are getting some of these benefits but the cost is added complexity in learning and training. Yet it is hard to envision modern software, in all its complexity, without object orientation.

Jerry



Jerry Ross