Simula
| Image manquante Langage_progr.png image:Langage_progr.png |
| Cet article fait partie de la série Langages de programmation |
| Langages à objets |
| Ada 95 - C++ - C# Common Lisp Delphi - Eiffel - Java Nice - Oz - Python Simula - Smalltalk Visual Basic |
| Langages impératifs |
| APL - ASP - Assembleur BASIC - C - COBOL Forth - FORTRAN - Logo Pascal - Perl - PHP |
| Langages fonctionnels |
| Erlang - Haskell ML/OCaml - Oz Lisp/Common Lisp Scheme |
| Langages déclaratifs |
| Clips - Oz - Prolog |
| Langages concurrents |
| Ada 95 - Erlang Java - Oz |
| Langages balisés |
| HTML - SGML - XML Dialectes XML S-expressions |
| Voir aussi |
| Conception - Codage Tests - Optimisations |
Simula (Simple universal language) est le langage qui a introduit le paradigme orienté objet en programmation, en 1960, et il est donc considéré comme le premier langage à objet et le précesseur de langages ultérieur tels que Smalltalk, C++ et surtout Eiffel. Simula est basé sur Algol 60.
| Sommaire |
Historique
Simula a été développé dans les années 1960 au Norwegian Computing Centre d'Oslo, initiallement par Ole-Johan Dahl et Kristen Nygaard. Syntaxiquement parlant, c'est un sur-ensemble d'Algol, qui ajoute à celui-ci les concepts, aujourd'hui familiers, de la programmation objet et de la simulation discrète.
Simula n'a jamais été un simple langage universitaire, puisqu'il a été utilisé pour des application industrielles jusqu'à aujourd'hui, mais son influence historique est considéré comme plus importante que les applications qui auraient pu être développées avec lui.
Par Simula, on entend généralement Simula-67 , c'est-à-dire la version de 1967, alors que la version précédente datait de 1964 : Simula I.
Simulation discrète
Comme son nom l'indique, en plus de constituer un langage de programmation généraliste, Simula a été conçu de façon à contenir des bibliothèques de classes offrant un support de concepts spécifiques à la simulation discrète. La classe Process, héritant de Simulation permettait ainsi à l'utilisateur d'hériter pour ses propres classes de simulation du comportement de base d'un processus pouvant s'éxécuter en mode dit "quasi-parallèle", à l'aide du concept de coroutine.
Un coroutine est une routine à plusieurs points de sortie et qui reprenait son exécution à chaque entrée du flox d'exécution dans celle-ci, à la dernière instruction où le flot l'avait quitté. Le point d'éxécution était stocké dans le LSC : Local Sequence Counter.
La bibliothèque de simulation discrète permettait de gérer la file des processus au moyen d'instruction dédiées (Activate, Passivate, Hold, etc.)
Programmation objet
Tout les grands concepts (et même plus) de ce qui sera appelé plus tard la programmation orientée objet sont d'ores et déjà présents dans Simula, qui les inaugure (polymorphisme, encapsulation, etc.) et qui alliait de surcroit la clarté syntaxique de l'Algol :
- les classes, les attributs et les méthodes
- l'instanciation via l'instruction New
- les relations entre objets au moyen de références d'objet : Ref( ) et affectation de références avec l'instruction :-
- référence sur l'instance courante grâce au mot clé This
- Test de référence nulle automatique nativement supporté Inspect-Do-Otherwise : Inspect rect do Draw ici, x.Draw ne sera appelé que si x n'est pas une référence nulle (mot clé : None)
- fonction virtuelles
- appel de méthode par notation pointée (dot-notation) : <objet>.<méthode>
- appel qualifié (i.e. statiquement lié) de méthodes virtuelles à l'aide de l'opérateur Qua ou avec Inspect-When
- reconnaissance de type à l'éxécution (instruction Inspect, Is, In)
- héritage simple entre classes
- restriction d'accès (Hidden, Protected)
- classes imbriquées (ou internes)
- Imbrication sophistiquée des appels du corps de méthode de la classe via l'instruction Inner, qui peut ainsi permettre d'obliger l'exécution de code avant et/ou après l'exécution du corps d'une classe dérivée : on voit déjà se profiler le concept d'assertions, implémentées par Eiffel dans les années 80, ou même la programmation par aspect, qui sera développée dans les années 1990.
- un ramasse-miette (garbage-collector).
Cette liste succincte permet de prendre conscience de la percée conceptuelle opérée par Simula dans les années 1960.
Voir aussi
- langages à objet
- BETA (le successeur de Simula)
Liens externes
- Introduction to OOP in Simula – par J.Sklenar, basé sur le séminaire de 1997 « 30 Years of Object Oriented Programming (OOP) » de l'Université de Malte
- How Object-Oriented Programming Started – par Dahl et Nygaard, version abbrégée d'un article d'une encyclopédie sur la page du site de Nygaards.
