Subtypes should be usable as their base types.

Function associated with an object or class.

Combination of values, operators, and functions producing a result.

Type containing a fixed set of named values.

Prefer small, focused interfaces.

Field, property, or method belonging to a type.

Instruction executed by a program.

Ordered collection of potentially different types.

High-level code should depend on abstractions.

Member associated with a class rather than an instance.