イベント:オブジェクト指向LT会 vol.3 #ooltjp で使用した資料。 https://rakus.connpass.com/event/225776/
元ネタのブログ: https://nainaistar.hatenablog.com/entry/2020/04/29/UML%E3%81%AF%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%B9%E3%81%8D%28%E3%82%AF%E3%83%A9%E3%82%B9%E5%9B%B3%E7%B7%A8%29
名付けのためにクラス図を元に会話しようオブジェクト指向LT会 vol.3 #ooltjpきり丸(水上 皓登)@nainaistar
View Slide
名前:きり丸(水上 皓登)twitter:nainaistarGitHub:hirotoKirimaruブログ:きり丸の技術日記https://nainaistar.hatenablog.com/2これからクラス図大事!って発表するけど、正直クラス図作るのつらい
エンジニアの仕事は概念に名前を付けること
前回の登壇:Code SmellsのPrimitive Obsessionに気を付けて設計するラクス様リーダブルコード LT会Vol2
全ての概念について名前がついているわけではない他人に言われて初めて名前がついていることに気づく概念も多い
クラス図を使って概念の関係性を深堀りする機会を作ろう!
今日のゴール
クラス図を使えばもっと概念を理解するきっかけ作りができることを学ぶ
クラス図を書くために大事なこと● 多重度● 関連端名この2つだけ覚えてほしい!
多重度についてクラス間の関係が次のどれかであるか分かるだけで、クラス間の関係を推し量ることができます。● 1:1● 1:多● 多:多
関連端名について分析において「最重要要素」だと私は考えています。
関連端名について関連端名とは、関連先クラスに対して持つ役割を記述したもの。なぜ重要かというと、この特定のクラスから見た別クラスを表現する言葉に業務に詳しい人が業務上で使用している名前に知識が詰まっているからです。
ECサイトの例カートと商品の関係性
ECサイトの例購入履歴と商品の関係性
ECサイトの例カートと購入履歴と商品の関係性
注意!異なるモデルが業務で表現している概念で一致していることが分かったからと言って、永続化(テーブル)を一致させる必要はありません。それはそれ。これはこれ。
クラス図も更に分類できる● 概念クラス図● 設計クラス図
概念クラス図について業務の概念、クラス間の関係を掴むためのクラス図です。概念を掴むものなので、多対多で紐づけても問題ありません。複雑なドメインであるほど、まずは概念で理解することが必要です。概念クラス図の関連であれば、関連端名を導きやすいです。
設計クラス図について概念クラス図をアプリとして実装できるように制約を付与したクラス図です。一般的なクラス図は設計クラス図を指すことが多いです。● システム制約多対多だと実装できないため、中間に別の概念を加えて1対多にする等。● 業務制約一度に購入できる数は10個まで、リモートワーク申請できるのは月に5日まで 等々。
設計クラス図の注意点概念クラス図を元に設計クラス図を作成している場合は、概念クラス図で記載されている関係を壊してはいけません。概念クラス図だとアプリケーションを作成できない為に、異なる実装クラス図を作ってしまうことはありがちです。どうしても実装できない場合は、概念クラス図を変更しましょう。
できればモデリングツールを使ってほしいastah*等のモデリングツールだと、概念クラス図を作成したのちに、容易に設計クラス図に落とし込めます。概念クラス図を修正すると、参照しているすべてのクラス図も変更できるので、変更漏れがなくなります。PlantUMLやPowerPointだとできないため、メンテナンスコストが高いのが非常に難点です。
モデリングツール例● astah*チェンジビジョン社。iPad版はクラス図しか書けない。● EnterpriseArchitectSparxSystems社。チームでの開発を想定している。● Rational RhapsodyIBM社。組み込み系で良く使われており、NASAの火星探索機とかも使われてるらしい。● PapyrusEclipseで無料で使える。
まとめ多重度・関連端名を重要視してクラス図を作り、業務に詳しい人と会話するきっかけを作りましょう。また、クラス図には概念クラス図・設計クラス図があります。制約を気にしない概念クラス図を元に、業務に詳しい人と会話するきっかけを作りましょう。
クラス図を使えばもっと概念を理解するきっかけ作りができる!
Appendix
ブログUMLは覚えておくべき(クラス図編)
話すこと / 話さないこと● ●話すこと 話さないこと
対象者 / 非対象者● ●対象者 非対象者
登壇を見た人への期待するアクション●アクション