posted 23 years ago
The distinction refers to the main/only technique for doing things in each language. And there are a few more common groups that you don't mention, too. I'll try and summarize the distinctions:
1. 'procedural' A language whose main technique is the 'procedure call' (also known as 'function-call', 'subroutine' etc.) Flow of control generally proceeds from one statement to another, except when dispatched to a subroutine. Languages like BASIC, C, COBOL, FORTRAN, Pascal etc. are procedural.
2. 'object oriented'. A language which supports the notion of 'objects' - items containing both state (data) and operations ('methods'). Some people split this group into 'object-based' languages, which understand objects, but can't define new ones, and 'true object-oriented' languages which have techniques for defining and creating/destroying types (classes) of objects. Visual Basic and JavaScript are object-based, C++, Java, Smalltalk, Python etc. are object-oriented.
3. 'concurrent'. A concurrent language is one which has built-in support for doing more than one thing at a time. The exact mechanism for this is unimportant, although the concept of "threads" seems to be the most popular way to do this at the moment. Occam and Java are concurrent.
4. 'functional'. Not to be confused with procedural, although the name sounds similar. A functional language is one in which the only technique for doing things is the function call, and these function calls must not maintain state or have side effects other than the return value. This may seem limiting, but it does have advantages :- programs in functional languages are much easier to prove correct, and can run very well on parallel (multi-processor) hardware. ML and (theoretically) Lisp and Scheme are functional languages.