問題タブ [oop]

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.

0 投票する
5 に答える
919 参照

c++ - C++ - 「自動スタック」とはどういう意味ですか?

インターネットをブラウジングしているときに、この投稿に出くわしました。これには、これが含まれます

「(よく書かれています) C++ は、スタック自動オブジェクトをプリミティブと同じように機能させるために多大な努力を払っています。これは、Stroustrup の「int と同じように行う」というアドバイスに反映されています。これには、オブジェクト指向開発の原則をより厳守する必要があります。あなたのクラスは、(int のように) 作成され、コピーされ、自動スタックとして正しく破棄されることを保証する「3 つのルール」に従って、int のように「機能する」まで正しくありません。」

私は少し C と C++ のコードを書いたことがあります。

誰かが例を挙げることができますか?

0 投票する
3 に答える
4700 参照

c# - サブクラス固有のデータを格納する必要がある配列を継承する最良の方法は何ですか?

次のような継承階層を設定しようとしています。

MotorcycleAxle オブジェクトのみを Motorcycle オブジェクトの Axles 配列に格納し、CarAxle オブジェクトを Car オブジェクトの Axles 配列に格納したいと考えています。問題は、サブクラスの配列をオーバーライドしてどちらか一方を強制する方法がないことです。理想的には、Motorcycle クラスには次のようなものが有効です。

ただし、オーバーライドするときは型が一致する必要があります。このアーキテクチャをどのようにサポートできますか? Axles メンバーがアクセスされる場所で、多くの実行時の型チェックとキャストを行う必要があるだけですか? 実行時の型チェックを追加するのは好きではありません。強い型付けとポリモーフィズムの利点が失われ始めるからです。WheelAttached および Left/RightWheelAttached プロパティはタイプに依存するため、このシナリオでは少なくともいくつかの実行時チェックが必要ですが、それらを最小限に抑えたいと考えています。

0 投票する
3 に答える
15826 参照

java - Javaの匿名内部クラスから囲んでいるクラスへの参照をどのように取得しますか?

私は現在、外部クラスでこれへの明示的な参照を作成しているので、匿名の内部クラスで参照する名前があります。これを行うためのより良い方法はありますか?

0 投票する
13 に答える
2909 参照

c# - 同じ引数タイプのコンストラクター

2つのコンストラクターを持つPersonオブジェクトがあります。1つはint(personId)を取り、もう1つは文字列(logonName)を取ります。文字列(badgeNumber)を受け取る別のコンストラクターが欲しいのですが。これができないことは知っていますが、一般的な状況のようです。これを処理する優雅な方法はありますか?これは、オーバーロードされたメソッドすべてに当てはまると思います。コード:

...等。

0 投票する
8 に答える
47393 参照

oop - デリゲートはどこで使用しますか?

代表者を必要とする現実世界の場所は何ですか?この方法が最善の解決策である場合、どのような状況やパターンが存在するのか興味があります。コードは必要ありません。

0 投票する
3 に答える
1946 参照

c++ - C++ で保護された継承が必要な例はありますか?

プライベートな継承が必要なケースはまれに見ましたが、保護された継承が必要なケースに遭遇したことはありません。誰かに例がありますか?

0 投票する
8 に答える
3695 参照

php - これは、PHP クラスでゲッター/セッターを処理する合理的な方法ですか?

この質問の形式で何かを試すつもりです。それを処理するためのより良い方法についての提案を非常に歓迎しています。

質問で大量のコードをダンプしたくなかったので、クラスのコードを に投稿しましたrefactormycode

クラス プロパティを簡単に処理するための基本クラス

私の考えでは、人々はここにコード スニペットを投稿するか、変更を加えrefactormycodeてリファクタリングへのリンクを投稿することができます。それに基づいて、賛成票を投じて回答を受け入れます(明確な「勝者」がいると仮定します)。

とにかく、クラス自体に:

getter/setter クラス メソッドについて多くの議論が見られますが、単純なプロパティ変数に直接アクセスする方がよいのでしょうか、それともすべてのクラスに明示的な get/set メソッドを定義する必要があるのでしょうか。後でロジックを追加する必要がある場合に備えて、明示的なメソッドを用意するというアイデアが気に入っています。その後、クラスを使用するコードを変更する必要はありません。ただし、次のような関数が何百万もあるのは嫌いです。

今、私はこれを行う最初の人ではないと確信しています (誰かが私に提案できるより良い方法があることを願っています)。

