個人財務 C ++での因果関係と継承 - ダミー

C ++での因果関係と継承 - ダミー

ビデオ: Building Dynamic Web Apps with Laravel by Eric Ouyang 2024

ビデオ: Building Dynamic Web Apps with Laravel by Eric Ouyang 2024
Anonim

C ++の継承とファクタリングの概念は、1つのクラスが基本クラスのプロパティを継承することを可能にします。継承には多くの目的があります。継承の主な利点は、クラス間の関係を指摘できることです。これはいわゆるIS_A関係です - MicrowaveOven IS_Aオーブンとそのようなもの。

因果関係は、あなたが正しい相関関係を作れば素晴らしいことです。例えば、マイクロ波対従来のオーブンの関係は自然なようです。電子レンジはトースターの特別な種類だと主張し、あなたは困っています。確かに、彼らは両方とも物事を暑いものにし、電気を使い、キッチンでも見つけられるが、類似性はそこで終わる。電子レンジはトーストできず、トースターはナチョーを作ることができない。

<! - 1 - >

問題に固有のクラスを特定し、これらのクラス間の正しい関係を描くことは、 ファクタリングと呼ばれるプロセスです。 (単語は、あなたが小学校でやらなければならない算術に関連しています。たとえば、最小公約数を除外すると、12は2倍の2倍になります。)

継承は、銀行口座の例を使用してプログラムを単純化します。貯蓄口座と当座預金口座のコンセプトを実装した単純な銀行プログラムを書くように求められたとします。

<! - 2 - >

オブジェクト指向のプログラマーは、図面のクラスの顕著な点を簡潔に記述する方法を思いつきました。この図には 小切手 と小切手 が示されています。 (これは、同じことを図式的に表現するためのいくつかの方法の1つに過ぎません。)

と 小切手の確認。 "> 独立クラス

と 小切手の確認。 この図と他の図を読むには、次のことを覚えておいてください。

<! - 3 - >

大きなボックスはクラスで、クラス名が一番上にあります。
  • ボックス内の名前はメンバ関数です。

  • ボックスに入っていない名前はデータメンバーです。

  • 箱から途中まで延びる名前は、一般にアクセス可能なメンバーです。つまり、これらのメンバーは、クラスまたはその子孫の一部ではない関数によってアクセスできます。箱の中に完全に入っているメンバーには、クラス外からアクセスすることはできません。

  • 太い矢印はIS_A関係を表します。

  • 細い矢印はHAS_A関係を表します。

  • A Car IS_A Vehicle

、 がCar HAS_A Motor です。 最初の図では、

検査 クラスと 貯蓄 クラスに共通点が多いことがわかります。たとえば、両方のクラスにはwithdrawal()およびdeposit()メンバー関数があります。ただし、2つのクラスは同一ではないため、別々のクラスとして残す必要があります。 (現実の銀行のアプリケーションでは、この2つのクラスはこの例よりもかなり異なるでしょう)。しかし、この繰り返しを回避する方法があるはずです。 これらのクラスの1つにもう一方のクラスを継承させることができます。

貯蓄 は 小切手 よりも会員数が多いので、 小切手 を 小切手から継承させることができます。 この配置を次の図に示します。

貯蓄 クラスはすべてのメンバーを継承します。クラスはデータメンバーnoWithdrawalsを追加し、関数withdrawal() をオーバーライドすることで完了します。 貯金口座からの引き出しのルールと当座預金からの引き出しのルールが異なるため、withdrawal()をオーバーライドする必要があります。 小切手

は 小切手のサブクラスとして実装されています。 "> 小切手

は 小切手のサブクラスとして実装されています。

節約 を チェック から継承することは労力を要するものですが、それは完全に満足できるものではありません。主な問題は、運転免許証に記載されている重量のように、それは真実を偽っているということです。この継承関係は、普通預金口座が特殊な口座であることを意味します。 そのような誤った表現は、今日と明日の両方で、プログラマーにとって混乱します。いつか、プログラミングの習慣に慣れていないプログラマーは、コードが何をしているのかを理解して理解しなければなりません。誤解を招く表現は、調整し理解するのが難しいです。

また、このような誤った表現は、問題を引き起こす可能性があります。例えば、銀行が預金口座に関して政策を変更したとする。その月に最低残高が一定値を下回った場合にのみ、当座預金口座のサービス手数料を請求することを決定したとします。

このような変更は、クラス

チェックの変更を最小限に抑えて簡単に処理できます。 月の最低残高を記録するには、 チェック クラスに新しいデータメンバーを追加する必要があります。手足に出て、それを minimumBalanceと呼んでみましょう。 しかし、あなたには問題があります。

小切手 は 小切手から継承するため、貯蓄 はこの新しいデータメンバーも取得します。最低残高は貯蓄勘定に影響しないので、このメンバーには使用できません。すべての当座預金口座オブジェクトには、この余分な minimumBalance メンバーがあることに注意してください。 1人の余分なデータメンバーが大したことではないかもしれないが、それはさらに混乱を招く。 このような変更は蓄積されます。今日は余分なデータメンバーです - 明日は変更されたメンバー関数です。最終的には、普通預金口座クラスには、普通預金口座にのみ適用される余分な手荷物がたくさん載っています。

今すぐ銀行が戻って貯蓄口座の方針を変更することにします。これには、

