問題タブ [abstract-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - インターフェイス/抽象クラスの静的メソッド
まず、インターフェイスまたは抽象クラス(.NET / C#の用語で)が抽象静的メソッドを持つことができない理由を理解しました。次に、私の質問は、最良の設計ソリューションに焦点を当てています。
私が欲しいのは、サードパーティベンダーからオブジェクトA、B、Cを取得した場合に、次のようなメソッドを持つヘルパークラスを持つことができるように、すべて独自の静的メソッドを持つ一連の「ヘルパー」クラスです。
私のAHelper、BHelper、およびCHelperクラスはすべて基本的に同じメソッドを持っているので、これらのメソッドを、これらのクラスが派生するインターフェイスに移動することは理にかなっているようです。ただし、これらのメソッドを静的にしたいので、すべてのメソッドから派生するジェネリックインターフェイスまたは抽象クラスを使用できません。
これらのメソッドを常に非静的にしてから、最初に次のようなオブジェクトをインスタンス化することができます。
ただし、このコードは私には直感的ではないようです。あなたの提案は何ですか?インターフェイスまたは抽象クラスの使用を完全に放棄する必要がありますか(現在の状況)、またはこれをリファクタリングして、探しているデザインを実現できますか?
.net - .NET抽象クラス
Webサイトのナビゲーション階層を設計しています。これはノードのツリーです。
ほとんどのノードはページです。一部のノードはリンクです(Windowsのショートカットを考えてください)。
ほとんどのページはHTMLコンテンツを保持しています。一部の実行コード。
これらをこのクラスと抽象(MustInherit)クラスのコレクションとして表現したいと思います…
これは、これらすべてを格納するデータベーステーブルです…
データベーステーブルhttp://img178.imageshack.us/img178/8573/nodetablefm8.gif
これが私が困惑しているところです。PageNodeは、ルートである場合とそうでない場合があります。
ルートクラスをどのように処理する必要がありますか?
私は4つすべてを持っている必要はありません…
- HtmlPageNode
- CodePageNode
- HTMLルートPageNode
- コードルートPageNode
HtmlPageNodeクラスとCodePageNodeクラスがPageNodeから、またはRootPageNodeから継承するようにしたい。それは可能ですか?
明確化:複数のルートノードがあり、ルートには親ノードがある場合があります。それぞれが、異なるスタイルを持つサブツリーのみのルートです。色分けされたさまざまな部門について考えてみてください。(おそらくrootは名前の選択としては不適切です。提案はありますか?)
更新:「ルート」名について...
私は尋ねました:サブツリーに対応するノードの特定の名前はありますか?
c++ - C ++でインターフェイスを操作するとパフォーマンスが低下しますか?
C++ でインターフェイス (抽象基本クラス) を使用すると、実行時のパフォーマンスが低下しますか?
java - Javaで代数型を実装する方法はありますか?
Java で、クラスが特定のサブクラスのセットを持ち、他のクラスを持たないようにすることは可能ですか? 例えば:
A の他のサブクラスを作成できないように強制することはできますか?
c# - 具体的なクラスを宣言する代わりに匿名を使用するC#抽象クラス?
抽象クラスがあり、抽象クラスを継承する具象クラスを作成せずにすばやく使用したいと考えています。ええと、抽象メソッドを匿名で定義します。
そんな感じ:
C# .net 2.0 で可能ですか?
unit-testing - 抽象クラスのテスト
PHPUnit で抽象クラスの具象メソッドをテストするにはどうすればよいですか?
テストの一環として、ある種のオブジェクトを作成する必要があると思います。ただし、これに関するベスト プラクティスや、PHPUnit でこれが許可されているかどうかはわかりません。
java - インターフェイスを実装する抽象クラスが、インターフェイスのメソッドの 1 つの宣言/実装を見逃す可能性があるのはなぜですか?
抽象クラスを使用してインターフェースを実装すると、Java で奇妙なことが起こります。インターフェースのメソッドの一部が完全に欠落している可能性があります (つまり、抽象宣言も実際の実装も存在しない) が、コンパイラは文句を言いません。
たとえば、次のインターフェイスがあるとします。
次の抽象クラスは、警告やエラーなしで楽しくコンパイルされます。
理由を説明できますか?
java - インターフェイスの骨格実装における抽象メソッド
私はEffective Java(第2版)の項目18を読み直していました。抽象クラスよりもインターフェースを好む。Map.Entry<K,V>
その項目では、Josh Bloch がインターフェイスのスケルトン実装の例を提供しています。
この例から 2 つの疑問が生じます。
- ここで getKey と getValue が抽象メソッドとして明示的に宣言されているのはなぜですか? これらはMap.Entryインターフェイスの一部であるため、抽象クラスで冗長な宣言を行う理由はわかりません。
Bloch氏が言及しているように、これらのプリミティブメソッドを抽象として残すというイディオムを使用するのはなぜですか? なぜこれをしないのですか:
// スケルトンの実装 public abstract class AbstractMapEntry は Map.Entry を実装します { 秘密 K キー; プライベート V 値;
}
この利点は、各サブクラスが独自のフィールド セットを定義する必要がなく、アクセサーによってキーと値にアクセスできることです。サブクラスが本当にアクセサーの独自の動作を定義する必要がある場合は、Map.Entry インターフェイスを直接実装できます。もう 1 つの欠点は、スケルトン実装によって提供される equals メソッドで、抽象アクセサーが呼び出されることです。
ブロックは、サブクラスによる変更に対してスーパークラスが脆弱になるため、継承用に設計されたクラスからオーバーライド可能なメソッド (項目 17) を呼び出すことに対して警告しています。これは意見の問題かもしれませんが、ブロッホは本の中でこれについて詳しく説明していないので、ストーリーにもっと多くのことがあるかどうかを判断したいと思っていました.
c# - 抽象クラスの正確な使用
抽象クラスの正確な使用法は何ですか?抽象クラスであるため、通常のクラスで同じことを行うことはできませんか?
c# - メソッドを抽象化せずに、サブクラスに強制的にメソッドをオーバーライドさせることはできますか?
いくつかの抽象メソッドを持つクラスがありますが、デザイナーでそのクラスのサブクラスを編集できるようにしたいと考えています。ただし、親クラスのインスタンスを作成できない限り、デザイナーはサブクラスを編集できません。したがって、私の計画は、抽象メソッドをスタブに置き換えて仮想としてマークすることですが、別のサブクラスを作成すると、それらを実装するのを忘れてもコンパイル時エラーは発生しません。
メソッドを抽象としてマークせずに、サブクラスで実装する必要があるようにメソッドをマークする方法はありますか?