Java & OO 道場(その 2 )
(全 2 回)のメモ
2017 07 08‐ ‐ (土)  by kowata
この勉強会の目的は・・・
 ・オブジェクト・クラス・インスタンス、に
ついて
  説明ができない。 
 ・継承とインタフェースの使い分けができな
い。
 ・そもそもインタフェースって何?何が嬉し
いの?
 ・デザインパターンの良さがわからない。⇒  の、様な疑問に対して「自分なりの解答(もしくはヒント)
を
   持ち帰ってもらう、でしたが、どうでしょう?
本日のキーワード
「お笑い」
ではなく、、、
今回も、
「シンプル」
Surtout faites simple
(出来る限り単純に作りなさい)
エスコフィエの料理の哲学より
単一責務について
解熱
鎮痛咳止め
一つ一つの小さい粒がそれぞ
れ効能(役割)を持って、一
つの目的(風邪の症状の軽
減)の達成を目指している
⇒  また、組み合わせによっ
て、様々な種類の風邪に対し
ても有効な薬となる
(参考)単一責任の原則( SRP )
- Strategic Choice
レイフィケーションについて
(参考)「檜山正幸のキマイラ飼育記」
http://d.hatena.ne.jp/m-hiyama/20080109/1199863428
クラス層
インスタンス層
今日のネタ(その1)
Java の文法入門 OO 入門
クラス・オブジェクト・インスタンス
継承・インタフェース・例外とか
デザインパターン
フレームワーク
テストの話 設計の話
アプリの話
業務・運用の話
(※) DB とかインフラの話とかは抜かしてます。
今日のネタ(その2)
DRY 原則(その1で話したネタ)
コンストラクタチェーン
(その1で話したネタ)
オーバーロードとメソッドのシグネチ
ャ
(その1で話したネタ)
YAGNI ( You Ain’t Gonna Need It! )
String 演算( StringBuffer との違い)
前回のネタ(その2)
ハードコーディングとマジックナンバ
ー
Agile Manifesto 、 XP 、 Scrum ・・・
現代の開発に必須なもの
  ⇒  SCM 、 CI 、 Testing
継続的デリバリー、 DVCS
ここらで、もう一発軽い
コーディングを
「インタフェース」についてのコーディング
(その 1 )
実装させる
●5 つのクラス(及びインタフェース)「 Drivable 」「
Racable 」
  「 Cycle 」 「 Train 」「 TestIFMain 」があります。
  ⇒ 「 http://bit.ly/KCuFPj 」にコードがあります。
問1.「 TestIFMain 」クラスの1つ目のコメントアウトを解除して
下さい
   ⇒ 「 Cycle 」クラスが「 Drivable 」インタフェースを実装す
るように
     修正して下さい
main()
TestIFMain
start()
turn()
Cycle
uses
start()
<Drivable>
start()
stop()
Train
start()
<Racable>
「インタフェース」についてのコーディング
(その2)
実装させる
問2.「 Cycle 」クラスについて、「 Racable 」インタフェースも
    実装するように修正して下さい
main()
TestIFMain
start()
turn()
Cycle
uses
start()
<Drivable>
start()
stop()
Train
start()
<Racable>
「インタフェース」についてのコーディング
(その3)
問3.「 Cycle 」クラスと「 Train 」クラスについて、実行結果を確
認して下さい
main()
TestIFMain
start()
turn()
Cycle
uses
start()
<Drivable>
start()
stop()
Train
以上を踏まえて、
いよいよ今回の一番の
メインディッシュを
白板で説明したネタのメモです
main()
Hall
performance()
write()
produce()
Mr.M
uses
performance()
<Comedian>
write()
<Writer>
performance()
99
write()
Mr.K
main()
Publisher
uses
白板で説明したネタのメモです
インタフェース利用時 インタフェース非利用
時
「インタフェース」のポイント
● インタフェースについては理解できましたか?
● ココでも「シンプル」「疎結合」という単語が出てきました
● 継承と比較してどういう違いがあるでしょうか?
● 「暗黙の期待」についてはどうでしょうか?
⇒  以上を踏まえて、「デザインパターン」に進みたいんですが
、
   その前に「例外」についてのお話を少々。
  一つだけ。「抽象クラス」は、まだ登場していませんがそれを利用
すれば
  何が嬉しいのでしょうか?(彼はどんな場面で活躍できるのでしょ
うか?)
例外について(階層構造)
(参考)「 Java 言語プログラミングレッスン 下巻」(
結城浩著)
Object
Throwable
Error
Exception
RuntimeException
その他の Exceptionチェック例
外
チェック例
外
非チェック例外
例外について(処理方法)
(参考)「 Java 言語プログラミングレッスン 下巻」
     「達人プログラマー」「 Java の格言」
● 「 try ~ catch 」して処理する
● 「 throws 」で呼び出し元に処理を任せる
⇒  いずれにせよ「例外は例外発生時のみの処理とする」の
が重要!
   ∵例外発生時以外の処理を含めると、「ホントに例外か?」という状
況に。。。
    (そもそも「例外」なんて無いに越したことは無い)
    「例外による脱出口が沢山ある」=「メソッドからの返り値が複
数ある」
    という事に繋がりかねず、設計が複雑になってしまう(シンプル
さ、重要!)
   (個人的経験としては「例外」についてのポリシーがイケてないシ
ステムは、
白板で説明したネタのメモです
「はがき」を書くためのクラスを作ってみる
抽象化する

20170708 java oo道場(ネタのメモ)(公開用)