2019/01/26オブジェクト指向分析会に参加しました
なんとなくオブジェクト指向をサポートしているプログラミング言語を書いてるけどちゃんと概念を学んだことがないなと思い、参加してみました!
今回の趣旨
オブジェクト指向に則ってモデリングしてみて、オブジェクト指向に則って実装してみよう!
やったこと
おこづか帳のモデリング・実装をしました。
1. モデリング
おこづかい帳に必要な要素(金額、項目、日付など)をいったんブレインストーミング的に書き出す
↓
必要な要素をリファクタリング
「収入」と「支出」という項目があるけど、それぞれ別の項目にするか・それとも「収支」としてその中に金額を入力するかなど。
↓
ユーザーを想定し、必要な要素を絞り込む
今回は、小学生が利用するようなおこづかい帳を想定し、複数口座の利用や前借りなどの概念はいれませんでした。
↓
要素のクラスタリング
各要素を
値・集合・ロジック
に分類しました。
他の人も振り返りで仰っていたのですがユースケースをしっかり固める時間があったら更に良かったなと思いました。
何が必要で何がいらないかがより明確になるので。
2.実装
今回は、主催者の方がJavaマスターということもあり、Javaで実装しました。
参加者6人でワイワイモブプロしました。これほどの人数でモブするのは初めてでしたが、質問しやすい雰囲気で着いてこれて嬉しかったです。
学んだこと
1 値・集合・ロジックとは
モデルは要素によって成り立っています。要素は主に、値・集合・ロジックに分類されます。
「値」は、一つの特徴しか持っていない要素です。例えば、「名前」という要素しか持っていない「科目」という要素。
「集合」は、複数の「値」から構成される要素です。例えば、お小遣いの収入または支出を表す「取引」は、「日付」「科目」「収支金額」の複数の「値」から成立します。
「ロジック」は、処理を表します。例えば、科目ごとの収支金額を計算する処理は「ロジック」になります。科目ごとの収支金額を計算する処理によって返される金額は「値」になります。
「値」と「集合」を分けることによって、どのオブジェクトに何が必要か・何から成り立っているかが整理されるのは良いなと思いました。
また、いつもメンバ変数込みのクラスの中にロジックも書くのですが、 「ロジック」をいったんわけ、後から「誰がその処理の主語となるのか」を考えられるのも、分かりやすいコードを書く上で良いと思いました。
2. インターフェースがあったら嬉しいこと
Pythonにはインターフェースがないので、いまいち分かっていなかったのですが、 インターフェースを継承すると、そのインターフェースに書かれている振る舞いを強制的にもつことになり あやまった振る舞いをしなくなるといったような利点があるようです。
また、そのオブジェクト特有の細かい振る舞いが決まっていなくても、インターフェースを継承すれば実装・テストできるという利点もあるそうです。
よかったこと
1. 「一人ひとり感想を書く→他の人の感想を紹介する」というスタイルの振り返り
普段は、一人ひとりが感想を順に言っていくことが多いですが・・・
ホワイトボードに個々に感想を書いて、インタビュー形式で他の人の感想を紹介するという方法で振り返りました!
対話を通して他の人の思考を学べるし、話を遮られることがないのでとても良かったです!
2. モブだからこそ学べる豊富なボキャブラリー
要素の名前を決める時、一つの要素に対していろんな言葉の案が出てきました。
一人でプログラミングする時はその場で思いついた名前をつけることが多いので、言葉について深く考える機会になって良かったなと思います。
また、どの要素も、その要素の特徴を最も端的に示す言葉が選ばれた印象でした。どの言葉を利用するかを決める作業を通して、その要素の特徴を可視化することが出来た気がします。
逆に、言葉がいまいち決まりきらなかった要素に関しては、「やっぱいらないね」となったり使い方が決まらなかったりして
要素の概念の理解の名前付けはつながっているなあと思いました。
概念に困ったらどんな言葉で表すか考え直すアプローチもありかもしれません。
3. 主催の方が淹れてくれた美味しいコーヒー
ほんっっっとうに美味しかったです! その場でハンドドリップコーヒーを淹れてくださりました!
なごむし会話が生まれるし、コーヒーは正義だと改めて実感しました。
今度は私もコーヒー淹れたいです(*>▽<*)