【ISSUE】デザインパターンについて
2024年12月23日 8:40
デザインパターンについて学んだので、まとめていきます。
デザインパターンとは、オブジェクト指向言語(Java, C++, C#など)でよく使われる設計をパターン化して、最適な方法でプログラミングを行えるようにするテクニックです。
複雑化するソフトウェア開発の効率化および信頼性向上のためにパターンの利用が有効であるという考えのもとに、広く知られています。
デザインパターンを理解する上で、OOP言語を使用する上で必須となる、以下のテクニックについて解説します。
継承とは、他のクラスを継承することで、継承したクラスに定義している関数を利用できるようにする仕組みです。これにより、コードの再利用性や拡張性が向上します。
詳しくはこちらを見てみてください。
https://medium-company.com/java-%E7%B6%99%E6%89%BF/
ポリモフィズムとは、ある一つの関数の呼び出しに対し、オブジェクトごとに違う動作をすることを指します。以下の記事でわかりやすくまとめられているので参考にしてください。
https://medium-company.com/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0/
コンポジションは、異なるクラスのオブジェクトを組み合わせて新しい機能を提供する方法を指します。これは、継承に代わるオブジェクトの再利用の手段として利用されることがあります。
以下を参考にしてください。
https://qiita.com/mikamikuh@github/items/1cdcd8b25a2e23f10525
デザインパターンは、特定の文脈で成功している設計アイディアやソリューションを提供するため、これらを再利用することができます。
再利用性が高まることで、同じまたは類似の問題に対して同じパターンを適用することができ、コードの冗長性を減少させます。
デザインパターンは、ソフトウェアの変更や拡張に対して柔軟で堅牢な設計を提供します。
新しい機能や要件が追加された場合、デザインパターンを使用することで、既存のコードを変更する必要が少なくなり、容易に拡張できるようになります。
デザインパターンは、共通の語彙やアーキテクチャを提供します。これにより、開発者やチームがコミュニケーションを円滑に行うことができ、共通の理解を持つことができます。
これはプロジェクトのコミュニケーションと協力を促進し、開発者間の一貫性を保つのに役立ちます。
デザインパターンを理解し、適切な文脈で使用できるようになることで、開発者の設計スキル向上に繋がります。これにより、より効果的で効率的なソフトウェア設計が可能となります。
デザインパターンは、23種類存在します。以下がその種類をまとめた参考記事になります。
https://qiita.com/ichi-nakashima/items/ee09c9341f85c18f748a
デザインパターンには23種類ありますが、それらは、「生成」、「構造」、「振る舞い」3種類に分類されます。
オブジェクトは必ずはじめに生成されます。その生成をどのように行うかという問いに対するパターンになります。
これらのパターンは、オブジェクトの生成と初期化の方法を隠蔽し、柔軟性と再利用性を向上させることを目的としています。代表的な生成デザインパターンには以下が含まれます。以下が代表例です。
元となるオブジェクトを生成し、それをもとに複数のオブジェクトをを生成するパターン。
インスタンスの生成をサブクラスに委任し、具体的な生成処理をサブクラスで実装するパターン。
クラスが一つのインスタンスのみを持つようにするためのパターン。
オブジェクトは一つだけでなく複数のオブジェクトが必ず使われますが、構造デザインパターンは、その組み合わせのパターンに焦点を当てています。
これにより、システムの構造を柔軟に変更できるようになります。以下が代表例です。
互換性のないクラス同士を関連付けるパターン。
機能を拡張するクラスと、実装をするクラスを分離し、相互の橋渡しを行うパターン。
継承は使用せず、オブジェクトに新しい機能を次々に追加して、拡張ができるようにしたパターン。
それぞれのオブジェクトは、必ずやり取りをします。振る舞いデザインパターンは、オブジェクトが協力し、役割を分担する方法に焦点を当てています。以下が代表例です。
操作をオブジェクトとして定義するパターン。
コレクションに対する、探索の振る舞いを定義し、イテレータと呼ばれるオブジェクトへ抽出するパターン。
一対多の依存関係を定義し、状態変化に応じて処理を実行するパターン。
デザインパターンは、効果的なソフトウェア設計を行う上で、必須になってきます。かなり奥が深いので、これからも学び続けていきたいなと思います。
他にも色々な記事を書いているので、よければ読んでいってください、、、
https://qiita.com/hukuryo/items/97797a91d7e2ee0bcabc
https://qiita.com/hukuryo/items/2c07c52ff3386d5d75b9
https://qiita.com/hukuryo/items/ebeb26823f944f143b11
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。