Classes are defined by filling a template that specifies the superclass, instance variables, and category. Instance variables are private to each instance and store its state. Methods are defined to perform operations on the instance variables and return a value. New objects can be instantiated using new, messages to existing objects, or class-specific creation messages.