[PYTHON] Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern

Überblick

Der Zweck dieses Artikels ist es, es Menschen (einschließlich mir), die allergisch gegen Objektorientierung sind, so einfach wie möglich zu machen: "Objektorientierte Programmierung ist nicht beängstigend".

Da ich ein Anfänger in der Programmierung bin, verstehen Sie bitte, dass die Erklärungen der Begriffe unterschiedlich sein können oder einige Ausdrücke schwer zu verstehen sind.

Wer ist das Ziel dieses Artikels?

  1. Ich möchte ungefähr etwas über objektorientierte Programmierung wissen
  2. Ich möchte wissen, welche Art von Inhalt der Artikel eines Anfängers ist
  3. Ich möchte den Quellcode einer anderen Person lesen
  4. Andere Leser als 1-3

Was ist objektorientierte Programmierung überhaupt?

Laut Wikipedia

[Objektorientierte Programmierung-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)

Was ist objektorientierte Programmierung?

Objektorientierte Programmierung (Englisch: objektorientierte Programmierung, Abkürzung: OOP) ist eine Sammlung von Daten und Methoden, die eng miteinander in einem Objekt verbunden sind und jeweils unterschiedliche Eigenschaften und Rollen haben. Es ist eine Softwareentwicklungsmethode, die das gesamte Programm durch verschiedene Definitionen von Objekten und die Einstellungen verschiedener Prozesse erstellt, die mit diesen Objekten interagieren.

Was ist objektorientiert?

Der Begriff objektorientiert selbst wurde vom Informatiker Alan Kay geprägt. Kay, der vom Design der 1962 veröffentlichten Sprache "Simula" beeindruckt war, sagte dieses geprägte Wort zum ersten Mal, als er das Sprachdesign von "Smalltalk" erklärte, das er 1972 veröffentlichte. Es wurde in die Welt geschickt. Es ist zu beachten, dass die von Kay gezeigte Objektorientierung, die sich auf die Nachrichtenübermittlung konzentriert, nicht allgemein anerkannt ist und sich nur auf das Programmkonzept von Objekten konzentriert. Gleichzeitig verlagerte sich die Objektorientierung, die Kays Hände verließ, zu einer Interpretation, die sich auf abstrakte Datentypen konzentrierte, und mit der Möglichkeit von "C ++", das 1983 von der Informatikerin Biane Strovestrup in Japan veröffentlicht wurde Die Paradigmen der Einkapselung, Vererbung und des Polymorphismus, die allgemein als die drei Hauptelemente von OOP bezeichnet werden, wurden festgelegt.

Also, was ist es?

Eine Sammlung von Daten und Methoden, die eng miteinander verbunden sind.

Objektorientierte Programmierung (OOP)

Klassen und Instanzen

Was ist eine Klasse?

Es entspricht der Konstruktionszeichnung bei der Herstellung eines Autos.

Unten ist der Beispielcode.

sample.py


class Car:
    def __init__(self):
        pass

Was ist eine Instanz?

Es entspricht dem Auto selbst (Entität), das hergestellt wurde.

Unten ist der Beispielcode.

sample.py


class Car:
    def __init__(self):
        pass

car = Car()  #Beispiel

Welche Informationen, welche Teile und welche Funktionen hat ein Auto?

Zum Beispiel Fahrzeugtyp, Nummer, Farbe, Motor, Reifen usw. Und es gibt auch Beschleuniger und Bremsen.

Fügen wir (einige) dieser Informationen der Konstruktionszeichnung hinzu.

Unten ist der Beispielcode.

sample.py



class Car:
    def __init__(self, name, color):
        self.name = name  #Autoname
        self.color = color  #Autofarbe

    def start_engine(self):
        print("Ich ließ den Motor an.")

    def stop_engine(self):
        print("Ich stellte den Motor ab.")

    def accelerator(self):
        print("Ich trat aufs Gaspedal.")

    def brake(self):
        print("Ich trat auf die Bremse.")

mycar = Car("Prius", "Weiß")  #Instanzgenerierung
mycar.start_engine()  #Ich ließ den Motor an. Wird angezeigt
mycar.accelerator()  #Ich trat aufs Gaspedal. Wird angezeigt
mycar.brake()  #Ich trat auf die Bremse. Wird angezeigt
mycar.stop_engine()  #Ich stellte den Motor ab. Wird angezeigt

