Class-based programming

This is what you've probably been using most. Classes are written to include a set of properties and methods, and extending a class is achieved by sub-classing it, and adding to or overriding the properties and behavior of the superclass. A common pattern is to write a class that is not intended for use at all, except to be sub-classed (called an abstract class).