シラバス参照

公式版のシラバスを表示  
最終更新日:2020/09/11  
筑波大学 教育課程編成支援システム

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

2.0 単位, 2 年次, 秋C 水1,2; 秋C 木3,4
前田 敦司

授業概要

大規模なソフトウェアの作成を容易にするためには、プログラムを適切な規模のモジュールに分割したり、不必要な詳細を意識しなくてもすむように記述を抽象化したり、モジュールの組み合わせ方を規格化したり、組み合わせ方が間違えていないか自動的にチェックしたりする機能が望ましい。このような要求を実現する技術の一つにオブジェクト指向プログラミングがある。 この授業では、Java言語を題材に、オブジェクト指向プログラミングにおけるモジュールの単位であるオブジェクトやクラス・メソッドを用いたデータの抽象化・組み合わせ方を記述する静的な型やインターフェースなどの概念を、講義と演習課題を通して学習する。

備考

平成25年度までに開設された「ソフトウェア構成論」(GB13001)または平成31年度(令和元年度)まで開設された「オブジェクト指向プログラミング実習」(GB13013)の単位を修得した者の履修は認めない。
オンライン(オンデマンド型)

授業形態

演習

学位プログラム・コンピテンスとの関係

・専門コンピテンス
2. ソフトウエアサイエンス分野の専門能力
6. 実践的技術力と問題解決能力

授業の到達目標(学修成果)

・ プログラミングにおいて、具体的な詳細を隠蔽する抽象化という考え方の重要性を理解する。

・ プログラムを抽象化し、モジュールに分割する手法としてのオブジェクト指向プログラミングの諸概念を学ぶ。

・ オブジェクト指向プログラミングの諸概念を、Java言語による実例を通じて身につける。

・ プログラミング入門で学んだPython言語とこの授業で題材とするJavaについて、単なる文法上の差異や共通点にとどまらず、文や式や制御構造などの概念的な共通点と、大規模で信頼性の高いプログラミングのためにJavaが備える静的な型やインターフェースなどの相違点について学ぶ。

キーワード

プログラミング, オブジェクト指向プログラミング, 抽象化, モジュール化, 再利用, ソフトウェア開発

授業計画

最初の2回では、これまでに学んだプログラミング言語とJava言語の表記を対比させながら、プログラミングの基本的な概念を再整理する。
次の3回では、プログラミングにおける抽象化・モジュール化という要求と、それを実現するためのオブジェクト指向というアプローチについて説明し、そのためにどのようなJava言語の機能が用意されているかを述べる。
6〜8回は、プログラミングのミスを防ぐ静的な型チェックと情報隠蔽について説明する。
9〜10回は、データの表現の抽象度と、モジュール間の依存性をケーススタディを通じて具体的に述べる。

第1回プログラムの構成要素: 式と文、定数・変数、データ型、サブプログラム(関数)について、Python言語やC言語の表記や概念を用いて復習する。また、Java言語では同じ概念をどのように記述するかを述べる。   
第2回条件判断、繰り返し、サブプログラムの呼び出しについて同様に復習し、Javaでの実現法を述べる。   
第3回プログラムを分割する必要性と、同じ問題を解くためにさまざまなデータやプログラムの表現があること・モジュールに分割する方法もさまざまありうることを説明する。具体的な詳細を隠す抽象化がプログラムを理解したり記述したりしやすくすることを説明する。モジュール分割と抽象化を実現するプログラム設計の手法の一つとして、メソッドを用いたデータの抽象化を説明する。Java言語においてメソッドは、基本的に個々のデータ(インスタンス)と組になっていること・インスタンスの雛形としてのクラスがあることを説明する。   
第4回クラスの継承と、それに関連するサブクラス、スーパークラス、オーバーライドという概念を説明する。継承による再利用と差分プログラミングについて説明する。   
第5回再利用という観点から見たモジュール化の方法として、継承を用いる手法とインスタンスを用いる手法の2つを比較する。基本プログラムが存在して、派生プログラムの動作をカスタマイズする例において、サブクラスを作ってカスタマイズする例と、カスタマイズ可能な部分のインスタンスを交換する例を比べて得失を論じる。   
第6回モジュールを組み合わせる規約としての型の役割について述べる。インスタンスを生成するには、まずサブクラスで特定のメソッドを具体的に記述することを要求する抽象クラスについて説明する。互いに関連するメソッド群のシグネチャをまとめたインターフェースについて説明する。モジュール間の規約としてのインターフェースの使い方について述べる。   
第7回静的な型チェックがもたらす安全性と、型パラメタを持つGenericsについて説明する。Genericsを用いないと、データの集まりを表す際に安全でなくなったり、不便になってしまうことを、リストを例に説明する。Genericsを用いたクラスを定義する基本的な方法を説明する。   
第8回不必要な細部について、モジュールの外からアクセスできないようにするアクセス制御の概念を説明する。また、大規模なプログラムを作成したり、作成者が異なるモジュールを組み合わせる際に、モジュール内で定義した名前が衝突しないようにする仕組みについて説明する。   
第9回ケーススタディ1: 辞書を用いたプログラムを作る際に、さまざまな抽象度でモジュール化した例によって、プログラムの再利用性や保守性がどのように変化するかを具体的に見ていく。   
第10回ケーススタディ2: Javaのクラスライブラリに含まれるJava Collection Frameworkを題材に、インターフェースと実装クラスの設計の例を具体的に見る。   

履修条件

PythonおよびCによる基本的なプログラミングができること。情報科学類教育用計算機の使用法に習熟していること。
平成25年度までに開設された「ソフトウェア構成論」(GB13001)の単位を修得した者の履修は認めない。
平成31年度までに開設された「オブジェクト指向プログラミング実習」(GB13013)の単位を修得した者の履修は認めない。

成績評価方法

manabaのドリル・小テスト(20%)
演習課題(40%)
テスト(40%)

学修時間の割り当て及び授業外における学修方法

授業ごとに、manabaのドリルを用いて復習を行うこと。演習課題を指定された期日までに提出すること。

教材・参考文献・配付資料等

教材や課題の配布には学習管理システム(manaba)を用いる。
参考書籍は以下の通りである。

1. 結城浩,「Java言語プログラミングレッスン 第3版(上) Java言語を始めよう 」「同(下) オブジェクト指向を始めよう 」 ソフトバンククリエイティブ (2012)
2. Robert Sedgewick and Kevin Wayne,Introduction to Programming in Java: An Interdisciplinary Approach 2nd Edition, Addison-Wesley Professional (2017)
3. 結城浩,「増補改訂版Java言語で学ぶデザインパターン入門 」 ソフトバンククリエイティブ (2004)
4. エリック・ガンマ他,「オブジェクト指向における再利用のためのデザインパターン 改訂版」ソフトバンクパブリッシング(1999)
5. バートランド・メイヤー,「オブジェクト指向入門 第2版 原則・コンセプト」翔泳社(2007)

オフィスアワー等(連絡先含む)

火曜6限・金曜5限.学術情報メディアセンター408または総合研究棟B棟1108.確実に面談したい場合には予約すること.

火6・金5
学術情報メディアセンター410 / 学術情報メディアセンター410 1001400 https://www.ialab.cs.tsukuba.ac.jp/~maeda/

その他(受講生にのぞむことや受講上の注意点等)

他の授業科目との関連

ティーチングフェロー(TF)・ティーチングアシスタント(TA)

TA 2名