Lassen wir das vorerst.

Drei Hauptelemente von OOP (objektorientierte Programmierung)

Zuvor habe ich im Wikipedia-Zitat ein wenig erwähnt.

  1. Kapselung
  2. Vererbung
  3. Vielfalt

Verkapselung

Encapsulation-Wikipedia

Kapselung in der Programmierung (Kapsel oder Englisch: Kapselung) bedeutet, Daten (Attribute) und Methoden (Prozeduren) in einem Objekt zu kombinieren und dessen Inhalt zu verbergen. Das Konzept der Einkapselung kann als eines der konstituierenden Konzepte von Informationen angesehen werden, die sich in D. L. Parnas verstecken.

Objekte in der objektorientierten Programmierung werden durch Kapselung von Informationen nach Klassen erstellt.

Durch die Kapselung werden Informationen ausgeblendet, die Sie nicht an Dritte weitergeben möchten.

In Python wird die Kapselung durchgeführt, indem dem Variablennamen (oder Funktionsnamen) ein Unterstrich vorangestellt wird. In Python ist es jedoch besser, nicht so viel wie möglich zu kapseln. Wenn es einen Unterstrich gibt, sollte dieser nur innerhalb dieser Klasse verwendet werden. Bei zwei Unterstrichen (Dander genannt) ist die Verwendung eingeschränkter. Es ist etwas Besonderes anzurufen, aber es bedeutet nicht, dass Sie es nicht können.

Es kann auch verwendet werden, um komplexe Verarbeitungen leicht zu verschleiern. In diesem Fall sollten Sie es aktiv nutzen. Wenn Sie es mit einem Auto vergleichen, werden verschiedene Kinder im Inneren gemacht, um den Motor zu starten, Der Fahrer muss es nicht wissen.

Unten ist der Beispielcode.

sample.py



class Car:
    def __init__(self, name, color):
        self.name = name  #Autoname
        self.color = color  #Autofarbe
        self._age = "Modell 2020"  #Model Jahr
        self.__engine = "Benzinmotor"  #Motortyp


mycar = Car("Prius", "Weiß")
print(mycar._age)  #Möglich,Wird als "2020" angezeigt
mycar._age = "2019"  #Substitution ist ebenfalls möglich * Sollte nicht sein

print(mycar.__engine)  #Dies führt zu einem Fehler
# AttributeError: 'Car' object has no attribute '__engine'
print(mycar._Car__engine)  #Möglich,Es heißt "Benzinmotor", sollte aber nicht

Erbe

[Vererbung (Programmierung) -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))

Vererbung (Vererbung) ist eines der Konzepte, aus denen sich die Objektorientierung zusammensetzt. Wenn ein Objekt die Eigenschaften eines anderen Objekts erbt, wird gesagt, dass zwischen beiden eine "Vererbungsbeziehung" besteht. (Weggelassen) Wenn B A erbt, gilt im Allgemeinen eine semantische Beziehung (Is-a-Beziehung) von "B ist ein A." (B ist ein Typ von A). Daher ist es oft nicht angebracht, Vererbungsbeziehungen zwischen semantisch nicht verwandten Klassen zu haben, nur weil sie dasselbe Verhalten haben.

In einem Konzept, das der Vererbung ähnelt, gibt es eine "Delegierung". Bei der Vererbung wird die einmal festgelegte Vererbungsbeziehung normalerweise nicht geändert, aber das Thema der Delegierung kann nach Bedarf geändert werden.

Aggregation und Zusammensetzung sind Konzepte, die sich in der Hierarchie von der Vererbung mit Is-a-Beziehung unterscheiden. Dies ist jedoch eine Einschlussbeziehung, bei der die Beziehung zwischen Klassen Has-a und zwischen Klassen ist. Beziehungen sind spärlicher als Vererbung.

Zusammenfassend ist es besser, die Vererbung zu verwenden, wenn die is-a-Beziehung gilt. Es ist jedoch besser, die Vererbung nicht unnötig zu verwenden.

Wenn Sie es mit einem Auto vergleichen Sportwagen ist ein Auto Spezialfahrzeug ist ein A-Auto usw.

