タグ付けされた質問 「oop」

オブジェクト指向プログラミングは、「オブジェクト」を使用したプログラミングパラダイムです。つまり、データフィールドとメソッド、およびそれらの相互作用で構成されるデータ構造です。

6
名前のない名前空間が使用される理由とその利点は何ですか?
新しいC ++ソフトウェアプロジェクトに参加したばかりで、デザインを理解しようとしています。プロジェクトは、名前のない名前空間を頻繁に使用します。たとえば、クラス定義ファイルで次のようなことが発生する可能性があります。 // newusertype.cc namespace { const int SIZE_OF_ARRAY_X; const int SIZE_OF_ARRAY_Y; bool getState(userType*,otherUserType*); } newusertype::newusertype(...) {... 名前のない名前空間を使用する可能性がある設計上の考慮事項は何ですか?長所と短所は何ですか?
242 c++  oop  namespaces 

22
複数のフィールドでオブジェクトを比較する方法
次の方法で比較できるいくつかのフィールドを持ついくつかのオブジェクトがあるとします。 public class Person { private String firstName; private String lastName; private String age; /* Constructors */ /* Methods */ } したがって、この例では、次のことを尋ねると、 a.compareTo(b) > 0 あなたはaの姓がbの前に来るのか、またはaがbより古いのかなどを尋ねているかもしれません... 不要な混乱やオーバーヘッドを追加せずに、これらの種類のオブジェクト間の複数の比較を可能にする最もクリーンな方法は何ですか? java.lang.Comparable インターフェースにより、1つのフィールドのみによる比較が可能 多数の比較メソッド(つまりcompareByFirstName()、compareByAge()など)を追加することは、私の意見では混乱しています。 それで、これについて最善の方法は何ですか?
237 java  oop 

23
オブジェクト指向プロジェクトをどのように設計しますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 この質問を改善する 多くのクラスがあり、拡張可能である必要がある大規模なプロジェクト(私にとって)に取り組んでいますが、プログラムをどのように計画するか、およびクラスがどのように相互作用する必要があるかわかりません。 私は数学期前にOODコースを受講し、そこから多くを学びました。UMLの作成や、要件ドキュメントのオブジェクトやクラスへの変換などです。シーケンス図も学びましたが、どういうわけか講義を逃したり、なかなか私にこだわりませんでした。 以前のプロジェクトでは、コースから学んだ方法を使用してみましたが、通常は「ええ、私が考えていたもののように見えます」と言えるとすぐに、マックを掘って追加したくありません。新機能。 Steve McConnellのコードコンプリートのコピーを手に入れました。これは、ここや他の場所で素晴らしいと絶えず聞いています。デザインの章を読みましたが、探している情報が得られなかったようです。彼はそれがカットアンドドライプロセスではなく、主にヒューリスティックスに基づいていると彼が言っているのを知っていますが、私は彼のすべての情報を取得して私のプロジェクトに適用することはできないようです。 では、高レベルの設計段階(プログラミングを始める前)で、必要なクラス(特に、「実世界のオブジェクト」に基づいていないクラス)を決定し、それらがどのように相互に作用するかを判断するにはどうすればよいでしょうか。 具体的には、どのような方法を使用することに興味がありますか?通常、最終製品を厳密に表す優れたクリーンなデザインを実現するプロセスはどのようなものですか?


15
PHPのインターフェイスのポイントは何ですか?
インターフェイスを使用すると、それを実装するクラスのメソッドを定義するコードを作成できます。ただし、これらのメソッドにコードを追加することはできません。 抽象クラスを使用すると、メソッドにコードを追加するだけでなく、同じことを実行できます。 抽象クラスで同じ目標を達成できるとしたら、なぜインターフェイスの概念さえ必要なのでしょうか。 私はそれがC ++からJavaへのOO理論に関係していると言われています。これは、PHPのOOの基礎となっているものです。この概念はJavaでは有用ですが、PHPでは有用ではありませんか?これは、抽象クラスでプレースホルダがポイ捨てされないようにするための単なる方法ですか?何か不足していますか?
224 php  oop  interface  theory 

