La modernisation de l'orientation objet de Python est-elle?

Quand j'ai dit ça quelque part, j'ai été frappé pour une raison quelconque.

Python est un langage de programmation orienté objet.

Premièrement, ce qui précède est mentionné comme prémisse. Python avait des fonctionnalités orientées objet lors de sa première sortie. Ceci est très différent de Perl et PHP, qui ont été modernisés avec l'orientation objet dans la mise à niveau de version après la version initiale. Cependant, je voudrais affirmer clairement qu'il s'agit d'une rénovation.

Retrofit orienté objet = pas "pur langage de programmation orienté objet"

Wikipedia décrit le concept de «langage purement orienté objet». [Wikipedia-ja: programmation orientée objet](http://ja.wikipedia.org/wiki/Object-oriented programmation) et [Wikipedia-en: programmation orientée objet] Voir les deux (http://en.wikipedia.org/wiki/Object-oriented_programming). Je ne pense pas que la définition soit légèrement différente entre la version japonaise et la version anglaise, mais la version japonaise est plus propre. En d'autres termes, le mot «pur» est utilisé selon qu'il a été conçu comme un langage orienté objet dès le départ.

Que sera-ce d'autre? En d'autres termes, il s'agit d'un langage dans lequel l'orientation objet est ajoutée ultérieurement à une conception de langage qui n'est pas orientée objet. Ne pas être un "pur langage de programmation orienté objet" signifie que orienté objet est __ postscript __. La version japonaise définit des choses telles que «langage hybride orienté objet».

Malheureusement, Wikipedia mentionne Python comme l'un des langages de programmation orientés objet, mais ne le donne pas comme un exemple de "pur" ou "hybride". Même s'il couvre Ruby, qui est plus mineur que Python.

Ce n'est pas parce qu'il est disponible au moment de la première version que ce n'est pas une mise à niveau.

Il est à noter dans l'article de Wikipédia ci-dessus que le C ++ est «hybride». C ++ est un langage qui étend C avec des objets orientés etc. __ retrofit __. Bien sûr, lorsque C ++ a été publié pour la première fois, il s'agissait d'un langage de programmation orienté objet.

En d'autres termes, nous ne pouvons pas conclure qu'il ne s'agit "pas d'une mise à niveau" simplement parce que Python était orienté objet lors de sa première sortie.

Notable est la conception initiale avant la sortie

Un lecteur averti soulignera ici la différence décisive dans les origines des langages C ++ et Python. C ++ a été créé sous la forme d'une extension de C. Il est donc normal de prétendre que C est __ postfixé avec l'orientation objet. Mais Python n'est une extension d'aucun autre langage. Bien sûr, je me réfère et suis influencé par d'autres langues, mais il n'y a pas de langue sous-jacente. C'est un langage conçu à partir de zéro.

Cependant, il semble que Python n'ait pas adopté l'orientation objet lors de la phase de conception initiale. En d'autres termes, ce n'était pas un langage de programmation orienté objet dans les premiers jours avant sa sortie. Après cela, il a été ajouté à __ la mise à niveau de l'orientation de l'objet, puis mis à la disposition du grand public. La base de cette histoire est seulement Explorer d'autres langages pour Rubyist [1er] Python écrit par l'auteur de Ruby. Je pensais que la crédibilité était suspecte, mais l'auteur de Python lui-même The History of Python: Adding Support for User-defined Classes -for-user-defined-classes.html) (traduction japonaise: The History of Python.jp: Ajout de la prise en charge des classes définies par l'utilisateur -post_30.html)) parle de son historique. [^ 1]

[^ 1]: merci: @shibukawa

Ensuite, je voudrais mentionner quelques points qui ne sont pas orientés objet, ce qui est une preuve de modernisation.

Où Python n'est pas orienté objet

