[PYTHON] Une introduction à la programmation orientée objet pour les débutants par les débutants

Aperçu

Le but de cet article est de rendre la tâche aussi simple que possible pour les personnes (y compris moi-même) qui sont allergiques à l'orientation objet, "La programmation orientée objet n'est pas effrayante".

Puisque je suis un débutant en programmation, veuillez comprendre que les explications des termes peuvent être différentes ou que certaines expressions peuvent être difficiles à comprendre.

Qui est la cible de cet article

  1. Je veux en savoir plus sur la programmation orientée objet
  2. Je veux savoir de quel type de contenu l'article écrit par un débutant est
  3. Je veux lire le code source écrit par une autre personne
  4. Autres lecteurs autres que 1-3

Qu'est-ce que la programmation orientée objet en premier lieu?

Selon Wikipedia

[Programmation orientée objet-Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF % E3% 83% 88% E6% 8C% 87% E5% 90% 91% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9F% E3 % 83% B3% E3% 82% B0)

Qu'est-ce que la programmation orientée objet?

Dans la programmation orientée objet (anglais: programmation orientée objet, abréviation: POO), les données et les méthodes étroitement liées les unes aux autres sont regroupées dans un objet, et chacune a des propriétés et des rôles différents. Il s'agit d'une méthode de développement logiciel qui construit l'ensemble du programme à travers diverses définitions d'objets et de paramètres de divers processus qui interagissent avec ces objets.

Qu'est-ce que l'orientation objet?

Le terme orienté objet lui-même a été inventé par l'informaticien Alan Kay. Kay, qui a été impressionné par la conception du langage "Simula" sorti en 1962, a dit ce mot inventé pour la première fois en expliquant le design du langage de "Smalltalk", qu'il a commencé à publier en 1972. Il a été envoyé dans le monde. Il convient de noter que l'orientation objet centrée sur le passage de message montrée par Kay n'est pas largement reconnue et se concentre uniquement sur le concept de programme d'objets. Dans le même temps, l'orientation de l'objet qui a laissé les mains de Kay s'est déplacée vers une interprétation centrée sur des types de données abstraits, et avec l'opportunité du "C ++" publié par l'informaticienne Biane Strovestrup en 1983, Japon Les paradigmes d'encapsulation, d'héritage et de polymorphisme, qui sont généralement appelés les trois éléments majeurs de la POO, ont été établis.

Alors c'est quoi?

Un ensemble de données et de méthodes étroitement liées les unes aux autres.

Programmation orientée objet (POO)

Classes et instances

Qu'est-ce qu'une classe

Il correspond au dessin de conception lors de la fabrication d'une voiture.

Voici l'exemple de code.

sample.py


class Car:
    def __init__(self):
        pass

Qu'est-ce qu'une instance?

Cela correspond à la voiture elle-même (entité) qui a été fabriquée.

Voici l'exemple de code.

sample.py


class Car:
    def __init__(self):
        pass

car = Car()  #exemple

Quel type d'informations, quelles pièces et quelles fonctions possède une voiture?

Par exemple, type de véhicule, numéro, couleur, moteur, pneus, etc ... Et il y a aussi des accélérateurs et des freins.

Ajoutons (certaines de) ces informations au dessin de conception.

Voici l'exemple de code.

sample.py



class Car:
    def __init__(self, name, color):
        self.name = name  #Nom de la voiture
        self.color = color  #Couleur de la voiture

    def start_engine(self):
        print("J'ai démarré le moteur.")

    def stop_engine(self):
        print("J'ai éteint le moteur.")

    def accelerator(self):
        print("J'ai appuyé sur l'accélérateur.")

    def brake(self):
        print("J'ai appuyé sur le frein.")

mycar = Car("Prius", "blanc")  #Génération d'instance
mycar.start_engine()  #J'ai démarré le moteur. Est affiché
mycar.accelerator()  #J'ai appuyé sur l'accélérateur. Est affiché
mycar.brake()  #J'ai appuyé sur le frein. Est affiché
mycar.stop_engine()  #J'ai éteint le moteur. Est affiché

Laissons cela pour le moment.

Trois éléments majeurs de la POO (programmation orientée objet)

