HOME
The Info List - Programming Paradigm


--- Advertisement ---



Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mainly with implications for the execution model of the language, such as allowing side effects, or whether the sequence of operations is defined by the execution model. Other paradigms are concerned mainly with the way that code is organized, such as grouping a code into units along with the state that is modified by the code. Yet others are concerned mainly with the style of syntax and grammar. Common programming paradigms include:

imperative which allows side effects,

object-oriented which groups code together with the state the code modifies, procedural which groups code into functions,

declarative which does not state the order in which operations execute,

functional which disallows side effects, logic which has a particular style of execution model coupled to a particular style of syntax and grammar, and

symbolic programming which has a particular style of syntax and grammar.[1][2][3]

For example, languages that fall into the imperative paradigm have two main features: they state the order in which operations occur, with constructs that explicitly control that order, and they allow side effects, in which state can be modified at one point in time, within one unit of code, and then later read at a different point in time inside a different unit of code. The communication between the units of code is not explicit. Meanwhile, in object-oriented programming, code is organized into objects that contain state that is only modified by the code that is part of the object. Most object-oriented languages are also imperative languages. In contrast, languages that fit the declarative paradigm do not state the order in which to execute operations. Instead, they supply a number of operations that are available in the system, along with the conditions under which each is allowed to execute. The implementation of the language's execution model tracks which operations are free to execute and chooses the order on its own. More at Comparison of multi-paradigm programming languages.

Contents

1 Overview 2 Criticism 3 History

3.1 Machine code 3.2 Procedural languages 3.3 Object-oriented programming 3.4 Further paradigms

4 Support for multiple paradigms 5 See also 6 References 7 External links

Overview[edit]

Overview of the various programming paradigms according to Peter Van Roy[4]:5[5]

