ホームページ >バックエンド開発 >Python チュートリアル >Lao Qi から Python を学び、授業の予備知識を得る

Lao Qi から Python を学び、授業の予備知識を得る

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:41:141213ブラウズ

最初に、以下の退屈な用語の説明を辛抱強く読んでください。本来、これはこのチュートリアルのスタイルに沿ったものではありませんが、今後も退屈なものを読まなければならないので、ご容赦ください。これらの退屈な説明はウィキペディアから引用したものです。

1. 問題スペース

問題空間は、問題ソルバーによって達成される問題の認知状態全体であり、問​​題に含まれる情報と保存された情報を使用して問題ソルバーによって能動的に構築されます。

問題は通常、次の 3 つの側面で定義されます。
•初期状態 - 開始時の情報が不完全または不十分な状態
•ターゲット状態 - 取得したい情報または状態
•アクション – 初期状態から目標状態に移行するために実行するステップ。

これら 3 つの部分が一緒になって問題空間を定義します。

2. オブジェクト

台湾ではオブジェクトと訳されるオブジェクトは、オブジェクト指向の用語であり、客観的な世界の問題空間 (名前空間) における特定の物体を表すだけでなく、ソフトウェア システムの解決空間における基本要素も表します。 。

ソフトウェア システムでは、オブジェクトには固有の識別子があり、プロパティとメソッドは記憶する必要のある情報であり、メソッドはオブジェクトが提供できるサービスです。オブジェクト指向ソフトウェアでは、オブジェクトはクラスのインスタンスです。

3. オブジェクト指向

オブジェクト指向プログラミング(英語: Object-owned programming、略称: OOP )は、プログラミングのパラダイムおよびプログラム開発手法の一つ。オブジェクトはクラスのインスタンスを指します。オブジェクトをプログラムの基本単位として取り、プログラムとデータをカプセル化して、ソフトウェアの再利用性、柔軟性、拡張性を向上させます。

オブジェクト指向プログラミングは、プログラム内で相互に呼び出すさまざまな独立したオブジェクトを含む考え方と見なすことができます。これは、従来のプログラミングの考え方とはまったく逆であり、プログラムを関数のコレクションとして、または直接的に扱います。コンピュータに与えられる一連の命令。オブジェクト指向プログラミングの各オブジェクトは、データを受け入れ、データを処理し、他のオブジェクトとデータを通信できる必要があるため、それらは小さな「マシン」、つまりオブジェクトと見なすことができます。

オブジェクト指向プログラミングはプログラムの柔軟性と保守性を促進することが証明されており、大規模プロジェクトの設計で広く使用されています。 さらに、オブジェクト指向プログラミングの推進者は、オブジェクト指向プログラミングによりプログラムの設計と保守が容易になり、プログラムの分析、設計、理解が容易になるため、以前の実践よりも学習が容易であると主張しています。反対派は一部でこれを否定している。

オブジェクト指向というとき、それはプログラミング手法だけを指すわけではありません。これはむしろプログラム開発手法です。この点で、私たちはオブジェクト指向システム分析とオブジェクト指向設計 (オブジェクト指向設計、OOD と呼ばれます) についてもっと知る必要があります。

以下は、OOP の歴史に関する Wikipedia からの引用です。

コードをコピー コードは次のとおりです:

オブジェクト指向プログラミングのプロトタイプは、1960 年には Simula 言語に見られました。当時、プログラミングの分野は危機に直面していました。ソフトウェアとハ​​ードウェアの環境がますます複雑になる中、ソフトウェアを適切に維持するにはどうすればよいでしょうか?オブジェクト指向プログラミングでは、再現性を重視することでこの問題をある程度解決します。 1970 年代の Smalltalk 言語はオブジェクト指向プログラミングの古典であり、30 年後の今日でもこの言語はオブジェクト指向言語の基礎とみなされています。
コンピューター サイエンスにおけるオブジェクトとインスタンスの概念の最も初期の発芽は、MIT の PDP-1 システムにまで遡ることができます。このシステムはおそらく、容量ベースのアーキテクチャに基づいた最も初期の実用的なシステムです。さらに、1963 年の Ivan Sutherland の Sketchpad アプリケーションにも同じアイデアが含まれていました。プログラミング エンティティとしてのオブジェクトは、1960 年代に Simula 67 言語によって初めて思考に導入されました。 Simula は、ノルウェーのオスロ コンピューター センターの Oli-Johann Dahl と Christian Nygaard によってシミュレーション環境用に設計された言語です。 (彼らは船をシミュレートするために言語を設計し、異なる船間のプロパティの相互作用に興味を持っていたと言われています。彼らは異なる船を異なるクラスに分類し、各オブジェクトはそのクラスに基づいて独自のプロパティと動作を定義できます) ) このアプローチは、分析プログラミングの最も初期の概念的な具体化です。分析プログラムでは、現実世界のオブジェクトを抽象オブジェクトにマッピングします。これを「シミュレーション」と呼びます。 Simula は「クラス」の概念を導入しただけでなく、インスタンスの概念も適用しました。これはこれらの概念の最も初期の適用である可能性があります。

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 など) の使用を改善しました。