Plus tôt, j'ai mentionné un peu dans la citation de Wikipedia.

  1. Encapsulation
  2. Héritage
  3. Diversité

Encapsulation

Encapsulation-Wikipedia

L'encapsulation en programmation (capsule ou anglais: encapsulation) signifie combiner des données (attributs) et des méthodes (procédures) en un seul objet et cacher son contenu. Le concept d'encapsulation peut être vu comme l'un des concepts constitutifs de l'information cachée dans D.L. Parnas.

Les objets en programmation orientée objet sont créés en encapsulant des informations par classes.

L'encapsulation masque les informations que vous ne souhaitez pas divulguer à l'extérieur.

En Python, l'encapsulation est effectuée en préfixant le nom de la variable (ou le nom de la fonction) avec un trait de soulignement. Cependant, en Python, il est préférable de ne pas encapsuler autant que possible. S'il y a un trait de soulignement, il ne doit être utilisé que dans cette classe, Dans le cas de deux traits de soulignement (appelés squames), l'utilisation est plus restreinte. C'est un peu spécial d'appeler, mais cela ne signifie pas que vous ne pouvez pas.

Il peut également être utilisé pour masquer facilement des traitements complexes. Dans ce cas, vous devez l'utiliser activement. Si vous le comparez à une voiture, divers enfants sont faits à l'intérieur pour démarrer le moteur, Le conducteur n'a pas besoin de le savoir.

Voici l'exemple de code.

sample.py



class Car:
    def __init__(self, name, color):
        self.name = name  #Nom de la voiture
        self.color = color  #Couleur de la voiture
        self._age = "Modèle 2020"  #Année modèle
        self.__engine = "moteur à essence"  #Type de moteur


mycar = Car("Prius", "blanc")
print(mycar._age)  #Réalisable,Affiché comme "2020"
mycar._age = "2019"  #La substitution est également possible * Ne devrait pas être

print(mycar.__engine)  #Cela provoquera une erreur
# AttributeError: 'Car' object has no attribute '__engine'
print(mycar._Car__engine)  #Réalisable,Il dit "moteur à essence" mais ne devrait pas

Héritage

[Héritage (programmation) -Wikipedia](https://ja.wikipedia.org/wiki/%E7%B6%99%E6%89%BF_(%E3%83%97%E3%83%AD%E3%82) % B0% E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0))

L'héritage (héritage) est l'un des concepts qui composent l'orientation objet. Lorsqu'un objet hérite des caractéristiques d'un autre objet, on dit qu'il existe une "relation d'héritage" entre les deux. (Omis) En général, lorsque B hérite de A, une relation sémantique (relation Is-a) de «B est un A.» (B est un type de A) est valable. Par conséquent, il n'est souvent pas approprié d'avoir des relations d'héritage entre des classes sémantiquement non liées simplement parce qu'elles ont le même comportement.

Il y a «délégation» dans un concept similaire à l'héritage, mais dans l'héritage, la relation d'héritage une fois décidée n'est généralement pas modifiée, mais le sujet de la délégation peut être changé selon les besoins.

L'agrégation et la composition sont des concepts qui sont différents dans la hiérarchie de l'héritage avec une relation Is-a, mais il s'agit d'une relation d'inclusion dans laquelle la relation entre les classes est Has-a et entre les classes. Les relations sont plus rares que l'héritage.

En résumé, il est préférable d'utiliser l'héritage si la relation is-a tient. Cependant, il vaut mieux s'abstenir d'utiliser inutilement l'héritage.

Si vous le comparez à une voiture La voiture de sport est une voiture Un véhicule spécial est une voiture A, etc.

Voici l'exemple de code.

La classe de voiture est la même qu'avant.

sample.py


class Car:
    def __init__(self, name, color):
        ...
    ...


class SportCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)


class SpecialCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)

La classe héritée est appelée la classe parente et la classe héritée est appelée la classe enfant. Dans l'exemple de code ci-dessus, la classe Car est la classe parente et SportCar et SpecialCar sont les classes enfants. La classe enfant super () .__ init__ (nom, couleur) appelle la classe parent __init__.

Diversité (polymorphisme)

