Paradigms
A programming paradigm is a complex of concepts, principles and abstractions which define a fundamental style of programming.
A paradigm can be determined by usage of entities like
- program states and statements which change them (imperative programming),
- stateless mathematical functions (functional programming),
- objects and interactions between them (object-oriented programming),
- algorithms and containers which operate with types provided as parameters (generic programming),
- values and value-to-value operations (value-level programming), etc.
Note that it is not necessary for a language to use one and only one paradigm. Languages which are designed to support several paradigms are called multi-paradigm. Such languages claim that no paradigm can be universally efficient for all problems, and allow the programmer to choose the best programming style for approaching each specific problem.