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
- AccessOrientedProgramming
- using records with handlers attached to each variable/slot
- 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
- ConstraintProgramming and ConstraintLogicProgramming
- DataflowProgramming
- DeclarativeProgramming
- based on writing computer programs by specifying what the programs should do, and not how they should do it
- declarative programs are ExecutableSpecification?'''s
- Emphasizes programming without explicit state
- DesignByContract* (EiffelLanguage)
- still OO.
- EventDrivenProgramming
- EquationalProgramming? (KjuLanguage (Q - Is kju the correct WikiWord?))
- Extension of functional programming.
- FormalLanguage'''s ?
- 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.
- GeneticProgramming - EvolutionaryProgramming
- LogicProgramming - DeclarativeProgramming
- using logic, specifically the PredicateCalculus?.
- MessagePassingConcurrency - CommunicatingSequentialProcesses
- Concurrency expressed by passing messages between processes or active objects
- FlowBasedProgramming
- a type of MessagePassingConcurrency
- the primary application development tool is not a language as such, but basically a list of connections defining a network of communicating components.
- TermRewriteSystem?s
- 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
- 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