はじめに
Javaを学習し始め、色々な本を手にするとUMLが良くつかわれていることに気づく。本によってはUMLの解説があるが、解説なしでUMLを使う本もあり、UML図を見て「これ、どういう意味だっけ?」を解決するために、私が学習していく中でよく使うUMLの基本をまとめてみた。学習中に出てこなかった内容は記載していないので、UMLのすべては載っていません。
私自身が初心者のため誤っている箇所があると思います。誤りに気付いた箇所があれば教えていただけると幸いです。
クラス図
クラス間の関連
-
継承
is-aの関係。ElectricCarはCarの1種である。
ElectricCarはextends Carで作成する。
ElectricCarはCarを派生したものである。 -
依存
usesの関係。ElectricCarはCharginStationを使用する。 -
集約
has-aの関係。ParkingLotはElectricCarを保持してかつ、ParkingLotはElectricCarが無くても良い。
ParkingLotはElectricCarを集約していると言える。 -
コンポジション
has-aの関係。ElectricCarはTireを保持していてかつ、ElectricCarはTireが必要。
ElectricCarはTireで構成されていると言える。 -
実装
ParkingLotはインタフェースPaymentSystemを実装したものである。
-
集約とコンポジションの違い
集約は保持する側(ParkingLot)が無くても保持される側(ElectricCar)の存在が可能。
コンポジションは保持する側(ElectricCar)が無いと保持される側(Tire)の存在が出来ない。このため保持する側が消えると保持される側も消えてしまう。 -
カーディナリティ(矢印の数字)
集約の例では、ParkingLotが存在する場合、ParkingLotはElectricCarを0~*だけ保有できる事を表している。
(*は任意の個数で、nと記載しても良い。)
逆にElectricCarが存在するとき、ParkingLotは0~1だけ存在する事を表している。
ElectricCarは必ずParkingLotにあるとは限らないため、ParkingLotは0を含めている。
コンポジションの例では、ElectricCarが存在する場合、ElectricCarはTireを4~5だけ保有している事を表している。スペアタイヤを積んでいる事もあるので最大を5つとしている。もしも対象の車が3輪だった場合の最小値は3と出来る。
逆にTireが存在するとき、Tireは必ず1つのElectricCarに保有される。つまりTireは複数のElectricCarに装備できず、またElectricCarが無ければ存在できない。
参考文献等
UML図の作成はフリーソフトdraw.ioを使用した。
UML図の作成にあたり、参考にした本
-デザインパターンとともに学ぶ- オブジェクト指向のこころ
UML図の作成にあたり、参考にしたページ