読者の皆さん、この文章を読んだ時点で、オブジェクト指向についてはすでにおぼろげながら理解できていると思います。では、クラスと OOP の間にはどのような関係があるのでしょうか?

Wikipedia ではクラスを次のように定義しています:

コードをコピー コードは次のとおりです:

オブジェクト指向プログラミングでは、クラスはオブジェクト指向コンピューター プログラミング言語の構成要素であり、オブジェクトを作成するための設計図であり、作成されたオブジェクトの共通のプロパティとメソッドを記述します。

クラスのより厳密な定義は、いくつかの特定のメタデータで構成されるまとまりのあるパッケージです。これはいくつかのオブジェクトの動作規則を記述しており、これらのオブジェクトはクラスのインスタンスと呼ばれます。クラスにはインターフェイスと構造があります。インターフェイスはメソッドを通じてクラスおよびそのインスタンスと相互運用する方法を記述し、構造はインスタンス内のデータがどのようにプロパティに分割されるかを記述します。クラスは、特定のレイヤーに関連付けられたオブジェクトの最も具体的なタイプです。クラスは、クラスに関連付けられたメタデータを操作するためのランタイム サポートを提供するランタイム表現 (メタオブジェクト) を持つこともできます。

クラスをサポートするプログラミング言語には、クラスに関連するさまざまな機能のサポートにおいて多かれ少なかれ微妙な違いがあります。ほとんどの場合、さまざまな形式のクラス継承がサポートされています。多くの言語は、アクセス修飾子などのカプセル化を提供する機能もサポートしています。クラスの出現は、オブジェクト指向プログラミングの 3 つの最も重要な特性 (カプセル化、継承、ポリモーフィズム) を実現する手段を提供します。

これを見た読者は、OOP プログラミングが必要な場合はクラスを使用する必要があることを理解したかもしれません。厳密にはそうではありませんが、いわば。しかし、その逆は言えません。クラスを使用することが OOP であることを意味するわけではありません。

ライティングクラス

クラスを理解するには、ある程度の抽象的思考が必要です。なぜなら、クラス自体が何かの抽象的な特性を定義しているからです。たとえば、クラスを定義します:

コードをコピー コードは次のとおりです:

class Human: #これはクラスを定義するメソッドです。通常、クラスの名前は最初の文字が大文字の単語、または単語のつなぎ目です
パス

さて、ここからクラスを書いていきますが、今回はとりあえずPythonを使わずに擬似コードを使います。もちろん、このコードはPythonとは程遠いものです。以下のように:

コードをコピー コードは次のとおりです:

クラス人間:
手足
キャラクター
趣味
勉強()

オブジェクトはクラスのインスタンスです。 Human という名前のクラスを定義し、世界中のすべての Human を定義しましたが、これは抽象的な Human であり、特定の人物ではありません。特定の人にとって、その人の手足の特徴、性格、趣味などはすべて固有のものであり、ここではこれらを属性と呼びます。

特定の人物、Wang Ermazi を見つけて、上記のクラスをインスタンス化してみましょう。
ワン・エル・マジ = 人間()
王爾麻子 手足 = 細い
ワン・エル・マジさん、趣味=MM鑑賞

ここで、Wang Ermazi は Human クラスのインスタンスです。特定のオブジェクトのプロパティの値は、その「状態」と呼ばれます。 (システムはメモリ空間をオブジェクトに割り当てますが、クラスには割り当てません。これは理解しやすいです。クラスは抽象的であり、システムは抽象的なものに空間を割り当てることができません。オブジェクトは具象です)

この時点で、クラスについて漠然と理解できたと思いますか?

クラスを考えると、それは私たちの直感からは少し遠いように思えます。ゆっくり時間をかけてください。内容はあまり多くないので、読んで理解していただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。