Définition formelle / contrepartie en mathématiques pour les «objets» des modèles orientés objet


9

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.


2
Il y a vraiment deux questions à mon avis. On demande un formalisme des concepts orientés objet. L'autre demande des concepts orientés objet en mathématiques. Il serait peut-être préférable de poser deux questions distinctes. Il y a beaucoup de documents pour répondre à la première question, mais probablement seulement un peu pour la seconde. (Et peut-être que demain je trouverai le temps de répondre à la question.)
Dave Clarke

Merci .. pourriez-vous s'il vous plaît me suggérer un matériel pour la formalisation de concepts orientés objet considéré comme standard ou "livre de texte"? J'attendrai votre réponse pour la deuxième .... :)
user1260776

2
Le livre standard (il y a quelques années) est A Theory of Objects . Des travaux plus récents sont Featherweight Java . Il existe également une série d'ateliers appelés Fondements des langages orientés objet qui traitent de ces questions.
Dave Clarke

Merci! Va les parcourir ... Aussi, je suis tombé sur "lambda calculus" qui est étroitement lié à ma question ..
user1260776

Réponses:


9

La réponse est compliquée, pour deux raisons.

  1. 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 .

  2. 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.

hg(X)=gXg-1hggXgXg-1g,XgXg-1g,XgXg-1,Xg-1Xg

XX˙X(t)X˙X(t)t. De cela, de nombreux mathématiciens qui réfléchissent profondément ont conclu que le changement n'existe pas vraiment et que tout ce que vous avez est fonction du temps. Mais ce qui changeait dans la mécanique newtonienne n'était pas la position, mais la particule . La position est son état instantané. Aucun mathématicien ou physicien ne prétendrait qu'une particule est une idée mathématique. C'est une chose physique.

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".

X1(t)X2(t)

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é ".


2
Je savais que quelqu'un ici serait en mesure de répondre ...
Andrej Bauer

Merci Uday pour votre temps et votre réponse détaillée. Quand j'ai posé cette question, je ne pensais qu'au sens de "données + opérations", et il ne m'est jamais venu à l'esprit que la théorie des groupes pouvait représenter "OBJET" comme "données + opérations". Je vais également parcourir les liens que vous avez mentionnés.
user1260776

@AndrejBauer. Ouais, je suis probablement allé trop loin. L'OP utilisait probablement les «mathématiques» comme un mot pour la formalisation, par opposition à une discipline.
Uday Reddy

@Uday, je n'ai peut-être pas formulé correctement la question, mais quand je parlais de «mathématiques», je voulais clairement dire des mathématiques formelles. Ma pensée était «la« théorie des ensembles »forme le fondement des mathématiques, comment« expliquer »ou« dériver »les objets de la modélisation OO en termes de théorie des ensembles. logique du premier ordre) ... "Bien que je ne comprenne pas complètement votre réponse, je suis en mesure de" comprendre "ce que vous avez dit, et je vous assure, c'est la réponse que j'attendais. Merci !! (mes idées ne sont pas complètement organisées, merci de me pardonner je suis toujours débutant :))
user1260776

2
@ user1260776. Je comprends. Mais mon point est que "formel" et "mathématiques" sont des idées différentes. Vous pouvez formaliser des concepts sans les réduire (ou les dériver) des mathématiques. Newton a formalisé la mécanique mais n'a pas pris la peine de réduire les "particules" en "ensembles". Je suis personnellement très heureux de suivre l'exemple de Newton et d'admettre des choses que je ne réduis pas à des sets. Mais je suppose que nous devons savoir quand réduire et quand ne pas réduire. Ayant été formé en tant que physicien, je trouve cela assez facile à faire. Pour de nombreux autres informaticiens, ce n'est peut-être pas si facile.
Uday Reddy

0

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

  • méthodes (avec paramètres)
  • état, c.-à-d. variables d'instance

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


3
Bien sûr, les objets au sens de la programmation orientée objet ont été formalisés. Il y a des livres d'Abadi & Cardelli, Castanga et Kim Bruce consacrés au sujet. La série FOOL a consacré 10 ans d'ateliers aux fondements de la programmation orientée objet. Les conférences ECOOP et OOPSLA ont régulièrement publié des articles sur les fondements de l'OO. En effet, le premier article sur la sémantique de l'OO a environ 20 ans.
Dave Clarke

@vzn, merci pour la réponse. Je vais parcourir les livres que vous avez suggérés ...
user1260776

DC-- J'ai mal formulé cela. plus précisément, pensez qu'il est prudent de dire que les définitions formelles de ce qui constitue exactement un "objet" ou quelles sont les composantes clés / fondamentales de la POO ont tendance à varier considérablement dans la littérature. les définitions se sont probablement considérablement élargies au fil du temps. par exemple, je soupçonne que l'héritage a été ajouté plus tard et l'idée originale était principalement juste du code + des données sous forme encapsulée.
vzn

un autre exemple d'une fonctionnalité de POO qui n'est pas reconnu comme fondamental d'après ce que je peux dire est l'héritage multiple qui est vu par exemple en C ++ mais intentionnellement évité en java en faveur des interfaces à la place. etc
vzn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.