基本的に、PropertyHandler クラスには __call マジック メソッドがあります。"get" または "set" で始まる __call を経由するすべてのメソッドは、値を連想配列に設定または取得する関数にルーティングされます。配列のキーは、取得または設定後の呼び出しメソッドの名前です。したがって、__call に入るメソッドが「getFirstName」の場合、配列キーは「FirstName」です。

サブクラスにすでに「getFirstName」メソッドが定義されている場合に自動的に処理されるため、__call を使用するのが好きでした。私の印象 (間違っているかもしれません) は、__get & __set マジック メソッドはそれを行わないということです。

したがって、これがどのように機能するかの例を次に示します。

PropTest には実際には「setFirstName」または「getFirstName」メソッドがなく、PropertyHandler もないことに注意してください。配列の値を操作しているだけです。

もう 1 つのケースは、サブクラスが既に何か他のものを拡張している場合です。PHP では真の多重継承を行うことができないため、サブクラスに PropertyHandler インスタンスをプライベート変数として持たせることができます。もう 1 つ関数を追加する必要がありますが、その後はまったく同じように動作します。

サブクラスには、PropertyHandler __call メソッドにすべてを渡すだけの __call メソッドがあることに注意してください。


このように getter と setter を処理することに対するもう 1 つの良い議論は、文書化が非常に難しくなるということです。

実際、文書化されていない明示的なメソッドが存在しないため、どのような種類の文書生成ツールを使用することも基本的に不可能です。

私は今のところ、このアプローチをほとんど放棄しました。興味深い学習課題でしたが、明快さを犠牲にしすぎていると思います。

0 投票する
2 に答える
232 参照

inheritance - クラス設計の決定

私には少しジレンマがあります。多分あなたは私を整理するのを手伝ってくれるでしょう。

私は今日、ASP.NETのメンバーシップを変更して、間接参照のレベルを追加することに取り組んでいます。基本的に、ASP.NETのメンバーシップはユーザーとロールをサポートし、すべての承認ルールはユーザーがロールに属しているかどうかに基づくようにします。

私がする必要があるのは、ユーザーが1つまたは複数のロールに属し、ロールに1つ以上の関数が関連付けられ、ユーザーが属しているかどうかに基づいて特定のアクションを承認できるようにする、関数の概念を追加することです。機能が割り当てられている役割に。

そうは言っても、私の問題はそれとは何の関係もありません。それはジェネリッククラスの設計の問題です。

基本のRoleProviderクラスに抽象メソッドを提供して関数を作成(および永続化)したいのですが、その関数の説明を保存することをオプションにしたいので、オーバーロードを使用してCreateFunctionメソッドを作成する必要があります。名前を受け入れる署名、および名前と説明を受け入れる他の署名。

私は次のシナリオを考えることができます:

  1. 抽象修飾子を使用して両方の署名を作成します。これには、実装者が、一方のオーバーロードがパラメータを正規化してもう一方を呼び出す必要があり、ロジックは最後の1つ(すべてのパラメータを含むもの)にのみ存在する必要があるというベストプラクティスを尊重しない可能性があるという問題があります。さらに、開発者が両方のメソッドを実装する必要があるのは良くありません。

  2. 最初のような仮想と2番目のような抽象を作成します。最初から2番目を呼び出し、実装者が動作をオーバーライドできるようにします。同じ問題があり、実装者はそれをオーバーライドするときに「悪い決定」をする可能性があります。

  3. 以前と同じですが、最初のオーバーライドを許可しないでください(仮想修飾子を削除してください)。ここでの問題は、実装者がメソッドがnull記述で呼び出される可能性があることを認識し、その状況を処理する必要があることです。

最良の選択肢は3番目の選択肢だと思います...

このシナリオは一般的にどのように処理されますか?抽象クラスを設計し、オーバーロードされたメソッドが含まれている場合。そんなに珍しいことではないと思います...

0 投票する
20 に答える
354023 参照

java - Java の構造体のようなオブジェクト

オブジェクトのような構造体を作成するJavaの方法に完全に反していますか?

アクセサーとミューテーターが Java に似ているクラスを確認できます。

最初の例のクラスは表記上便利です。

これはあまり便利ではありません。

0 投票する
10 に答える
69220 参照

oop - 保護されたメンバー変数を使用する必要がありますか?

保護されたメンバー変数を使用する必要がありますか? どのような利点があり、これによってどのような問題が発生する可能性がありますか?