投稿

Factory methodパターンの解説と例題

イメージ
# はじめに この記事では、デザインパターンの生成パターンのひとつである、Factory methodパターンについて解説と例題を使って学びたいと思います。[^1] [^1]: [https://ja.wikipedia.org/wiki/Factory_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3](https://ja.wikipedia.org/wiki/Factory_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3) ## Factory methodパターンとは Factory methodパターンとは、オブジェクトの生成方法をスーパークラスで定め、具体的な処理をサブクラスで行うデザインパターンの一つです。オブジェクトの生成と具体的な処理を分離することで、より柔軟にオブジェクトを利用することができます。Factory methodパターンはTemplate methodパターンをオブジェクト生成の場面に適応させたデザインパターンと言えます。 Template methodパターンとは、処理の枠組みをスーパークラスで定め、具体的な処理をサブクラスで行うデザインパターンです。Template methodパターンでは、スーパークラスで抽象メソッドを定義し、サブクラスでそれらを実装します。Factory methodパターンでは、抽象メソッドがオブジェクト生成のメソッドになります。つまり、Factory methodパターンはTemplate methodパターンの特殊な場合と言えます。 Factory methodパターンでは、以下のような役割があります。 - Product: 生成されるオブジェクトの抽象クラス - ConcreteProduct: Productの具象クラス - Creator: Productを生成するメソッドを持つ抽象クラス - ConcreteCreator: Creatorの具象クラスで、ConcreteProductを生成するメソッドを持つ CreatorクラスにProductを生成するときのインターフェースのみ定義して、実際に生成されるProductの具象クラスはCreatorの具象クラスに委ねるのが特徴です。 ...

Observerパターンの解説と例題

イメージ
# はじめに この記事では、デザインパターンの振舞パターンのひとつである、Observerパターンについて解説と例題を使って学びたいと思います。[^1] [^1]: [https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3](https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3) ## Observerパターンとは Observerパターンは、一つのオブジェクト(Subject)が複数のオブジェクト(Observer)に依存しており、Subjectの状態が変化した場合にObserverに通知を送る仕組みを提供します。Subjectは自身の状態変化を監視しているObserverに対して、必要な情報を提供し、Observerはその情報を元に適切な処理を行います。この仕組みにより、SubjectとObserverは疎結合な関係を持ちながらも、協調して動作することが可能となります。 ## Observerパターンのメリットとデメリット Observerパターンのメリットは以下の通りです。 - SubjectとObserver間の疎結合性を実現できるため、コードの保守性と拡張性が向上します。 - Subjectが複数のObserverに通知を送ることができるため、柔軟なシステム設計が可能です。 - 新たなObserverを容易に追加することができるため、再利用性が高くなります。 一方、Observerパターンのデメリットは以下の通りです。 - Observerの数が多い場合には、パフォーマンスの低下が懸念されます。 - ObserverとSubjectの間に不必要な通知が発生する可能性があるため、適切な設計が求められます。 # Observerパターンの適用方法 ## Observerパターンの適用条件と適用例 Observerパターンは、以下のようなケースで有効に活用することができます。 - 一つのオブジェクトの状態変化に応じて、他の複数のオブジェクトに通知を送りたい場合 - SubjectとObserver間の疎結合性を実現し、拡張性を確保したい場...

Strategyパターンの解説と例題

イメージ
# はじめに この記事では、デザインパターンの振舞パターンのひとつである、[Strategyパターン]について解説と例題を使って学びたいと思います。 [Strategyパターン]: https://ja.wikipedia.org/wiki/Strategy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3 ## Strategyパターンとは Strategyパターンは、アルゴリズムをカプセル化し、それらを交換可能な形でクライアント(Context)に提供するためのパターンです。つまり、異なるアルゴリズムを柔軟に選択して利用することができます。このパターンでは、アルゴリズムを実装した一連のクラスを定義し、それらを利用するコンテキストクラスと組み合わせて使用します。コンテキストクラスは、必要に応じて異なるアルゴリズムを呼び出すことができます。 ![](./baseclass/baseclass.png) ## Strategyパターンのメリットとデメリット ### メリット - 柔軟性: アルゴリズムを切り替える必要がある場合でも、Strategyパターンを使用することで簡単に対応できます。新しいアルゴリズムを追加する場合も、既存のコードに影響を与えることなく実装できます。 - 再利用性: Strategyパターンでは、アルゴリズムを独立したクラスとして実装するため、他のコンテキストでも再利用することが容易です。 - テスト容易性: アルゴリズムを独立してテストすることができるため、テストコードの作成やメンテナンスが容易です。 ### デメリット - クラス数の増加: Strategyパターンでは、アルゴリズムごとに独立したクラスを作成する必要があります。そのため、クラスの数が増える可能性があります。 - コンテキストと戦略の結合: Strategyパターンでは、コンテキストクラスと戦略クラスが密接に結合します。そのため、クライアントがコンテキストクラスと戦略クラスを正しく組み合わせる必要があります。 ## Strategyパターンの適用条件と適用例 Strategyパターンは以下のような場合に適しています。 - アルゴリズムを切り替える必要がある場合 - コンテキストとアルゴリズムを疎結合にしたい場合 - ...

