Tabla de Contenidos
集約は、Java などのさまざまなオブジェクト指向プログラミング言語で実行できるクラス間の関連付けの一種です。これは、コードを迅速かつ効率的に再利用できるようにするプロセスであり、プログラムをより簡単に作成し、より効率的に実行できるようにします。
一般的に言えば、集約は別のクラス内のクラスを参照しています。これにより、包含クラスと包含クラスの間にいわゆる HAS-A 関係が作成されます。これらの関係は、一方のクラスにもう一方のクラスが含まれていることを意味するため、単方向であるという特徴があります。これにより、反対のことが起こるのを防ぎます。
たとえば、プログラミングの観点からオブジェクトクラスとして見ることができる会社には、一連の従業員がいると言えます。これらは、独自の属性を持つオブジェクトと見なすこともできます。この場合、包含クラスは会社であり、包含クラスは従業員です。この関係は、この方向、つまり会社から従業員への方向でのみ意味があります。逆方向の関係は意味がありません。なぜなら、従業員が会社を含むと言っているようなものだからです。これが意味をなさないという事実は、それが一方通行の関係であることを示しています。
クラス図での集約
複雑なソフトウェア システムを設計するために作成されたユニバーサル ビジュアル言語の一種である統一モデリング言語 (UML) では、システムの構造と特性を記述するためにクラス図が使用されます。これらの図では、各クラスと他のクラスとの関係が幾何学図形で表されています。集約の場合、この関係は包含クラスの側にある中空のひし形で表され、直線セグメントによって包含クラスに接続されます。例えば:
これは、Well クラスに Duck クラスが含まれていることを示す集計関係です。
集約はJavaでどのように実装されていますか?
Java での集計の実装は比較的単純です。2 つのクラスを作成し、2 番目のクラス内で最初のクラスを参照するだけです。
「持つ」または「持たなければならない」関係を確立することに加えて、Java アグリゲーションは、コンテナー オブジェクトとコンテンツの間の弱い関係によって特徴付けられます。これは、一方の破壊が他方の破壊を意味しないことを意味します。このタイプの関係を理解するために、教師と生徒の関係を例に取ることができます。この場合、教師の失踪または死亡は、生徒の失踪または死亡にはつながりません。
反対のケースは、人間とその心の関係です。人間に心が内包されていることは間違いありませんが、この関係は集合の関係とは異なります。これは、この場合、両方が相互に依存しているためです。心臓が機能するには、体が提供する栄養素と酸素供給が必要なため、人間の破壊は心臓も破壊します。一方、心臓の破壊は人間をも破壊します。なぜなら、心臓がなければ私たちは生きることができないからです(移植やその他の人工生命維持の方法を除く)。
集計例
次のコードは、Java を使用した 2 つのクラス間の関連付けの形式としての集計の実装を例示しています。この例は、会社のどの従業員が自分の車を持っていて、誰が持っていないか、また、誰が自転車を持っていて、誰が持っていないかを追跡するプログラムに関するものです。
従業員が車を「持っている」こと、および/または従業員が自転車を「持っている」ことを示す関係を確立しようとしているので、これは従業員が属するクラス (従業員と呼ぶ) 間の集約関係です。 、明白な理由から) と、車用と自転車用の 2 つの追加クラスがあります。
これらの場合に最初に行うことは、それぞれのクラスを作成することです。この場合、車用、自転車用、従業員用の 3 つのクラスがあります。次の図は、Car、Bicycle、および Employee という名前のこれらのクラスを作成するためのコードを示しています。
上記のコードでは、各クラスに特定の属性が関連付けられていることもわかります。車の場合、属性としてモデル、色、ナンバー プレートがあり、すべて車に関連付けられています。ナンバー プレート番号とモデルに関連付けられている自転車でも同じことが起こります。
Employee クラスを見ると、このクラスには、従業員の名前を表す属性monbreempと、従業員の ID 番号を表すempidがあることがわかります。次に、Car クラスと Bike クラスを参照し、これらのクラス間の集約関連付けを作成します。最後に、従業員の記録が車と自転車とともに作成されます。
この例では、Employee クラス内で Car および Bike クラスを参照すると、Employee クラス内から bike および car 属性にアクセスできることに注意してください。
このプログラムの出力は次のようになります。
________従業員の詳細________
従業員名: ザビエル
社員番号:210921
________従業員の車の詳細________
車種:カローラ
車の色: 緑
車のナンバープレート:XFZ-043
________従業員の自転車の詳細________
バイクモデル: MERIDA
自転車プレート:LAA-11B
参考文献
- Java プログラミングにおける集約。(2020)。イチプロ。https://ichi.pro/es/agregacion-en-programacion-java-144087060492693
- バルキネロ、JMM (2019)。クラス図における集約と合成。UML。| | SEAS ブログ. SEASブログです。https://www.seas.es/blog/informatica/agregacion-vs-composicion-en-diagramas-de-clases-uml/
- ソフトウェアのメンタリング。(2019)。OOP8 – Java でのオブジェクト指向プログラミング – UML ダイアグラム & OOP – 演習[ビデオ]。ユーチューブ。https://www.youtube.com/watch?v=-Gy7Rf_wOeY