問題タブ [object-composition]
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.
go - golang の継承メソッドでオブジェクトをアクセス可能にする
golang で継承を実装しようとしています。以下に例を示します。
AがBに継承されている場合、Aの関数でBのインスタンスを取得することは可能ですか?
java - 多重継承、インターフェースの使用と Java でのコンポジションの使用
いくつかのスタックオーバーフローの投稿に基づく:
Java は多重継承をサポートしていません。
私が考えることができるいくつかの回避策があります:
1 つ目は構成です。これら 2 つのアクティビティをフィールドとして使用するクラスを作成します。
2 つ目は、インターフェイスを使用することです。// これは私の質問です
AA クラスのメソッドと BB クラスのメソッドを持つことができるクラスを、インターフェイスまたはコンポジションで構築してみます。私は継承と構成についてよく読んでいますが、私の質問はインターフェースと構成です(どちらが優れていますか)。これらの 2 つのクラス メソッドを 1 つのクラス Preference で使用したい場合は、
明らかに、Java は多重継承をサポートしていないため、インターフェースまたは構成のいずれかを使用する必要があります。
インターフェース:
まず、次の 2 つのクラスに対応するインターフェイスを構築します。
次に、これら 2 つのインターフェイスを実装する Preference クラスを構築し、そのクラス内で 2 つのクラス オブジェクトを宣言します。
構成: メソッドを使用するために、2 つのクラス オブジェクトに対応する 2 つのフィールドを持つクラスを直接構築します。
その結果、Preference クラスでは、他のインターフェースや合成メソッドを利用することで、AA クラスや BB クラスから派生した id() メソッドや name() メソッドを利用できるようになりました。
質問: 構成ははるかにシンプルで優れているのに、なぜインターフェイスを使用する必要があるのですか? コンポジションの代わりにインターフェイスを使用する必要がある理由はありますか? 別の言い方をすれば、Java インターフェイスを使用して 1 つのクラスで 2 つのクラス メソッドを取得する方法は、私のやり方で正しいのでしょうか?
c++ - 構成されたオブジェクトの初期化
これは、真の答えがないように思われる、やや広い質問です。
かなり長い間、構成されたオブジェクトの初期化について混乱してきました。私は、すべてのメンバー データにゲッターとセッターを提供し、自動オブジェクトではなくオブジェクトへの生のポインターを優先するように正式に教えられました。
では、オブジェクトで構成されたオブジェクトを初期化するにはどうすればよいでしょうか。
これは、学校で学んだことを使用して初期化を試みる方法です。
このデザインは(私にとって)読みやすいので魅力的です。メンバ オブジェクトへのポインタがあるという事実により、初期化および初期化後BigObject
に可能になります。ただし、動的メモリはプログラムをより複雑にし、道を混乱させる可能性があるため、メモリ リークが発生する可能性があります。さらに、ゲッターとセッターを使用するとクラスが乱雑になり、メンバー データへのアクセスや変更が簡単になりすぎる可能性があります。obj1
obj2
これは実際に悪い習慣ですか?メンバー オブジェクトをその所有者とは別に初期化する必要がある場合がよくあります。これにより、自動オブジェクトが魅力的ではなくなります。さらに、より大きなオブジェクトが独自のメンバー オブジェクトを構築できるようにすることも検討しました。これは、セキュリティの観点からは理にかなっているように見えますが、オブジェクトの責任の観点からはあまり意味がありません。
c++ - 次のコードでウィンドウ(新しい長方形(30、20))がどのように機能しているかを理解したかった
だから私はそれを知っていてnew
、delete
暗黙的にコンストラクターを呼び出しますが、どのように機能しているのか理解できませんでしたwindow(new rectangle (30, 20))
。
c++ - オブジェクト定義の後にコンストラクターを呼び出す
この質問が既にされている場合は、申し訳ありません。
これは、C++ でネストされたクラスの動作を示す単純なコードです。ただし、クラスsecond
では、オブジェクトf
が以前に定義されていても、クラスのコンストラクターを使用してコンストラクターを呼び出すことができsecond
ます。既に定義されているクラスのインスタンスでコンストラクターを呼び出すにはどうすればよいですか?
python - __getattr__ メソッドを構成パターンとして使用することは、Python の良い実践ですか?
最初に - これが重複している場合はお詫び申し上げます - 以前に同様の議論を見たような気がしますが、実際には見つかりません。
私の質問は、複合クラスの各マイナー内からの継承のように見えるべき Python のオブジェクト構成に関するものです。ユースケースは、複数のオブジェクトインスタンスが属性とその値の共通のコアを共有することです (そして、代わりに古典的な継承のケースとなる共通の構造だけではありません)。
単純な属性を使用してこれを行うことができます。つまり、各クラスに「shared_attributes」という属性を 1 つ持たせるだけで、それ自体がすべての値を格納するクラスになります。
しかし、これには属性を介して各共有属性にアクセスする必要がありclass.core_attr
、これは望ましくありません (理由の 1 つは、コードの大部分を大幅に書き直す必要があるためです)。
__getattr__
そのため、代わりに、Python の組み込みオブジェクト メソッドに依存する複合パターンを使用したいと思います。
必要に応じて、次のように出力されます。
このパターンは私のニーズに完全に適合しますが、それについて私に確信させたい何かがあります...
編集: (いくつかのコメントに応答するため) このパターンが共有クラスのすべての属性を共有することが不可欠です (前のオブジェクトを考えると):
2番目の編集:私はこのパターンを数週間使用しており、美しく機能します. ただし、今後はこのパターンを標準ツールキットに含めたいので、まだ議論を望んでいます:-)
では、私の質問は単純です。これは良い習慣ですか? この特定の Python パターンには欠点がありますか? ここでいくつかの危険に注意する必要がありますか?
c# - C# 複数の抽象クラス構成の設計
私は Monogame で小さなゲーム エンジンを準備しています。ここでは、DrawableObject と ClickHandler から構成される gameObject のようなものが必要です(つまり:
問題は、C# が多重継承をサポートしていないことです。インターフェイスを使用する必要があります。私は DrawableObject と ClickHandler の抽象クラスを作成したので、いくつかの機能を既に実装することができます。
これを実装できるように再設計する方法のヒントはありますか? これをインターフェイスとして派生させるすべてのクラスに実装全体を移動する必要はありません。