Compositeパターンの解説と例題

イメージ
# はじめに この記事では、デザインパターンの構造パターンのひとつである、Compositeパターンについて解説と例題を使って学びたいと思います。 ## Compositeパターンとは Compositeパターンは、複数のオブジェクトをツリー構造に組み合わせ、一体的に扱うことができるパターンです。親子関係にあるオブジェクトを同一視し、一貫したインターフェースで操作することができます。 ## Compositeパターンのメリットとデメリット ### メリット - ツリー構造を持つオブジェクトを再帰的に扱うことができます。 - 単一オブジェクトと複合オブジェクトを同一視することで、統一的な操作が可能となります。 - 新しい要素を追加する際に柔軟性があり、既存のコードへの影響が少ないです。 ### デメリット - ツリー構造が複雑になると、理解や保守が困難になる場合があります。 - コンポジットとコンポーネントの適切な役割分担が行われないと、可読性や保守性が低下する可能性があります。 ## Compositeパターンの適用条件と適用例 Compositeパターンは、以下のような場合に適用することがあります。 - オブジェクトのツリー構造を持ち、全体と部分の関係を表現したい場合 - 単一オブジェクトと複合オブジェクトを同じインターフェースで操作したい場合 具体的な適用例としては、以下のような場合が挙げられます。 - Webサイトのページ構造を表現するプログラム - 社内の組織構造を表現するプログラム - ゲームのマップを表現するプログラム ## Compositeパターンを設計する具体的な流れ Compositeパターンを設計する際の具体的な流れは次の通りです。 1. コンポーネントとなるインターフェースを定義します。 1. 複合オブジェクトを表すクラス(コンポジット)を作成します。このクラスはコンポーネントの実装を持ち、複数の子要素を持つことができます。 1. 単一オブジェクトを表すクラス(リーフ)を作成します。このクラスはコンポーネントの実装を持ち、子要素を持ちません。 1. コンポーネントの操作メソッドを実装します。コンポジットクラスでは子要素に対して再帰的に操作を行います。 # Compositeパターンを使う例題 ...

UnityのPerception Packageを使ったオブジェクト位置姿勢推定用学習データの作成(2/6)

イメージ
この記事では、Unityのサンプルを使ったオブジェクト認識用の環境を構築して、教師データを生成するPerception Cameraを設定します。インスタンスセグメンテーション画像が生成されることを確認して、Perception Cameraの実装を解析したいと思います。 ## サンプルを使ったシミュレーション環境の構築 まずは、シミュレーション環境を作るために、下記画像のようにサンプルシーンを選択してプロジェクト作成します。プロジェクト名は"Object Pose Estimation"としましょう。 ![](./img/article_1_2023-06-11-11-52-59.png) ## Perception Packageの追加 Perception Packageをプロジェクトに追加します。Unityエディターのメニューバーから Window > Package Manager を選択してパッケージマネージャーを開きます。パッケージマネージャーの右上にある + ボタンを押して Add package from git URL… を選択します。表示されたテキストボックスに下図のように“com.unity.perception”と入力して Add ボタンを押します。これでPerception Packageがインストールされます。 ![](./img/article_1_2023-06-11-12-46-16.png) ## オブジェクトへのラベル割り当て ラベルを設定するために、Label Configを作成します。Label Configは、オブジェクトやカテゴリのラベルの階層構造を定義するアセットです。Unityエディターのメニューバーから Assets > Create > Perception > ID Label Config を選択して、 Assets フォルダー内にLabel Configを作成します。名前はデフォルトの"IdLabelConfig"としましょう。 ![](./img/article_1_2023-06-11-13-46-01.png) Label Configを作成したら、エディターで開いて、ラベルの名前や色やIDなどを設定し...