第 0 回 講義を始めるにあたって

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

0-1. この講義の位置づけ

この講義は実験を除くと、専門科目の最後の必修科目です。 コンピュータのプログラミング能力を初級者から中級者へ持ち上げるための内 容を含んでいます。 この講義を習得することにより、三年生のプログラミングの講義を深く理解で きるようになります。 また、通信系の研究室に所属しても実験の整理や分析など、 大量のデータの処理をコンピュータでできるようになります。 なお、不合格者が多い科目ではありますが、不合格になっても何の得もありません。

講義の難易度

本講義の難易度ですが、基本的には OB の就職先の社員研修程度を目標として います。 つまり、文系の人たちと混ざって受ける社員研修において、情報系の学科の卒 業生として恥をかかない程度の実力が付くように設定してあります。

初心者向け講座では無いので、プログラムを一切作れない人はまったく理解で きないと思います。

この講義を受けるのにふさわしいのは Java で配列の集計程度のプログラムが 書ける人です。

目標

この講義の具体的な大きな目標は二つあります。 一つはオブジェクトクラスを作ることができること。 これは、単になんの要素も含まないクラスを定義するという意味ではなく、 アプリケーションソフトをオブジェクト指向プログラミングで作成する上で、 Java の常識を備えた基本的なクラスを作成できるという意味です。 これには、コンストラクタ、文字列化、比較、継承、型などの概念や、それに 伴うアルゴリズムやデザインパターンといった定石を知る必要があります。

もう一つはデータ構造として基本的かつ最も重要な木構造について学びます。 但し、木構造についても初歩の初歩である、データの格納だけを取り上げます。 なお、「データ構造とアルゴリズムII」では木構造をデータの分析に使用することま で学びます。

これらを学ぶと、メモリーを大量に使用できる(スケーラブルな)オブジェク ト指向的なプログラムを作成することができるようになります。

なお、大学院を他大学で学びたい人は、2007年までのデータ構造とアルゴリズム の方が入学試験範囲をカバーしていると思われます。 2007年までの講義内容とは、本講義の後半部分やデータ構造とアルゴリズム II の一部が若干重複しています。 しかし、本講義ではオブジェクト指向を前提としている点で、オブジェクト指 向を前面に出さない大学院試験では範囲をカバーしきれてない部分があります。 したがって、他大学院をめざすには2007年の講義資料も学習すると良いで しょう。

なぜ理論を学ぶのか?

それは理論を学ぶと楽だからです。 二桁の足し算、三桁の足し算、四桁の足し算……を暗記するより、足し算の仕 方を覚えた方が楽なことは理解できると思います。 プログラミングも、多くの似たような経験を繰り返して学ぶより、理論を学んだ 方が楽にプログラムを作ることができます。

また、コンピュータができてから何十年も経っていますが、先人の多くの知恵 を知らずに、同じアイディアを苦心して思いつくよりは、定石としてまとめて 学んだ方が楽です。

さらに、現代プログラミング環境は既に定石を使うことがあらかじめ想定されて設 計されています。 クラスライブラリなどのマニュアルを読んだり、Eclipse などのプログラミン グツールを使う際も、その定石を知らないと難しいです。 しかし、マニュアルを読んだり、ツールを使うのは実際にプログラムを作らな ければならない状況(研究や仕事など)では当然のことです。 なので、その時になって初めて実践でいじりながら覚えるより、事前学習して 必要な知識は体系付けておいた方が楽です。

データ構造とアルゴリズムII の内容

この講義を終えた後、引き続いて「データ構造とアルゴリズム II」という選 択科目が始まります。 内容は「作りたいプログラムをどうやって作るか?」がテーマです。 前半は「ルールとプログラム」の関係に関する理論を、後半は XML というデー タ構造と処理をテーマに学びます。 GUIプログラミングの基礎も学びます。 この講義を受けることで、作りたいプログラムを作ることができるようになり ます。

0-2. 講義への準備

Eclipse のインストール

本講義は、基本的に講義中に演習を行いません。 しかし、講義についていくには、復習として講義中に出した課題についてプロ グラムを作成すべきです。 この時、プログラミングツールである Eclipse の利用を強くお勧めします。 講義では特に Eclipse の利用法を説明したりはしませんが、Eclipse を活用 することにより楽にプログラムの課題に取り組むことができます。 特に Source, Refactoring のメニューには様々な有益な項目がありますので、 メニューになにがあるか、またどのような役割があるのかを把握しておくと良 いと思います。

