SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
オブジェクト指向プログラミングのための
モデリング入門
ギルドワークス株式会社 取締役
増田 亨
Modeling Forum 2016
1
UML クラス図 三つの使い方
説明用のモデル
データモデル
オブジェクトの設計
2
説明用のモデル
こういう説明は可能
どう実装するかは別の問題
図はきれいだが実装には不適切
実装に不適切なクラス図をもとに設計してはいけない
実装するとしたら、たぶん継承じゃなくコンポジション3
データモデル
ERモデルをクラス図風に描いた図
関心事は「データの関係」
プログラムの設計図にはならない
(ER図はプログラムの設計図ではない)
注意:こういう「クラス設計に使えないクラス図」が多い 4
オブジェクトの設計
ロジックの置き場所(メソッド)の設計
クラスが持つメソッド(ロジック)は何か
メソッドが返す型は何か
メソッドに渡す型は何か
注文番号を指定して
注文の合計金額を得る
List<明細行>
5
オブジェクト指向設計のおさらい
何が問題か
どうすれば良いか
実際にどうやるか
6
何が問題か:拙い設計
• コードが重複しまくっている
• 条件分岐の密林があちこちにある
• どこに何が書いてあるかわからない
• 変更した時にどこで何が起きるか推測できない
• やっていることは解読できるが、なぜ、そこでそ
の処理が必要か意味がわからない
• パッケージ名/クラス名/メソッド名/変数名/コメン
トが嘘だらけ
• でも動いてる
動いていなければ、設計が悪いことは誰でもわかるのに…
7
オブジェクト指向で設計すると
• コードの重複がなくなる
• 条件分岐の密林がなくなる
• どこに何が書いてあるかわかりやすくなる
• 変更した時に影響範囲を限定しやすくなる
• 処理の意図がすぐわかる
• パッケージ名/クラス名/メソッド名/変数名が
わかりやすく正確
– コメントはむしろノイズ
8
オブジェクト指向で設計する勘所
• データ(演算対象)とロジック(演算)を同じクラス
に置く
• ロジック(演算)に注目する
– メソッドはロジックの置き場所
– クラスはメソッドをグルーピングする手段
– 同じインスタンス変数を使うメソッドを一つのクラスに
集める
• メソッドはインスタンス変数を対象にして、
判断/加工/計算をすること
– return インスタンス変数; のgetterはNG
– インスタンス変数 = 引数; のsetterはNG
9
オブジェクト指向設計:どうやるか
• class 宣言すれば自動的にオブジェクト指向のメ
リットが生まれるわけではない
• 拙い設計で書かれたコードを対象に、リファクタ
リングを繰り返すのは効率が悪すぎる
• 最初からオブジェクト指向らしい設計でコードを
書きたい
• しかし、頭でわかっていても、なかなかオブジェク
ト指向らしいコードにならない
• オブジェクト指向らしい書き方を、理屈ではなく、
体で覚えるのが一番の早道
10
体で覚える
オブジェクト指向設計
11
頭でわかっているつもりではだめ
オブジェクト指向らしい設計が
直観的にわかり
オブジェクトらしいコードに
自然に手が動くように
ロジックに注目することを体で覚える
ロジックの良い置き場所を体で覚える
12
オブジェクト指向
エクササイズ
オブジェクト指向の良さを生み出す9つのルール
13
オブジェクト指向エクササイズ
9つのルールで、1000行くらい書いてみると
オブジェクト指向らしい設計を体感できる
既存のコードから9つのルールの適用例を探し、
値オブジェクトやファーストクラスコレクションを
実際に作ってみると
before/afterでオブジェクト指向設計を体感できる
14
9つのルール
1. 一つのメソッドでインデントは一段階
2. else 句は使わない
3. すべてのプリミティブ型と文字列をラップする
4. 一行につきドットは1つまで
5. 名前を省略しない
6. すべてのエンティティを小さくする
7. 一つのクラスのインスタンス変数は2つまで
8. ファーストクラスコレクションを使う
9. getter, setter, プロパティを使わない
15
どこまで体で覚えていますか?
名前をつける
1. 一つのメソッドでインデントは一段階
2. else 句は使わない
3. すべてのプリミティブ型と文字列をラップする
4. 一行につきドットは1つまで
5. 名前を省略しない
6. すべてのエンティティを小さくする
7. 一つのクラスのインスタンス変数は2つまで
8. ファーストクラスコレクションを使う
9. getter, setter, プロパティを使わない
16
パッケージ
クラス
メソッド
小さい単位で
名前をつける
データとロジックを凝集させる
1. 一つのメソッドでインデントは一段階
2. else 句は使わない
3. すべてのプリミティブ型と文字列をラップする
4. 一行につきドットは1つまで
5. 名前を省略しない
6. すべてのエンティティを小さくする
7. 一つのクラスのインスタンス変数は2つまで
8. ファーストクラスコレクションを使う
9. getter, setter, プロパティを使わない
17
値オブジェクト
ファーストクラス
コレクション
データとロジックを別の場所におかない
複数の関心事を持たない
1. 一つのメソッドでインデントは一段階
2. else 句は使わない
3. すべてのプリミティブ型と文字列をラップする
4. 一行につきドットは1つまで
5. 名前を省略しない
6. すべてのエンティティを小さくする
7. 一つのクラスのインスタンス変数は2つまで
8. ファーストクラスコレクションを使う
9. getter, setter, プロパティを使わない
18
ルールに違反している時は、複数の関心事が混在している
データとロジックを凝集させる
すべてのプリミティブ型と
文字列をラップする
ファーストクラス
コレクション
ルール 8
ルール 3
19
ファーストクラスコレクション
コレクション List<Item>だけを持つクラス
コレクション操作のロジックを集める場所
外部にコレクションを公開しない
正しい状態を保証する
コレクション操作のロジックがあちこちのクラ
スに散らばらない/重複しない
Item の件数制限や、合算方法に変更があっ
ても他のクラスに波及しない
Itemの一覧画面に関する変更は、まずここを
見れば良い
ルール8
ロジックを集める感覚を体で覚える
関心事とクラスを一致させる感覚を体で覚える 20
すべてのプリミティブと
文字列をラップする
ルール3
目的を限定した日付
日付の計算ロジックの置き場所
目的を限定したBigDecimal
丸め計算のロジックの置き場所
目的を限定した文字列
文字列加工ロジックの置き場所
ロジックをデータを持つクラスに置く感覚を体で覚える
関心事とクラスを一致させる感覚を体で覚える 21
データとロジックを凝集させる
すべてのプリミティブ型と
文字列をラップする
ファーストクラス
コレクション
ルール 8
ルール 3
この二つを体で覚えると以下3つは自然にルール通りになる
ルール9 getter/setter は使わない
ルール6 すべてのエンティティを小さくする
ルール7 ひとつのクラスにインスタンス変数は2つまで
22
getter/setterは使わない
• データのある場所に、ロジックを置けば、
getterは不要
• 値の変更が必要な時は、setter ではなく、別
の値を持った同じクラスのインスタンスを返す
<閉じた操作>
ルール9
別のインスタンスを返す
BigDecimal型に閉じている
返す型も渡す型も BigDecimal
数値や日付をラップしたクラスの
基本パターン
クラスの用途をメソッドで表現 23
ひとつのクラスに
インスタンス変数は2つまで
• ロジックの置き場所としてクラスを考える
• クラスのメソッドは、どのメソッドもインスタンス
変数を「すべて」使うのが良い設計
– インスタンス変数を使わないメソッドは、そのクラ
スに存在する理由がない
– 特定のインスタンス変数だけを使うメソッドは、そ
のインスタンス変数とメソッドを抜き出して、
別のクラスにする
ルール 7
24
すべてのエンティティは小さく
• 大きなクラスは、インスタンス変数を持ちすぎ
• 長いメソッドは、さまざまなインスタンス変数
/ローカル変数への操作をごちゃまぜにして
いる
• 一つの変数に注目し、その変数だけに関心
のあるロジックを集めてメソッドにする
• あるインスタンス変数を使うメソッドを集めて、
別のクラスに抽出する
ルール 6
ロジックとインスタンス変数が密接に関係する凝集したクラスの感覚を体で覚える
25
複数の関心事を持たない
else 句は使わない
インデントは一段階ルール 1
ルール 2
一行につきドットは1つ
一つのクラスに
インスタンス変数2つまで
ルール 4
ルール 7
26
インデントは一段階
• インデントは関心事の階層構造の表現
– 深いインデントは、複数の関心事の階層構造
• 改善のやり方
– 最も深いインデントをメソッドに抽出
– メソッドをクラスにすることを検討する
• メソッドの引数をインスタンス変数にしたクラス
• ロジックをそのクラスに移動
• そのクラスのインスタンスに仕事をさせる
– これをインデントの数だけ繰り返す
• 階層ごとのロジックを別クラスに分離する
ルール 1
インデントに埋め込まれた構造が、
クラス構造として現れる 27
else 句は使わない
• else 句は異なる関心事の表現
• 改善のやり方
– 判断部も処理部もすべてメソッドに抽出する
– 事前条件のチェックはガード節で早期リターンする
• if( invalid() ) return ;
– 残った条件を、相互排他かつ全体網羅になるように
グルーピングする
• 複雑なif-else構造は異なるグループが混在している
– グルーピングした条件区分を列挙型(enum)で宣言す
る
– ロジックをenumに移動する
ルール 2
if文の条件分岐の異なる関心事の整理を体で覚える
相互排他かつ全体網羅の構造にすることを体で覚える 28
else 句は使わない(続き)
• 区分ごとのロジックが複雑な場合
– 多態を使う
– 区分ごとのロジックを別のクラスにする
– インタフェース宣言で、区分ごとのクラスを同一グ
ループとして宣言する
– 区分ごとのロジックを使う側のコードから分岐構
造(if/switch)が消える
ルール 2
条件分岐の構造を、if文/switch文ではなく、
区分ごとのクラスで表現することを体で覚える
クラス図が大きく変化する
29
課金ポリシー
適用する()
シーズン料金
レート()
夏料金
レート()
冬料金
レート()
料金
計算() <<interface>>
計算方法(How)を表現
料金区分(What)をクラスで表現
計算()メソッドに埋もれ、
暗黙化する業務知識
シンプルな設計に見えるが、
ルールの変更・追加のたびに
計算()メソッドが肥大化し、
if 文が増殖する
業務知識をそのまま、クラスとして表現
複雑に見えるが、ルール変更・追加が、
楽で安全になる
区分をクラスで表現する
30
一行につきドットは1つ
• person.preference.contactMethod.doSomething()
– クラスの構造が、コードに埋め込まれている
– 変更に弱い
– 意図があいまいになる
• 改善のやり方
– 説明用変数を使ってドット構造を分解してみる
Preference preference = person.preference();
ContactMethod method = preference.contactMethod();
method.doSomething();
ルール 4
31
一行につきドットは1つ
• person.preference.contactMethod.doSomething()
• doSomething() を実行する場所を再考する
このクラスがpersonをインスタンス変数に持っ
ているとして
– person にdoSomething()をやらせる?
– method をインスタンス変数として持つ?
– methodを持った別のクラスを作って、そっちで
doSomething() する?
ルール 4
32
なんでも階層構造で整理するのではなく、もっと柔軟に
ロジックの置き場所を考えることを体で覚える練習
一つのクラスに
インスタンス変数は二つまで
• メソッドはインスタンス変数を使って判断/加
工/計算を行う
• 同じクラスのメソッドは、そのクラスのインスタ
ンス変数をすべて使うことが原則
• もし三つ以上の変数を同時に使うロジックが
あるなら、ロジックの分解と、別クラスへの抽
出ができる
ルール 7
33
メソッドとインスタンス変数を強く関係づけること、
クラスはそのための道具であることを体で覚える練習
名前をつける
名前を省略しない
すべてのエンティティを
小さく
ルール 6
ルール 5
34
すべてのエンティティを小さく
• クラスは50行以内
• パッケージは10ファイル以内
• メソッドは3行以内(追加ルール)
• 他のルールを実践すると、小さなクラスがたく
さんできる
• パッケージで整理する
• 名前を考えるのがたいへん
35
ルール 6
意図やロジックを、メソッドの中の記述ではなく、
メソッド名、クラス名、パッケージ名で表現することを体で覚える練習
課金ポリシー
適用する()
シーズン料金
レート()
夏料金
レート()
冬料金
レート()
料金
計算() <<interface>>
計算方法(How)を表現
料金区分(What)をクラスで表現
計算()メソッドに埋もれ、
暗黙化する業務知識
シンプルな設計に見えるが、
ルールの変更・追加のたびに
計算()メソッドが肥大化し、
if 文が増殖する
業務知識をそのまま、クラスとして表現
複雑に見えるが、ルール変更・追加が、
楽で安全になる
ロジックをクラスで表現する
36
名前を省略しない
• メソッド名、クラス名、パッケージ名
– 考えるのがたいへん
– ついつい安易な名前をつけがち
• どこに何が書いてあるかわかりやすくする
– 「良い名前」を見つける
– 「良い名前」を明記する
– 分析で発見する用語(概念)がそのままメソッド名、
クラス名、パッケージ名になる
37
ルール 5
プログラミング言語の匿名化の仕組みは設計を劣化させる
ダックタイピング/タプル/ラムダ
名前を省略しない
• 名前たいせつ
• クラス図やパッケージ図は、名前の関係の俯
瞰と整理に効果的
• ただし
– 実装から遊離した概念モデルにしないこと
– データに注目した構造にしないこと
38
ルール 5
パッケージ図を使った
ロジックの置き場所の俯瞰
39
与信限度額を考慮するとどうなるか?
発注と仕入れまで視野を広げるとどうなるか?
矢印で示した一方向の依存関係で正しく実装しているか/実装できるか?
オブジェクト指向で
プログラミングするためのモデリング
40
UML クラス図 三つの使い方
説明用のモデル
データモデル
オブジェクトの設計
実装には不適切
プログラムの
設計図ではない
41
オブジェクトの設計
List<明細行>
プログラムを書くために、こういうクラス図を必ず描くか?
42
コードで書くのが難しい時
クラス図でスケッチしてみる
コードで書けるなら
クラス図を描く必要はない
コードで書いていておかしいと感じた時
別の記法(ex. クラス図)で設計を見直す
主要なクラスの関係を俯瞰したい時
図にしてみるとわかりやすいことがある43
インクリメンタルな設計
毎日設計する
パッケージ構成の変更/名前の改善
クラス構成の変更/名前の改善
メソッド構成の変更/名前の改善
44
インクリメンタルな設計
毎日、分析し、設計し、実装する
初期の分析=初期の設計=初期の実装
分析と設計と実装を毎日対応させながら
段階的に改善していく
45
インクリメンタルな設計
• 良い設計は最初からは見つからない
– パッケージ構成/名前
– クラス構成/名前
– メソッド構成/名前
• クラス図だけで格闘していても良い設計には
たどり着けない
46
インクリメンタルな設計
ざくっとラフスケッチをしてみる
コードで書いて、動かしてみる
リファクタリングをする
行き詰まったら
絵に描いてみる
会話をしてみる
結果をコードに反映する
そうやって設計を改善し続ける
それがもっとも確実で効率的
47

