C'est une question que j'ai posée dans le forum Mathématiques SE, et j'ai été référé ici. Voici donc la question-
Je suis un débutant en mathématiques formelles et en informatique théorique, alors soyez indulgent avec vous si vous trouvez que ma question n'est pas bien formulée. La modélisation orientée objet semble très utile pour définir des interactions complexes lors de la simulation du monde réel. Mais c'est surtout utilisé en programmation. Je me demandais si nous avions un concept similaire en mathématiques. Lorsque nous faisons de la programmation, nous pouvons comprendre le concept d '"objets" et de "programmation orientée objet" et simplement l'implémenter. Mais avons-nous une définition formelle des "objets" en termes de théorie des ensembles? Ou d'ailleurs, toute autre théorie mathématique formelle?
Pouvons-nous implémenter / définir formellement trois concepts principaux de modélisation orientée objet - 1. Encapsulation 2. Héritage 3. Polymorphisme
Je sais que la question est trop large, mais j'apprécierais vraiment que vous puissiez également fournir des conseils pour que je puisse mieux comprendre ces concepts.
Réponses:
La réponse est compliquée, pour deux raisons.
Différentes personnes en informatique interprètent différemment le terme «objet». La première est qu'un objet se compose de certaines données et opérations regroupées. L'autre est qu'un objet est tout cela mais qu'il a également un «état», c'est-à-dire qu'il s'agit d'une forme d' entité modifiable .
Il y a de profondes questions philosophiques à voir avec ce que signifie le «changement» (et ce que signifie «l'entité», car il change constamment), et si les descriptions mathématiques capturent réellement les entités modifiables.
Il en va de même pour les objets. Ce sont des choses "physiques", et les états sont leurs attributs mathématiques. Pour une discussion intéressante sur cet aspect, voir le chapitre 3 de Structure et interprétation des programmes informatiques d'Abelson et Sussman . Il s'agit d'un manuel au MIT et ils l'enseignent à tous les scientifiques et ingénieurs, qui, je pense, comprennent parfaitement les choses "physiques".
De même, la méthode mathématique standard pour modéliser des programmes orientés objet consiste à traiter chaque objet comme un index dans l'espace d'état. La seule différence est que puisque les objets vont et viennent et que la structure du système est dynamique, nous devons l'étendre à un modèle de "monde possible" où chaque monde est fondamentalement une collection d'indices. L'allocation et la désallocation d'objets impliqueraient de passer d'un monde à l'autre.
Il y a cependant un problème. Contrairement à la mécanique, nous voulons que l'état de nos objets soit encapsulé . Mais les descriptions mathématiques des objets mettent des états partout, détruisant complètement l'encapsulation. Il existe une astuce mathématique appelée "paramétricité relationnelle" qui peut être utilisée pour réduire la taille des choses. Je n'entrerai pas dans les détails maintenant, sauf pour souligner qu'il s'agit d'une astuce mathématique, pas d'une explication très conceptuelle de l'encapsulation. Une deuxième façon de modéliser des objets mathématiquement, avec encapsulation, consiste à affiner les états et à décrire le comportement des objets en termes d'événements observables. Pour une bonne discussion de ces deux modèles, je peux vous référer à mon article intitulé Objects and classes in Algol-like Languages .
[Note ajoutée:]
Une belle analyse des fondements mathématiques des objets peut être trouvée dans l'article de William Cook " Sur la compréhension de l'abstraction des données, revisité ".
la source
pense qu'il y a une assez bonne description théorique des objets dans le vieux livre classique "structure et interprétation des programmes informatiques" [1] par abelson & sussman, basé sur le schéma (une variante lisp). maintenant gratuit en ligne! cela montre comment le concept d'orientation d'objet peut être intégré même dans le calcul lambda (~ aka Lisp) si vous avez un mécanisme pour stocker l'état local. si je comprends bien, ce fut un manuel standard du MIT pendant de nombreuses années. ne dis pas que c'est la meilleure référence sur le subj; je suis sûr qu'il y en a d'autres meilleurs à ce pt.
Je ne pense pas que cela ait été totalement formalisé partout où j'ai entendu parler, mais les objets qui parlent librement sont essentiellement composés de code + de données sous forme
sous une forme encapsulée. sans doute d'autres aspects tels que l'héritage ne sont pas fondamentaux. comme indiqué dans abelson & sussman, ce qu'ils appellent le "sucre syntaxique".
[1] structure et interprétation des programmes informatiques par abelson & sussman
la source