Programming Paradigm
Paradigm originally meant something like 'exemplar'/'pattern'/'template' but in the last 30 years has come to mean something more like 'zeitgeist'/'worldview'. In the former sense, ThereAreExactlyThreeParadigms, this page as about the second sense, but it will be useful to give the defining example of each way of thinking. In no particular order
A programming paradigm provides for the programmer the means and structure for the execution of a program.
Programmers can think of programs
Many programming paradigms are as well-known for what they do not do as for what they do. This avoidance of certain techniques can make it easier to prove theorems about a program's correctness and to simply understand its behavior, without limiting it.
-
PureFunctionalProgramming
-
disallows the use of side-effects
-
Structured programming
-
disallows the use of goto.
Programming languages advocate different paradigms
-
Languages designed
-
to support object-oriented programming
-
to support functional programming
-
Other programming languages designed
-
CollectionOrientedProgramming
-
programming using operations on entire collections, avoiding loops
-
languages supporting this paradigm are intrinsically suitable to both sequential and parallel/distributed execution
-
ConcatenativeProgramming
-
Based on a composition of functions to a single argument (usually a 2D stack)
-
ConceptOrientedProgramming
-
Based on a concept as the main programming construct
-
which is a pair, dual continuation methods
-
It's life cycle is controlled by two pairs of dual creation/deletion methods
-
Two types of methods distinguished in any system:
-
More information can be found on the concept-oriented portal
-
DeclarativeProgramming
-
based on writing computer programs by specifying what the programs should do, and not how they should do it
-
declarative programs are ExecutableSpecifications
-
Emphasizes programming without explicit state
-
EquationalProgramming (KjuLanguage (Q - Is kju the correct WikiWord?))
-
Extension of functional programming.
-
FunctionalProgramming
-
'Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style.' (from the FP FAQ)
-
see CategoryFunctionalProgramming
-
GenerativeProgramming
-
Most commonly the idea that there are multiple views of a single piece of code
-
that it is best to separate these out (potentially in languages/paradigms)
-
and let the compiler worry about putting these together.
-
The separate pieces are meant to capture your intent more succinctly.
-
TermRewriteSystems
-
powerful for modeling and theorem proving. "Variables" describe whole domains rather than individual elements. Rules are often bi-directional, allowing expansions before reductions. A program is an functional application that gets reduced to canonical form. Falls somewhere between LogicProgramming and FunctionalProgramming.
ModularProgramming
-
ProceduralProgramming
-
Characterized by having procedures, functions, and ADTs
-
usually no inheritance, encapsulation, or polymorphism
-
PrototypeBasedProgramming
-
A version of OO but characterized by cloning objects to obtain instances which can then be customized
-
StringProgramming - ScriptingLanguage
-
EverythingIsa string: text constants are the universal media both for the program and all the data.
-
Easy handling for external programs (a feature which came from job control languages).
-
Rich string/text processing features
-
including RegularExpressions etc - Obviously this is obligatory when everything is a string
-
Eval feature, that is, the possibility to form a string and apply the language interpreter to it as a code
-
See DynamicStringsVsFunctional for examples
-
It's worth noting that a number of the styles above are
-
based more or less directly on mathematical models
-
While Other languages 'just happened'
New paradigms are often not well received by those accustomed to earlier styles.
A programming language can support multiple paradigms. CeePlusPlus is designed to support elements of procedural programming, object-based programming, object-oriented programming, functional programming, and generic programming.
Designers and programmers can decide how to build a program using any or a mix of these paradigm elements.
Thus a programmer can write a program in C++ that
-
is a purely procedural program
-
is a purely object-oriented program
-
contains elements of both paradigms
-
contains elements of functional programming
-
uses methods of generic programming
Related
AugustZeroSix
CategoryProgrammingLanguageComparisons CategoryRoadMap, CategoryMultiparadigm