なお、Eclipse は日本語化ができます。 初学者は日本語化した方が上達が早いと思いますが、ある程度使い慣れたら日 本語化しないで使うことをお勧めします。 それは、プログラミング技術が上達してきて、最新のツールが必要になってくると、英 語の情報が重要になってきますが、それらに出てくる単語をいちいち日本語に 直してから使う手間が省けるからです。 また、Eclipse の付属のコンパイラは互換性が低いため, Oracle の JDK のコン パイラを使用してください。 つまり、 Oracle の Java SE 7 JDK をインストールしてから, Eclipse をイ ンストールして下さい。 さらに必要に応じて日本語化をするようにしてください。

基本概念の確認

この講義では、Java の初心者を卒業するような人を対象にしています。 つまり、全く Java を知らないような人は対象外です。つまり、講義について いくことはまず無理だとおもいます。 次のプログラムの課題を自力で解ける程度の知識を前提にしています。 但し、今完全に解けなくても、9 月中に自力で解けるようになれば、なんとか ついていけるかも知れません。

問題1

配列 int[] a = {1,2,3,4,5};が定義されている時、合計、平均 を出力する Java プログラムを作りなさい。 但し、上記の配列の内容や要素数を変更しても、プログラムは変更せずに正常 に動作しなければならない。

問題2

有名な FizzBuzz 問題。

1から 100 までの数字を一行に1つずつ表示する Java のプログラムを作りな さい。 但し、3 の倍数の時は数の代わりに Fizz を表示し、 5 の倍数の時は数の代わりに Buzz を表示し、 3 と 5 の倍数の時には数の代わりに FizzBuzz を表示しなさい。

表示例
1
2
Fizz
4
Buzz
Fizz
7
...

0-3. 講義の前に

講義の受け方

講義は座学が中心で、演習などは行いません。 各自、サンプルプログラムや例題などを実際に動かしたりして、動作を確認す る復習を怠らないように願います。 又、参考文献に挙げた書籍を読むのも良いでしょう。 但し、 Java は 2004 年の Version 5 から大きく変わり、プログラミングテ クニックも変化しています。 しかし、Version 5 が出た後も、しばらくは Version 1.4 以前を対象にした書 籍がでていたこともあり、図書館などにはまだ Java 1.4 以前対応の書籍もあ ると思います。 これらの書籍を読む場合は、サンプルプログラムのコンパイル時に ワーニングすら出る場合がありますので、書籍を選ぶ際は十分に気をつけてく ださい。

また、本講義は Java7 に対応します。 Java 7 では文法が便利に変わって書きやすくなったため、プログラミングは 楽になりますが、 Java6 以前のコンパイラではコンパイルできないこともあ ります。 特に再履修している学生は今の段階で Eclipse 作成するプロジェクトのプロ パティが Java 1.7 対応(Java7 のコンパイラの仕様を Java1.7 と呼ぶようで す)となっていることを確認して下さい。 なってない場合は、 Java7SE JDK をインストールした後、最新の Eclipse を インストールしてください。

期末試験は行わず、評価はレポート二通で行います。 レポート課題は例年通り、講義の資料にある演習問題を組み合わせたような 内容を出題します。

この講義は勉強せずに単位を取ることは難しいです。 他人に頼らずプログラムを書けるようになるよう目指してください。

講義の進め方

本講義では最新版の Java の開発環境 http://www.oracle.com/technetwork/jp/java/javase/overview/index.html と、 ドキュメント http://docs.oracle.com/javase/jp/7/api/ を重視します。 なお、Java EE を選べばサーヴレットと JSP も対応できます。

この講義では Java 言語を主に使用しますが、対比のために C 言語も多少取 り上げます。 本講義を受講すると C 言語がどのような機能を持つ言語かは分かるようにな りますが、以前の講義と違い C 言語のプログラミングテクニック を多く説明したりはしません。

Java に関しても、本講義で重要と思われることのみを説明します。 つまり、 Java の全ての機能を説明するわけではありません。 機能の一部やクラスライブラリの一部しか紹介しません。 つまり、この講義では Web アプリケーションや、データベースとのやりとり などは行いません。 これらに関しては対応する講義で学んでください。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科