問題タブ [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 - 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 ルールに違反していませんか?
java - インターフェイス分離の原則の背後にある理由は何ですか?
Interface Segregation Principle (ISP) は、多くのクライアント固有のインターフェイスが 1 つの汎用インターフェイスよりも優れていると述べています。何でこれが大切ですか?
oop - オープン/クローズド原則の背後にある意味と理由は何ですか?
オープン/クローズの原則では、ソフトウェア エンティティ (クラス、モジュールなど) は拡張に対してオープンである必要がありますが、変更に対してはクローズされている必要があります。これは何を意味し、なぜそれが優れたオブジェクト指向設計の重要な原則なのですか?
c++ - C++ 継承とメンバー関数ポインター
C++ では、メンバー関数ポインターを使用して、派生 (または基本) クラスのメンバーを指すことはできますか?
編集:おそらく例が役立ちます。継承順に
3 つのクラスX
、Y
、の階層があるとします。したがって、基本クラスと派生クラスがあります。Z
Y
X
Z
p
これで、 classのメンバ関数ポインタを定義できますY
。これは次のように書かれています。
(簡単にするために、署名付きの関数のみに関心があると仮定しますvoid f()
)
このポインターp
を使用して、 class のメンバー関数を指すことができるようになりましたY
。
この質問(実際には2つの質問)は次のとおりです。
p
派生クラスの関数を指すために使用できますZ
か?p
基本クラスの関数を指すために使用できますX
か?
oop - オブジェクト指向プログラミング (OOP) スキルの学習または向上に適した課題/タスク/演習
オブジェクト指向プログラミングのスキルを向上させるための良いチャレンジは何ですか?
このアンケートの背後にある考え方は、どの演習が OOP の学習に役立つかというアイデアを提供することです。
この課題は、特定のライブラリをほとんどまたはまったく使用する必要がないか、最も一般的なライブラリのみを必要とするかのいずれかで、可能な限り言語にとらわれないようにする必要があります。回答ごとに 1 つの課題のみを含めるようにして、投票がその課題のみのメリットに対応するようにします。必要なスキルのレベルと、それが有用なエクササイズである理由も示されているとよいでしょう。
課題の解決策は、「方法...」の質問への回答として投稿し、ここからリンクすることができます。
例えば:
- 課題 - 後入れ先出しスタックを実装する
- スキルレベル - 初心者
- 理論的根拠 - オブジェクトを参照する方法の経験を与える
c++ - C++ クイズ - シングルトン
まもなくブログに記事を投稿する予定ですが、まず何も見逃していないことを確認したいと思います。
私が見逃した例を見つけてください。投稿で引用します。
トピックは失敗したシングルトン実装です: シングルトンの複数のインスタンスを誤って取得する可能性があるのはどのような場合ですか?
これまでのところ、私は思いついた:
- への最初の呼び出しでの競合状態
instance()
- 複数の DLL または DLL と実行可能ファイルへの組み込み
- シングルトンのテンプレート定義 - 実際には個別のクラス
私が見逃している他の方法はありますか?おそらく継承を使用していますか?
c++ - C++ 関数ポインターとクラス
私が持っているとしましょう:
static
レンダリングに使用する関数が関数またはメンバー関数である限り、これは問題ありません。
ただし、ほとんどの場合、レンダリング関数はメンバー変数にアクセスする必要があり、クラス インスタンスをグローバルにしない方がよいため、クラス メソッドも使用できるようにしたいと考えています。
ただし、これを行う方法がまったくわかりませんが、関数とstatic
メンバー関数を使用できるようにしています。
c++ - なぜ「PIMPL」イディオムを使用する必要があるのですか?
バックグラウンダー:
PIMPLイディオム(Pointer to IMPLementation) は、パブリック クラスがその一部であるライブラリの外では見ることができない構造またはクラスをパブリック クラスがラップする実装隠蔽の手法です。
これにより、内部実装の詳細とデータがライブラリのユーザーから隠されます。
このイディオムを実装するとき、パブリック クラス メソッドの実装はライブラリにコンパイルされ、ユーザーはヘッダー ファイルしか持っていないため、パブリック クラスではなく pimpl クラスにパブリック メソッドを配置するのはなぜですか?
説明のために、このコードはPurr()
実装を impl クラスに置き、それもラップします。
パブリック クラスに Purr を直接実装してみませんか?
database - オブジェクト データベースの長所と短所は何ですか?
オブジェクト リレーショナル マッパーや、インピーダンスの不一致を回避する最善の方法に関する情報はたくさんありますが、オブジェクト データベースを使用する場合、これらはすべて問題になるようです。私の質問は、なぜこれがより頻繁に使用されないのですか? それはパフォーマンス上の理由によるものですか、それともオブジェクト データベースによってデータがアプリケーションの所有物になるためですか、それとも何か別の理由によるものですか?
php - PHP のシステム関数をよりオブジェクト指向にしようとした人はいますか?
PHP の組み込み関数のすべて (または大部分) をよりオブジェクト指向のクラス階層にグループ化しようとするプロジェクトが存在するかどうか、ただ興味があります。たとえば、すべての文字列関数を単一の String クラスにグループ化するなどです。
すべての組み込み関数は引き続きグローバル名前空間でアクセスできるため、(PHP ソース コード レベルで変更が行われない限り) これで実際に問題が解決されるわけではありませんが、使いやすさは確実に大幅に向上します。