Y a-t-il une théorie / abstraction derrière la POO?

13

La programmation fonctionnelle a le très élégant Lambda Calculus et ses variantes comme théorie de sauvegarde. Y a-t-il une telle chose pour OOP? Qu'est-ce qu'une abstraction pour le modèle orienté objet?

Viclib
la source
5
Charges et charges. Avez-vous essayé Google? Par exemple, il existe une série d'ateliers intitulée FOOL consacrée aux fondements des langages orientés objet en cours depuis 1993. Cela ne fait qu'effleurer la surface.
Dave Clarke
@DaveClarke. Je ne suis pas tout à fait d'accord. Le calcul lambda est une base pour la programmation fonctionnelle dans un sens très précis. Par exemple, le rapport Haskell dit que l'ensemble du langage Haskell peut être considéré comme un simple sucre syntaxique pour un langage de base équivalent au calcul lambda typé. Je ne connais aucun langage orienté objet qui fasse une affirmation similaire en ce qui concerne un calcul. Donc, vous avez raison, il y a des "charges". Mais rien de tout cela n'est vrai.
Uday Reddy
@UdayReddy: Cela est peut-être dû à la richesse du langage orienté objet.
Dave Clarke
1
@DaveClarke La richesse d'un sujet peut signifier que (1) c'est un bon mot à la mode, (2) nous ne comprenons pas vraiment assez le sujet pour construire un consensus, (3) nous mélangeons plusieurs questions qui sont à peu près orthogonales . Bien que je n'aie pas suivi de près la littérature (récente) sur la programmation OO, j'ai toujours eu le sentiment qu'il s'agissait de problèmes mixtes sans être très explicite à ce sujet (bien sûr, cela s'applique plus aux langues qu'au travail théorique). Ces problèmes incluent la frappe, l'abstraction, l'état, le parallélisme, la réutilisation de code. Il est peu probable qu'une (une) théorie prenne en compte toutes les variantes.
babou

Réponses:

15

