私はアプリケーションをバックアップするためのユーティリティを設計しています。コード内での共通かつユニークな動作の設計
バックアップ機能には、一般的な作業(共通コード)といくつかの固有の手順が含まれています。ユニークな振る舞いのインターフェースと共通の振る舞いのための抽象基本クラスをすべての子どもが共通に使用することで正しい軌道に乗っていますか?このアプローチには欠点はありますか?何か良い?
おかげ
私はアプリケーションをバックアップするためのユーティリティを設計しています。コード内での共通かつユニークな動作の設計
バックアップ機能には、一般的な作業(共通コード)といくつかの固有の手順が含まれています。ユニークな振る舞いのインターフェースと共通の振る舞いのための抽象基本クラスをすべての子どもが共通に使用することで正しい軌道に乗っていますか?このアプローチには欠点はありますか?何か良い?
おかげ
基底クラスは、実際にいくつかの動作を実装した場合は、その後、私はそれが非 -abstract基底クラスと呼ばれると思います。
とにかく私はそれがTemplate method patternと呼ばれていると思うかもしれません。パターンの辞書(それが適切なときに説明し、同様の代替パターンを参照する必要があります)を調べることができます。
私は抽象基本クラスを使用して共通の機能を共有するのではなく、is-a関係を表現するだけです。 DがBから派生している場合、Bが期待される場所であれば、Dが出現することができる。これは公開継承を使用するための基準です。
ただし、プライベート継承を使用することはできますが、一部の言語では1つのクラスからのみ派生することができます。
これはまず、責任を考えることと、それが所属する場所のどこにでも機能をカプセル化すること、インターフェイス(またはC++の純粋な抽象クラス)をクライアントに公開し、派生する具体的なクラスで機能を実装することこれらのインターフェースから。
この場合is-aはおそらくバックアップ戦略であるか、is-a-backup-バックアップ可能なオブジェクトの種類。 – ChrisW
私のポイントは - "共通の振る舞いの抽象基底クラス" =>共通の振る舞いに抽象基底クラスを使用せず、is-a関係を表現するだけです。鳥とエアラインは同じように行動します - 彼らは飛びます。 Fly()と呼ばれる抽象基本クラスをデフォルトの実装で作成しますか?代わりにインターフェースですか? – Ariel
鳥と飛行機が持つ「共通の行動」を想像するのは難しい。旅客用ジェット機、私用プロペラ機、ヘリコプターなどは、すべて航空管制(Air Traffic Control)によって制御される可能性があります。したがって、ATCシステムを設計する場合、これらはすべて共通の基本クラスをサブクラス化する可能性があります。 – ChrisW
あなたの質問は言語特有であり、OOPデザインには一般的ではありません。あなたはJavaやC#を想定しているようですが(答えはこれまでのことだと思いますが) – Javier