Mais conteúdo relacionado

Mais procurados

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer増田 亨
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 

Mais procurados (20)

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 

Semelhante a オブジェクト指向プログラミングのためのモデリング入門

2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UMLkeki3
 
2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UMLkeki3
 
ソフトウェア工学2023 05 モデリング
ソフトウェア工学2023 05 モデリングソフトウェア工学2023 05 モデリング
ソフトウェア工学2023 05 モデリングToru Tamaki
 
(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説Hironori Washizaki
 
Usage-Driven Database Design Chapter4
Usage-Driven Database Design Chapter4Usage-Driven Database Design Chapter4
Usage-Driven Database Design Chapter4OsakiKota
 
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature Model
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature ModelUMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature Model
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature ModelShintaro Hosoai
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218Akira Tanaka
 
Azure Machine Learning getting started
Azure Machine Learning getting startedAzure Machine Learning getting started
Azure Machine Learning getting startedMasayuki Ota
 
Database Modeling (2018)
Database Modeling (2018)Database Modeling (2018)
Database Modeling (2018)Kihyun Kim
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門Daiyu Hatakeyama
 
ARの教科書 第9章 モデリングと注釈付け
ARの教科書 第9章 モデリングと注釈付けARの教科書 第9章 モデリングと注釈付け
ARの教科書 第9章 モデリングと注釈付けmachidyo
 
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介YukiK2
 
モデリングのすすめ
モデリングのすすめモデリングのすすめ
モデリングのすすめKiro Harada
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))HironoriTAKEUCHI1
 
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)Keita Onabuta
 
