- 51 -
オブジェクト指向プログラミング教育のための 3URFHVVLQJ を用いた教材開発
岩佐英彦
*
Development of teaching materials using Processing for Object Oriented
Programming Education
Hidehiko Iwasa
*
This paper describes a new approach to teach object-oriented programming methodologies for 3rd and 4th grade
students in information and control system course of KINDAI technical college. To teach object-oriented methodologies,
it is important to let student understand a concept of object-oriented, but it is relatively difficult because Java, a popular
object-oriented programming language, is lack of ability to visualize objects earned from a class as drawings. In this
paper, I introduce our approach to use Processing, a Java-based programming language that facilitates drawings, to let
student understand concept of object-oriented. I also introduce some examples of program, that help student understand
object-oriented techniques in step by step manner.
Keyword Object-oriented programming, Java, Processing, class, inheritance, and polymorphism
1.背景と目的
本校
*制御情報コースでは、平成 30 年度より本科 3 年生
と
4 年生における必修科目であるプログラミング言語 I、
II で学習するプログラミング言語を、従来の C 言語から
Java 言語へと変更した。その第一の理由は、ソフトウェア
産業界におけるプログラミング言語のシェアは
Java 言語
が他の言語を圧倒していることにある。第二の理由として
は、
C 言語ではオブジェクト指向プログラミングを実践す
ることが困難であるのに対して、
Java 言語はオブジェクト
指向プログラミング言語であり、カプセル化、継承、ポリ
モーフィズムといったオブジェクト指向プログラミング
のための多くの概念を、プログラミングを通じて自然に学
ぶことができる点にある。
Ruby や Python のような比較的
新しいプログラミング言語の大半はオブジェクト指向言
語であり、これから産業界で活躍できる
IT 技術者の育成
を考えた場合、
Java 言語を学ぶメリットは大きいと考える。
オブジェクト指向言語を学習する際には、クラスとオブ
ジェクト、継承、ポリモーフィズムについて理解すること
が非常に重要となる。そしてこの概念を理解した上で、オ
ブジェクト指向設計に基づいたソフトウェア開発を行う
ことによって、はじめて複数のプログラマによる大規模な
開発を行いながら、再利用性と保守性の高さを兼ね備えた
ソフトウェアを生産していくことが可能となる。
このようにオブジェクト指向はソフトウェア開発のた
めに必ず習得しておかなければならない概念であるが、一
方で、プログラミング言語の初学者にとってオブジェクト
指向を理解することは容易なことではない。オブジェクト
指向理解の鍵となる「クラスとオブジェクトの関係」を理
解するためには、「クラスとは設計図のようなものであり、
オブジェクトとは設計図に基づいて実際に作りだされた
モノだと思えばよい」という感覚を身に着けることが大切
である。しかし、
Java 言語によるプログラミングの初期段
階においては、画面に表示できるのが数字や文字などのテ
キスト情報に限られるため、その範囲でプログラムをさせ
ながら、上述の感覚を身に着けさせることには限界がある。
そこで本校の制御情報コースでは、
Java 言語をベースと
した言語である
Processing を活用し、オブジェクト指向の
概念を学生たちが理解するための一助となるような教材
の開発を行っている。
Processing は文法がほぼ Java 言語と
近畿大学工業高等専門学校
総合システム工学科 制御情報コース
- 52 -
同一でありながら、四角形、三角形、円などの図形を描画
させることが非常に簡単な言語であり、
CG やアートの分
野において普及が進んでいる。
本稿では、制御情報コース
4 年生の必修科目であるプロ
グラミング言語
II におけるクラスとオブジェクト、継承、
ポリモーフィズムの理解のための教材を具体的に示し、そ
の有効性を検証する。
2.本教材がカバーするオブジェクト指向の概念
と従来教材の課題
2.1 オブジェクトとクラス
オブジェクト指向プログラミングにおいては、実行され
るプログラムにおいて、特定のデータや処理をグループ化
して独立した単位となるオブジェクトと、そのオブジェク
トを生成する際の設計図の役割を果たすクラスについて
理解することが重要である。
Java 言語を用いたオブジェクトとクラスのプログラム
の例として、サイコロというクラスから具体的な二つの異
なるサイコロをオブジェクトとして生成するプログラム
が用いられる。サイコロというクラスには、「サイコロに
は1から6の整数値を保持するための変数(データ)と、
1から6の整数値をランダムに求めるメソッド(処理)が
備わっている」ことが記述されていて、このクラスから2
つのサイコロがオブジェクトとして生成されると、それぞ
れのサイコロの目が独立してランダムに決定される。
この例を本校の
4 年生に対して、オブジェクト指向プロ
グラミングの導入部分で提示した場合、過半数の学生は興
味を示さない。その主な理由の一つは、最終的に画面に表
示されるのが2つのサイコロの目を表す数字に過ぎない
点にある。
ではサイコロの数を
100 個に増やせばよいかというと
むしろ逆効果である。この程度のことであれば、わざわざ
クラスを作成してオブジェクトを生成するプログラムを
書かなくても、
for 文を使ってランダムな数字を 100 回生
成させるほうが合理的であると考える学生が多いためか、
あまりメリットを感じてもらえないので、教材開発におい
ては、簡単なプログラムの例を用いつつも、学生が具体的
にイメージを持ちやすく、なおかつオブジェクトやクラス
を使用するメリットを感じられる題材が必要となる。
2.2 継承
継承とは、2つのクラス間に親子関係を定義することを
認めることによって、親クラスを継承した子クラスから生
成されたオブジェクトは、自動的に、親クラスの有するデ
ータや処理を有することができるというオブジェクト指
向の概念である。
Java 言語においては継承の機能が実現さ
れており、大規模なソフトウェア開発においては必要不可
欠な機能となっている。
一方で、初学者が例題として用いるようなプログラムに
おいて、継承の機能のメリットを実感させることが難しく
学習上の課題である。
2.3 ポリモーフィズム
ポリモーフィズムはオブジェクト指向に含まれる諸概
念のなかで最も理解するのが難しいといわれており、オブ
ジェクト指向プログラミング習得における一つの関所の
ような存在である。
ポリモーフィズムとは、一つの親クラスが複数の子クラ
スを有する場合において、プログラムが実行されるまでは
あるオブジェクトがどの子クラスのオブジェクトとして
生成されるかが決まっていないような場合に威力を発揮
するテクニックである。
まず、各子クラスで独自に実行したいメソッド(処理)
を、親クラスのメソッドをオーバーライドする形で定義す
る。そして、オブジェクトが生成された後に、そのオブジ
ェクトの親クラスのメソッドを呼び出したにもかかわら
ず、そのオブジェクトがどの子クラスのインスタンスであ
るかに応じて、実行されるメソッドが自動的に切り替えら
れるのがポリモーフィズムである。
このように、ポリモーフィズムとは
if 文や switch 文の
ような分岐型の制御構造を一切使用することなく、オブジ
ェクトが生成された文脈に応じて実行されるメソッドを
変更できる仕組みであるということができるが、オブジェ
クト、クラス、継承などの諸概念の直感的な理解ができて
いない学生に対して、ポリモーフィズムの概念を伝えるこ
とは非常に困難なのが現状である。
2.4 本学習教材がカバーしない概念
オブジェクト、クラス、継承、ポリモーフィズム以外の
オブジェクト指向の概念として重要なものにカプセル化
(データ隠蔽)がある。データ隠蔽は、大規模なソフトウ
ェア開発において、各オブジェクトが管理しているデータ
へのアクセスをゲッター、セッターと呼ばれるメソッドに
限定することによって、意図しないデータ変更を防いだり、
データ型やデータ構造の仕様変更に伴うクラスの変化に
対する外部プログラムの保守性を高めたりするために必
要な機能であるが、他の概念と比較して理解がしやすく、
Java 言語のみを用いた学習でも十分に習得が可能なため
に本学習教材の範囲には含めない。
3.3URFHVVLQJ を用いたオブジェクト指向学習の
ための教材開発
3.1 教材開発の基本コンセプト
3URFHVVLQJ は -DYD 言語をベースとしたプログラミング
言語であり、一部の例外的な部分を除いて、ほとんど -DYD
- 53 -
言 語 と 同 じ 文 法 で 記 述 す る こ と が で き る 。 一 方 で 、
3URFHVVLQJ には -DYD 言語の初学者には困難な図形の描画
を非常に簡単に行うことができる。例えば、円を描画した
ければ、
ellipse(x, y, w, h);のように、円の中心
座標
(x, y)と円の幅 w と高さ h を指定すれば円が描かれ
る。
この 3URFHVVLQJ の図形描画機能を活用することによっ
て、画面内を動き回る円や四角形のような具体的に視認で
きるオブジェクトの設計図をクラスで定義し、それらの図
形を描画するためのパラメータ(座標やサイズなどのデー
タ)を変更しながら多数のオブジェクトを生成することに
よって、オブジェクト指向概念の理解と、オブジェクト指
向技術を利用するメリットを感じさせることを基本コン
セプトとする。
3.2 クラスとオブジェクト
3URFHVVLQJ で簡単に描画できる円と矩形を用いて、
&LUFOH クラスと 5HFW クラスの 種類を定義した。それぞ
れには、円の中心、矩形の左上の角を表す座標と、サイズ
がパラメータとして与えられている。また、定義された平
面内で壁面に当たると反発して動き続ける処理を PRYH と
いう名前のメソッドを用いて作成した。3URFHVVLQJを用
いて実際に作成された つのクラスを図1に示す。図中で
は、&LUFOH クラスに関するプログラムの部分を水色、5HFW
クラスに関する部分をピンク色、2つのクラスに共通する
部分を黄色で示している。
3.2 継承
図 に示した &LUFOH クラスと 5HFW クラスのプログラム
を見比べると、座標やサイズといった変数は共通化できる
ことが容易にわかる。また、PRYH メソッドについても、
図形の移動に関するプログラムは同一であり、異なるのは
図形が壁に当たって向きを変える部分であることがわか
る。
そこで、&LUFOH と 5HFW の親クラスとして 6KDSH クラス
を定義し、&LUFOH と 5HFW では 6KDSH クラスを親クラス
VXSHUとして継承することによって、2つのクラスの重
複部分を一か所に集約する。これによって、例えば図形を
動かすアルゴリズムを変更する場合には親クラスのプロ
グラムだけを修正すればよく、オブジェクト指向のメリッ
トの一つである保守性、拡張性が高まることを学生に容易
に理解させることが可能となる。継承の機能を用いて図
のプログラムを書き換えたものを図 に示す。
3.3 ポリモーフィズム
図2のプログラムを見ると、PRYHメソッドの呼び出し
の際に、各オブジェクトが &LUFOH クラスか 5HFW クラスか
によって個別に呼び出しが行われていることがわかる。本
プログラムのようにあらかじめ作成されるオブジェクト
の子クラスがわかっている場合にはこれで問題ないが、も
し生成されるオブジェクトのクラスが実行時まで不明の
場合には、このような実装をすることはできず、オブジェ
クトのクラスを何らかの形で管理する必要がある。
ポリモーフィズムを用いると、そのようなオブジェクト
の所属クラスの管理を行うことなく、親クラスのメソッド
として PRYH を呼び出すだけで、各オブジェクトが属して
いる子クラスの PRYH メソッドを呼び出すことが可能とな
る。ポリモーフィズムの技法を用いて図 のプログラムを
書き換えたものを図 に示す。また、図 、図 、図 の
プログラムが実行された際の画面例を図 に示す。3つの
プログラムは全く同じように動作する。
図 :クラスの継承関係
4.考察
本稿では、3URFHVVLQJ という図形等を容易に描画する
ことができる -DYD 言語の言語仕様に基づいたプログラミ
ング言語を利用することによって、-DYD 言語だけでは比
較的困難であったオブジェクト指向に関する諸概念を、本
校の学生たちにとってもわかりやすく学習させるための
教材について述べた。
第 章において示した通り、3URFHVVLQJ を用いて「円」
や「矩形」のような目に見える形でオブジェクトを生成し、
それらのパラメータの共通化や、メソッドの呼び出しの共
通化というわかりやすい課題を提示しながら学習を進め
ることによって、-DYD 言語だけでは理解が困難であった
継承やポリモーフィズムのような概念が、自然と理解でき
るようになることを示した。
今後は、3URFHVVLQJ の 次元 &* 作成の機能などを活用
して、学生にとってさらに魅力的な教材開発を行っていく
予定である。
- 54 -
図 :クラスを使用したプログラムの例
図 :継承を使用したプログラムの例
図 :ポリモーフィズム多態性を用いたプログラムの例
図5:3つのプログラムの実行画面
参考文献
1) 岩佐英彦、Processing を用いたオブジェクト指向プログ
ラミング授業の実践、平成
30 年度全国高等学校情報処理
教育研究会全国大会(ポスター発表)、
2018 年 8 月