Python est un langage qui peut être utilisé comme langage de programmation orienté objet, même s'il est modernisé. De même, retrofit C ++ peut être utilisé comme langage de programmation orienté objet. Donc, l'affirmation selon laquelle il ne peut pas être utilisé orienté objet parce qu'il s'agit d'une mise à niveau est __ totalement absurde __. Python a été introduit proprement au tout début, et il est différent des langages tels que Perl et PHP qui ont une méthode de mise à niveau sale.

Cependant, certaines choses ne sont pas orientées objet car elles n'ont pas été conçues comme un langage de programmation orienté objet dès le début. Je voudrais le comparer avec Ruby, qui a été conçu comme un langage de programmation orienté objet depuis le début.

Il y a une fonction

Python a des fonctions. Des fonctions pratiques et fréquemment utilisées (telles que la fonction print () qui sort des caractères sur la sortie standard et la fonction len () qui calcule la longueur d'un tableau, etc.) sont intégrées et préparées depuis le début. Les fonctions ne sont pas orientées objet car ce ne sont des méthodes associées à aucun objet.

Inversement, Ruby n'a pas de fonctions, seulement des méthodes. Puisque Ruby a une conception de langage selon laquelle l'existence de l'objet implicite de niveau supérieur main et self peut être omise, la méthode Kernel # met etc. peut être écrite comme une fonction, mais à proprement parler, self (en haut du code) Dans le cas d'un niveau, il appelle simplement la méthode de l'objet de niveau supérieur main).

Il y avait une classe à l'ancienne avec des restrictions

Il existe deux types de classes Python. L'ancienne classe de style qui était utilisée avant la version 2.1 et la nouvelle classe de style qui peut être utilisée à partir de la version 2.2. Dans l'ancienne classe de style, le type intégré ne peut pas être hérité, et la gestion des types et des classes est séparée (pour les objets ʻaetb de deux classes non liées, type (a) == type (b) ʻest vraiment Il y avait des problèmes tels que), et le langage dans son ensemble n'était pas orienté objet. Dans la nouvelle classe de style, la classe a été repensée à partir de zéro (mais le style d'écriture est presque le même), et elle est satisfaisante car orientée objet.

Dans Python3, seule la nouvelle classe de style est disponible et l'ancienne classe de style est supprimée.

Au contraire, dans Ruby, seules les classes existent, et comme toutes les classes sont traitées de la même manière, il n'y avait pas de types (classes) intégrés qui ne pouvaient pas être hérités.

Python est toujours un langage de programmation orienté objet, mais ce n'est pas le seul.

Puisque Python a été étendu pendant une longue période, certaines parties ne sont pas très belles en tant que langage. Python3 organise ces parties, et on peut dire que Python3 est un langage merveilleux. Même considéré comme un langage de programmation orienté objet, il a des fonctions et une élégance comparables à celles d'un "langage de programmation orienté objet pur" car il a été intégré dans une nouvelle classe de style.

Enfin, bien qu'il soit un peu vieux, je voudrais vous présenter cet article.

blog méthane: pourquoi len reste une fonction dans py3k

Cela n'a donc pas d'importance pour Python qu'il s'agisse d'un langage de programmation orienté objet. Bien sûr, "être capable de faire de la programmation orientée objet" est important, mais on pense que le langage lui-même n'a pas à être lié à une programmation orientée objet. Python a l'image du codage de liaison, mais c'est en fait un langage libre qui n'est pas lié par l'orientation objet.

Puisque Ruby est un "pur langage de programmation orienté objet", il ne peut programmer que de manière orientée objet (bien qu'il puisse être forcé, il n'y a presque aucun avantage à utiliser Ruby). Il est facile de penser que c'est Ruby qui hérite de la liberté de Perl, mais il peut être ironique que vous ne puissiez pas échapper aux contraintes orientées objet.

Recommended Posts

La modernisation de l'orientation objet de Python est-elle?
Où est fluentd de python ??
Qu'est-ce que __init__.py de Python?
TypeError: l'objet 'int' n'est pas en indice
[Erreur Django] L'objet 'RenameAttributes' n'est pas itérable
Pourquoi la bibliothèque de journalisation de Python est-elle camelCase?
La portée statique de Python est-elle foirée?