リファクタリングプロセスの再利用によるオブジェクト指向プログラミング学習支援の提案
2
0
0
全文
(2) 対象モデルの特徴とモデルを構築するためのプロセスを纏める ことで、このステップを通じて初学者がアーキテクチャモデルを 構築するための手順を学習できる。. 4.2.3 アプリケーション固有のリファクタリング Model クラスに対してオセロゲームという観点からオブジェ クトの抽出を行い、オセロ盤、オセロの石、プレイヤーといった 要素をオブジェクトとして抽出した。プログラム2ではオセロの 石に関する操作が全く存在しなかったので冗長な記述であると判 断し、再度リファクタリングを行い、オセロの石クラスの除去を 行った。図 1、図 2 に示す Board はオセロ盤、Player はプレイヤ ーである。また、図 1 の Item とそのサブクラスがオセロの石を 表している。その後、変更要求を予測し変更に強固にするための リファクタリングを行った。予測した変更要求は[表示する石を 自由に変更する]、[プレイヤーを人間か CPU 切り替え可能にす る]、[プレイヤー数を 2 人以上にし、自分以外の色の石を挟んだ 場合に自分の石の色に変更するようにルールを変える]である。 変更要求に強いプログラムを作るには、オブジェクトの独立性を 高める必要がある。予測した要求変更に現れるオブジェクトはオ セロの石、プレイヤーである。これら抽出したオブジェクトと他 のオブジェクトの依存性を低くするようなりファクタリング操作 を行う。オセロの石とプレイヤーのクラスの独立性を高めるため に ItemFactory と PlayerManager を用いてオセロの石の生成部 分の隠蔽とプレイヤーの隠蔽を行った。以下がリファクタリング 操作の一例である。 1: オセロゲームの観点でオブジェクトの抽出を行った。 2: FactoryMethod におけるコンストラクタの置き換えを行い、 サブクラスの生成を隠蔽した。 このステップはリファクタリングを行うための抽象的な基準を 設けることが難しい。しかしリファクタリング範囲が Model 部分 に絞られている分、オブジェクト抽出が行い易いと考えられる。 図 1、図 2 がリファクタリング後のクラス図である。. 本ケースの流れでリファクタリングを行うことはソフトウェア 開発の各フェーズを逆に進めていることに近い。冗長な記述の除 去は実装、アーキテクチャモデルの構築はシステム設計、アプリ ケーション固有のリファクタリングはシステム分析に対応し、 各々のフェーズでの誤りや見落としにより発生したプログラムの 問題点を改善していると考えることができる。フェーズを遡るこ とにより、リファクタリングを円滑に進めることが可能になる。 冗長な記述の削除を始めに行うことで類似コードや不要なフィー ルドが除去される。つまり、その後のリファクタリングを行う際 に、変更箇所を局所化させることが可能になる。また、アプリケ ーション固有のリファクタリングはアーキテクチャモデルでの Model の部分に関してリファクタリングを行うので、先にアーキ テクチャモデルを構築し Model 部分を切り離すことでリファクタ リング対象範囲を狭めることができる。 プログラム1とプログラム2では類似コードを削除するための リファクタリング操作が異なった。プログラム1の類似コードは メソッド内の定数が異なるメソッド群であった。そこで定数の差 異を吸収するためにメソッド外部から引数として値を与えた。一 方、プログラム2ではメソッドの差異の箇所がメソッドの処理の 一部でありプログラム1よりも広範囲であったため、単に引数を 用いて差分を吸収することができず、テンプレートメソッドパタ ーンを用いて類似コードを除去した。このように類似コードの範 囲により、適用されるリファクタリング操作が異なり、結果とし て出現するクラスに違いが生じた。しかし、その他の部分ではリ ファクタリング操作に違いはなく、特徴の類似しているプログラ ムであれば共通のリファクタリングプロセスを再利用できる。 学校教育におけるプログラム初学者への教育指導を考えた場合、 生徒には同一の問題が提示される。初学者に出題する問題と考え ると、その問題は簡潔なもので規模が小さいと考えられる。故に、 作成されるプログラムは一般的な問題に比べてバリエーションが 少ないと推測できる。プログラムの特徴が類似している場合にリ ファクタリングプロセスが再利用できるならば、最終目標を想定 して共通のリファクタリングを行いながら自身のプログラムを改 善し、オブジェクト指向プログラムの特徴を学習することが可能 である。そのような場面ではリファクタリングプロセスの再利用 は大いに有効であると考えられる。. 6. 関連研究 図1. [5]では、CK メトリクス[6]を用いることでリファクタリング 操作を機械的に決定し、実行者に依存しないリファクタリングを 目指している。しかし、この手順では、プログラムの問題点と改 善点を理解することが難く、意図した改善ができない可能性があ る。このようなことからも、プログラムを理解し、改善が行える ようなリファクタリングプロセスをモデル化することは必要であ ると考える。. プログラム 1 のリファクタリング後のクラス図. 7. まとめ. 図2. 初学者のプログラムにリファクタリングを行うことでプログラ ムの品質を向上させることができる。更に、実際にリファクタリ ングを行い、自らのプログラムを改善することで初学者はオブジ ェクト指向言語の特徴を活かした実装を学習することができる。 今後は多くのケーススタディを実施し、初学者に示すプロセスの モデル化を行い、モデルの蓄積を行っていく。. プログラム 2 のリファクタリング後のクラス図 2. 8. 謝辞. 5. 考察 冗長な記述の除去を行うことによりプログラムの類似コードが 減少し、不要なインスタンスフィールドが除去されるので変更容 易性、可読性が向上する。アーキテクチャモデルの構築では、プ ログラムの責務の分割を行うことができ、各クラスの役割が明確 になるため表示部分に変更を加える際に変更箇所を特定しやすく なる。アプリケーション固有のリファクタリングを行うことでも クラスの責務の分割が可能になる。このステップではクラスの責 務を更に分割し、その後クラスの独立性を上げる。これによりプ ログラムの変更、拡張を行う際に変更点の特定が容易になる他、 プログラムの一部を使用したい場合、クラスの独立性が向上して いるため再利用し易くなる。このようにオブジェクト指向プログ ラムの特徴を活かすリファクタリングはプログラムの変更容易性、 再利用性を向上させるので、効果があると言える。. 本研究で使用したプログラムは本学学生によって作られたも のである。ここに記して謝意を示す。. 参考資料 [1] Martin Fowler,Refactoring Improving The Design Of Existing Code,Addison Wesley,2000 [2]Perdita Stevens,Rob Pooley,Using UML:Software Engineering with Objects and Components,Pearson Education Limited,1999 [3] 上原,佐野,保守とリエンジニアリング,共立出版, 2000 [4]CCFinder:http://iip-lab.ics.es.osaka-u.ac.jp [5] 秦野,乃村,谷口,牛島,”リファクタリングの自動化を支援する機構”, 情報処理学会 2002 シンポジウム,2002 [6] Shyam R. Chidamber 、 Chris F. Kemerer 、 ”A Metrics Suite for Object Oriented Design”、IEEE Transactions Vol.20 No.6 June 1994. 4−360.
(3)
関連したドキュメント
表-1 研究視点 1.景観素材・資源の管理利用 2.自然景観への影響把握 3.景観保護の意味を明示 4.歴史的景観の保存
BCI は脳から得られる情報を利用して,思考によりコ
○本時のねらい これまでの学習を基に、ユニットテーマについて話し合い、自分の考えをまとめる 学習活動 時間 主な発問、予想される生徒の姿
【対策 2】経営層への監視・支援強化 期待要件 4:社内外の失敗・課題からの学び 【対策 3】深層防護提案力の強化 期待要件
法制執務支援システム(データベース)のコンテンツの充実 平成 13
支援級在籍、または学習への支援が必要な中学 1 年〜 3
有利な公判と正式起訴状通りの有罪評決率の低さという一見して矛盾する特徴はどのように関連するのだろうか︒公
業務繁忙時にも対 応できるよう、施 設に必要な従事者 を適正に配置する とともに、利用者 サービス向上、効 率的・効果的な管 理運営の観点を踏