問題タブ [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 投票する
6 に答える
1017 参照

oop - OOP クラスの設計、この設計は本質的に「アンチ」OOP ですか?

MS がフォーラムのサンプル アプリケーションをリリースしたときのことを覚えています。アプリケーションの設計は次のようなものでした。

/Classes/User.cs /Classes/Post.cs ... /Users.cs /Posts.cs

そのため、classes フォルダーにはクラス、つまりプロパティとゲッター/セッターだけが含まれていました。Users.cs、Post.cs などには、データ アクセス層にアクセスする実際のメソッドがあるため、Posts.cs は次のようになります。

もう 1 つのより伝統的な方法は、Posts.cs のすべてのメソッドをクラス定義 (Post.cs) に入れることです。

物事を2つのファイルに分割すると、手続きがはるかに簡単になりますよね? クラスから動作を取り出して別のクラス定義に入れているため、これは OOP ルールに違反していませんか?

0 投票する
7 に答える
8897 参照

java - インターフェイス分離の原則の背後にある理由は何ですか?

Interface Segregation Principle (ISP) は、多くのクライアント固有のインターフェイスが 1 つの汎用インターフェイスよりも優れていると述べています。何でこれが大切ですか?

0 投票する
15 に答える
9517 参照

oop - オープン/クローズド原則の背後にある意味と理由は何ですか?

オープン/クローズの原則では、ソフトウェア エンティティ (クラス、モジュールなど) は拡張に対してオープンである必要がありますが、変更に対してはクローズされている必要があります。これは何を意味し、なぜそれが優れたオブジェクト指向設計の重要な原則なのですか?

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

c++ - C++ 継承とメンバー関数ポインター

C++ では、メンバー関数ポインターを使用して、派生 (または基本) クラスのメンバーを指すことはできますか?

編集:おそらく例が役立ちます。継承順に 3 つのクラスXY、の階層があるとします。したがって、基本クラスと派生クラスがあります。ZYXZ

pこれで、 classのメンバ関数ポインタを定義できますY。これは次のように書かれています。

(簡単にするために、署名付きの関数のみに関心があると仮定しますvoid f())

このポインターpを使用して、 class のメンバー関数を指すことができるようになりましたY

この質問(実際には2つの質問)は次のとおりです。

  1. p派生クラスの関数を指すために使用できますZか?
  2. p基本クラスの関数を指すために使用できますXか?
0 投票する
8 に答える
73200 参照

oop - オブジェクト指向プログラミング (OOP) スキルの学習または向上に適した課題/タスク/演習

オブジェクト指向プログラミングのスキルを向上させるための良いチャレンジは何ですか?

このアンケートの背後にある考え方は、どの演習が OOP の学習に役立つかというアイデアを提供することです。

この課題は、特定のライブラリをほとんどまたはまったく使用する必要がないか、最も一般的なライブラリのみを必要とするかのいずれかで、可能な限り言語にとらわれないようにする必要があります。回答ごとに 1 つの課題のみを含めるようにして、投票がその課題のみのメリットに対応するようにします。必要なスキルのレベルと、それが有用なエクササイズである理由も示されているとよいでしょう。

課題の解決策は、「方法...」の質問への回答として投稿し、ここからリンクすることができます。

例えば:

  • 課題 - 後入れ先出しスタックを実装する
  • スキルレベル - 初心者
  • 理論的根拠 - オブジェクトを参照する方法の経験を与える
0 投票する
2 に答える
1600 参照

c++ - C++ クイズ - シングルトン

まもなくブログに記事を投稿する予定ですが、まず何も見逃していないことを確認したいと思います。

私が見逃した例を見つけてください。投稿で引用します。

トピックは失敗したシングルトン実装です: シングルトンの複数のインスタンスを誤って取得する可能性があるのはどのような場合ですか?

これまでのところ、私は思いついた:

  • への最初の呼び出しでの競合状態instance()
  • 複数の DLL または DLL と実行可能ファイルへの組み込み
  • シングルトンのテンプレート定義 - 実際には個別のクラス

私が見逃している他の方法はありますか?おそらく継承を使用していますか?

0 投票する
6 に答える
1841 参照

c++ - C++ 関数ポインターとクラス

私が持っているとしましょう:

staticレンダリングに使用する関数が関数またはメンバー関数である限り、これは問題ありません。

ただし、ほとんどの場合、レンダリング関数はメンバー変数にアクセスする必要があり、クラス インスタンスをグローバルにしない方がよいため、クラス メソッドも使用できるようにしたいと考えています。

ただし、これを行う方法がまったくわかりませんが、関数とstaticメンバー関数を使用できるようにしています。

0 投票する
11 に答える
113337 参照

c++ - なぜ「PIMPL」イディオムを使用する必要があるのですか?

バックグラウンダー:

PIMPLイディオム(Pointer to IMPLementation) は、パブリック クラスがその一部であるライブラリの外では見ることができない構造またはクラスをパブリック クラスがラップする実装隠蔽の手法です。

これにより、内部実装の詳細とデータがライブラリのユーザーから隠されます。

このイディオムを実装するとき、パブリック クラス メソッドの実装はライブラリにコンパイルされ、ユーザーはヘッダー ファイルしか持っていないため、パブリック クラスではなく pimpl クラスにパブリック メソッドを配置するのはなぜですか?

説明のために、このコードはPurr()実装を impl クラスに置き、それもラップします。

パブリック クラスに Purr を直接実装してみませんか?

0 投票する
7 に答える
4686 参照

database - オブジェクト データベースの長所と短所は何ですか?

オブジェクト リレーショナル マッパーや、インピーダンスの不一致を回避する最善の方法に関する情報はたくさんありますが、オブジェクト データベースを使用する場合、これらはすべて問題になるようです。私の質問は、なぜこれがより頻繁に使用されないのですか? それはパフォーマンス上の理由によるものですか、それともオブジェクト データベースによってデータがアプリケーションの所有物になるためですか、それとも何か別の理由によるものですか?

0 投票する
4 に答える
455 参照

php - PHP のシステム関数をよりオブジェクト指向にしようとした人はいますか?

PHP の組み込み関数のすべて (または大部分) をよりオブジェクト指向のクラス階層にグループ化しようとするプロジェクトが存在するかどうか、ただ興味があります。たとえば、すべての文字列関数を単一の String クラスにグループ化するなどです。

すべての組み込み関数は引き続きグローバル名前空間でアクセスできるため、(PHP ソース コード レベルで変更が行われない限り) これで実際に問題が解決されるわけではありませんが、使いやすさは確実に大幅に向上します。