client: someone who knows how to use something (like a smartphone or ArrayList) implementer: someone who knows how to build something (like smartphone or ArrayList) /* what does it mean to "implement" something? * * someone at Java wrote a file that started like this! * they "implemented" ArrayList so all of us can just use it */ public class ArrayList { ... } class: blueprint for the objects (think of a plan for how to build a smartphone) state: traits of each object name (for wifi and bluetooth, etc.) what apps you have behavior: what the object can do make calls play games or use apps send texts object: the actual thing you make from the blueprint (think of the actual smartphone itself) brought into existence by "new ArrayList()", which calls a constructor that we wrote