12
2つのPHPオブジェクトをマージする最良の方法は何ですか?
2つのPHP5オブジェクトがあり、1つのコンテンツを2番目のオブジェクトにマージしたいと考えています。それらの間にはサブクラスの概念がないため、次のトピックで説明するソリューションは適用できません。 PHPオブジェクトを別のオブジェクトタイプにコピーする方法 //We have this: $objectA->a; $objectA->b; $objectB->c; $objectB->d; //We want the easiest way to get: $objectC->a; $objectC->b; $objectC->c; $objectC->d; 備考: これらはクラスではなくオブジェクトです。 オブジェクトには非常に多くのフィールドが含まれているため、foreachは非常に遅くなります。 これまでのところ、オブジェクトAとBを配列に変換してから、array_merge()を使用してそれらをマージしてからオブジェクトに再変換することを検討していますが、これが私たちの誇りであるとは言えません。
222 php  oop  object 


15
Python関数のオーバーロード
Pythonがメソッドのオーバーロードをサポートしていないことは知っていますが、Pythonのようにうまく解決できないように見える問題に遭遇しました。 キャラクターがさまざまな弾丸を発射する必要があるゲームを作成していますが、これらの弾丸を作成するためのさまざまな関数をどのように記述すればよいですか?たとえば、A点からB点まで所定の速度で移動する弾丸を作成する関数があるとします。私はこのような関数を書きます: def add_bullet(sprite, start, headto, speed): ... Code ... しかし、次のような弾丸を作成するための他の関数を書きたいと思います。 def add_bullet(sprite, start, direction, speed): def add_bullet(sprite, start, headto, spead, acceleration): def add_bullet(sprite, script): # For bullets that are controlled by a script def add_bullet(sprite, curve, speed): # for bullets with curved paths ... And so on ... など、多くのバリエーションがあります。あまりにも多くのキーワード引数を使用せずにそれを行うより良い方法はありますか?各機能の名前を変更すると、あなたがいずれかを取得するので、あまりにもかなり悪いですadd_bullet1、add_bullet2かadd_bullet_with_really_long_name。 …

13
C ++ STLが非常にテンプレートに基づいているのはなぜですか?(*インターフェイス*ではありません)
つまり、必須の名前(標準テンプレートライブラリ)は別として... C ++は当初、OOPの概念をCに提示することを目的としていました。つまり、クラスとクラス階層に基づいて、特定のエンティティが(実行方法に関係なく)実行できることと実行できないことを区別できます。機能のいくつかの構成は、多重継承の問題と、C ++が(Javaなどと比較して)やや不格好な方法でインターフェースの概念をサポートしているという事実のために、この方法で説明することがより困難ですが、それはあります(そして改善された)。 そして、STLとともにテンプレートが登場しました。STLは、古典的なOOPの概念を取り入れ、代わりにテンプレートを使用してそれらをドレインに流しているように見えました。 テンプレートを使用してタイプを一般化する場合は、タイプテーマ自体がテンプレートの操作に無関係である場合(コンテナーなど)、ケースを区別する必要があります。持つvector<int>完璧な理にかなっています。 ただし、他の多くの場合(イテレーターとアルゴリズム)、テンプレート化された型は、概念の実際の詳細が完全にテンプレートの実装によって定義される「概念」(入力イテレーター、順方向イテレーターなど)に従う必要があります。テンプレートで使用されるタイプのクラスではなく、関数/クラス。これは、OOPの使用法とはやや反対です。 たとえば、関数に次のように伝えることができます。 void MyFunc(ForwardIterator<...> *I); 更新:元の質問では不明確だったので、ForwardIteratorをテンプレートにしてすべてのForwardIteratorタイプを許可しても問題ありません。逆に、ForwardIteratorをコンセプトとして使用しています。 は、その定義を見るだけでForward Iteratorを期待します。ここで、実装またはドキュメントのいずれかを調べる必要があります。 template <typename Type> void MyFunc(Type *I); テンプレートの使用に賛成できる2つの主張:コンパイルされたコードは、vtablesを使用する代わりに、使用された型ごとにテンプレートをカスタマイズしてコンパイルすることで、より効率的になります。また、テンプレートはネイティブタイプで使用できるという事実。 ただし、STLのテンプレート化を支持して古典的なOOPを放棄するより深い理由を探していますか?(ここまで読んだとすると:P)
211 c++  oop  templates  stl 


