• このサイトについて
  • 先生大図鑑
  • 高校生からの質問におこたえします
  • アーカイブ
旧授業百景

「オブジェクト指向プログラミング」

〜ただコードが書ければいいだけじゃない?より良いコーディングについて考える〜

2022.05.12

 第39回は、工学部2年生向けの授業「オブジェクト指向プログラミング」について、知能情報システム工学科の近藤敏之先生にお話を伺いました。

 オブジェクト指向プログラミングとは何なのか?プログラミングをする時に重要なこととは何なのか?先生とのお話を通して考えてみましょう。

<プロフィール>
お名前:近藤敏之先生
所属学科:知能情報システム工学科
研究室:近藤研究室
趣味:ドライブ

ただコードが書ければいいわけじゃない!

―まず「オブジェクト指向プログラミング」の講義の概要について教えてください。

 ちょっと敷居が高そうな感じがするかもしれないですけども、ある特定のプログラミング言語を身につけるということよりも、どんなふうにプログラムを書いたら、後で他の人が修正しやすいか、理解しやすいのか、チームでソフトウェアを開発するときに「こんな約束事を守っていくとみんなが困らないよ」ということを身につけてもらうためにあるのが「オブジェクト指向」です。

―再利用性の高いプログラムを書くための考え方を学ぶのですね。

 プログラムって一度作ってリリースして終わりではなくて、その後に社会で動かしながら、どんどんメンテナンスを続けて行かなきゃいけないものなのですよね。金融系の基幹システムとか、ああいったものはすごい過去のしがらみが残っているもので。しっかりとメンテナンスして使っていく上でも、誰かスーパーマンのような人が作ったプログラムっていうのはやっぱりダメで、他の人が理解できるように書けないといけません。

―扱うプログラミング言語はなんですか?

 Javaを使います。C++やPythonに比べて自由度が低くて、学生さんが気にしないといけないことが少ないので比較的扱いやすいです。将来的にPythonを使うようになっても、オブジェクト指向の考え方は生きてくると思います。知能情報システム工学科の学生は、1年生でC言語を学ぶのですが、Javaはそんなに違わないし、違うところは最初にレクチャーするので、大体は授業について来られていると思います。ただ、Javaの文法を覚えているかは特に重視していなくて、どんなプログラミング言語でも関係なく、オブジェクト指向に関する概念をちゃんと理解しているかどうかを確認していますね。

―なるほど。プログラミング言語の知識を得るだけではないのですね?

 とはいえ、やっぱりプログラミングの授業なので、話を聞いているだけだと知識が抜けていってしまいます。そこで、次の週までの課題としてプログラムを書いて提出してもらっています。学生にとってはハードだと思いますが、その日授業に出てきたプログラム例を組み合わせれば、30分以内で終わるような課題にしています。私にとって大変なのは、1クラス70〜80人分のソースコードを毎週一人一人全部コンパイル(注1)して、コメント&フィードバックするのをやり続けていることです。

―丁寧ですね。プログラムの実行結果があってれば合格、とすればすぐ採点できそうな気がしますが…

 ここをこう書くと他の人が困るよっていうようなことをフィードバックします。出力結果が正しければ課題としては合格だけど、そのコーディングを続けていると将来困ると気づかせることに重点を置いていますね。

―Javaの技能を身につけるというより、オブジェクト指向の考え方をしっかりと身につけてほしいということですね?

 そうですね。判断基準をプログラムが動作するかどうかという範囲に収めるのではなくて、こんなことが起こったら対応できるだろうかと考える。例えば、マイナスの値が入ったとき大丈夫だろうかとか、想像することをいつも意識して欲しいですね。

プログラミングをする上で大切にしてほしいこととは?

―実際にプログラムを動かすということを大事にされているような気がしますが、何か意図があるのでしょうか?

 テキストとか本とかに載っているソースコードが本当に動くのかどうか、実際にやってみたら理解度が違うと思います。授業の最中でも、その場でプログラムを実行して見せる時間をとっています。特によくやるのが、「ここをこのように書き換えたら、どんな出力結果になるでしょう?」って学生さんに聞くこと。やっぱり自分の頭で考えないと、実践的な能力は身につかないと思いますね。

 例えば、Pongというテレビゲームの初期に出てきたゲームがあります。これを同じように課題で作ってもらいます。学生さんによっては、こちらが求めてないことまでこだわって作ってくれる。たとえば、失敗するとバーの長さが短くなるようにしたり、色を凝ったり、点数表示をしたり、相手を設定してそいつがAIでものすごい強いとかね(笑)。でも、それは好きにやってくれていいし、この課題のプログラムを作るために必要な基礎知識はすべてこれまでの講義で説明したことなので、たいして難しくなく簡単なゲームなら誰でも作れるようになりますよ。

課題のPongゲーム

―授業中のスライドがとても見やすかったのですが、スライドのこだわりはありますか?

 イメージしやすい例を出すようにしています。例えばクラス(注2)から生成されるオブジェクトのことをインスタンスと言うのですが、クッキー型とクッキーの関係に例えてみることができます。

インスタンスの説明用授業スライド

―新しい用語が出たときにそのまま定義だけ言われるとわからなくても、例を挙げられるとなるほどと思うことはありますね。

 そうそう。出す例はちょっとクスッと笑えるようなものにしています。古い芸能人の例だったりするのでそろそろ作り変えないといけませんね(笑)。

これからプログラミングを始める人に伝えたいこと

―情報系に進みたい高校生に対してメッセージはありますか?

 知能情報システム工学科って最初はC言語からはじめるけど、ポインタ(注3)とかメモリ構造とか1年生の前期から結構しっかりと学びます。やっぱり基礎を理解しないとゼロからプログラムを作れないからね。時間が経っても風化しない原理を理解するということが重要。でもだからといって高校生にはできないかというとそんなことはないと思う。プログラミングを始めるのに年齢は関係なくて、プログラミングの細かいところに関しては高校では習わないことばかりなので、思い立った時に始めてもらえれば良いのかなと思います。高校でプログラミングが授業で必修になって状況が変わってくるのかもしれないけど、やっぱりやらされているよりは好きでやるという方がいいですよね。

―義務というか作業になっちゃいますよね?

そうそう。先生がこれを言い、だからこれを調べてこうやりましたって作業になっちゃうとつまらないので、学生時代は失敗してもいいから、やっぱり自分で実験したりとか物を作ったりとかやって欲しいですね。


(注1)プログラミング言語(今回はJava)を用いて書かれたプログラムを、コンピュータが直接実行できる形に変換すること。
(注2)データに対応するフィールドと、そのデータの操作手続きに対応するメソッドからなる同じ属性を持つグループのこと。
(注3)関数や変数のメモリ上でどこに位置しているのかを表すアドレスを格納している変数をポインタ変数といい、アドレスを扱う機能の総称をポインタと呼ぶ。


近藤先生の「授業百景」はここまで!
授業百景第三十九景はいかがでしたでしょうか?
近藤先生の今に至るまでの経緯、研究への想いについて詳しく知りたい方は「#39「近藤敏之先生」〜人と人工物の相互適応でより良い社会に〜」もあわせてどうぞ!

文章:ほき
インタビュー日時:2022年2月18日
※ 授業の形式等はインタビュー当時と変わっている場合があります。何卒ご了承ください。
※インタビューは感染症に配慮して行っております。