プログラミングはソリューションを開発するプロセスです厳密なコード構成、データ、関数、およびアルゴリズムの形の「ライブ」動的タスク。未定義のセマンティクスから厳密な構文を形成するための手順。実際の問題は、アルゴリズム化という意味でよく知られている大きな問題です。望ましい解決策を実現するには、問題を正確な構文構造に配置する必要があります。
OOPはこの古代のプログラミング概念を破る試みを2回試みましたが、データコーディングとアルゴリズムの古典的なスタイルの束縛は依然として強力です。
レベルと資格
コンピューティングはコンピューティングから始まりましたが、情報処理分野への動きの加速が高まっている速度は、古典的なプログラミングが不可能になり、存在しなくなるほどにはまだ十分ではありません。
また、開発者が主張せず、顧客が実際の問題に対する実際のソリューションを必要としないことも目的です。利用可能なツールと使い慣れた機能によって制限されることに慣れています。
OOPポリモーフィズムの形式、コードのカプセル化の概念、およびプロパティ(メソッド)の継承は、プログラミングの分野にありますが、解決される問題の分野にはありません。
適例-ライブラリPHPOffice / PHPWord。それを使用するには、開発者の資格が必要であり、オブジェクトの独自のシステムを作成する必要がありますが、顧客の現在のレベル(顧客の要件)は、プログラマーが開発でオーバーライドするささいな構成です(それ以外の場合、要件は満たされません)。このような状況:
この場合、ライブラリの使用はタスクです卒業証書や学位論文などのドキュメントのフォーマットは、標準に従って正式化する必要があります。顧客は彼の要件を提示し、プログラマーは自分の道をはるかに進んだ。
ドキュメントは完全に解析され、必要な形式に組み立てられ、ネストレベルのテーブルで動作し、セルが結合および分割され、任意の方向に印刷されました。
ポリモーフィズムとOOP
ポリモーフィズムの定義としては、オブジェクト指向プログラミングのアイデアの発展の歴史を参照するのに勝るものはありません。 未実現 本質的にこれまでのところ。
各著者は、OOPの始まりと本質についての独自の概念を持っています。すべての注意深い読者にとって、この概念は正しく客観的です。しかし、今日まで、誰もが無条件の公理としてたった3つの立場しか受け入れていません。
- カプセル化;
- 多型;
- 継承。
さらにいくつか追加されます。抽象化、そしてほとんどの場合、これ、そして実際に要点は、OOPの本質を説明するための基礎として使用されます。
したがって、OOPに関する意見は多態的です。つまり、1つのことを説明するか、さまざまな方法で構築されるか、または逆に、さまざまなことを説明しますが、4つの同一の位置に基づいています。
民主主義の始まりはこの地域では一般的ではありません情報技術ですが、当然のことです。同じことについての多くの意見の組み合わせと共存は、実際の多態性です。
ポリモーフィズムの一般的な定義
OOPは、情報技術開発の次の段階です。これに異議を唱える人はほとんどいませんが、その基本的な公理と規定はセマンティクスの点で大きく異なるため、全体の外では注目に値しません。
- プログラミングのポリモーフィズムは、さまざまな基本形式(データ型)に同じインターフェイスを提供する機能です。
- ポリモーフィズムは、オブジェクトがさまざまな実装を持つ能力です。
- ポリモーフィズムは関数の能力です...
- クラシック(C / C ++の作成者から):「1つのインターフェース-多くの実装」。
- パラメトリック多型は...を意味します
- ポリモーフィズム-型理論の位置..。
- 多態性が継承なしでは不可能であるように、抽象化はカプセル化と継承なしでは不可能です...
これはすべて同じことを指していることに同意することができます。しかし、思考、本質、内容の表現形式は同じではありません。しかし、まだ共通点があります。
エンティティ:開発者-顧客
従来のソフトウェア開発は、プログラマーとタスク(クライアント、顧客)の可用性。プログラマーは問題を調べて形式化し、解決策につながるコードを作成します。顧客は提案されたもののすべてまたは一部のみを拒否し、欠陥を指摘し、プログラマーは再び仕事をします。
問題を解決するプロセスのこのようなサイクルは、2つの完全に異なるエンティティがここで明確に組み合わされていることを示唆しています。
- コンピュータだけでは問題を解決できません。
- コンピュータが問題を「理解」して「解決」できるようにするためのプログラムが必要です。
タスクは顧客の能力の範囲であり、プログラムはこれは、タスクをコンピューターの機能(プログラマーの能力範囲)に「適応」させるためのアルゴリズムです。後者の役割は、コンピューターをタスクの要件に「適応」させることであり、これは不要です。
オブジェクト指向プログラミングは提供します 抽象化..。オブジェクトがあります-これは顧客の領域です。があるオブジェクトの実装はプログラマーのドメインです。顧客と開発者の間には「技術的な」関係はありません。このアイデアは基本的なものであり、今日まで実装されていませんが、何かがすでに着実に機能しています。
ウィンドウ、ボタン、その他のオブジェクト
エアアートテクノロジーの歴史、オブジェクトマガジン、ターボビジョン、グラフビジョンはすでに歴史です。これらのOOP実装を覚えている人はほとんどいません。実際には使用されておらず、忘れられていませんが、Windowsウィンドウインターフェイスは数百万人のユーザーに馴染みがあり、PHP、JavaScript、その他のインターネットテクノロジーの言語のオブジェクトは数十万のコード開発者によって使用されています。 、およびWebリソースへの何百万もの訪問者がそれらについて知っています。
によると、これはおそらく唯一の正しい方法ですどのOOPが開発することになっていたか:カプセル化、継承、開発者向けのポリモーフィズム。ただし、ユーザー向けではありません。このポジションが、Windowsソフトウェア、TurboVisionやGraphVisionなどのアプリケーションプログラムのビジュアルデザイン(インターフェイス)の開発における主要なポジションであったことが特徴です。
のような製品の背後にあるコンセプトAir ArtTechnologyとObjectMagazineは大きく異なりました。ここで、抽象オブジェクトは情報構造の最初の祖先であり、情報処理コードを抽象レベルでカプセル化しました。ここでは、ウィンドウ、ボタン、ビジュアルデザインの要素のオブジェクトは二次的なものでした。
最初のバージョン(Windowsなど))OOPパラダイム:カプセル化、継承、ポリモーフィズムは抽象祖先のレベルで指定され、コードの実装は、目的の構造と内容に従って、継承ブランチに沿った特定の各子孫のレベルで形成されました。
2番目のバージョン(エアアートテクノロジーとObject Magazine)抽象オブジェクトのレベルが重要です。特定の子孫が持つことは重要ではありません。主なことは、その継承ブランチがルート抽象化に至るまですべての親の要件を満たすことです。
オブジェクトとオブジェクトシステム:アルゴリズム
理想的なオブジェクト指向の概念は、オブジェクトとオブジェクトシステムのみを操作できます。
現代のプログラミング言語では、オブジェクト(クラス)は通常、オブジェクトとオブジェクトのインスタンスの説明として理解されます。さらに、オブジェクトの説明を使用するために、言語を使用すると、プログラマーは静的オブジェクトを操作できますが、動的オブジェクトは独自のコンテンツと構造を持つが、同じメソッド(プロパティ)の説明を使用する説明のインスタンス。
現在の慣行では、オブジェクトの概念を次のように分類しています。ツール、つまりプログラミング言語、インターフェース、データベースへのアクセス、ネットワーク接続ですが、顧客の利益を示すものはなく、問題は解決されています。
これは単純なOOPに最適です。ポリモーフィズムは、特にさまざまな設計要素を実行することを可能にしますが、同じコードでそれらを管理します。しかし、ここでは、問題のオブジェクトについては話していません。これは、オブジェクト指向分析の対象とはまったく見なされていません。
プログラマーはOOPをツールとして採用しています彼らの仕事の質と生産性を改善しましたが、顧客に「彼らの領土」の低下を認めませんでした。 OOPの基本概念(カプセル化、継承、ポリモーフィズム)は開発の分野にとどまり、問題の分野に移植されませんでした。
オブジェクトとオブジェクトのシステム:問題と解決策
コンピューター-プログラマー-タスク。真ん中のリンクは不要です。理想的には、2つの比較的依存する輪郭のみが存在する必要があります:(コンピューター-プログラマー)-タスク。つまり、ユーザー、顧客、または訪問者は、自分の問題を解決するためのツールを持っています。お客様は、ツールの実装方法を気にしません。
理想的には、それは次のことができる単なるコンピュータです顧客が何を望んでいるかを理解し、彼が望んでいることを実行します。外観:ローカルプログラムまたはブラウザからアクセスできるWebサイト、分散情報処理用の特別なプログラム、顧客向けの情報システム-それは問題ではありません。
タスクとコンピュータの間に存在しないことが不可欠です余分なリンクですが、最初のリンクは2番目のリンクによって理解および解決されます。この目標を達成するには、コンピューターと顧客を1つのオブジェクトシステムでリンクする必要があり、各オブジェクトの意味、構造、コンテンツは顧客が決定し、オブジェクトのメソッドとプロパティはプログラマーが実装します。
お客様の仕事が創造することである場合に理想的必要なオブジェクトのシステムと、これらのオブジェクトのメソッドとプロパティの実装に関する作業は、時間的に分離されています。オブジェクトシステム(プログラマー)の実装がそのセマンティックコンテンツ(顧客)から離れるほど、プロセスは向上します。
顧客とプログラマーを邪魔するものは何もありません問題を解決する過程で相互作用しますが、セマンティクスを明確に分離することが重要です。誰もが自分のことをする必要があり、プログラマーはタスクの範囲を習得する義務はなく、顧客はコードを理解するべきではありません。さらに、当事者はお互いに関係のないアドバイスをするべきではありません。
従来のオブジェクトプログラミング
基本的なOOPの前提:カプセル化、継承、ポリモーフィズムは、慣れ親しんだ形で要求され、コードの品質と信頼性が著しく向上し、プログラマーの作業が大幅にスピードアップし、他にも多くの優れた品質があります。
しかし、物事はまだそこにあります。古典的なプログラミングはその位置に劣らず、多くのオブジェクト指向のアイデアは古典的なコードによって実装されます。
ただし、OOPと再帰のアイデアは適切なものになりました古典的な構文演算子の構文、オブジェクト指向の記述と思考のスタイルとは関係のない通常のコードを構築するロジックへの影響。
リストとキューが変更され、コンセプトが登場しました最初と最後の配列要素の「foreach」のループが出現し、命名、使用、実行の参照バリアントが以前よりもさらに需要が高まった。
実際、変数が失われたという事実そのものその「明確な」面(変数のタイプは必要に応じて変更でき、変数を記述する必要はありません)は、実際、クラシックは長い間オブジェクト指向になり、OOPの基本原則であるカプセル化を認識していることを示しています。 、継承、本質的なアイデアとしてのポリモーフィズム。
中心となるもの:オブジェクトまたはシステム
基本的な概念的位置としての抽象化OOPは、オブジェクトの責任(実装)の領域がどこにあるかに関係なく(最初の抽象オブジェクトのレベルまたは特定の子孫のレベルで)、質問を開いたままにします:オブジェクトからすべてをどこから開始するかまたはシステムから?
私たちがオブジェクトを基礎として置くならば、それは決してありませんシステムは彼の中にあるので、システムになり、彼自身は非常に具体的な始まりの厳格なイメージになります。ここで、抽象化に問題が発生します。最初のオブジェクトは、解決されている問題の主要なものを正確に修正します。つまり、別の問題に転送できなくなります。
オブジェクトのシステムを基礎として置くと、システムのシステムが取得されます。特定のタスクに関連して想像することは困難であり、開発をどこから開始するかも理解することは困難です。概して、エンティティ、実装の形式、関数内の実際のパラメータの数の違いを伴うOOPポリモーフィズムは パフォーマンス 次のように、最初にあるシステムについて:
- 問題を解決するためのオプション(たとえば、メニュー)について。
- 初期条件について(さまざまな条件での問題の適用、データ);
- 動作モード(テスト、チューニング、作業)について。
しかし、これなどは、問題を解決するための基礎としてオブジェクトのシステムを置く理由を与えません。多くの場合、単一の開始オブジェクトを定義するだけで十分です。
問題解決プロセスの歴史
OOPの最も重要な原則:ポリモーフィズムと抽象化-最初のオブジェクトをオブジェクトのシステムとして優先します。鶏が先か卵が先かをめぐる論争では、鶏が先か。
すべてがすべきであることは間違いありませんオブジェクトのシステムではなく、抽象的なオブジェクトから始めます。しかし、時間の要因を考慮して、最初の抽象的なものから始めて、各オブジェクトのレベルでそれを適用すると、ソリューションの最初にオブジェクトとシステムの両方を置くという矛盾した考えは合理的なものだけ。
古典的なプログラミングの概念が問題を解決する過程で、データ、データベースの内容、ファイルなどを変更し、OOPポリモーフィズムの概念では、カプセル化と時間係数によって、オブジェクトのシステムの内容、構造、プロパティが変更されます。解決されている問題。
OOPプログラマーは最も興味がありませんファイル、データベース、アルゴリズムの概念-これらは詳細です。ここではプログラマーはオブジェクトについて考えますが、オブジェクトは時間内に存在し、目的を達成する過程で変化します。
したがって、最初はシステムとしてのオブジェクトがありますオブジェクトとこのシステムのロジック-タイムスケール:タスクの開始、最初のオブジェクトの形成、データの入力または収集、次のオブジェクトの形成ですが、最初のオブジェクトが次のソリューションに進むことを妨げるものは何もありません。
オブジェクトの各レベルは、オブジェクトの独立したシステム、つまり、それは1つのオブジェクトですが、開始されたプロセスと時間の価値のコンテキストでは、それは時間スケールのオブジェクトのシステムです。 OOPの本格的な実装では、ポリモーフィズム、継承、および時間係数が一緒になって最初のダイナミクスを提供します。つまり、オブジェクトは時間の経過とともに変化するだけでなく、開発者によって提供されないオブジェクトを生成することもできます。顧客によって設計された、プロセスの過程でのタスクの実行。
実際のOOPポリモーフィズムの例
OOPが実行できるタスクの複雑さはそうではありませんライティングプログラムのクラシックバージョンで利用可能なものに匹敵します。もちろん、通常の方法で問題を解決することは常に可能ですが、時間と労力がどれだけ「かかる」かという問題は、結果を役に立たないものにすることがよくあります。
ライブラリは最近開発されましたPHPOffice / PHPWordですが、その機能を使用するには、ほとんどの場合、独自のオブジェクトシステムを作成する必要があります。たとえば、単純な* .docxファイル:
多くのファイルのzipアーカイブであり、Office Open XML形式(OpenXML、OOXML)のフォルダー。各ファイルはXMLタグで記述されており、文字、単語、表、リストなどの要素を追加、変更、削除すると、ファイルのコンテンツは、必ずしも完全な要素を含まないタグのシーケンスを表し始めます。多くの場合、1つです。要素は多くのタグで書かれています。
このファイルを一連のタグとして想像すると、興味深い画像が得られます。
最初で唯一の段落は簡単にわかりますドキュメントは多くのタグで表されます。テーブルとそれに組み込まれているテーブルに関しては、すべての要素の記述の量は認識できませんが、オブジェクト指向アプリケーションで利用できます。
実際、図では、緑はテストですタグ出力、黄色-パラメータとタグタイプ、ベージュ-コンテンツ。作成されたオブジェクトは、マシン処理を対象としています。人にとっては、ドキュメントファイルを開いたり、フォーマットしたり、書き込んだりする操作だけが利用できるようになります。
解決策は単純で実用的ですが、実行される機能の大部分とオブジェクト間の複雑な関係のために、実装は人よりもコンピューターに重点を置いています。
OOPエリアの状態
サイト管理システム、技術の開発サーバーのセットアップと管理、動的サイトの開発経験により、オブジェクト指向プログラミングに誰もがアクセスできるようになりました。問題は、コードを順番に実行するという文脈ではなく、オブジェクトのレベルで思考を変えて思考に慣れる方法です。
通常、古典的なプログラミングからの移行オブジェクト指向への移行には2〜3か月かかりますが、費用は利子付きで返済されます。最新のプログラミング言語、主にPHPとJavaScriptの可能性は、最も洗練された開発者を満足させるでしょう。
現代のOOP-ポリモーフィズム、継承、オブジェクトのプロパティを形成する機能は便利で実用的であり、言語の構文と補助ツールは作業の快適さとコードの効率を提供します。
オブジェクトのアイデアの視点
古典的なプログラミングはどのくらい続きますか?そして、OOPがどのように発展するかを言うのは難しいです。どうやら、ツールの開発者は、消費者(ユーザー、顧客)のコンテキストを考慮することを計画していません。
OOPツールキット(ポリモーフィズム、継承、カプセル化、および抽象化)は、開発者指向です。
最新の情報システムとWebリソース現実を反映し、実際のオブジェクトの機能を確保し、それらが機能するための環境を作成するよう努めます。これは、プログラミングから遠く離れた消費者が自分の能力の領域に完全に没頭できるようにシンプルです。