3
プロトタイプベースとクラスベースの継承
JavaScriptでは、すべてのオブジェクトが同時にインスタンスとクラスになります。継承を行うには、任意のオブジェクトインスタンスをプロトタイプとして使用できます。 Python、C ++などでは、別々の概念としてクラスとインスタンスがあります。継承を行うには、基本クラスを使用して新しいクラスを作成する必要があります。新しいクラスを使用して、派生インスタンスを生成できます。 JavaScriptがこの方向に進んだのはなぜですか(プロトタイプベースのオブジェクト指向)?従来のクラスベースのオブジェクト指向オブジェクトに対するプロトタイプベースのオブジェクト指向オブジェクトの利点(および欠点)は何ですか?

22
C#がC ++スタイルの 'friend'キーワードを提供しないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 この質問を改善する C ++の友人のキーワードが可能にclass A指定するclass Bその友人として。これによりClass B、private/のprotectedメンバーにアクセスできますclass A。 これがC#(およびVB.NET)から除外された理由について、私は何も読んだことがありません。この以前のStackOverflowの質問に対するほとんどの回答は、C ++の有用な部分であり、それを使用する十分な理由があると述べています。私の経験では同意する必要があります。 もう1つの質問friendは、C#アプリケーションと同様のことをする方法を本当に尋ねているようです。答えは一般にネストされたクラスを中心に展開しますが、friendキーワードを使用するほどエレガントではありません。 オリジナルのDesign Patternsブックでは、例全体で定期的に使用しています。 つまり、要約すると、なぜfriendC#に欠けているのか、そしてそれをC#でシミュレートする「ベストプラクティス」の方法とは何でしょうか。 (ちなみに、internalキーワードは同じものではなく、アセンブリ全体のすべてのクラスがinternalメンバーにアクセスfriendできるようにする一方で、特定のクラスに他の1つのクラスへの完全なアクセス権を与えることができます)
208 c#  c++  design-patterns  oop  friend 

4
__getattr__と__getattribute__の違いを理解する
私は違いを理解しようとしています__getattr__と__getattribute__、しかし、私はそれで失敗しています。 答えはスタックオーバーフローの質問に違い__getattr__Vsは__getattribute__言います: __getattribute__オブジェクトの実際の属性を確認する前に呼び出されるため、正しく実装するのが難しい場合があります。あなたは非常に簡単に無限の再帰に終わることができます。 それが何を意味するのか全く分かりません。 次にそれは言う: あなたはほぼ間違いなく欲しい__getattr__。 どうして? 私があればことを読んで__getattribute__失敗した、__getattr__と呼ばれています。では、なぜ同じことをする2つの異なる方法があるのでしょうか。コードが新しいスタイルクラスを実装する場合、何を使用すればよいですか? この質問をクリアするためのコード例を探しています。私は自分の能力を最大限に活用しましたが、私が見つけた答えは問題を完全に議論していません。 ドキュメントがある場合は、それを読む準備ができています。


4
オブジェクトをハイドレートするとはどういう意味ですか?
誰かがオブジェクトの水和について話すとき、それはどういう意味ですか? 異なる表現(RDMSからOOPS、XML)の間でデータを変換するWeb上でHydrateと呼ばれるJavaプロジェクトを見つけました。これはオブジェクトのハイドレーションの一般的な意味ですか?表現間でデータを変換するには?保存された表現からオブジェクト階層を再構築することを意味するのでしょうか?
205 java  oop 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.