Unten ist der Beispielcode.

Autoklasse ist die gleiche wie zuvor.

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)

Die geerbte Klasse wird als übergeordnete Klasse und die geerbte Klasse als untergeordnete Klasse bezeichnet. Im obigen Beispielcode ist die Car-Klasse die übergeordnete Klasse und das SportCar und das SpecialCar die untergeordneten Klassen. Die untergeordnete Klasse super () .__ init__ (Name, Farbe) ruft die übergeordnete Klasse __init__ auf.

Vielfalt (Polymorphismus)

[Polymorphismus-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)

Polymorphismus beschreibt die Natur des Typsystems einer Programmiersprache und dass jedes Element der Programmiersprache (Konstanten, Variablen, Ausdrücke, Objekte, Funktionen, Methoden usw.) zu mehreren Typen gehört. Bezieht sich auf das Eigentum der Vergebung.

Wenn Sie sich Wikipedia ansehen, verstehen Sie wahrscheinlich nicht, was Sie sagen. Schauen Sie sich also den Beispielcode an.

Unten ist der Beispielcode.

sample.py



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

    def accelerator(self):
        print(f"Ich trat aufs Gaspedal.({self.name})")

    def brake(self):
        print(f"Ich trat auf die Bremse.({self.name})")


class SportCar(Car):
    ...


class SpecialCar(Car):
    ...


cars = [Car("Prius", "Weiß"), SportCar("Ferrari", "rot"), SpecialCar("Krankenwagen", "Weiß")]
for car in cars:
    car.accelerator()
    car.brake()

Ausführungsergebnis.


Ich trat aufs Gaspedal.(Prius)
Ich trat auf die Bremse.(Prius)
Ich trat aufs Gaspedal.(Ferrari)
Ich trat auf die Bremse.(Ferrari)
Ich trat aufs Gaspedal.(Krankenwagen)
Ich trat auf die Bremse.(Krankenwagen)

Durch die Vorbereitung einer Methode mit demselben Namen ist es möglich, sie zu verwenden, ohne den Typ (die Klasse) zu kennen.

Die ganze Erklärung ist vorbei

Das ist alles für die Erklärung.

Von nun an werden wir den Quellcode in ein Programm ändern, das objektorientiert zu programmieren scheint.

Klicken Sie hier für den ursprünglichen Quellcode

sample.py


class Car:
    def __init__(self, name, color):
        self.name = name  #Autoname
        self.color = color  #Autofarbe

    def start_engine(self):
        print("Ich ließ den Motor an.")

    def stop_engine(self):
        print("Ich stellte den Motor ab.")

    def accelerator(self):
        print("Ich trat aufs Gaspedal.")

    def brake(self):
        print("Ich trat auf die Bremse.")


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", "Weiß"), SportCar("Ferrari", "rot"), SpecialCar("Krankenwagen", "Weiß")]
for car in cars:
    car.accelerator()
    car.brake()

Ich werde es ein wenig reparieren. Das Auto hat nicht die Funktionen Motor starten und Motor stoppen. Es gibt nur einen Motorknopf. Damit ... Kombiniere start_engin (self) und stop_engine (self) zu einem. Stellen Sie außerdem sicher, dass der Motor läuft und der Motor läuft.

sample.py


class Car:
    def __init__(self, name, color):
        self.name = name  #Autoname
        self.color = color  #Autofarbe
        self._engine = False  #Richtig, wenn der Motor läuft,Falsch, wenn nicht eingeschaltet

    def engine(self):
        print(f"[{self.name}]", end=" ")
        self._engine = not(self._engine)
        if self._engine:
            print("Ich ließ den Motor an.")
        else:
            print("Ich stellte den Motor ab.")

    def accelerator(self):
        print(f"[{self.name}]", end=" ")
        print("Ich trat aufs Gaspedal.")

    def brake(self):
        print(f"[{self.name}]", end=" ")
        print("Ich trat auf die Bremse.")


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", "Weiß"), SportCar("Ferrari", "rot"), SpecialCar("Krankenwagen", "Weiß")]
for car in cars:
    car.engine()
    car.accelerator()
    car.brake()
    car.engine()

Ausführungsergebnis.


