Objects Lab Before Inheritance and Polymorphism I am finding it very difficult to create a lab for Objects in Java before we've involved Inheritance and Polymorphism.  The problem, as I see it, is that Inheritance and Polymorphism are basically the motivators for Objects in the first place.  As a result, the labs that I've created have all felt stodgy and artificial. 

However, as an instructional reality, waiting until we have all three ideas in place in a high school environment simply means biting off too much material.   Are there other ways to think about creating labs for Objects that would support the early understandings required while still being meaningful?
Inheritance and Polymorphism are basically the motivators for Objects in the first place


I think this is where you're getting stuck. Neither of those are necessarily first-class motivators for Objects, but they are useful things you can do when you have objects.

Work-in-progress textbook chapter on OOP (aimed at students aged 16-18) and why we use it: https://en.wikibooks.org/wiki/A-level_Computing/AQA/Paper_1/Fundamentals_of_programming/Object-oriented_programming

Some alternatives:

"Object = Code + Data"


It's easy to show examples where global functions cause problems because they accidentally trample on each other's data (they're using the same data, but making assumptions about it)
...especially easy/fun to show how two unrelated functions can accidentally choose the same name for their variables (they're using different data, but happen to have chosen same name, e.g. "x" for x-co-ordinate, but also "x" for number-of-items-to-multiply)
Via encapsulation (and optionally: hiding) objects wipe-out many of these common, painful, frustrating bugs that beginner programmers often discover themselves when using global functions


"Object = aggregation of functions"


How do you organize your source code when you have more than a few dozen functions? Objects help enormously


"Object = classification of data" (Object as ADT)


How do you organize your data when you have three different meanings of "x-coordinate": Position, Velocity, and Acceleration? Objects make it easy to create ad-hoc, named, data-types that massively simplify this problem
i.e. Objects-as-Abstract-Datatype