Il existe quatre approches principales, bien que celles-ci n'effleurent que la surface de ce qui est disponible:

  • via lambdas et records: l'idée est de coder des objets, des classes et des méthodes en termes de constructions plus traditionnelles. Le travail de Benjamin Pierce du milieu des années 90 est représentatif de cette approche.
  • Les calculs d'objet d'Abadi et Cardelli (voir le livre d'Abadi et Cardelli A Theory of Objects : leur abstraction principale est un enregistrement de méthodes, et l'approche est plus proche de la réalisation basée sur un prototype de programmation orientée objet, bien que les classes et l'héritage puissent être encodés dans termes des éléments les plus primitifs.
  • Le calcul multiméthodes de Castagna (voir le livre de Castagna Programmation Orientée Objet Une Fondation Unifiée ): son approche prend les multiméthodes sont l'abstraction clé.
  • Calculs basés sur les classes (comme dans le livre de Kim Bruce, Foundations of Object-Oriented Languages: Types and Semantics ou Featherweight Java ): ces approches visent à capturer l'essence de la programmation basée sur les classes et à se concentrer sur les classes et l'héritage.
Dave Clarke
la source
12

La connexion entre le noyau du modèle objet et la théorie des ensembles est décrite dans les documents suivants:

Les documents présentent la structure des relations d'instance et d'héritage entre les objets. Une telle structure peut être considérée comme l'abstraction la plus élevée possible de la POO. Il montre comment la structure s'applique à des langages de programmation particuliers (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) ainsi qu'aux langages d'ontologie (schéma RDF et OWL 2 complet).

Dans les documents, l' approche des classes sont des objets est adoptée de sorte que la structure principale soit triée de façon unique. Dans la forme principale, la structure peut être exprimée comme (O, ϵ , ≤, .ec)

  • O est l'ensemble des objets ,
  • ϵ est la relation d' appartenance (objet) , un raffinement de la relation instance-de ,
  • ≤ est la relation d'héritage , et
  • .ec est la carte de classe de puissance qui est une sous-distinction distinguée, éventuellement vide, de ϵ.

Un exemple de structure de base selon le modèle d'objet Ruby est illustré par le diagramme suivant. Les liens verts montrent la relation d'héritage dans la réduction transitive réflexive, les liens bleus montrent la relation d'appartenance dans la "réduction de subsomption" - un lien bleu de x points vers le plus petit conteneur de x . La carte de classe de puissance .ec est formée de liens bleus horizontaux. Les objets de l'image de cette carte sont des classes de puissance (en gris). En Ruby, elles sont appelées classes propres ou également classes singleton (ce dernier terme étant plutôt obsolète). Les objets s , u et v (en rose) sont terminaux, les objets restants sont des descendants de la racine d'héritage r .

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

Les parties centrales du modèle objet de tous les langages ci-dessus peuvent être considérées comme des spécialisations de la structure, avec peu ou pas de constituants supplémentaires. Du point de vue théorique, le cas le plus significatif d'un constituant supplémentaire est la carte singleton (notée .ɛϲ ) introduite par Dylan. Cela fait de Dylan le seul langage de programmation (parmi ceux mentionnés ci-dessus) qui n'est pas soumis à la condition de monotonie (≤) ○ (ϵ) ⊆ (ϵ) où le symbole de composition ○ est interprété de gauche à droite.

Une façon de formaliser la connexion entre le noyau du modèle objet et la théorie des ensembles est via la famille de structures (O, ≤, r, .ec, .ɛϲ) appelées structures de métaobjet dans les documents référencés puisque x.ec ou x.ɛϲ peuvent être envisagés comme métaobjets de x . Dans ces structures, x.ec est défini pour chaque objet x et x.ɛϲ est défini pour chaque objet borné ("petit") x . Les structures sont soumises aux neuf axiomes ci-dessous. L'axiomatisation utilise une extension définitionnelle assez simple pour les huit premiers axiomes ( Tdésigne l'ensemble des objets terminaux - ceux qui ne sont pas des descendants de r , et .ec est la fermeture transitive réflexive de .ec ) mais plutôt impliqué pour le dernier axiome.

  1. L'héritage, , est un ordre partiel.
  2. La carte de classe de puissance, .ec , est une incorporation d'ordre de (O, ≤) en elle-même.
  3. Les objets de T.ec sont minimes.
  4. Chaque powerclass est un descendant de r .
  5. L'ensemble r.ec n'a pas de borne inférieure.
  6. La carte singleton, .ɛϲ , est injective.
  7. Les objets d' O.ɛϲ.ec sont minimes.
  8. Pour chaque objet x , y tel que x.ɛϲ est défini, x.ɛϲ ≤ y.ec ↔ x ≤ y .
  9. Pour chaque objet x , x.ɛϲ est défini ↔ xd <ϖ .

Dans le dernier axiome, ϖ est un ordinal à limite fixe, et .d est la fonction de rang dérivée par l'extension définitionnelle. La relation d'appartenance à un objet, ϵ, est obtenue sous la forme (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Selon le dernier axiome, la restriction de domaine de ϵ à l'ensemble des objets bornés est égale à ( .ɛϲ ) ○ (≤). Dans les documents référencés, cette relation est appelée appartenance bornée et notée ∊. En tant que caractéristique significative, cette relation est bien fondée. Cela contraste avec ϵ qui est non fondé puisque r ϵ r. Il s'avère que la correspondance principale entre (la partie centrale de) la technologie objet et la théorie des ensembles peut être exprimée comme

∊ ↔ ∈

c'est-à-dire que l'appartenance limitée correspond à l'appartenance à un ensemble entre des ensembles bien fondés. Comme cas particulier, l'univers partiel de von Neumann de rang ϖ + 1 est une structure de métaobjet par extension définitionnelle. En général, chaque superstructure abstraite ( ϖ + 1 ) (O,) est par définition équivalente à une structure de métaobjet complète . Chaque structure de métaobjet peut être fidèlement intégrée dans une structure de métaobjet complète qui à son tour peut être fidèlement intégrée dans l'univers de von Neumann.

Le terme structure de base est utilisé pour une généralisation des structures de métaobjets. Dans cette généralisation, .ec et .ɛϲ peuvent être (arbitrairement) partiels, éventuellement vides. En particulier, des structures de base finies sont possibles, la structure minimale ne contenant que la racine d'héritage r . Chaque structure de base peut être étendue à une structure de métaobjet par une complétion powerclass suivie d'une complétion singleton qui à son tour rend les structures de base fidèlement intégrables dans l'univers von Neumann.

paon
la source
@Raphael Beaucoup mieux - merci, paon!
David Richerby