[Polymorphisme-Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3 % 82% A3% E3% 82% BA% E3% 83% A0)

Le polymorphisme décrit la nature du système de types d'un langage de programmation, et que chaque élément du langage de programmation (constantes, variables, expressions, objets, fonctions, méthodes, etc.) appartient à plusieurs types. Fait référence à la propriété de pardonner.

Si vous regardez Wikipedia, vous ne comprenez probablement pas ce que vous dites, alors jetez un œil à l'exemple de code.

Voici l'exemple de code.

sample.py



class Car:
    def __init__(self, name, color):
        ...

    def accelerator(self):
        print(f"J'ai appuyé sur l'accélérateur.({self.name})")

    def brake(self):
        print(f"J'ai appuyé sur le frein.({self.name})")


class SportCar(Car):
    ...


class SpecialCar(Car):
    ...


cars = [Car("Prius", "blanc"), SportCar("Ferrari", "rouge"), SpecialCar("ambulance", "blanc")]
for car in cars:
    car.accelerator()
    car.brake()

Résultat d'exécution.


J'ai appuyé sur l'accélérateur.(Prius)
J'ai appuyé sur le frein.(Prius)
J'ai appuyé sur l'accélérateur.(Ferrari)
J'ai appuyé sur le frein.(Ferrari)
J'ai appuyé sur l'accélérateur.(ambulance)
J'ai appuyé sur le frein.(ambulance)

En préparant une méthode avec le même nom, il est possible de l'utiliser sans connaître le type (classe).

Toute l'explication est terminée

C'est tout pour l'explication.

À partir de maintenant, nous modifierons le code source en un programme qui semble être une programmation orientée objet.

Cliquez ici pour le code source original

sample.py


class Car:
    def __init__(self, name, color):
        self.name = name  #Nom de la voiture
        self.color = color  #Couleur de la voiture

    def start_engine(self):
        print("J'ai démarré le moteur.")

    def stop_engine(self):
        print("J'ai éteint le moteur.")

    def accelerator(self):
        print("J'ai appuyé sur l'accélérateur.")

    def brake(self):
        print("J'ai appuyé sur le frein.")


class SportCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)


class SpecialCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)


cars = [Car("Prius", "blanc"), SportCar("Ferrari", "rouge"), SpecialCar("ambulance", "blanc")]
for car in cars:
    car.accelerator()
    car.brake()

Je vais le réparer un peu. La voiture n'a pas les fonctions de démarrage du moteur et d'arrêt du moteur. Il n'y a qu'un seul bouton moteur. Donc ... Combinez start_engin (self) et stop_engine (self) en un seul. Assurez-vous également que le moteur tourne et que le moteur tourne.

sample.py


class Car:
    def __init__(self, name, color):
        self.name = name  #Nom de la voiture
        self.color = color  #Couleur de la voiture
        self._engine = False  #Vrai lorsque le moteur tourne,Faux quand il n'est pas allumé

    def engine(self):
        print(f"[{self.name}]", end=" ")
        self._engine = not(self._engine)
        if self._engine:
            print("J'ai démarré le moteur.")
        else:
            print("J'ai éteint le moteur.")

    def accelerator(self):
        print(f"[{self.name}]", end=" ")
        print("J'ai appuyé sur l'accélérateur.")

    def brake(self):
        print(f"[{self.name}]", end=" ")
        print("J'ai appuyé sur le frein.")


class SportCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)


class SpecialCar(Car):
    def __init__(self, name, color):
        super().__init__(name, color)


cars = [Car("Prius", "blanc"), SportCar("Ferrari", "rouge"), SpecialCar("ambulance", "blanc")]
for car in cars:
    car.engine()
    car.accelerator()
    car.brake()
    car.engine()

Résultat d'exécution.


[Prius]J'ai démarré le moteur.
[Prius]J'ai appuyé sur l'accélérateur.
[Prius]J'ai appuyé sur le frein.
[Prius]J'ai éteint le moteur.
[Ferrari]J'ai démarré le moteur.
[Ferrari]J'ai appuyé sur l'accélérateur.
[Ferrari]J'ai appuyé sur le frein.
[Ferrari]J'ai éteint le moteur.
[ambulance]J'ai démarré le moteur.
[ambulance]J'ai appuyé sur l'accélérateur.
[ambulance]J'ai appuyé sur le frein.
[ambulance]J'ai éteint le moteur.

