Description should include the following concepts:
- Abstraction—a general model of a real-world system that includes the essence of that system.
- Encapsulation—each class should contain all the aspects of its area of responsibility without revealing the details of how it does what it does.
- Inheritance—allows one class, called a subclass, to use methods and properties of another class, called a superclass.
- Polymorphism—the idea that a code element can transform into multiple forms or behave in multiple ways.