このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
この講義は専門科目の最後の必修科目です。 コンピュータのプログラミング能力を初級者から中級者へ持ち上げるための内 容を含んでいます。 この講義を習得することにより、三年生のプログラミングの講義を深く理解で きるようになります。 また、通信系の研究室に所属しても実験の整理や分析など、 大量のデータの処理をコンピュータでできるようになります。 なお、不合格者が多い科目ではありますが、不合格になっても何の得もありません。
本講義の難易度ですが、基本的には OB の就職先の社員研修程度を目標として います。 つまり、文系の人たちと混ざって受ける社員研修において、情報系の学科の卒 業生として恥をかかない程度の実力が付くように設定してあります。
初心者向け講座では無いので、プログラムを一切作れない人はまったく理解で きないと思います。
この講義を受けるのにふさわしいのは Java で配列の集計程度のプログラムが 書ける人です。
この講義の具体的な大きな目標は二つあります。 一つはオブジェクトクラスを作ることができること。 これは、単になんの要素も含まないクラスを定義するという意味ではなく、 アプリケーションソフトをオブジェクト指向プログラミングで作成する上で、 Java の常識を備えた基本的なクラスを作成できるという意味です。 これには、コンストラクタ、文字列化、比較、継承、型などの概念や、それに 伴うアルゴリズムやデザインパターンといった定石を知る必要があります。
もう一つはデータ構造として基本的かつ最も重要な木構造について学びます。 但し、木構造についても初歩の初歩である、データの格納だけを取り上げます。 なお、「データ構造とアルゴリズムII」では木構造をデータの分析に使用することま で学びます。
これらを学ぶと、メモリーを大量に使用できる(スケーラブルな)オブジェク ト指向的なプログラムを作成することができるようになります。
なお、大学院を他大学で学びたい人は、2007年までのデータ構造とアルゴリズム の方が入学試験範囲をカバーしていると思われます。 2007年までの講義内容とは、本講義の後半部分やデータ構造とアルゴリズム II の一部が若干重複しています。 しかし、本講義ではオブジェクト指向を前提としている点で、オブジェクト指 向を前面に出さない大学院試験では範囲をカバーしきれてない部分があります。 したがって、他大学院をめざすには2007年の講義資料も学習すると良いで しょう。
それは理論を学ぶと楽だからです。 二桁の足し算、三桁の足し算、四桁の足し算……を暗記するより、足し算の仕 方を覚えた方が楽なことは理解できると思います。 プログラミングも多くの似たような経験を繰り返して学ぶより、理論を学んだ 方が楽にプログラムを作ることができます。
また、コンピュータができてから何十年も経っていますが、先人の多くの知恵 を知らずに、同じアイディアを思いつくよりは、定石としてまとめて学んだ方 が楽です。
さらに、現代プログラミング環境は既に定石を使うことがあらかじめ想定されて設 計されています。 クラスライブラリなどのマニュアルを読んだり、Eclipse などのプログラミン グツールを使う際も、その定石を知らないと難しいです。 しかし、マニュアルを読んだり、ツールを使うのはプログラムを作る上で当然 のことなので、実践でいじりながら覚えるより、必要な知識は体系付けて学ん だ方が楽です。
この講義を終えた後、引き続いて「データ構造とアルゴリズム II」という選 択科目が始まります。 内容は「作りたいプログラムをどうやって作るか?」がテーマです。 前半は「ルールとプログラム」の関係に関する理論を、後半は XML というデー タ構造と処理をテーマに学びます。 GUIプログラミングの基礎も学びます。 この講義を受けることで、作りたいプログラムを作ることができるようになり ます。
本講義は、基本的に講義中に演習を行いません。 しかし、講義についていくには、復習として講義中に出した課題についてプロ グラムを作成すべきです。 この時、プログラミングツールである Eclipse の利用を強くお勧めします。 講義では特に Eclipse の利用法を説明したりはしませんが、Eclipse を活用 することにより楽にプログラムの課題に取り組むことができます。 特に Source, Refactoring のメニューには様々な有益な項目がありますので、 メニューになにがあるか、またどのような役割があるのかを把握しておくと良 いと思います。 なお、Eclipse は日本語化ができます。 初学者は日本語化した方が上達が早いと思いますが、ある程度使い慣れたら日 本語化しないで使うことをお勧めします。 それは、プログラミング技術が上達してきて、最新のツールが必要になってくると、英 語の情報が重要になってきますが、それらに出てくる単語をいちいち日本語に 直してから使う手間が省けるからです。 また、Eclipse の付属のコンパイラは互換性が低いため, SUN の JDK のコン パイラを使用してください。 つまり、 SUN の JDK をインストールしてから, Eclipse をインストールし、 さらに日本語化をするようにしてください。
この講義では、Java の初心者を卒業するような人を対象にしています。 つまり、全く Java を知らないような人は対象外です。つまり、講義について いくことはまず無理だとおもいます。 次のプログラムの課題を自力で解ける程度の知識を前提にしています。 但し、今完全に解けなくても、9 月中に自力で解けるようになれば、なんとか ついていけるかも知れません。
配列 int[] a = {1,2,3,4,5};
が定義されている時、合計、平均
を出力する Java プログラムを作りなさい。
但し、上記の配列の内容や要素数を変更しても、プログラムは変更せずに正常
に動作しなければならない。
有名な FizzBuzz 問題。
1から 100 までの数字を一行に1つずつ表示する Java のプログラムを作りな さい。 但し、3 の倍数の時は数の代わりに Fizz を表示し、 5 の倍数の時は数の代わりに Buzz を表示し、 3 と 5 の倍数の時には数の代わりに FizzBuzz を表示しなさい。
1 2 Fizz 4 Buzz Fizz 7 ...
講義は座学が中心で、演習などは行いません。 各自、サンプルプログラムや例題などを実際に動かしたりして、動作を確認す る復習を怠らないように願います。 又、参考文献に挙げた書籍を読むのも良いでしょう。 但し、 Java は Version 5 から大きく変わり、プログラミングテクニックも 変化しています。 しかし、それに対応した書籍は少ないです。 Version 1.4 以前の書籍を読む場合は、サンプルプログラムのコンパイル時に ワーニングすら出る場合がありますので、書籍を選ぶ際は十分に気をつけてく ださい。
また、本講義は Java7 に対応します。 Java 7 では文法が便利に変わって書きやすくなったため、プログラミングは 楽になりますが、 Java6 以前のコンパイラではコンパイルできないこともあ ります。
期末試験は行わず、評価はレポート二通で行います。 レポート課題は例年通り、講義の資料にある演習問題を組み合わせたような 内容を出題します。
この講義は勉強せずに単位を取ることは難しいです。 他人に頼らずプログラムを書けるようになるよう目指してください。
本講義では最新版の Java の開発環境と、ドキュメントをもっとも重視します。 http://java.sun.com/で(今は http://www.oracle.com/technetwork/java/index.html) 、 SDK のインストールと、API のドキュメントのダウンロードは忘れずに行っ て下さい。 Java EE を選べばサーヴレットと JSP も対応できるのですが、 Java7 はまだ Java SE しか出ていないので、 Java SE の SDK をインストールしてください。 なお、 Java は Oracle 社の管理に移ってから、日本語のドキュメントの対応 が悪くなりました。 Java 7 の大部分は Java 6 と互換性がありますから、当分は Java7 の英文マ ニュアルと、 Java6 の日本語マニュアルを併用して下さい。
この講義では Java 言語を主に使用しますが、対比のために C 言語も多少取 り上げます。 本講義を受講すると C 言語がどのような機能を持つ言語かは分かるようにな りますが、以前の講義と違い C 言語のプログラミングテクニック を多く説明したりはしません。
Java に関しても、本講義で重要と思われることのみを説明します。 つまり、 Java の全ての機能を説明するわけではありません。 機能の一部やクラスライブラリの一部しか紹介しません。 つまり、この講義では Web アプリケーションや、データベースとのやりとり などは行いません。 これらに関しては対応する講義で学んでください。