Just as software engineering (as a process) is defined by differing methodologies, so the programming languages (as models of computation) are defined by differing paradigms. Some languages are designed to support one paradigm ( Smalltalk
Smalltalk
supports object-oriented programming, Haskell supports functional programming), while other programming languages support multiple paradigms (such as Object Pascal, C++, Java, C#, Scala, Visual Basic, Common Lisp, Scheme, Perl, PHP, Python, Ruby, Oz, and F#). For example, programs written in C++, Object Pascal or PHP
PHP
can be purely procedural, purely object-oriented, or can contain elements of both or other paradigms. Software
Software
designers and programmers decide how to use those paradigm elements. In object-oriented programming, programs are treated as a set of interacting objects. In functional programming, programs are treated as a sequence of stateless function evaluations. When programming computers or systems with many processors, in process-oriented programming, programs are treated as sets of concurrent processes acting on logically shared data structures. Many programming paradigms are as well known for the techniques they forbid as for those they enable. For instance, pure functional programming disallows use of side-effects, while structured programming disallows use of the goto statement. Partly for this reason, new paradigms are often regarded as doctrinaire or overly rigid by those accustomed to earlier styles.[6] Yet, avoiding certain techniques can make it easier to understand program behavior, and to prove theorems about program correctness. Programming paradigms can also be compared with programming models which allow invoking an execution model by using only an API. Programming models can also be classified into paradigms, based on features of the execution model. For parallel computing, using a programming model instead of a language is common. The reason is that details of the parallel hardware leak into the abstractions used to program the hardware. This causes the programmer to have to map patterns in the algorithm onto patterns in the execution model (which have been inserted due to leakage of hardware into the abstraction). As a consequence, no one parallel programming language maps well to all computation problems. It is thus more convenient to use a base sequential language and insert API calls to parallel execution models, via a programming model. Such parallel programming models can be classified according to abstractions that reflect the hardware, such as shared memory, distributed memory with message passing, notions of place visible in the code, and so forth. These can be considered flavors of programming paradigm that apply to only parallel languages and programming models. Criticism[edit] Some programming language researchers criticise the notion of paradigms as a classification of programming languages, e.g. Harper [7], and Krishnamurthi.[8] They argue that many programming languages cannot be strictly classified into one paradigm, but rather include features from several paradigms. See Comparison of multi-paradigm programming languages. History[edit] Different approaches to programming have developed over time, being identified as such either at the time or retrospectively. An early approach consciously identified as such is structured programming, advocated since the mid 1960s. The concept of a "programming paradigm" as such dates at least to 1978, in the Turing Award
Turing Award
lecture of Robert W. Floyd, entitled The Paradigms of Programming, which cites the notion of paradigm as used by Thomas Kuhn
Thomas Kuhn
in his The Structure of Scientific Revolutions (1962).[9] Machine code[edit] The lowest-level programming paradigms are machine code, which directly represents the instructions (the contents of program memory) as a sequence of numbers, and assembly language where the machine instructions are represented by mnemonics and memory addresses can be given symbolic labels. These are sometimes called first- and second-generation languages. In the 1960s, assembly languages were developed to support library COPY and quite sophisticated conditional macro generation and preprocessing abilities, CALL to (subroutines), external variables and common sections (globals), enabling significant code re-use and isolation from hardware specifics via use of logical operators such as READ/WRITE/GET/PUT. Assembly was, and still is, used for time critical systems and often in embedded systems as it gives the most direct control of what the machine does. Procedural languages[edit] The next advance was the development of procedural languages. These third-generation languages (the first described as high-level languages) use vocabulary related to the problem being solved. For example,

COmmon Business Oriented Language (COBOL) – uses terms like file, move and copy. FORmula TRANslation (FORTRAN) – using mathematical language terminology, it was developed mainly for scientific and engineering problems. ALGOrithmic Language (ALGOL) – focused on being an appropriate language to define algorithms, while using mathematical language terminology and targeting scientific and engineering problems just like FORTRAN. Programming Language One (PL/I) – a hybrid commercial-scientific general purpose language supporting pointers. Beginners All purpose Symbolic Instruction Code (BASIC) – it was developed to enable more people to write programs. C – a general-purpose programming language, initially developed by Dennis Ritchie
Dennis Ritchie
between 1969 and 1973 at AT&T Bell Labs.

All these languages follow the procedural paradigm. That is, they describe, step by step, exactly the procedure that should, according to the particular programmer at least, be followed to solve a specific problem. The efficacy and efficiency of any such solution are both therefore entirely subjective and highly dependent on that programmer's experience, inventiveness, and ability. Object-oriented programming[edit] Main article: Object-oriented programming Following the widespread use of procedural languages, object-oriented programming (OOP) languages were created, such as Simula, Smalltalk, C++, C#, Eiffel, PHP, and Java. In these languages, data and methods to manipulate it are kept as one unit called an object. With perfect encapsulation, one of the distinguishing features of OOP, the only way that another object or user would be able to access the data is via the object's methods. Thus, the inner workings of an object may be changed without affecting any code that uses the object. There is still some controversy raised by Alexander Stepanov, Richard Stallman[10] and other programmers, concerning the efficacy of the OOP paradigm versus the procedural paradigm. The need for every object to have associative methods leads some skeptics to associate OOP with software bloat; an attempt to resolve this dilemma came through polymorphism. Because object-oriented programming is considered a paradigm, not a language, it is possible to create even an object-oriented assembler language. High Level Assembly (HLA) is an example of this that fully supports advanced data types and object-oriented assembly language programming – despite its early origins. Thus, differing programming paradigms can be seen rather like motivational memes of their advocates, rather than necessarily representing progress from one level to the next[citation needed]. Precise comparisons of the efficacy of competing paradigms are frequently made more difficult because of new and differing terminology applied to similar entities and processes together with numerous implementation distinctions across languages. Further paradigms[edit] Literate programming, as a form of imperative programming, structures programs as a human-centered web, as in a hypertext essay: documentation is integral to the program, and the program is structured following the logic of prose exposition, rather than compiler convenience. Independent of the imperative branch, declarative programming paradigms were developed. In these languages, the computer is told what the problem is, not how to solve the problem – the program is structured as a set of properties to find in the expected result, not as a procedure to follow. Given a database or a set of rules, the computer tries to find a solution matching all the desired properties. An archetype of a declarative language is the fourth generation language SQL, and the family of functional languages and logic programming. Functional programming is a subset of declarative programming. Programs written using this paradigm use functions, blocks of code intended to behave like mathematical functions. Functional languages discourage changes in the value of variables through assignment, making a great deal of use of recursion instead. The logic programming paradigm views computation as automated reasoning over a body of knowledge. Facts about the problem domain are expressed as logic formulae, and programs are executed by applying inference rules over them until an answer to the problem is found, or the set of formulae is proved inconsistent. Symbolic programming is a paradigm that describes programs able to manipulate formulas and program components as data.[3] Programs can thus effectively modify themselves, and appear to "learn", making them suited for applications such as artificial intelligence, expert systems, natural-language processing and computer games. Languages that support this paradigm include Lisp and Prolog.[11] Support for multiple paradigms[edit] See also: Comparison of multi-paradigm programming languages Most programming languages supports more than one programming paradigm to allow programmers to use the most suitable programming style and associated language constructs for a given job.[12] See also[edit]

Computer programming
Computer programming
portal

Architecture description language Comparison of programming languages Comparison of programming paradigms Domain-specific language Mindset Modeling language Programming domain Type system Turing completeness Von Neumann programming languages

References[edit]

^ Nørmark, Kurt. Overview of the four main programming paradigms. Aalborg University, 9 May 2011. Retrieved 22 September 2012. ^ Frans Coenen (1999-10-11). "Characteristics of declarative programming languages". cgi.csc.liv.ac.uk. Retrieved 2014-02-20.  ^ a b Michael A. Covington (2010-08-23). "CSCI/ARTI 4540/6540: First Lecture on Symbolic Programming and LISP" (PDF). University of Georgia. Retrieved 2013-11-20.  ^ Peter Van Roy (2009-05-12). "Programming Paradigms for Dummies: What Every Programmer Should Know" (PDF). info.ucl.ac.be. Retrieved 2014-01-27.  ^ Peter Van-Roy; Seif Haridi (2004). Concepts, Techniques, and Models of Computer Programming. MIT Press. ISBN 978-0-262-22069-9.  ^ Frank Rubin (March 1987). "'GOTO Considered Harmful' Considered Harmful" (PDF). Communications of the ACM. 30 (3): 195–196. doi:10.1145/214748.315722. Archived from the original (PDF) on March 20, 2009.  ^ Harper, Robert. ""What if anything is a programming-paradigm"".  ^ Krishnamurthi, Shriram (November 2008). "Teaching programming languages in a post-linnaean age". SIGPLAN. ACM. pp. 81–83. Not. 43, 11. . ^ Floyd, R. W. (1979). "The paradigms of programming". Communications of the ACM. 22 (8): 455. doi:10.1145/359138.359140.  ^ "Mode inheritance, cloning, hooks & OOP (Google Groups Discussion)".  ^ "Business glossary: Symbolic programming definition". allbusiness.com. Retrieved 2014-07-30.  ^ "Multi-Paradigm Programming Language". developer.mozilla.org. Mozilla Foundation. Archived from the original on 21 August 2013. 

External links[edit]

Classification of the principal programming paradigms How programming paradigms evolve and get adopted?

Software
Software
engineering

v t e

Types of сomputer languages

Types

Architecture description Hardware description Knowledge representation Markup Modeling Programming language Query Specification Stylesheet Transformation

See also

Category:Lists of computer languages Category:Lists of programming languages List of programming languages by type

v t e

Software
Software
engineering

Fields

Computer programming Requirements engineering Software
Software
deployment Software
Software
design Software
Software
maintenance Software
Software
testing Systems analysis Formal methods

Concepts

Data
Data
modeling Enterprise architecture Functional specification Modeling language Orthogonality Programming paradigm Software Software
Software
archaeology Software
Software
architecture Software
Software
configuration management Software
Software
development methodology Software
Software
development process Software
Software
quality Software
Software
quality assurance Software
Software
verification and validation Structured analysis

Orientations

Agile Aspect-oriented Object orientation Ontology Service orientation SDLC

Models

Developmental

Agile EUP Executable UML Incremental model Iterative model Prototype model RAD UP Scrum Spiral model V-Model Waterfall model XP

Other

SPICE CMMI Data
Data
model ER model Function model Information model Metamodeling Object model Systems model View model

Languages

IDEF UML USL SysML

Software engineers

Victor Basili Kent Beck Grady Booch Fred Brooks Barry Boehm Peter Chen Danese Cooper Ward Cunningham Tom DeMarco Edsger W. Dijkstra Delores M. Etter Martin Fowler Adele Goldstine Margaret Hamilton C. A. R. Hoare Lois Haibt Mary Jean Harrold Grace Hopper Watts Humphrey Michael A. Jackson Ivar Jacobson Alan Kay Nancy Leveson Stephen J. Mellor Bertrand Meyer David Parnas Trygve Reenskaug Winston W. Royce James Rumbaugh Mary Shaw Peri Tarr Elaine Weyuker Niklaus Wirth Edward Yourdon

Related fields

Computer science Computer engineering Project management Risk management Systems engineering

Category Commons

v t e

Major fields of computer science

Note: This template roughly follows the 2012 ACM Computing Classification System.

Hardware

Printed circuit board Peripheral Integrated circuit Very-large-scale integration Energy consumption Electronic design automation

Computer systems organization

Computer architecture Embedded system Real-time computing Dependability

Networks

Network architecture Network protocol Network components Network scheduler Network performance evaluation Network service

Software
Software
organization

Interpreter Middleware Virtual machine Operating system Software
Software
quality

Software
Software
notations and tools

Programming paradigm Programming language Compiler Domain-specific language Modeling language Software
Software
framework Integrated development environment Software
Software
configuration management Software
Software
library Software
Software
repository

Software
Software
development

Software
Software
development process Requirements analysis Software
Software
design Software
Software
construction Software
Software
deployment Software
Software
maintenance Programming team Open-source model

Theory of computation

Model of computation Formal language Automata theory Computational complexity theory Logic Semantics

Algorithms

Algorithm
Algorithm
design Analysis of algorithms Randomized algorithm Computational geometry

Mathematics of computing

Discrete mathematics Probability Statistics Mathematical
Mathematical
software Information theory Mathematical
Mathematical
analysis Numerical analysis

Information systems

Database management system Information storage systems Enterprise information system Social information systems Geographic information system Decision support system Process control
Process control
system Multimedia information system Data
Data
mining Digital library Computing platform Digital marketing World Wide Web Information retrieval

Security

Cryptography Formal methods Security services Intrusion detection system Hardware security Network security Information security Application security

Human–computer interaction

Interaction design Social computing Ubiquitous computing Visualization Accessibility

Concurrency

Concurrent computing Parallel computing Distributed computing Multithreading Multiprocessing

Artificial intelligence

Natural language processing Knowledge representation and reasoning Computer vision Automated planning and scheduling Search methodology Control method Philosophy of artificial intelligence Distributed artificial intelligence

Machine learning

Supervised learning Unsupervised learning Reinforcement learning Multi-task learning Cross-validation

Graphics

Animation Rendering Image manipulation Graphics processing unit Mixed reality Virtual reality Image compression Solid modeling

Applied computing

E-commerce Enterprise software Computational mathematics Computational physics Computational chemistry Computational biology Computational social science Computational engineering Computational healthcare Digital art Electronic publishing Cyberwarfare Electronic voting Video game Word processing Operations research Educational technology Document management

Book Category Portal WikiProject Commons

Programming

v t e

Programming language
Programming language
generations

1GL 2GL 3GL 4GL 5GL

v t e

Programming languages

Comparison Timeline History

APL Assembly BASIC C C++ C# COBOL Fortran Go Groovy Haskell Java JavaScript
JavaScript
(JS) Lisp Lua Objective-C Pascal Perl PHP Python Ruby Shell Smalltalk Swift Visual Basic
Visual Basic
.NET (VB.NET) more...

Category Lists

Alphabetical Categorical Generational Non-English-based

v t e

Types of programming languages

Actor-based Array Aspect-oriented Class-based Concatenative Concurrent Data-structured Dataflow Declarative Domain-specific Dynamic Esoteric Event-driven Extensible Functional Imperative Logic Macro Metaprogramming Multi-paradigm Object-based Object-oriented Pipeline Procedural Prototype-based Reflective Rule-based Scripting Synchronous Templating

Assembly Compiled Interpreted Machine

Low-level High-level Very high-level

First generation Second generation Third generation Fourth generation Fifth generation

Non-English-based Visual

v t e

Major fields of computer science

Note: This template roughly follows the 2012 ACM Computing Classification System.

Hardware

Printed circuit board Peripheral Integrated circuit Very-large-scale integration Energy consumption Electronic design automation

Computer systems organization

Computer architecture Embedded system Real-time computing Dependability

Networks

Network architecture Network protocol Network components Network scheduler Network performance evaluation Network service

Software
Software
organization

Interpreter Middleware Virtual machine Operating system Software
Software
quality

Software
Software
notations and tools

Programming paradigm Programming language Compiler Domain-specific language Modeling language Software
Software
framework Integrated development environment Software
Software
configuration management Software
Software
library Software
Software
repository

Software
Software
development

Software
Software
development process Requirements analysis Software
Software
design Software
Software
construction Software
Software
deployment Software
Software
maintenance Programming team Open-source model

Theory of computation

Model of computation Formal language Automata theory Computational complexity theory Logic Semantics

Algorithms

Algorithm
Algorithm
design Analysis of algorithms Randomized algorithm Computational geometry

Mathematics of computing

Discrete mathematics Probability Statistics Mathematical
Mathematical
software Information theory Mathematical
Mathematical
analysis Numerical analysis

Information systems

Database management system Information storage systems Enterprise information system Social information systems Geographic information system Decision support system Process control
Process control
system Multimedia information system Data
Data
mining Digital library Computing platform Digital marketing World Wide Web Information retrieval

Security

Cryptography Formal methods Security services Intrusion detection system Hardware security Network security Information security Application security

Human–computer interaction

Interaction design Social computing Ubiquitous computing Visualization Accessibility

Concurrency

Concurrent computing Parallel computing Distributed computing Multithreading Multiprocessing

Artificial intelligence

Natural language processing Knowledge representation and reasoning Computer vision Automated planning and scheduling Search methodology Control method Philosophy of artificial intelligence Distributed artificial intelligence

Machine learning

Supervised learning Unsupervised learning Reinforcement learning Multi-task learning Cross-validation

Graphics

Animation Rendering Image manipulation Graphics processing unit Mixed reality Virtual reality Image compression Solid modeling

Applied computing

E-commerce Enterprise software Computational mathematics Computational physics Computational chemistry Computational biology Computational social science Computational engineering Computational healthcare Digital art Electronic publishing Cyberwarfare Electronic voting Video game Word processing Operations research Educational technology Document management

Book Category Portal WikiProject Commons

Authority control

.