A system of programming that permits an abstract, modular typing hierarchy, and features polymorphism, inheritance, and encapsulation.