問題タブ [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.
php - 一連のクラスのCONST属性へのアクセス
これが私がやりたかった方法で、PHP5.3.0以降で機能します。
しかし、私はPHP5.2.6の使用に制限されています。クラスをインスタンス化せずにこの動作をシミュレートする簡単な方法を誰かが考えることができますか?
oop - OOPはいつに適していますか?
オブジェクト指向プログラミングの勉強を始めてから、関数が優れている、またはすべての問題をオブジェクトとしてモデル化する必要があるとは限らないという記事やブログをよく読んでいます。あなたの個人的なプログラミングの冒険から、問題がOOPによってよりよく解決されるのはいつだと思いますか?
ruby-on-rails - なぜすべてのアクティブレコードが嫌いなのですか?
OOPについてどんどん学び、さまざまなデザインパターンを実装し始めると、人々がActiveRecordを嫌っているケースに戻ってきます。
多くの場合、人々はそれがうまくスケーリングしないと言います(彼らの主要な例としてTwitterを引用します)-しかし、なぜそれがうまくスケーリングしないのか実際には誰も説明しません。および/または短所なしでARの長所を達成する方法(類似しているが異なるパターンを介して?)
うまくいけば、これがデザインパターンについての聖戦にならないことを願っています-私が知りたいのは、****具体的に****ActiveRecordの何が問題なのかということだけです。
うまくスケーリングしない場合は、なぜですか?
他にどのような問題がありますか?
perl - Perlでどのようにオブジェクトを作成しますか?
PerlにはOOP機能がありますが、それらが使用されることはほとんどありません。メソッドとプロパティを使用してPerlオブジェクトをどのように作成して使用しますか?
c++ - C++ で静的クラスを作成するにはどうすればよいですか?
C++ で静的クラスを作成するにはどうすればよいですか? 私は次のようなことができるはずです:
BitParser
私がクラスを作成したと仮定します。BitParser
クラス定義はどのようになりますか?
user-interface - プライベート変数と同じ規則を使用して、フォーム上のコントロールに名前を付けていますか?
何らかの理由で、これが行われたことはありません。そうでない理由はありますか?たとえば、私はプライベート変数の _blah が好きで、少なくとも Windows フォーム コントロールでは、デフォルトでプライベート メンバー変数になっていますが、そのように名前が付けられているのを見た覚えがありません。メンバー関数内のローカル変数にコントロール オブジェクトを作成/保存する場合、視覚的に区別できると特に便利です。
c++ - 継承とポリモーフィズム - 使いやすさと純粋さ
プロジェクトでは、私たちのチームはオブジェクト リストを使用して、すべて同様の方法で処理する必要がある一連のデータに対して大量の操作を実行しています。特に、異なるオブジェクトが同じように動作するのが理想的です。これは、ポリモーフィズムによって非常に簡単に実現できます。私が抱えている問題は、継承が関係を持っているのではなく、関係であることを意味することです。たとえば、いくつかのオブジェクトにはダメージ カウンターがありますが、これをオブジェクト リストで使いやすくするために、ポリモーフィズムを使用できます。(人はダメージカウンターではありません。)
私が考えることができる唯一の解決策は、継承に頼るのではなく、クラスのメンバーが暗黙的にキャストされたときに適切なオブジェクト型を返すようにすることです。プログラミングの容易さと引き換えに、 is a / has a idea を忘れた方がよいでしょうか?
編集:より具体的には、私はC++を使用しているため、ポリモーフィズムを使用すると、派生クラスが単一のリスト内に存在し、ベースの仮想関数によって操作されるという意味で、異なるオブジェクトが「同じように動作する」ことができますクラス。インターフェイスの使用 (または継承を介してそれらを模倣すること) は、私が喜んで使用するソリューションのようです。
language-agnostic - グローバルアプリケーション設定へのアクセス
私が現在取り組んでいるデータベースアプリケーションは、あらゆる種類の設定をデータベースに保存します。これらの設定のほとんどは、特定のビジネスルールをカスタマイズするためのものですが、他にもいくつかあります。
アプリには、特定の複雑な計算など、特定のタスクを具体的に実行するオブジェクトが含まれています。これらの非UIオブジェクトは単体テストされていますが、これらのグローバル設定の多くにアクセスする必要もあります。これを今実装している方法は、実行時にアプリケーションコントローラーによって入力されるオブジェクトプロパティを与えることです。テスト時には、テストでオブジェクトを作成し、(データベースからではなく)テスト用の値を入力します。
これはうまく機能しますが、いずれの場合も、これらすべてのオブジェクトにグローバル設定オブジェクトが必要になるよりもはるかに優れています---もちろん効果的に単体テストが不可能になります:)欠点は、数十のプロパティを設定する必要がある場合や、必要な場合があることです。これらのプロパティをサブオブジェクトに「浸透」させます。
したがって、一般的な質問は、コードを単体テストできる一方で、グローバル変数を必要とせずに、プロジェクト内のグローバルアプリケーション設定へのアクセスをどのように提供するかということです。これは何百回も解決された問題であるに違いありません...
(注:お気づきのように、私は経験豊富なプログラマーではありませんが、学ぶのは大好きです!もちろん、このトピックについてはすでに調査を行っていますが、最初にいくつかを探しています。 -手の経験)
oop - ポリモーフィズムを使用した式評価とツリー ウォーキング? (スティーブ・イェッジ)
今朝、私はSteve Yegge の: When Polymorphism Failsを読んでいたとき、彼の同僚が Amazon での面接に来た潜在的な従業員に尋ねていた質問に出くわしました。
実際のポリモーフィズムの例として、古典的な「eval」インタビューの質問を見てみましょう。これは (私の知る限り) Ron Braunstein によって Amazon にもたらされました。OOP 設計、再帰、バイナリ ツリー、ポリモーフィズムとランタイム タイピング、一般的なコーディング スキル、および (さらに難しくしたい場合は) 解析理論など、さまざまな重要なスキルを調べることができるため、この質問は非常に豊富です。 .
ある時点で、志願者は、「+」、「-」、「*」、「/」などの二項演算子のみを使用していると仮定して、算術式を二分木として表現できることに気付きます。リーフ ノードはすべて数値であり、内部ノードはすべて演算子です。式を評価することは、木を歩くことを意味します。候補者がこれに気付いていない場合は、そっと誘導するか、必要に応じて伝えることができます。
と言ってしまっても、やはり面白い問題です。
質問の前半は、一部の人々 (名前は息が詰まるまで守りますが、イニシャルはウィリー・ルイスです) は、自分自身を開発者と呼んで Amazon で働きたい場合の仕事の要件であると感じていますが、実際にはちょっと難しいです。 . 問題は、「2 + (2)」などの算術式 (文字列など) から式ツリーにどのように移行するかです。ある時点で、この質問に対する ADJ チャレンジが行われる可能性があります。
後半は、これが 2 人のプロジェクトで、あなたのパートナー ("ウィリー" と呼びます) が文字列式をツリーに変換する責任があるとしましょう。簡単な部分を取得します。ウィリーがツリーを構築するクラスを決定する必要があります。任意の言語で実行できますが、いずれかを選択するようにしてください。そうしないと、ウィリーがアセンブリ言語を渡してくれます。彼が気難しいと感じているのは、もはや生産されていないプロセッサーのためでしょう。
どれだけ多くの候補者がこれを好んでいるかに驚かれることでしょう。
答えは言いませんが、Standard Bad Solution には、switch または case ステートメント (または単に古き良きカスケード if) の使用が含まれます。Slightly Better Solution には、関数ポインターのテーブルの使用が含まれ、おそらく最善の解決策には、ポリモーフィズムの使用が含まれます。いつかやり遂げることをお勧めします。楽しいもの!
それでは、3 つの方法すべてで問題に取り組みましょう。"2 + (2)" などの算術式 (文字列など) から、カスケード if、関数ポインターのテーブル、および/またはポリモーフィズムを使用した式ツリーにどのように移行しますか?
1 つ、2 つ、または 3 つすべてに自由に取り組んでください。
[更新: ほとんどの回答に一致するようにタイトルを変更しました。]
oop - 単一責任原則はOOPのルールですか?
Stack Overflowの質問に対する回答では、特定のフレームワークが単純で単純なOOPルールである単一責任原則(SRP)に違反していると述べられています。
単一責任の原則は本当にOOPのルールですか?
オブジェクト指向プログラミングの定義についての私の理解は、「オブジェクトとその動作を使用してソフトウェアを作成するパラダイム」です。これには、カプセル化、ポリモーフィズム、継承などの手法が含まれます。
誤解しないでください。SRPが最も優れたオブジェクト指向設計の鍵であると信じていますが、この原則が破られる可能性があり、破られるべきである場合があると感じています(データベースの正規化ルールのように)。私はSRPの利点を積極的に推進しており、私のコードの大部分はこの原則に従っています。
しかし、それはルールであり、したがって、それが破られるべきではないことを意味しますか?