Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

42 views

Published on

その1のネタです

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Java & OO 道場(その 1 ) (全 2 回)のメモ 2017 07 01‐ ‐ (土)  by kowata
  2. 2. 本日のキーワード 「シンプル」 Surtout faites simple (出来る限り単純に作りなさい) エスコフィエの料理の哲学より
  3. 3. クラス間の関係について 疎結合 密結合
  4. 4. カプセル化について public protected デフォルト ( package private) private 弱       ア ク セ ス 制 限       強 ⇒ 適切な「情報隠蔽」が行なわれると利用者が楽になる
  5. 5. 今日のネタ(その2) DRY 原則 コンストラクタチェーン オーバーロードとメソッドのシグネ チャ
  6. 6. Java & OO 道場(その 2 ) (全 2 回)のメモ 2017 07 01‐ ‐ (土)  by kowata
  7. 7. この勉強会の目的は・・・  ・オブジェクト・クラス・インスタンス、について   説明ができない。   ・継承とインタフェースの使い分けができない。  ・そもそもインタフェースって何?何が嬉しいの?  ・デザインパターンの良さがわからない。 ⇒  の、様な疑問に対して「自分なりの解答(もしくはヒント)を    持ち帰ってもらう、でしたが、どうでしょう?
  8. 8. 本日のキーワード 「お笑い」 ではなく、、、
  9. 9. 今回も、 「シンプル」 Surtout faites simple (出来る限り単純に作りなさい) エスコフィエの料理の哲学より
  10. 10. 軽く復習も兼ねて 「オブジェクト指向」でよく出てくる 考え方 1. OOA 、 OOD 、 OOP 2.オブジェクト(データと操作) 3.メッセージパッシング 4.カプセル化(情報隠蔽、部品化、再利用) 5.クラス・インスタンス 6.階層構造 7.継承 8.ポリモーフィズム(多相性、多様性、多態性) 前回やったので、 詳細は省略 今回のキモ 長くなるので、詳細省略
  11. 11. その前に軽く Java の文法の復習を (その1) 基本データ型(プリミ ティブ型) 参照型(リファレンス 型) 配列型 Java 言語において「データ型」と呼ばれるものは 3種類存在する ・・・ boolean, char, byte, short, int, long, float, double の    8 種類 ・・・若干特殊な参照型 ・・・ String 、 Date 等の Java のライブラリに含まれたものや    それぞれの開発者が作成したクラス これには次のシートの 3 種類が存在する
  12. 12. その前に軽く Java の文法の復習を (その2) Interface (インタフェー ス) 高       抽 象 度       低 (※)「抽象メソッド」・・・「実装を持たない(≠実装が空)メソッド」 AbstractClass (抽象クラ ス) Class (クラス or 具象ク ラス) Java 言語において「クラス」と呼ばれるものは 3種類存在する ・・・定数と抽象メソッドのみを持つ ・・・定数と変数、具象メソッドのみを持つ ・・・定数と変数、抽象メソッド・具象メソッドを持つ イ ン ス タ ン ス 生 成 不 可 能           可 能
  13. 13. さっきの内容を表にすると・・・ Interface (インタフェース) AbstractClass (抽象クラス) Class (クラス or 具象クラ ス) メソッドフィールド 変数定数 抽象メソッド 具象メソッド ○ ○ ○ ○ ○ × × × ○ ○ ○ ○
  14. 14. ここらで、一発軽い コーディングを
  15. 15. そうです、継承についてです
  16. 16. 「継承」についてのコーディング(その 1 ) 継承させる ●3 つのクラス「 Oya 」「 Ko 」「 KeisyoMain 」があります。   ⇒ 「 http://bit.ly/L5Zs3y」にコードがあります。 問1.「 KeisyoMain 」クラスの1つ目のコメントアウトを解除して下さい    ⇒ 「 Ko 」クラスが「 Oya 」クラスを継承するように修正して下さい main() KeisyoMain printKo() printZaisan() Ko uses printOya() printZaisan() Oya
  17. 17. 「継承」についてのコーディング(その 2) 実行結果の 確認 問2.「 KeisyoMain 」クラスの2つ目のコメントアウトを解除して    実行結果を確認してみて下さい。    また、「 Ko 」でオーバーライドされた「 printZaisan() 」の結 果と、    「 Oya 」の「 printZaisan() 」の結果を確認してみて下さい main() KeisyoMain printKo() printZaisan() Ko uses printOya() printZaisan() Oya super.printZaisan() というコードを追 加してみましょう
  18. 18. 「継承」についてのコーディング(その 3) 実行結果の 確認 問3.「 Oya 」クラスを型として、「 Ko 」のインスタンスを作成し た場合の    実行結果を確認してみて下さい    ⇒「 Ko 」クラス内に存在する「 printKo() 」は使用できたで しょうか? main() KeisyoMain printKo() printZaisan() Ko uses printOya() printZaisan() Oya
  19. 19. 「継承」についてのコーディング(その 4) 実行結果の 確認 問 4 .「 Oya 」クラスを型として、「 Ko 」のインスタンスを作成 した物を、    「 Ko 」クラスの型へ「ダウンキャスト」した時の実行結果を    確認してみて下さい    ⇒「 Ko 」クラス内に存在する「 printKo() 」は使用できたで しょうか? main() KeisyoMain printKo() printZaisan() Ko uses printOya() printZaisan() Oya
  20. 20. 「継承」についてのコーディング(番外 編)●「Ko」に対して、2つ以上の親クラスを継承させようとするとどうなるでしょう? printKo() printZaisan() Ko printOya() printZaisan() Oya1 printOya() printZaisan() Oya2 ● 「 Oya 1」が「 Oya2 」を継承し、「 Oya2 」が「 Oya3 」を継承す るような関係の   場合、「 Oya1 」を継承した「 Ko 」の動きはどうなるでしょう? printKo() printZaisan() Ko printOya() printZaisan() Oya1 printOya2() printZaisan() Oya2 printOya3() printZaisan() Oya3 後は、各メソッドのアクセス修飾子を 変えてみたりしても面白いかも
  21. 21. 「継承」のポイント ● 「 Oya 」(親クラス=スーパークラス)と「 Ko 」(子クラス=サブクラ ス)の   関係は理解できましたか? ● 継承されたときの子クラス(サブクラス)の利用法についてはどうでしょ う?   ⇒ 親クラスのメソッドが使えます(アクセス修飾子については要注 意)   ⇒ 親クラスのメソッドが子クラスでオーバーライドされる場合があり ます。 ●Java では「単一継承」しかできません ● アップキャスト、ダウンキャストした時の動きについてはどうでしょう? ⇒  以上を踏まえて、「継承には弱点がある」という話を少々。    (「継承」を考える前に、「委譲」の可能性を検討する)
  22. 22. 「継承」のおまけ(単一継承と多重継承) 単一継承( Java とか) printKo() printZaisan() Ko printOya() printZaisan() Oya1 printOya() printZaisan() Oya2printKo() printZaisan() Ko1 printOya() printZaisan() Oya printKo() printZaisan() Ko2 printKo() printZaisan() Ko4 printKo() printZaisan() Ko3 多重継承( C++ とか) printOya() printZaisan() Oya1 ダイヤモンド継承問題 (※)「親」「子」というのはそれぞれの相対的 な関係において定義されます。

×