プログラミング入門(金曜1・2限)講義資料(2008年後期)

プログラミング入門 第1回

授業の目標

コンピュータに使われるのではなく,コンピュータを使える人になろう!

コンピュータのプログラム(ソフトウェア)を作るには,プログラミングという作業が必要です.プログラミングとは何か,どのようにすればコンピュータのプログラムが作れるかを学ぶことで,プログラミングの方法・感覚を身につけ,コンピュータへの理解を深めます.

プログラミング言語を使ってプログラムを書くことが実習の中心ですが,プログラミング言語を学ぶことが目標ではありません.

授業の内容

プログラミング中心です.情報処理Iの延長ではありません(シラバス参照).情報処理Iより難しいので心しておいて下さい.

授業の進め方

プログラミングは自分の手でプログラムを書いてみないとなかなか身に付きません.プログラミングの実習は主にJava言語を用いて行いますが,Java言語の全ての機能を教えることは到底できないので,Java言語について深く知りたいのであれば,テキストを購入して下さい(本屋さんに行けばJava言語の本はたくさん並んでいます).基本的なところは授業で解説します.

授業中に分からないことがあったら遠慮なく質問して下さい(重要).プログラミングは積み重ねです.最初の方でつまずくと,後々まで影響します.分からないところはその時に解決しましょう.

授業の資料は,基本的にhttp://www.media.osaka-cu.ac.jp/~matsuura/2008-PP/に置くので,Bookmark しておいて下さい.

コマンドラインの使い方

プログラミングで良く使うことになるコマンドライン(CUI)の使い方

以下のページは,学術情報総合センター教育用システム環境のLinux環境を前提としています.Windows環境ではコマンドで操るWindows XP -CUIのアドバンテージを堪能しよう-等を参考にしてください.

>> UNIXのコマンドラインの使い方

XEmacsの使い方

プログラミングではエディタを使ってプログラムを書く作業がメインとなります.以下のページはUNIX(Linux)環境でよく使用されるXEmacsというエディタの使い方です(同じく学術情報総合センター教育用システム環境を前提としています).他のエディタ・環境を使用する人は自分で調べてください.

>> XEmacsの使い方

プログラミング入門

何故プログラミングを学ぶのか?

プログラミングとはコンピュータのプログラムを作成することです.コンピュータが理解できる形で,間違いなく記述しないと,人が思う通りにコンピュータを動作させることはできません.コンピュータはプログラムに書いてある通りに動作します.

この講義ではJava言語を使って実習を行いますが,一つの言語を覚えれば,他の言語の学習は難しくありません.

画面に Hello, World と表示するプログラム例

// Java言語の例
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}
  

/* C言語の例 */
main()
{
    printf("Hello, World\n");
}
  

{ Pascal の例 }
program sample(output);
begin
    writeln('Hello, World');
end.
  

* FORTRAN の例
        PROGRAM SAMPLE
        WRITE(*,*) 'Hello, World'
        END
  

# perl の例
print "Hello, World\n";
  

とにかくやってみよう

ホームディレクトリに Java というディレクトリを作成して下さい.この講義で作るプログラムは,全て Java ディレクトリの下のどこかに入れることになります.

Java ディレクトリの下に Hello というディレクトリを作成して下さい.

上の Java 言語の例をエディタで入力し,今作った Hello というディレクトリの下に Hello.java というファイル名でセーブして下さい,

コマンドラインから,Hello.javaをJavaコンパイラ(javac)でコンパイルして下さい.入力したプログラムに間違いがなければ javac は何も出力せずに終了するはずです.

[... ~]$ cd Java/Hello    下線部は人が入力する部分
[... ~/Java/Hello]$ javac Hello.java
[... ~/Java/Hello]$ 
  

入力したプログラムに間違いがあればエラーメッセージが表示されるので,エラーがなくなるまでエディタで修正して下さい.(プログラムの入力に間違いは付き物です)

[... ~/Java/Hello]$ javac Hello.java
Hello.java:1: '{' がありません。       Hello.java の1行目にエラーがあることを示している
class Hello 
           ^
エラー 1 個
[... ~/Java/Hello]$ 

コンパイルが正常に終わると Hello.class というファイルができているはずです.

[... ~/Java/Hello]$ ls
Hello.class    Hello.java
[... ~/Java/Hello]$ 

実行するには java というプログラムを使います.

[... ~/Java/Hello]$ java Hello
Hello, World
[... ~/Java/Hello]$ 

動きましたか?

解説

Javaのプログラムは 〜.java というファイルに格納する約束になっています.Java言語で書いたプログラムをソースプログラム (source program)と呼びます.

