Javaプログラミング入門 (2) オブジェクト指向を理解する の研修コースに参加してみた

unsplash-logoAlexander Andrews
研修コース参加レポートの2回目は↓のコースです。
プログラミング (2) オブジェクト指向を理解する
参加してみると、モヤッとした理解になってしまいがちなオブジェクト指向を、様々な切り口で紹介し、人によってイメージしやすい切り口から理解してもらえれば、という講座でした。
私には、じゃんけんゲームを従来の考え方で書いたプログラムと、オブジェクト指向で書いたプログラムとの比較が、とてもわかりやすかったです!
では、どんな内容だったのかレポートします!
もくじ
想定する受講者
まず、このコースの受講前提を確認します。プログラミングを学んだことがあるという前提ですね。
- オブジェクト指向を除くJavaプログラミングの経験があること
- プログラミング<1>を受講もしくは相当の知識があることが望ましい
受講目標
続いて、今回のコースで身につけて欲しいことを確認してみましょう。
- Javaでクラスを作るポイントがわかる / Javaでクラスを使うポイントがわかる
- オブジェクト指向プログラミングの用語と概念がわかる
- オブジェクト指向プログラミングをJavaで実践するポイントがわかる
- オブジェクト指向プログラミングの効果的な学習方法がわかる
では、実際のコースで教えてもらったことや、わかったことを中心にレポートします。
講師紹介
講師は矢沢久雄さんでした。
いつものアイスブレイク通り、栃木県ご出身なので、あの有名な方をなぞって今日のコースを表現していただきました。
わかんねえものはイヤだ
けんど、わかるとものすごーく
すきになるよなあ ひさを
実は昔、コンピュータ雑誌でオブジェクト指向を特集すると、売れなかったそうです。
それだけオブジェクト指向というテーマは理解が難しいものでした。
皆さんの自己紹介
今度は受講者の方がどのような知識をお持ちなのか、手を挙げて頂いてアンケートをとりました。
- Javaの経験が無い方がほとんどでした
- UMLは見たことが無い方がほとんどでした
- GoFデザインパターンを知らない方がほとんどでした
ここで出てきたGoFとは、Gang of Four の略で、4人組という意味でした。GoFというと、もっともらしく見えますね。
デザインパターンとは、その4人がオブジェクト指向の活用アイデアをまとめたもので、定番アルゴリズムにサーチやソートなどのオブジェクト指向版と考えると理解しやすいのことでした。
オブジェクト指向を実践で活かすアイデアがありそうで、期待が持てますね。
今日の進め方
これからやることを紹介してもらいながら、オブジェクト指向がテーマなので、とてもボリュームがあるとのことでした。
このため、プログラミング (1) のようにプログラムを一から書くということはなく、すでにあるサンプルプログラムを理解するという進め方になります。
オブジェクト指向とは?
オブジェクト指向の発想
まず、オブジェクト指向を考案者がどう発想したのか、というお話です。
オブジェクト指向はアラン・ケイが1970年代に提唱したと言われています。もう40年以上も前からあったんですね。
当時主流だった手続き型の関数という小さな部品で分けていると大規模なシステムに対応できないという問題から、プログラムの部品分けをどの単位でやるのか、という発想から出てきたそうです。
実際には、アラン・ケイがチューリング賞 (ITにおけるノーベル賞のようなもの) を受賞したのが2003年で、この年になって大規模なシステムが一般的になり、オブジェクト指向が活用され始めた、とのことでした。
アラン・ケイはどんな人?
未来学者のような人で、パソコンという概念も発表し、そのパソコンとは今のタブレットのようなものをイメージしていたそうです。。
もちろん今もご存命なので、これからをどうお考えなのか、聞いてみたいところですが、、、ほとんどメディアに出てこられないそうです。残念。
ちなみに、数少ないインタビューで、どうしたらそのように未来を考えられるのか、という質問に対して、
「未来を予測するには、自分で発明すればよいのだ」
と答えたそうです。
いや、ちょっと凡人には厳しい発想です。。
オブジェクト指向の部品の分け方
オブジェクト指向はクラスという部品で分けています。
このクラスに処理で扱うデータをすべて入れ、それを非公開 private にする一方、そのデータ処理を公開 public にして呼び出せるようにした、という説明で、生き物のように見えるとのことでした。
うーむ、、 何を言っているのか、分かりません。。。
そこはさすが矢沢さんです、例を出してもらいました。
ここで挙がった s.length()
を例に取ると、
- 文字列クラスに長さを聞く
- 文字列クラスが12文字と返してくれる
ただ、オブジェクト指向をサンプルプログラムのような規模でやろうとすると、とても面倒で、大規模なプログラムにならないとわかりにくいそうです。
たしかに、Webアプリケーションフレームワークを見てみると、フレームワークが用意した部品を使う、ということが当たり前ですね。
実際にオブジェクト指向で書かれたコードを見てみよう
先程は概念的なものでしたが、ここからは実際にどのようにクラスを書くのか解説されました。
クラスの書き方
- フィールド
クラスが持つデータを書く - メソッド
処理を書く - コンストラクタ
データを初期化するメソッドを書く
このフィールドが先程の話の通り、 private
に書かれ、処理は public
なので呼び出せる、ということになりますね。
クラスの使い方
部品 = クラスの書き方がわかったところで、作った部品をどのように使うのか、解説してもらいました。
使い方1
- 依存 // 既存のクラスをそのまま使う
- 継承
- 集約
- 継承と集約の例
extends
(継承する) を使うclass MyFrame extends JFrame {
// JFrameという部品をもってきてる- 集約は
JButton
というボタンを使って、myButton
を2個作る
- 継承と集約の例
集約という言葉だけを見ると、継承と同じように見えるのですが、フィールドに他クラスのインスタンスを持ってくることと言われるとわかりやすいですね。
使い方2
使い方1が既存のクラスを拡張しながら使うというものだったのに対して、今度は既存のクラスに投げる、というものを紹介してもらいました。
- 委譲 (delegate)
人間界で言うと、マネージャに依頼された処理を、スタッフというクラスに投げる
- 例外処理 (exception handling) を行うクラスを作る
- 例外が発生したら、例外が発生した処理を
throw
- 別の例外処理クラスで
try ~ catch
で受け取って例外処理を動かす
- 例外が発生したら、例外が発生した処理を
この辺はコードを見ると、わかりやすいですね。
ということで、ナント!!、オブジェクト指向で出来るのはこれだけということでした。
理解する範囲を限られると、曖昧なものがはっきりしますね。
その他オブジェクト指向でよく使う用語
ここからはどちらかというと Java というプログラミング言語の仕様を説明してもらいました。
- 型
- 参照
- 属性と振る舞い
- メッセージ
- カプセル化
- 汎化と特化
- 継承と集約
- 多態性
- インターフェイス
この中でもメッセージについては、純粋な (従来の書き方など無い) オブジェクト指向言語 Smalltalk を例に、とてもわかりやすいお話を紹介してもらいました。
実際のオブジェクト指向プログラミング
今度は実践的なじゃんけんゲームを題材として、従来までの処理に注目するやり方、プロセス指向と比べてながら、オブジェクト指向を理解していきます。
じゃんけんゲームの仕様
プロセス指向とオブジェクト指向の違い
- プロセス指向の場合
- 処理に注目する -> 動詞に注目する
- オブジェクト指向の場合
- 名詞に注目する
- オブジェクトとメッセージに注目する
また、オブジェクト指向はクラス図とシーケンス図で書くとわかりやすく、確かにシーケンス図を見ると、 judge
というオブジェクトが、命令を受け取って動いているように見えますね。
- シーケンス図
ちなみに、このじゃんけんゲームを改造しながら考えられると、理解が進みそうに思いました!
今後の学習のアドバイス
最後にUMLを紹介されたのですが、図を眺めながら、ユースケース図とアクティビティ図はエンドユーザーにわかりやすく、クラス図とシーケンス図はエンジニアにとってわかりやすそうに見えました。
また、冒頭でも紹介されたGoFデザインパターンはこれから開催されるので、より活用しやすい実践例がわかります、ということでした。
私も、GoFデザインパターンに参加してレポートしたいと思います!
まとめ
オブジェクト指向を、考案者の発想、考え方、実際の使い方、ちょっとしたプログラムと、様々な切り口から説明してもらいました。
これだけ切り口を用意するということは、それだけ難解で、関連する情報を増やさないと理解しづらいのですね。
このコースに参加して、オブジェクト指向を生き物からイメージする、というレベルから順を追って、クラスの使い方、じゃんけんゲームと具体的な話を紹介されて、曖昧な概念が、輪郭がちゃんと見えるようになりました!
他言語からオブジェクト指向言語に乗り換えたい方、オブジェクト指向を学んだけど、いまいち腹落ちしないという方には、切り口を多く用意するアプローチが効くのでは、と思ったコースでした!
SEカレッジが気になった方はこちらからお気軽にお問合わせください!!
SEカレッジの詳細をご覧になりたい方はこちら!!

SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。