D'autres ont à juste titre répondu «non» avec des exemples de langues. Je pensais pouvoir étendre mon propos en ajoutant un exemple sur la manière d’ajouter des exceptions à une langue sans jamais impliquer la POO.
Je le ferai dans le cas du langage DSKL (langage déclaratif du noyau séquentiel) d' OZ , un langage bien adapté à la vie académique comme celle-ci. Le DSKL (ou DKL) peut être vu ici (résultat de la recherche aléatoire), la partie Déclarations et valeurs. La définition exacte n’est pas importante, à part qu’il s’agit d’un langage très simple, sans variables modifiables (elles sont déclarées et ensuite liées), et pas de POO intégrée.
La programmation orientée objet ne peut même pas être ajoutée en tant qu'abstraction linguistique à cette langue du noyau. En ajoutant des noms uniques à la langue du noyau (NewName) et en utilisant la portée locale, l’encapsulation peut être réalisée. Ou en ajoutant un état modifiable à la langue du noyau (NewCell) et en utilisant une OOP de portée locale avec encapsulation appropriée. Mais cela ne peut pas être réalisé avec la seule langue du noyau spécifiée.
Si nous ajoutons ensuite des exceptions à la langue du noyau, nous aurons une langue sans prise en charge de la POO mais avec des exceptions. Laissez-moi vous montrer comment:
En définissant une machine abstraite avec une pile et un stockage, nous pouvons définir ce que chaque instruction de notre langage doit faire (la sémantique de l’instruction). Par exemple, skip
dans la pile ne devrait rien faire, A = 3
dans la pile devrait lier (/ unifier) A à (/ avec) 3.
Nous commençons par ajouter la syntaxe de la manière dont nos exceptions doivent être définies. Pour ce faire, nous ajoutons deux autres clauses à <statement>
la DKL.
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
Voici le try / catch connu et un moyen de lever / jeter des exceptions.
Nous définissons leur sémantique par la façon dont ils devraient travailler sur la machine abstraite:
Try
La déclaration sémantique est: (try <statement1> catch <id> then <statement2> end)
Do:
- Poussez sur la pile la déclaration sémantique
(catch <id> then <statement2> end)
- Poussez sur la pile la déclaration sémantique
(<statement1>)
Notez que l'instruction 1 sera au-dessus de la pile et sera exécutée en premier.
Raise
L'énoncé sémantique est: (raise <id> end)
Do:
- Si rien ne se trouve sur la pile, arrêtez et signalez une exception non capturée.
- Sinon, extrayez la première déclaration sémantique de la pile. Si ce n'est pas une déclaration de capture, passez à l'étape 1.
- Nous avons un piège, sur le formulaire
(catch <id> then <statement> end)
Poussez (<statement>)
sur la pile.
Catch
Si nous voyons une instruction catch lors de l'exécution normale, cela signifie que tout ce qui était à l'intérieur a été exécuté sans générer d'exceptions jusqu'à ce niveau. Ainsi, nous sortons simplement catch
de la pile et ne faisons rien.
CQFD, nous avons un langage avec des exceptions et aucune possibilité de POO.
J'ai supprimé la partie environnement de la machine abstraite pour la simplifier.