2013年2月13日水曜日

シラバスに込められた思い〜オブジェクト指向プログラミング演習(2013)

オブジェクト指向プログラミング演習(OOP演習)は学部3年次第2学期の科目です。私がインストラクショナル・デザインに基づいて新規開発した授業としては2作目にあたります。

近代的なソフトウェア開発を実践的に学ぶというコンセプトで始めました。ただ単に開発環境の使い方で終始するのではなく,ソフトウェア工学上重要な概念を強調することで,陳腐化しない知識も身につけられるように設計しました。強調しているポイントは,たとえばテスト駆動開発,Model-View-Controller アーキテクチャ,状態機械モデリングといった概念です。

2011年度までは開発環境と言語は Eclipse + Java でしたが,2012年度からは Xcode + Objective-C に変更しました。Objective-C は Smalltalk 由来の文法のため,メジャーな C++ や Java に見慣れた身からすると違和感を覚えるものですが,Xcode による支援もよくできていることもあって,慣れればスラスラと読み書きできるものです。

開発環境の変更にともなって授業内容についても2012年度に大幅なリニューアルをしました。2013年度は基本路線を踏襲しつつ教育内容を充実していく方向での改善を考えています。


もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。


関連する教育実践研究の発表・論文


スパイラルカリキュラムという教育手法を取り入れています。詳細は下記を参照ください。まだまだスパイラルカリキュラムとしては未完成だと認識しています。


ランチョンセミナー
スパイラルカリキュラムによるソフトウェア工学教育
http://cvs.ield.kumamoto-u.ac.jp/wpk/?p=908

スパイラルカリキュラムによる
ソフトウェア工学 e-learning 教材の開発
http://cvs.ield.kumamoto-u.ac.jp/wpk/?p=1176

組込みシステム研究発表会
【中間報告】スパイラルカリキュラムによるソフトウェア工学教育
http://ci.nii.ac.jp/naid/110007993246

授業の概要(ねらい,テーマなど)

みなさんが「アプリ」という言葉を耳にした時に,たとえば Office, ウェブブラウザなどを連想するかもしれません。携帯のiアプリや, iPhone や Android などのスマートフォンで動作するアプリをイメージした人もいるかもしれません。このようなアプリを GUI アプリケーションと言います。

これからみなさんはオブジェクト指向プログラミング (Object-Oriented Programming: OOP) について演習を通じて学習します。OOPとはどのようなものなのか,全容を理解することはなかなか難しいのですが,「GUIアプリケーションを作るためには,OOPを習得することが必須だ!」といえば,みなさんは少なくともOOPの必要性について充分理解できるでしょう。実際,みなさんが本演習をすべて終えると,簡単なGUIアプリケーションが作れるようになれます。

実践的なソフトウェア開発ができる人材は,産業界からも強く求められています。単にプログラミングができるだけでは不十分です。ソフトウェア工学 (Software Engineering) の体系的な知見を実践に生かせる人材が求められています。また,最近は開発ツールの進歩も著しく,それらにある程度馴染んでおくことも,即戦力としては求められています。

このような要請を踏まえ,OOP演習では,最近の開発ツールを駆使したソフトウェア開発の全体像を体験すること,要所要所でソフトウェア工学との関連について触れることを重視しました。とくに品質の高いソフトウェアを開発するために必要な品質保証技術を重視するため,品質保証を重視した開発方法の一つであるテスト駆動開発 (Test-Driven Development: TDD) を取り入れることにしました。

次のような人はOOP演習を学習することを強く推奨します。

  1. 将来,ソフトウェア開発の仕事に携わりたい人
  2. 大学院に進学してソフトウェア工学を学びたい人

到達目標
  1. GUIアプリケーションをオブジェクト指向,Model-View-Controller,テスト駆動開発に基づいて開発できる。
  2. UMLのクラス図,アクティビティ図,状態機械図を Objective-C,Java, C++で実装できる。
  3. 他の学習者が開発した成果物(UML図,プログラムコード)に対してレビューやテストを行い,問題点を指摘できる。
  4. OOP演習に必要な概念(オブジェクト,クラス,継承,カプセル化,ポリモーフィズム,Model-View-Controller アーキテクチャ,テスト駆動開発,状態機械モデリング,パターン,リファクタリング) を,プログラムなどの実例を元に説明できる。
教科書
講義資料を Moodle で配布します。

参考書
E.ガンマ他著「デザインパターン」ソフトバンククリエイティブ
M.ファウラー著「リファクタリング 」ピアソンエデュケーション

授業計画・内容
2013年度も授業改善のため授業計画・内容を大きく変更する予定です。第1回のガイダンスでのアナウンスに注意してください。なお,下記の箇条書きの番号は必ずしも授業の回と対応していません。実際には学生の進捗に合わせて調整しています。
  1. ガイダンス
  2. はじめてのGUIアプリ開発〜Model-View-Controller アーキテクチャと状態機械モデル
  3. UMLモデルとプログラミング
  4. リファクタリング〜入門
  5. リファクタリング〜モデルとコントローラーの分離
  6. ソフトウェアテスト〜同値クラス
  7. ソフトウェアテスト〜モック
  8. ソフトウェアテスト〜状態機械モデルのテスト
  9. テスト駆動開発
  10. 状態機械モデリング〜電卓
  11. リファクタリング〜電卓
  12. ソフトウェアテスト〜電卓
  13. 電卓開発実践
  14. 電卓開発仕上げ
  15. 振り返り
成績評価の方法
到達目標ごとの成績評価
到達目標1: 演習課題: 70%
到達目標2: 演習課題: 10%
到達目標3: 演習課題: 10%
到達目標4: レポート:   10%

授業に対する準備事項
  • UMLのうちとくにクラス図,状態機械図,コミュニケーション図を読み書きできる必要があります。3年次第1学期のソフトウェア設計論をよく復習しておいてください。
  • UML のクラス図と状態機械図を基にオブジェクト指向プログラミング言語で実装できる必要があります。3年次第1学期のソフトウェア設計論をよく復習しておいてください。
  • C言語で関数内部を実装できる必要があります。1年次第1学期の計算機演習IのC言語プログラミングをよく復習しておいてください。
  • 上記の準備事項で挙げた能力の習得が不十分である場合には補習をします。授業開始前に担当教員に相談してください。
履修上の注意
3年次第1学期のソフトウェア設計論を必ず履修しておいてください。オブジェクト指向プログラミング演習では,ソフトウェア設計論の内容を理解していることを前提とします。教務システムの都合上,ソフトウェア設計論を履修していなくてもオブジェクト指向プログラミング演習を履修できますが,その場合はソフトウェア設計論の内容を補習してもらいます。

キーワード
オブジェクト指向プログラミング,ソフトウェア開発,ソフトウェア工学,ソフトウェア・モデリング,テスト駆動開発,リファクタリング, UML
object-oriented programming, software development, software engineering, software modeling, test-drived development, refactoring, UML