チェックの一部の機能を変更する必要があります。 このような基本クラスの変更は、サブクラス 節約で関数がすでにオーバーライドされていない限り、サブクラスに自動的に伝播します。 たとえば、銀行がすべての預金に対して当座預金者を当座預金口座に引き渡すことを決定したとします。銀行(またはそのプログラマー)がそれを知ることなく、当座預金口座への預金は自動的にトースターの寄付につながります。あなたが非常に慎重でない限り、

Checking への変更は予期せず Savingsに表示されることがあります。 これらの問題をどうやって回避できますか?

は 貯蓄 の特別なケースですが、私たちの問題は解決しないと主張しています。必要なのは、ここに示すように 小切手 と 小切手 の間に共通する事項を具体化する第3のクラス(「口座」、「999」のみ)です。 一般的な アカウント クラスで

と 節約 をチェックします。一般的な アカウント クラスで、 基本

と 節約 をチェックします。 新しい口座の開設はどのように問題を解決するのですか?まず、新しい Account クラスを作成することは、現実世界(それが何であれ)をより正確に記述することです。もちろん、実際にアカウントとして知られているものがあります。貯蓄口座と当座預金口座は、このより基本的な概念の特殊なケースです。

クラス 節減 クラスは、クラス

検査 (およびその逆)の変更から隔離されています。銀行がすべての口座に根本的な変更を加える場合、 口座、 を変更することができ、すべてのサブクラスは自動的に変更を継承します。しかし、銀行が口座の確認のみを行うポリシーを変更した場合、 節約に影響を与えずに 小切手 を変更することができます。 類似のクラスから共通プロパティを取り除くこのプロセスは、クラスファクタリングの本質である 。ファクタリングは、継承関係が現実に対応している場合にのみ合法です。どちらもハードウェアポインティングデバイスであるため、クラス マウス

と ジョイスティック

を組み合わせることは合法です。両方とも低レベルのオペレーティングシステム呼び出しを行うため、クラス マウス と 表示 を組み合わせることはできません。

C ++での因果関係と継承 - ダミー

エディタの選択

ASVABの準備:小数の使用

ASVABの準備:小数の使用

ASBABの小数を扱う方法を知る必要があります。小数は、分子と分母を使用せずに分数を書き込む方法です。小数点以下7分の10を10進数として書くことができます。あなたはそれを "7分の1"または "ゼロ点7"と発音します。小数点以下の桁数は小数点以下の桁数を示します。

ASVABサブテストの詳細 - ダミー

ASVABサブテストの詳細 - ダミー

テストの目的と目的によって、いくつかのバージョンのASVAB。 ASVAB(CAT-ASVAB)のコンピュータ化されたバージョンは、9つの別々の時間調整されたサブテストを含む。 CAT-ASVABでは、自動情報とショップ情報が2つの異なるテストに分かれていますが、それらはペーパーバージョンで組み合わせられています。 ...

ASVAB読書と朗読のヒント - ダミー

ASVAB読書と朗読のヒント - ダミー

あなたの能力を向上させるためのショートカットはありませんASVABの読解スキル(練習以外に)は、このパートでできるだけ高いスコアを取るために、テスト日にいくつかのことを行うことができます。あなたがこの小テストで時間を使い果たしている場合や、あなたが本物を特定できるかどうかがわからない場合...

エディタの選択

Excelマクロヘルプのための10の場所 - ダミー

Excelマクロヘルプのための10の場所 - ダミー

誰も1つのExcelマクロエキスパートになることはできません日。 VBAは時間と実践の旅です。良いニュースは、そこにあなたの道であなたを助けることができる豊富な資源があるということです。

5本当にクールなExcel関数 - ダミー

5本当にクールなExcel関数 - ダミー

この便利な関数をExcelの機能に追加すると、あなたはExcelマスターのそれ以上のものになるでしょう。簡単に乱数を生成するExcel RAND関数は0と1の間の数値を返します。それだけです。通常、返された数値を有用なものにマッサージする必要があります。 ...

Excel 2016でユーザー定義関数に説明を追加する - ダミー

Excel 2016でユーザー定義関数に説明を追加する - ダミー

ユーザーがカスタム関数の目的を理解している場合は、関数の機能の説明に役立つ[関数と関数の引数の挿入]ダイアログボックスに表示される説明を追加できます。このような種類の説明をユーザー定義関数に追加するには、Visual Basic Editorの特殊ウィンドウであるオブジェクトブラウザを使用します。

エディタの選択

Excelのテキスト文字列からスペースを削除する - ダミー

Excelのテキスト文字列からスペースを削除する - ダミー

余分なスペースを含むテキストに間違いなく遭遇します。これらの余分なスペースは、テキストの冒頭にあることがありますが、それ以外の場合は末尾に表示されることがあります。

Excelデータ分析アドインの回帰ツール - ダミー

Excelデータ分析アドインの回帰ツール - ダミー

回帰という用語は指数関数的な平滑化ほど悪くはないが、少なくとも数学的にはもっと複雑である。そのため、データ分析アドインの回帰ツールが便利です。アドインは、移動平均と指数平滑化の場合と同様に、数学の責任を負います。あなたはまだ...

Excel 2007ワークシートの名前を変更する - ダミー

Excel 2007ワークシートの名前を変更する - ダミー

Excel 2007がブックのタブ(Sheet1〜 Sheet3)はあまり説明的ではありません。幸いなことに、この記述的な名前が31文字以下であれば、ワークシート・タブの名前をワークシートに貼り付けたものを覚えやすくする名前に簡単に変更できます。