少なくともプログラミングの知識を持っている人なら、なぜ抽象基本クラスがあるのだろうと思っていました。 その目的は何ですか? 抽象クラスを作成するには? 彼らが実際に与える利点は何ですか? なぜプログラミングに必要なのか、実装の特徴を考慮しなければならないのか?
抽象クラス
したがって、プログラミングでは、プログラムコードの単位と呼ばれ、それに基づいてオブジェクトを作成することはできません。 このクラスの相続人は抽象ではないかもしれないことに留意すべきである。 したがって、オブジェクトの作成は基本的に可能です。 Javaからの例を考えれば、クラスAのコンストラクタを記述できますが、使用することはできません。 この状況を回避するには、変数を参照として宣言する必要があります。 クラスAのオブジェクトを指していることを明確に述べる必要がありますが、これをどのように行うことができますか? このキャストは私たちを助けます。 親クラスは、常に子よりも普遍的であるとみなされることに留意すべきである。 多くのプログラミング言語では、キャストが自動的に使用されます。 しかし、そのようなメカニズムが利用できるかどうか確信がなければ、オブジェクトへの参照を明示的に指定する必要があります。
抽象メソッド
彼らは何ですか? 抽象メソッドは、検討中のクラスで実装されていないメソッドです。 したがって、カッコの後に(その中で使用された引数がリストされている)非オープンカーリー(メソッド記述のブロックが置かれる)がセミコロンだけで囲まれます。 したがって、この場合、彼が何をしているのかに関する情報はありません。 ここでは、「実装されていないメソッドはなぜですか?」という質問をすることができます。 結局のところ、それは使用することはできません! もちろん、これは記述されたクラスでは不可能です。 しかし、この状況を子孫の立場から考えると、それは呼び出すことができます。 そして、このクラスで利用可能な特定の記述に従って機能します。
抽象メソッドの特長
その使用には制限があります。 これをJavaプログラミング言語の例で考えてみましょう。 クラスに少なくとも1つのメソッドがある場合は、必ず抽象クラスでなければなりません。 どのような場合にそのような構造を使用するのが適切ですか? ペットクラスの場合はこれを見てみましょう。 まず、彼らがすべて発表する音がないことを理解する必要があります。 したがって、最も一般的なクラスでは、サウンドメソッドの実装は指定されていません。 しかし、彼のために体が作られ、それはブロックで区切られています。 そして、将来、犬、猫、ハムスターのクラスが作成されると、そのための別の方法が規定され、その中ですべての特徴が明らかになるでしょう。
インターフェイス
プログラミングでは、人が良質の製品を作るのを助けることを目的とする多くのツールが作成されています。 また、検討中のトピックの枠組みでは、抽象クラスとインタフェースの違いを誰もが知るように、この側面に注意を払う必要があります。 したがって、後者の特異性は、それが特性を持つことができないということであり、方法は体を持たない。 抽象クラスとインタフェースの違いを調べるには、もう1つの機能に注意する必要があります。 したがって、最初のものは継承され、2番目のものは実現されます。 経験の浅い人にとっては、これは重要ではないようです。 しかし、実際には1つのクラスだけ継承でき、必要な数だけ実装することができます。 これは、インタフェースが 抽象クラス と異なる点 です。 Javaに は、抽象パブリックメソッドと静的定数のみを記述できるその他の機能があります。 しかし、インターフェースは継承することもできます。 この場合、使用されているオペレータが一般に公開されていることを示す必要があります。
複数のインタフェース継承
この関数は、多くのプログラミング言語のクラス(たとえば、私たちが検討しているJava)では利用できません。 これは多くの問題が原因です。 したがって、継承するときに生ずるあいまいさを示してください。 これが、複数の継承インターフェイスを導入した理由です。 これは既存の問題を部分的に解決しますが、すべてを解決するわけではありません。 したがって、カプセル化とポリモーフィズムの原理のおかげで、インターフェイスはさまざまな方法で異なるクラスに正常に実装できます(名前は同じですが)。 しかし、既存の問題を忘れないでください。 だから、複数のインターフェースを扱うときは、いつ誰を意味するのかを指定する必要があります。 また、同じ名前の2つのメソッドを使用しようとすると問題が発生します。その場合は使用できません。 したがって、そのような場合には、共通の実装の可用性を考慮する必要があります。
抽象データ
このコンセプトはプログラミングにとって重要です。 この場合、抽象化は、インタフェースとその実装の独立した考慮と分離として理解されます。 例を見てみましょう。 我々はオブジェクトやモジュールであるテレビを持っています。 それはインターフェイスを持っています。 そのため、サウンドや画像の再生だけでなく、そのためのコントロールもあります。 より高度なインターフェースが使用されればするほど、テレビが使用中により便利になる。 任意のボタンをクリックしてプログラムを切り替えることができます。 この場合、テレビの物理的プロセスについて考える必要はありません。 彼らは、デバイスを収集する専門家によって世話をされます。 私たちはユーザーとしてのプロパティにのみ興味があります。 プログラミングに戻って、我々は彼らがこの類推によってインタフェースと実装であると言うことができます。 また、ある人が自分の知識に自信を持っていれば、彼は仮説的なテレビのカバーを「外して」改善することができます。 これは地元の成功につながる可能性がありますが、最終的な結果はマイナスです。 したがって、プログラミングは抽象データのアクセスを禁止し、内部コンポーネントを隠す。 このメカニズムの原則は、内部コンポーネントの意図的または偶発的な変更を防止する方法を提供します。 また、抽象データ型について言及するとき、そのデータ型で実行できる多数の操作を集約したものを意味します。
オブジェクト
我々は、抽象クラスとインタフェースを一般的かつ一般的に調べてきました。 今、私たちの知識を少し詳しく見てみましょう。 まず、オブジェクトに注目します。 それらによって一般的なケースでは、空間と時間に存在する周囲の現実の一部と理解される。 しかし、(哲学的および理論的な観点から)プログラミングの枠組みにおいてオブジェクトを形式的に定義するのはむしろ困難です。 したがって、これはその特性のために行われます。 一例として、オブジェクトは一意に識別され(固有の名前を持つ)、特定の状態にあり、特定の動作モデルを使用することができます。
継承
プログラミングはオブジェクト間の関係の階層ツリーを構築することに基づいているため、親コードライブラリのプロパティを基になる型に転送する必要があります。 継承は、他の何かの行動や構造を繰り返すときの関係として理解されます。 普通の生活では、これはどこでも見つけることができます。 これは、抽象要素に関するプログラミングにも移行されました。 比較すると、鳥のような生物は存在しないということを挙げることができます。 これは抽象的な名前です。 特定の標本として、あなたはカモメ、ナイチンゲール、またはスズメを持ってきます。 継承のために、私たちはクラスライブラリを使うことができますし、特定のプログラムのためにそれらを開発することもできます。 このようなツールを使用すると、新しいオブジェクトを作成し、すでに作成されたオブジェクトのプロパティを追加または変更することができます。 相続人は、彼の祖先のすべての方法とフィールドを取得し、必要に応じて自身の属性を取得します。 抽象要素と遺産の原則があるという事実のために、オブジェクト指向プログラミングの枠組みの中で修正するための十分な機会があります。 また、タスクのソリューションに柔軟にアプローチすることができます。 継承すると、データと関数が新しいクラスに渡されます。
多型
異なる種類のタスクを解決するために同じ関数を適用する必要があります。 この場合、さまざまなアクションを実行する可能性があり、その内容は作業が実行されるオブジェクトのタイプに依存します。 多態性は、共通の親を1つ持つ要素のプロパティとして理解され、意味的意味においてさまざまな方法で同様の問題を実行します。 我々は動物との類推を引き出す。 実行するようなアクションがあります。 私たちは皆それがどうなるか理解しています。 しかし、異なる動物(ライオン、ゾウ、チンパンジー、クロコダイル、カメ)の場合、この行動は異なる方法で行われます。 この場合、開発者は、必要に応じて、特定のケースに対して特定のサブプログラムを発生させ、アルゴリズムを開発し、それをうまく実装できるように、その動きを管理します。 これは一連のメソッドを使用して行われます。 この場合、それぞれの別個のクラスにおいて、プログラマーは、どのオブジェクトがどのプロパティが固有であるかを示す。 子孫の何かを変えることで、この場合は必要なアクションを確実に達成できます。 このような影響をオブジェクト多形性といいます。 一般に抽象クラスは非常に便利なプログラミングツールです。