| | Analysis | Requirements & Principles |
architecture: Paradigms |
substance: Abstractions |
structure: Domains | building blocks: Features |
surface: Syntactics | Defining PLs |
Language List | |||||
| foundational | safety |
flexibilized
| ||||||||||||
[3KBM] Conrad Bock: Three Kinds of Behavioral Models; JOOP July/Aug 1999.
[DevSWforUI] ...
ADD: set oriented programming in SETL (procedural), Miranda (functional), Z (specification) ...
ADD: conceptual programming: A Conceptual Perspective on the Comparison of Object-Oriented Programming Languages
ADD: William Kent: Participants and performers: a basis for classficing o-o languanges; 67-70 in: H Kilov, B Harvey (eds): Proc of WS on Specification of Behavior Semantics in O-O Information Modeling (at OOPSAL'93).
«[E]ach [programming] language comes along with a certain mindset or worldview, that is, a certain way of thinking, which can be hard to change, because one is not even aware of having it - it just "seems natural" and goes without question» [Goguen]
We will distinguish the following paradigms of
| models of computation: | code execution: | software decomposition: |
|
|
| |
For an overview on paradigms (imperative, object-oriented, functional, relational) and their influence see chapter 1 of [Leda].
The object-oriented paradigm
|
The procedural paradigm
|
A programming language supporting that MOC (ie., with static and dynamic semantic domains corresponding to the MOC's entities and events) allows computations thus conceptualized to be expressed/specified in program code[>].
Compare this to system models (or models of the world), and to (partial) structural meta-models of object-oriented programming languages with memory-object semantics (C++) or with implicit reference semantics (Java, and similarly Smalltalk, and Eiffel without expanded objects).
See a comparison of Applicative model and Update model for streams of data or timed events.
provider: system request mesg (undir.): op-name + parameters |
Imperative Update Models are the main (only?) example:
| primitive op: update |
Applicative Models are the main (only) examples:
provider (single service): operation primitive op: application request mesg (directed): parameters |
additional provider: store request mesg to storage: new value OR 'read' |
«In all other languages we've considered [Fortran, Algol60, Lisp, APL, Cobol, Pascal], a program consists of passive data-objects on the one hand and the executable program that manipulates these passive objects on the other. Object-oriented programs replace this bipartite structure with a homogeneous one: they consist (partially in Simula, exclusively in Smalltalk) of a set of data systems [i.e. objects, c.f. p. 43], each of which is capable of operating on itself.» [PLing, 249]
| focus on: | code/exec. paradigm | MOC| pure applicative | applicative storage | update | other |
1. sequence of computation steps: | algorithmic | monadic style | procedural | imperative | ? |
2. how outputs relate with inputs: | declarative | pure functional | impure functional | ? | ? |
3. response to stimuli: | rule-based | ? | ? | state-rules | event-rules | | |||
| Algorithmic Code focuses on, and thus specifies explicitly, the sequence (thread) of computation steps (the control flow), and not so much on how values depend on each other [3KBM]. |
| Declarative Code specifies how outputs depend on inputs (it has a dataflow model in the background). The order of steps follows implicitly from this dependency [3KBM]. |
parbegin
S1;
S2;
...
Sn;
parend;
|
for i := 1 to n
doparallel
...
parend;
|
parif a==0 then C1;
[] a<=9 then C2;
[] a>=9 then C3;
[] iseven(a) then C4;
parend;
|
On the object-oriented paradigm in general:
| | Analysis | Requirements & Principles | Paradigms | Abstractions | Domains | Features | foundational | safety | flexible typing | Syntactics | Defining PLs | Language List |