Javaのソースプログラムをコンパイル(compile)すると,〜.class というファイル(クラスファイル)ができます.

Javaのプログラムをコンパイルするプログラム(javac)はJavaコンパイラと呼ばれます.

クラスファイルは,java というコマンドを使って実行することができます.ソースプログラムのままでは,実行することはできません.

このように,Javaのプログラムを実行するには一度コンパイルという作業を行う必要があります.

コンパイラとインタプリタ

コンピュータにはCPU(Central Processing Unit,中央処理装置,マイクロプロセッサ,あるいは単にプロセッサとも呼ばれます)よばれる装置が内蔵されていて,プログラムの実行を行っています.コンピュータの頭脳に相当する部分です.

CPUは,非常に原始的な言語(機械語)しか理解することができません.人が複雑なプログラムを機械語で記述することは困難なので,高級言語が考え出されました.

高級言語の例
手続き型言語 FORTRAN, COBOL, BASIC, C, Pascal, Ada, PL/I, ...
オブジェクト指向言語 Smalltalk, C++, Java, Ruby, ...
その他 Lisp(記号処理言語),Prolog(論理型言語), Perl, ...

高級言語を実行するための方法として,大きく2つの方法があります.

コンパイル
高級言語を機械語に翻訳する作業
コンパイラ
コンパイルを行うプログラム
インタプリタ
高級言語を解釈して実行するプログラム

CPUによって実行できる機械語が異なるので,CPU毎にコンパイラが存在します.(Intel社のPentium用のC言語コンパイラ,etc.)

インタプリタ言語の例

インタプリタ言語の例として perl を取り上げます.上の perl 言語の例をエディタで入力し,Hello.pl というファイル名でセーブして下さい.その後,コマンドラインから perl Hello.pl と入力してみて下さい.

[... ~]$ perl Hello.pl
Hello, World
[... ~]$ 
  

この場合,perl コマンドがperl言語のインタプリタであり,Hello.pl に記述された内容を解釈して実行していることになります.

ちなみに,perl コマンド自体はC言語で記述されています.それをC 言語のコンパイラによってコンパイルして perl コマンドを作成しているのです.ややこしいですね.

Java言語の場合

Java言語はコンパイル方式を採用していますが,Javaコンパイラは直接機械語に翻訳しません.そのかわり,Java仮想マシンと呼ばれる仮想の(実際に存在しない)CPUの機械語(Javaバイトコード)に変換するようになっています.

クラスファイル(〜.class)には,Javaバイトコードが格納されています.

Javaバイトコードは直接CPUが実行できないので,Javaバイトコードを解釈・実行するためのプログラム(JavaVM, Java Virtual Machine)を使って実行するようになっています.javaコマンドにJavaVM が入っていると考えてください.

Javaプログラムの初歩の初歩

コメント

// (スラッシュ2つ)の後にはコメント(注釈)を書くことができます.

Javaコンパイラは // を見つけると,行末まで無視します.

プログラムが複雑になってくると,自分で書いたプログラムでも数日経つと何が書いてあるのか理解できなくなる場合があります.このためにコメントを書いてプログラムをわかりやすくします.

よいコメントを書くというのも重要な技術です.

Javaのコメントには // 以外にもう一つ /* ... */ というものもあります.// は行末まででしたが,/* を書くと,*/ が見つかるまでコメントになります./* と */ は同じ行にある必要はありません.ですから,

/*
 * Java言語の例
 */
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

のようにコメントを書くこともできます.

特に,プログラムの一部を動かしたくないときに,そこを /* と */ で囲ってあげれば,そこはコメントになるので実行されなくなります.覚えておきましょう.

Javaプログラムのファイル名の規則

Javaプログラムは,class の後の名前(クラス名, ここでは Hello) に ".java" をつけたものをファイル名にするという約束があります.今日の例では,class Hello だったので,Hello.java というファイルにセーブしました.(class の意味などについては後日やります.)

クラス名は英字で始まり,その後に英字か数字だけが並んだものでないといけません.漢字等は使わないで下さい.

// この Java プログラムは Hello.java に格納しないといけない
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}
  

課題1-1 (初めてのJava)

  1. Hello.java を変更して,Konnnichiwa.java を作成せよ.
    表示するメッセージも 「こんにちわ」に変更せよ.

  2. 数行のメッセージ(内容は何でも良い)を表示するように変更せよ.数行のメッセージを表示するには,System.out.println(...);の行を沢山書けば良い.

  3. System.out.println を System.out.print に変更して,結果がどうなったかを報告せよ.

以下をテキストで記述し,提出してください.

次の授業までに,コマンドラインとXEmacsに慣れておいて下さい.