"Documenting Frameworks using Patterns" 紹介
"Documenting Frameworks using Patterns" 紹介"Documenting Frameworks using Patterns" 紹介
"Documenting Frameworks using Patterns" 紹介Tadayoshi Sato
 

Semelhante a オブジェクト指向プログラミングのためのモデリング入門 (18)

2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML2018年度 若手技術者向け講座 UML
2018年度 若手技術者向け講座 UML
 
2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML2019年度 若手技術者向け講座 UML
2019年度 若手技術者向け講座 UML
 
ソフトウェア工学2023 05 モデリング
ソフトウェア工学2023 05 モデリングソフトウェア工学2023 05 モデリング
ソフトウェア工学2023 05 モデリング
 
(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説
 
Usage-Driven Database Design Chapter4
Usage-Driven Database Design Chapter4Usage-Driven Database Design Chapter4
Usage-Driven Database Design Chapter4
 
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature Model
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature ModelUMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature Model
UMLだけじゃないもやもやを解消するモデリング技術の紹介 その2 Feature Model
 
Xtext And Grails20091218
Xtext And Grails20091218Xtext And Grails20091218
Xtext And Grails20091218
 
Azure Machine Learning getting started
Azure Machine Learning getting startedAzure Machine Learning getting started
Azure Machine Learning getting started
 
Database Modeling (2018)
Database Modeling (2018)Database Modeling (2018)
Database Modeling (2018)
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 
ARの教科書 第9章 モデリングと注釈付け
ARの教科書 第9章 モデリングと注釈付けARの教科書 第9章 モデリングと注釈付け
ARの教科書 第9章 モデリングと注釈付け
 
RandExcel
RandExcelRandExcel
RandExcel
 
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介
Stacked Semantic Guided-Attention Model for Fine-Grained Zero-Shot Learning 論文紹介
 
モデリングのすすめ
モデリングのすすめモデリングのすすめ
モデリングのすすめ
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
 
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)
AutoML & InterpretML (2019/11/27 Deep Learning Lab 講演資料)
 
"Documenting Frameworks using Patterns" 紹介
"Documenting Frameworks using Patterns" 紹介"Documenting Frameworks using Patterns" 紹介
"Documenting Frameworks using Patterns" 紹介
 

Mais de 増田 亨

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう増田 亨
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して増田 亨
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary増田 亨
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!増田 亨
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築増田 亨
 

Mais de 増田 亨 (20)

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 

オブジェクト指向プログラミングのためのモデリング入門