Est-ce que c'est comme ça?

Je ne pouvais pas penser à un bon exemple, donc cela a peut-être été difficile à comprendre. Je pense que la programmation orientée objet sera utile à mesure que le nombre de personnes augmentera.

Cette fois, ça se termine.

Jusqu'à la fin Merci d'avoir lu. Si vous avez des erreurs ou des conseils, je vous serais reconnaissant de bien vouloir commenter.

Recommended Posts

Une introduction à la programmation orientée objet pour les débutants par les débutants
Introduction à la programmation (Python) TA Tendency pour les débutants
Une introduction à la programmation Python
Une introduction à Mercurial pour les non-ingénieurs
Premiers pas avec Python pour les non-ingénieurs
Une introduction à OpenCV pour l'apprentissage automatique
Les débutants lisent "Introduction à TensorFlow 2.0 pour les experts"
Une introduction à Python pour l'apprentissage automatique
Une introduction à Python pour les programmeurs en langage C
Une introduction à l'apprentissage automatique pour les développeurs de robots
Pour les débutants à créer un environnement Anaconda. (Note)
Introduction à la modélisation statistique pour l'analyse des données
Une introduction à l'analyse vocale pour les applications musicales
[Pour les débutants] Comment étudier la programmation Mémo privé
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
AOJ Introduction à la programmation Sujet 1, Sujet 2, Sujet 3, Sujet 4
Introduction à Private TensorFlow
Une introduction à l'apprentissage automatique
AOJ Introduction à la programmation Sujet n ° 7, Sujet n ° 8
AOJ Introduction à la programmation Sujet n ° 5, Sujet n ° 6
Introduction à l'optimisation bayésienne
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Introduction à Python pour, pendant
■ Kaggle Practice pour les débutants - Introduction de Python - par Google Colaboratory
[Explication pour les débutants] Introduction au traitement du pliage (expliqué dans TensorFlow)
[Explication pour les débutants] Introduction au traitement du pool (expliqué dans TensorFlow)
Une introduction à la programmation fonctionnelle pour améliorer l'efficacité du débogage en 1 minute
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
[Introduction à Python3 Jour 1] Programmation et Python
Introduction aux équations d'estimation généralisées par des modèles de statistiques
[Tutoriel Python] Une introduction facile à Python
Comment résoudre le problème de l'algorithme de planification dynamique (vu par les débutants)
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
[Version 2020 pour les débutants] Méthode d'étude recommandée pour ceux qui souhaitent devenir eux-mêmes ingénieur en IA
Réponse à la sélection des débutants d'AtCoder par Python3
Environnement de programmation pour les débutants réalisé avec Windows
[Pour les débutants] Super introduction aux réseaux de neurones que même les chats peuvent comprendre
Résumé du tutoriel Django pour les débutants par les débutants ③ (Afficher)
Décidez pour qui voter par loterie
Réseau neuronal récursif: une introduction à RNN
Introduction à discord.py (1er jour) -Préparation pour discord.py-
Une introduction aux applications Web Python auto-conçues pour un ingénieur Web de troisième année paresseux
Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test)
Affecté à un laboratoire par programmation entière
Une introduction à l'orientation des objets - Donnez à un objet un enfant.
Introduction à la base de données Graph Neo4j en Python pour les débutants (pour Mac OS X)
Un manuel pour les débutants réalisé par des débutants Python
Mémo n ° 4 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Qu'est-ce qu'un algorithme? Introduction à l'algorithme de recherche] ~ Python ~
Le moyen le plus rapide pour les débutants de maîtriser Python
Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
Résumé du tutoriel Django pour les débutants par les débutants ⑥ (fichier statique)
Comment créer un plug-in Spigot (pour les débutants Java)
Python pour les super débutants Super débutants Python # Facile à éliminer
J'ai essayé d'obtenir une image en grattant
Une introduction à Cython sans aller plus loin
Inspiré d'un article pour les nouveaux arrivants (en abrégé ci-dessous)