Object oriented programming involves creating classes that define objects and their behaviors, and then creating objects from those classes that can communicate by sending messages. The key aspects are: 1. Creating classes that define abstract data types with attributes and methods. 2. Instantiating objects from those classes that have unique identities and states. 3. Sending messages to objects by calling their methods using dot notation.