問題タブ [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.
oop - 干し草の山から針をどうやって見つけますか?
オブジェクト指向の方法で干し草の山の針検索を実装する場合、基本的に3つの選択肢があります。
どちらが好きですか、そしてその理由は何ですか?
3番目のオブジェクトの導入を回避するため、2番目の選択肢を好む人もいます。ただし、少なくとも「現実の世界」をモデル化することが目標である場合は、3番目のアプローチがより概念的に「正しい」と感じざるを得ません。
この例のサーチャーなどのヘルパーオブジェクトを導入することはどのような場合に正当であると思いますか。また、いつそれらを回避する必要がありますか。
language-agnostic - OOPのポイントは何ですか?
私の知る限り、OOPの教育、言語、ツールに数え切れないほどの数百万または数十億ドルが費やされているにもかかわらず、OOPは開発者の生産性やソフトウェアの信頼性を向上させておらず、開発コストも削減していません。厳密な意味でOOPを使用する人はほとんどいません(LSPなどの原則を順守または理解している人はほとんどいません)。問題のあるドメインをモデル化するために人々が採用するアプローチには、統一性や一貫性がほとんどないようです。多くの場合、このクラスは単にその構文糖衣のために使用されます。レコードタイプの関数を独自の小さな名前空間に配置します。
私はさまざまなアプリケーション向けに大量のコードを作成しました。真の代替可能なサブタイピングがアプリケーションで貴重な役割を果たした場所がありましたが、これらはかなり例外的でした。一般に、「再利用」について話すために多くのリップサービスが提供されますが、実際には、コードの一部が目的どおりに実行されない限り、費用対効果の高い「再利用」はほとんどありません。クラスを適切な方法で拡張できるように設計することは非常に困難であるため、通常、拡張のコストが非常に高いため、「再利用」する価値はありません。
多くの点で、これは私を驚かせません。現実の世界は「OO」ではなく、OOに内在するアイデア、つまりクラスの分類法で物事をモデル化できるという考えは、根本的に欠陥があるように思われます(テーブル、木の切り株、車のボンネットに座ることができます)。 、誰かの膝-しかしそれらの1つではない-椅子)。より抽象的なドメインに移動したとしても、OOモデリングは困難で直感に反し、最終的には役に立たないことがよくあります(円/楕円または正方形/長方形の古典的な例を検討してください)。
だから私はここで何が欠けていますか?OOPの価値はどこにありますか、そしてなぜすべての時間とお金がソフトウェアをより良くすることに失敗したのですか?
oop - クラスがサブクラス化されないようにする必要があるのはなぜですか?
クラスが継承されないようにする理由は何ですか? (例: ac# クラスで seal を使用) 今のところ、思いつきません。
php - PHP5 クラスでは、プライベート コンストラクターはいつ呼び出されますか?
シングルトンを意図した PHP (>= 5.0) クラスを書いているとしましょう。私が読んだすべてのドキュメントでは、クラス コンストラクターをプライベートにするように指示されているため、クラスを直接インスタンス化することはできません。
したがって、次のようなものがある場合:
私がやっている場合以外に __construct() が呼び出されるケースはありますか?
クラス自体の中で呼び出す?
また、なぜ SillyDB を内部からインスタンス化できるのですか?
c# - インターフェイスを実装する型に対して、パラメーターのないコンストラクターをどのように要求できますか?
方法はありますか?
特定のインターフェイスを実装するすべての型がパラメーターなしのコンストラクターを持つ必要がありますが、それは可能ですか?
社内の他の開発者が特定のプロジェクトで使用するための基本コードを開発しています。
特定のタスクを実行するタイプのインスタンスを (異なるスレッドで) 作成するプロセスがあり、これらのタイプが特定の契約 (エルゴ、インターフェイス) に従う必要があります。
インターフェイスはアセンブリの内部になります
インターフェイスのないこのシナリオについて提案がある場合は、喜んで検討します...
oop - 単一責任の原則: 変更理由の粒度
単一責任の原則を適用し、クラスの変更理由を調べるとき、変更の理由が細かすぎるか、細かすぎるかをどのように判断しますか?
c++ - C ++で型を変換するにはどうすればよいですか?
プロジェクトで2つの異なるライブラリを使用していますが、どちらも基本的な長方形を提供しますstruct
。これに伴う問題は、型間に変換を挿入する方法がないように思われるため、一方のライブラリの関数をもう一方の関数の結果で呼び出すことができないことです。私がこれらのいずれかの作者である場合、外部から変換を作成することはできますが、作成することはできません。
ライブラリa:
ライブラリb:
class
現在、 C ++は1つのステップでのみ変換を検索するため、コンバーターを作成できません。あらゆる種類の新しいオブジェクトを作成することを含む多くの可能性があるので、これはおそらく良いことです。
fromを取得し、 struct
froma
のオブジェクトを提供する演算子を作成できません:class
b
それで、これを回避する賢明な方法はありますか?
編集:
私はそのコーダーになることを期待していないので、結果をシームレスに処理できるソリューションが本当に必要であることも指摘しておく必要があります。(私は同意しますが、昔ながらの明示的な変換は良い選択でした。他のブランチにreinterpret_cast
も同じ問題があります。)
edit2:
実際、私の実際の質問に実際に答える提案はありません。コンラッド・ルドルフは正しいようです。C++は実際にはこれを行うことができません。吸いますが、本当です。(違いがある場合は、CodingTheWheelで提案されているようにサブクラス化を試してみます。
language-agnostic - 言語をオブジェクト指向にするものは何ですか?
意味のある用語のない議論は無意味なので、私は部屋にいる象を指差して尋ねてみようと思いました:言語を「オブジェクト指向」にする正確な理由は何ですか? ここで教科書的な答えを探しているわけではありませんが、それが何であれ、ドメインでうまく機能するオブジェクト指向言語の経験に基づいたものです。
最初に答えるのに役立つ関連する質問は、次のとおりです。オブジェクト指向言語の原型とは何か、またその理由
architecture - データ アクセス クラスをリーダーとライターに分割するか、それらを結合しますか?
これは「議論」の側にあるかもしれませんが、これについてのあなたの意見を本当に聞きたいです.
以前は、読み込みと書き込みの両方を処理するデータ アクセス クラスを作成することがよくありましたが、これはしばしば FooIoHandler などの不適切な名前付けにつながりました。
それで、私は最近、データアクセスを FooWriter と FooReader に分割し始めました。これにより、より適切な名前が付けられ、柔軟性が追加されますが、同時に、クラスがそれほど大きくない場合は、それらをまとめておくのが好きです。
リーダー/ライターの分離はより良い設計ですか、それともそれらを組み合わせる必要がありますか? それらを組み合わせる必要がある場合、クラスに名前を付ける必要がありますか?
ありがとう/エリック