ホームページ >バックエンド開発 >Python チュートリアル >Lao Qi から Python を学び、授業の予備知識を得る
最初に、以下の退屈な用語の説明を辛抱強く読んでください。本来、これはこのチュートリアルのスタイルに沿ったものではありませんが、今後も退屈なものを読まなければならないので、ご容赦ください。これらの退屈な説明はウィキペディアから引用したものです。
1. 問題スペース
問題空間は、問題ソルバーによって達成される問題の認知状態全体であり、問題に含まれる情報と保存された情報を使用して問題ソルバーによって能動的に構築されます。
問題は通常、次の 3 つの側面で定義されます。
•初期状態 - 開始時の情報が不完全または不十分な状態
•ターゲット状態 - 取得したい情報または状態
•アクション – 初期状態から目標状態に移行するために実行するステップ。
これら 3 つの部分が一緒になって問題空間を定義します。
2. オブジェクト
台湾ではオブジェクトと訳されるオブジェクトは、オブジェクト指向の用語であり、客観的な世界の問題空間 (名前空間) における特定の物体を表すだけでなく、ソフトウェア システムの解決空間における基本要素も表します。 。
ソフトウェア システムでは、オブジェクトには固有の識別子があり、プロパティとメソッドは記憶する必要のある情報であり、メソッドはオブジェクトが提供できるサービスです。オブジェクト指向ソフトウェアでは、オブジェクトはクラスのインスタンスです。
3. オブジェクト指向
オブジェクト指向プログラミング(英語: Object-owned programming、略称: OOP )は、プログラミングのパラダイムおよびプログラム開発手法の一つ。オブジェクトはクラスのインスタンスを指します。オブジェクトをプログラムの基本単位として取り、プログラムとデータをカプセル化して、ソフトウェアの再利用性、柔軟性、拡張性を向上させます。
オブジェクト指向プログラミングは、プログラム内で相互に呼び出すさまざまな独立したオブジェクトを含む考え方と見なすことができます。これは、従来のプログラミングの考え方とはまったく逆であり、プログラムを関数のコレクションとして、または直接的に扱います。コンピュータに与えられる一連の命令。オブジェクト指向プログラミングの各オブジェクトは、データを受け入れ、データを処理し、他のオブジェクトとデータを通信できる必要があるため、それらは小さな「マシン」、つまりオブジェクトと見なすことができます。
オブジェクト指向プログラミングはプログラムの柔軟性と保守性を促進することが証明されており、大規模プロジェクトの設計で広く使用されています。 さらに、オブジェクト指向プログラミングの推進者は、オブジェクト指向プログラミングによりプログラムの設計と保守が容易になり、プログラムの分析、設計、理解が容易になるため、以前の実践よりも学習が容易であると主張しています。反対派は一部でこれを否定している。
オブジェクト指向というとき、それはプログラミング手法だけを指すわけではありません。これはむしろプログラム開発手法です。この点で、私たちはオブジェクト指向システム分析とオブジェクト指向設計 (オブジェクト指向設計、OOD と呼ばれます) についてもっと知る必要があります。
以下は、OOP の歴史に関する Wikipedia からの引用です。
1970 年代にゼロックス PARC 研究所によって発明された Smalltalk 言語は、オブジェクト指向プログラミングの概念を、基本的な操作におけるオブジェクトとメッセージの広範な適用として定義しています。 Smalltalk の作成者は、Simula 67 の主なアイデアに大きな影響を受けましたが、Smalltalk のオブジェクトは完全に動的であり、Simula の静的なオブジェクトとは異なり、作成、変更、および破棄できます。さらに、Smalltalk は継承の概念も導入し、インスタンスを作成できないプログラミング モデルや継承のない Simula を超えました。さらに、Simula 67 の考え方は、Lisp や Pascal などのさまざまな言語にも適用されています。
オブジェクト指向プログラミングは、主に C 言語の拡張バージョンである C++ により、1980 年代に支配的な考え方になりました。グラフィカル ユーザー インターフェイス (GUI) の台頭により、オブジェクト指向プログラミングはトレンドにうまく適応しました。 GUI とオブジェクト指向プログラミングの間の密接な関係は、Mac OS X で見ることができます。 Mac OS X は、Smalltalk に似た C 言語の拡張バージョンである Objective-C で書かれています。オブジェクト指向プログラミングの考え方により、イベント処理プログラミングもより広く使用されるようになりました (ただし、この概念はオブジェクト指向プログラミングにのみ存在するわけではありません)。一つの言い方としては、GUI の導入がオブジェクト指向プログラミングの開発を大きく促進したと言えます。
チューリッヒ工科大学の Niklaus Wirth と彼の同僚は、抽象データとモジュール型プログラミングに関する研究を実施しました。 Modula-2 にはこれらすべてが含まれていますが、Oberon には Smalltalk や C++ とは異なる特別なオブジェクト指向のアプローチが含まれています。
オブジェクト指向機能は、Ada、BASIC、Lisp、Fortran、Pascal など、当時より人気のあった言語にも追加されました。これらの言語は元々オブジェクト指向として設計されていないため、この混在により互換性やメンテナンスの問題が発生することがよくあります。対照的に、「純粋な」オブジェクト指向言語には、プログラマが依存する機能の一部が欠けています。この環境では、新しい言語の開発が最優先事項となっています。エッフェルは先駆者としてこれらの問題を解決することに成功し、当時最も人気のある言語になりました。
ここ数年で、Java 言語は、C および C++ との構文の類似性を除けば、広く使用される言語になりました。 Java の移植性は成功への忘れられない一歩です。なぜなら、この機能が多くのプログラマー グループの投資を惹きつけているからです。
最近のコンピューター言語の発展において、オブジェクト指向プログラミングと手続き型プログラミングの両方をサポートするいくつかの言語が静かに浮上しています。その中で最も優れているのは Python、Ruby などです。
プロセス指向プログラミングが構造化プログラミングの技術を向上させたのと同じように、最新のオブジェクト指向プログラミング手法も、デザイン パターン、コントラクト設計、およびモデリング言語 (UML など) の使用を改善しました。
Wikipedia ではクラスを次のように定義しています:
クラスをサポートするプログラミング言語には、クラスに関連するさまざまな機能のサポートにおいて多かれ少なかれ微妙な違いがあります。ほとんどの場合、さまざまな形式のクラス継承がサポートされています。多くの言語は、アクセス修飾子などのカプセル化を提供する機能もサポートしています。クラスの出現は、オブジェクト指向プログラミングの 3 つの最も重要な特性 (カプセル化、継承、ポリモーフィズム) を実現する手段を提供します。
これを見た読者は、OOP プログラミングが必要な場合はクラスを使用する必要があることを理解したかもしれません。厳密にはそうではありませんが、いわば。しかし、その逆は言えません。クラスを使用することが OOP であることを意味するわけではありません。
ライティングクラス
クラスを理解するには、ある程度の抽象的思考が必要です。なぜなら、クラス自体が何かの抽象的な特性を定義しているからです。たとえば、クラスを定義します:
さて、ここからクラスを書いていきますが、今回はとりあえずPythonを使わずに擬似コードを使います。もちろん、このコードはPythonとは程遠いものです。以下のように:
オブジェクトはクラスのインスタンスです。 Human という名前のクラスを定義し、世界中のすべての Human を定義しましたが、これは抽象的な Human であり、特定の人物ではありません。特定の人にとって、その人の手足の特徴、性格、趣味などはすべて固有のものであり、ここではこれらを属性と呼びます。
特定の人物、Wang Ermazi を見つけて、上記のクラスをインスタンス化してみましょう。
ワン・エル・マジ = 人間()
王爾麻子 手足 = 細い
ワン・エル・マジさん、趣味=MM鑑賞
ここで、Wang Ermazi は Human クラスのインスタンスです。特定のオブジェクトのプロパティの値は、その「状態」と呼ばれます。 (システムはメモリ空間をオブジェクトに割り当てますが、クラスには割り当てません。これは理解しやすいです。クラスは抽象的であり、システムは抽象的なものに空間を割り当てることができません。オブジェクトは具象です)
この時点で、クラスについて漠然と理解できたと思いますか?
クラスを考えると、それは私たちの直感からは少し遠いように思えます。ゆっくり時間をかけてください。内容はあまり多くないので、読んで理解していただければ幸いです。