最近OOPに取り掛かりたいと思っています。私はSOLIDの原則とデザインパターンで問題があります。私はなぜ人々がそれらを使用するのかを見ています。私も本当に使いたいと思っていますが、私のクラスを仕様に近づけることはできません。私はそのようなことの理解に役立つものを本当にありがたく思っています。SOLID原則とデザインパターンを理解できないようです。
答えて
私は大学で2週間のデザインパターンを費やし、Gang of Four本を無駄に読んでいます。それぞれのパターンがどのようなものだったかを理解し、それらをどのように使ってフィットするのかを理解することは、OOプログラミングの経験があまりない開発者である私にとっては非常に難しい問題でした。
実際に私をクリックした本はHead First Design Patternsでした。まず、問題を表示し、開発者が検討したさまざまなアプローチ、そしてそれを修正するためにデザインパターンを使用し終わった方法を示します。それは非常に単純な言語を使用し、本を非常に魅力的に保ちます。
デザインパターンは解決策を説明する方法になりますが、には、ソリューションにクラスを適合させるためのがありません。さまざまな問題を解決するうえでの参考になるものと考えてください。
はのは、SOLIDについてお話しましょう:
- シングル責任。クラスには1つの責任しか持たないでください。つまり、Personクラスは、たとえば、データベース内での永続性などではなく、Person自体に関するドメインの問題についてのみ心配する必要があります。そのためには、たとえばPersonDAOを使用することができます。 Personクラスは責任を最短で保つことができます。あるクラスが多すぎる外部依存関係(他のクラス)を使用している場合、それはクラスの責任が多すぎるという症状です。この問題は、開発者がオブジェクトを使用して実際の世界をモデル化し、あまりにも遠くに持ち越そうとするときによく起こります。疎結合のアプリケーションでは、ナビゲートするのが簡単ではなく、実際の動作を正確にモデル化していないことがよくあります。
- 開封。クラスは拡張可能でなければなりませんが、変更はできません。つまり、新しいフィールドをクラスに追加するのは問題ありませんが、既存のものを変更することはできません。プログラム上の他の構成要素は、前記フィールドに依存してもよい。
- リスコフ置換。サブクラスのdogとsubclassのcatが渡された場合、動物型のオブジェクトを予期するクラスが動作するはずです。つまり、Cat型のサブクラスは樹皮できないため、Animalはbarkと呼ばれるメソッドを持つべきではありません。 Animalクラスを使用するクラスは、クラスDogに属するメソッドに依存してはいけません。 「この動物が犬ならば、(動物を犬に投げつける)樹皮なら、動物が猫ならば(動物を猫に投げつける)猫」。
- 界面分離原理。できるだけインターフェースを小さくしてください。学生でもある教師は、IStudentAndTeacherと呼ばれる単一の大きなインターフェイスではなく、IStudentインターフェイスとITeacherインターフェイスの両方を実装する必要があります。
- 依存性逆転原理。オブジェクトは依存関係をインスタンス化するべきではありませんが、それらはそれらに渡されるべきです。たとえば、Engineオブジェクトを内部に持つCarは、engine = new DieselEngine()ではなく、エンジンがコンストラクタで渡されるべきであると言います。この方法では、車クラスはDieselEngineクラスに結合されません。
+1 GoFのデザインパターンの本は理解しづらい。ヘッド・ファースト・ブックは、プログラミングの次のレベルに到達するために絶対に読まなければならないものです。 –
** 1)**変更する理由が1つあるはずです。それは1つの責任とは異なります。 ** 2)**いいえ、あなたはクラスをまったく変更すべきではありません。拡張は継承と同じです。 ** 3)** CanBarkメソッドを持っていれば 'Bark'メソッドを持つことができます。 ;)** 4 **正しい、しかしかなり不自由な例;)** 5 **それは依存性注入です。依存関係の逆転は、抽象化に依存すべきであり、上位レベルのモジュールは下位レベルのモジュールに依存する必要があり、その逆ではないことを示しています。 – jgauffin
その本を読み始めました。それは重要な助けです。ありがとう。 – will
- 1. スレッディングとSOLID原則
- 2. SOLIDプログラミングの原則の例
- 3. SOLIDの原則のリファクタリング
- 4. デザインパターン - 抽象ファクトリーパターンとオープンクローズド原則
- 5. オニオンアーキテクチャにはSOLIDの原則が含まれていますか?
- 6. SOLIDの原則とクラス内のハードコード設定
- 7. SOLID設計原則、GUIとモデルの抽象化
- 8. AKKAパーシステンスとESとCQRSの原則を理解する
- 9. SOLID原則の例外はありますか?
- 10. OO設計:念頭に置いSOLID原則とテスト容易性を持つB
- 11. Hibernateを使用したSpring MVCプロジェクトのSOLID原則の実装
- 12. C#を使用したSOLID原理によるクラス設計
- 13. 原則の原則
- 14. どのようにOOとSOLIDの原則を使用してこれをより良く設計できますか?
- 15. PHP:この場合、SOLID原則に違反することなく拡張インターフェースを使用する方法は?
- 16. TDDおよびSOLIDの原則に役立つ.NET CMSプラットフォームをご利用いただけますか?
- 17. この実際のコードで単一責任の原則を理解する
- 18. Django:DRY原則とUserPassesTestMixin
- 19. メソッドシグネチャを変更する必要があるときに、OOPおよびSOLIDの原則を遵守して、PHPで子クラスのメソッドをオーバーロードする方法
- 20. クリーンコード原則に基づいてボタンタップを処理するにはどうすればよいですか?
- 21. ほとんどのSOLID原則を正しい方法で利用してきたOS/NET/Javaプロジェクトは何ですか?
- 22. アルゴリズムとデータ構造で参照を使用できないのはなぜですか?原則として
- 23. 内部および/または部分クラスは州のデザインパターンの原則を逸脱していますか?
- 24. 地域の原理と地域の原則を議論の指示
- 25. 理解できないランタイムエラー
- 26. Mvc MaproutesがDRYの原則を破るように見える理由
- 27. ストラテジーパターンとオープンクローズド原則コンフリクト
- 28. コマンドとMVVMの原則 - RelayCommands
- 29. 設計原則
- 30. 良いデザイン原則:テキスト処理コードを置く場所はどこですか?
私はこのことをよく理解しているのは、仕事の経験だけであり、重要なのは良い開発者のチームでの経験です。 – sll
あなたはもう少し具体的でなければならないと思います。 –
アンチパターンから学習してみてください。意図的にSOLIDのアドバイスに違反する小さなアプリと、アドバイスに従っているアプリを書いてみて、書くのが苦痛ではないものを見てみてください。 – MatthewMartin