2001年度 春学期 オブジェクト・プログラミング
大岩 元
主題と目標
コンピュータの使い方を覚えただけでは、その本質を理解するには至らない。自分がしたい仕事をコンピュータに実行させる方法であるプログラミングを学んで初めて、コンピュータの何たるかが理解される。
プログラミングを自己表現の道具としてマスターしたい学生が、その能力を獲得出来るようにすることを、本講義・演習の目標とする。オブジェクト指向のプログラミングをJava言語を通じて理解し、それを使いこなせるようになる方法論を扱うことが主題となる。
プログラミングは言語を覚えることではない。仕事の手順を自分で考えることが要求される。これには、自分のしたい事を明確化すること、それを手順に分解すること、手順をコンピュータで実行可能な形式に具体化すること(ここで初めて、プログラミング言語が登場する)、完成したプログラムが当初の目的を達成しているかを評価することが含まれる。
プログラミングをこのような総合的な作業としてとらえることが本講義・演習では求められる。
教科書
Robert Lafore 著 岩谷 宏 訳「Javaで学ぶアルゴリズムとデータ構造」ソフトバンク
4800円
参考書
高橋友一、戸松豊和「Javaで学ぶ はじめてのプログラミング」サイエンス社1400円
(株)オージス総研「かんたんUML」翔永社 1980円
評価、その他
評価はレポートによって行なう。
全ての講義・演習に出席することが要求される。
授業計画
第1回 4月9日 状態遷移図とユースケース図
授業:「自動販売機」をテーマにして授業全体を進める。ユースケース図、いちばん簡単な自動販売機の状態遷移図の説明をする。
演習:「自動販売機」の状態遷移図を書いてみる。
第2回 4月16日 プログラムの設計と製作
人工言語の基本:連接、繰り返し、場合分け
人工言語と自然言語の使い分け
授業:簡単なプログラムの設計とコメントの書き方。
演習:簡単なプログラム(ボタンを押すと商品がでてくるだけ、何個でも出てく
る)を動かす。第1回でかいた状態遷移図に基づいてプログラムを作成する。
宿題:コメントをつけた、いちばん簡単なプログラムを提出する。
第3回 4月23日 クラスの作り方
手続き指向からオブジェクト指向への変換
授業:教科書第2章 配列 pp.27-37
配列への挿入、探索、削除と表示
演習:前回書いたプログラムを改良し、種々の商品を買えるようにする。(10個程度)配列に入れ、要求があった商品(商品コードで検索する)が出てくるようにする。
宿題:リクエストされた商品が出てくるプログラムを作成する。
第4回 5月7日 クラスの分割とクラス図
データ抽象(カプセル化)を用いたクラス分割
授業:教科書第2章pp.38-45 とクラス図の説明
演習:配列のクラスを分割して複数のクラスにするプログラムを書く。
宿題:カプセル化された配列を用いて自動販売機を実装する。
またその時の、「自動販売機」システムのクラス図を書いて比べる。
第5回 5月14日 探索の効率
線型探索、二分探索とBigO記法
授業:教科書第2章p46-66
演習:二分探索を利用した、商品検索アルゴリズムを備える自動販売機システムをつくる。
宿題:線型探索を用いた場合と計算時間を比較する。データ件数を変え、探す場所を変えて、探すのにかかる時間を実際に体験する。
第6回 5月21日 整列(ソート)
簡単な整列法とその効率
授業:教科書第3章(bubbleSort、insertionSort)pp.67-97
演習:バラバラに入れられた商品をソートして、目的の商品を取り出せるようにする。
宿題:上記プログラムを実装する。
第7回 5月28日 スタックとキュー
スタックとその応用(算術式の記法の変換と値の評価)
授業:教科書第4章 pp.99-153
演習:自動販売機にキューを利用して、商品が販売されたら商品がなくなるようにする。
また、店の人が、商品を補充できるようにする。
宿題:上記プログラムを実装する。
第8回 6月4日 連結リスト
データ抽象
授業:教科書第5章 pp.155-217
演習:キューをリスト構造にして、無限に補充できる自動販売機を作る。
宿題:前回のキューに、あふれるほど商品を補充したらどうなるか試す。
上記プログラムを実装する。
第9回 6月11日 シーケンス図
シーケンス図とその応用
授業:クラスをバラバラにする。(代金投入口、商品投入口、商品取り出し口、など)
演習:バラバラにされたクラスのクラス図を書く。
また、それらがどのように相互作用するかをシーケンス図を書く。
宿題:上記プログラムを実装する。
第10回 6月18日 再帰とマージソート
再帰の例(三角数、階乗、二分探索、ハノイの塔、マージソート)
授業:教科書第6章 pp.219-268
演習:マージソートのプログラムを書く。
宿題:単純なソートとマージソートの計算効率を比較する。
第11回 6月25日 当たりつき自動販売機(総合演習)
授業:Randomの使い方
課題:自動販売機が景品の当たりつきになるようにUMLを書きなおし、それに従って実装する。
第12回 7月2日 GUI(Model-View-Controler)
授業:授業で使ったフレームワークの説明。コードを読む。
演習:オリジナルな自動販売機を作る。
第13回 7月9日 エラー処理
授業:例外処理の扱い、ユーザインタフェース
使えないボタンが、押せるようになったら、自動販売機をどのような動作させるか?
演習:自動販売機が誤作動を起こさないように、例外処理を考える。
使わないボタンをDisabledにするなど、ユーザが使い易いプログラムにする。