A programming paradigm is a paradigm for programming computer programs or more generally software or software systems development. It gives the view that the programmer has of the execution of the program: for instance, in the case of object-oriented programming, the programmer sees the execution of the program as a collection of dialoguing objects.
A programming paradigm is often closely connected to a certain school of software architecture, software engineering or similar and is often associated with a certain family of programming languages. Many languages are designed to implement a particular paradigm. For instance, Smalltalk and Java are associated with object-oriented programming, while Haskell and Scheme are associated with functional programming. Other languages, such as Common Lisp and Python, are intended to allow the use of multiple paradigms. The relationship between paradigms and languages can be more complex, however; for instance, C++ adds aspects of Object-oriented programming to C, a structured programming language.