[Prius]Ich ließ den Motor an.
[Prius]Ich trat aufs Gaspedal.
[Prius]Ich trat auf die Bremse.
[Prius]Ich stellte den Motor ab.
[Ferrari]Ich ließ den Motor an.
[Ferrari]Ich trat aufs Gaspedal.
[Ferrari]Ich trat auf die Bremse.
[Ferrari]Ich stellte den Motor ab.
[Krankenwagen]Ich ließ den Motor an.
[Krankenwagen]Ich trat aufs Gaspedal.
[Krankenwagen]Ich trat auf die Bremse.
[Krankenwagen]Ich stellte den Motor ab.

Ist es so

Ich konnte mir kein gutes Beispiel vorstellen, daher war es möglicherweise schwer zu verstehen. Ich denke, dass objektorientierte Programmierung nützlich sein wird, wenn die Anzahl der Personen zunimmt.

Diesmal endet es.

Bis zum Ende Danke fürs Lesen. Wenn Sie Fehler oder Ratschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Recommended Posts

Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Einführung in die Programmierung (Python) TA Tendenz für Anfänger
Eine Einführung in die Python-Programmierung
Eine Einführung in Mercurial für Nicht-Ingenieure
Erste Schritte mit Python für Nicht-Ingenieure
Eine Einführung in OpenCV für maschinelles Lernen
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in Python für C-Sprachprogrammierer
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Für Anfänger, um eine Anaconda-Umgebung aufzubauen. (Memo)
Eine Einführung in die statistische Modellierung für die Datenanalyse
Eine Einführung in die Sprachanalyse für Musik-Apps
[Für Anfänger] Wie man Programmierung studiert Private Memo
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
Einführung in Deep Learning (1) --Chainer wird Anfängern leicht verständlich erklärt.
AOJ Einführung in die Programmierung Thema Nr. 1, Thema Nr. 2, Thema Nr. 3, Thema Nr. 4
Einführung in Private TensorFlow
Eine Einführung in das maschinelle Lernen
AOJ Einführung in die Programmierung Thema Nr. 7, Thema Nr. 8
AOJ Einführung in die Programmierung Thema Nr. 5, Thema Nr. 6
Einführung in die Bayes'sche Optimierung
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Einführung in Python For, While
■ Kaggle-Übung für Anfänger - Einführung von Python - von Google Colaboratory
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
[Erklärung für Anfänger] Einführung in die Pooling-Verarbeitung (erklärt in TensorFlow)
Eine Einführung in die funktionale Programmierung zur Verbesserung der Debugging-Effizienz in 1 Minute
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
[Einführung in Python3 Tag 1] Programmierung und Python
Einführung in verallgemeinerte Schätzungsgleichungen durch Statistikmodelle
[Python Tutorial] Eine einfache Einführung in Python
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
So lösen Sie das Problem des dynamischen Planungsalgorithmus (von Anfängern gesehen)
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
[Version 2020 für Anfänger] Empfohlene Lernmethode für diejenigen, die selbst KI-Ingenieur werden möchten
Antwort auf AtCoder Beginners Selection von Python3
Programmierumgebung für Anfänger mit Windows
[Für Anfänger] Super Einführung in neuronale Netze, die selbst Katzen verstehen können
Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Entscheiden Sie, wen Sie per Lotterie wählen möchten
Rekursives neuronales Netzwerk: Eine Einführung in RNN
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Eine Einführung in selbst erstellte Python-Webanwendungen für einen trägen Webingenieur im dritten Jahr
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Durch Ganzzahlprogrammierung einem Labor zugewiesen
Eine Einführung in die Objektorientierung - Geben Sie einem Objekt ein Kind.
Einführung in die Graph Database Neo4j in Python für Anfänger (für Mac OS X)
Ein Lehrbuch für Anfänger von Python-Anfängern
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Was ist ein Algorithmus? Einführung in den Suchalgorithmus] ~ Python ~
Der schnellste Weg für Anfänger, um Python zu beherrschen
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei)
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
Python für Super-Anfänger Super-Anfänger Python # Einfach loszuwerden
Ich habe versucht, durch Schaben ein Bild zu bekommen
Eine Einführung in Cython, ohne tief zu gehen
Inspiriert von einem Artikel für Neuankömmlinge (unten abgekürzt)