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?
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?
Réponses:
Il existe quatre approches principales, bien que celles-ci n'effleurent que la surface de ce qui est disponible:
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ù
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.
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.