入出力

material-01

プログラミング

プログラミングとコンピューター

このコースは「プログラミング入門」という名前の通り、初歩的なプログラミングについて紹介していきます。最終的には、次のような「プログラム」 を作成できるようになります。

図: 最終的なプログラム (ベーシック)
図: 最終的なプログラム (スプレッドシート)
図: 最終的なプログラム (キャンバス)

プログラミングとコンピューターの関係は少しだけ複雑なので、図にして紹介します。

図: プログラミングとその周辺

コンピューター は「命令されたことを忠実に実行する」という性質を持つ機械です。1秒間に数億回以上の計算を行うこともできますが、命令がない限り何も行いません。そこでこのコンピューターに仕事をさせるために「プログラム」というコンピューターへの一連の命令をまとめたものを渡してやる必要があります。

コンピューターはそれぞれのプログラムに書かれた命令の通りに処理を行います。たとえば 携帯電話などには、「メールを送信するプログラム」や「インターネットに接続してWebサイトを表示するプログラム」などの、様々なプログラムがあらかじめ組み込まれています。携帯電話に搭載されたコンピューターはそれらのプログラムを処理し、ボタン操作などに反応して、メールを送信したりWebページを表示したり様々な動きをします。

プログラミングとはそのようなプログラムを作成するための人間の行動を表します。つまり、コンピューターを直接操作するのではなく、コンピューターを操作するためのプログラムを作成する、というのがプログラミングの役割です。別の人がコンピューターを使用する際に、そのプログラムをコンピューター上で実行すれば、プログラミングした通りにコンピューターが(大抵の場合は)動きます。

プログラミングとJava

ふだん私たちが使っている言語は日本語や英語などの「自然言語」ですが、コンピューターに命令をする場合にはコンピューターが理解できるように「マシン言語」というものを使います。しかしマシン言語は非常に複雑で、人間が読んだり書いたりするにはあまりに適していません(0と1の並びだけで書きます)。そこで、もう少し自然言語に近く人間が読み書きしやすいような言語 を作って、それを使ってプログラミングできるようにしたものが「プログラミング言語」です。

このコースでは、Javaというプログラミング言語を使ってプログラミングの基礎的な部分を紹介していきます。Javaは1995年ごろに策定されたプログラミング言語で、現在でも世界中の多くの人がJavaを使って有用なプログラムを作っています。たとえば、mixiアプリ、iアプリ、Android用アプリケーションなどはJavaを使って書けます。

Javaの他にも有用なプログラミング言語は多数存在します。たとえば、Ruby, Python, Perl, PHP,Javascript, ActionScript, C, C++, C#, Objective-C, OCaml, Haskell, Scheme, Lisp,…など枚挙にいとまがないほどです。これらはどれが一概に良いとは言えず、それぞれ利用するシーンによって変化します。たとえばJavaは大規模なシステムを構築する際に好まれる傾向があり、CやC++は小型のコンピューター向けのシステムを構築する際に好まれます。

プログラミングと情報科学

本学部でのプログラミング入門でJavaが採用されているのは、いくつか理由があります。1つ目は何よりも、Java技術者の需要が非常に高いことです。2009年の調査では、求人が最も多かった技術者はJava技術者で、次に多かったのはC言語を使える技術者でした。1, 2位と3位以降では求人数が倍以上異なります。

2つ目はJavaが「汎用的なプログラミング言語」であるという点です。プログラミング言語は用途によって向き不向きがあるというのは前述通りですが、Javaは視覚効果を利用した使いやすいプログラムや、画像処理、音声処理、ネットワークプログラミング、並列分散処理、データ解析、など非常に多くの場面で利用できます。本学部ではコンピューターを様々な用途で使うことが多いため、それらの道具としてJavaを使用する授業が多数あります。後続の様々な専門科目では、Javaの基礎を学んでいるものとして講義が進められますので、このコースで習得できるように頑張って下さい。

オリエンテーション

このコースについて

このコース全体を通しての目標は、情報科学を学ぶ上で欠かせない「プログラミング」技術の基礎を習得することです。プログラミングとは、プログラミング言語という言葉を使って、コンピューターに行わせたい作業の内容を伝える技術です。したがって、この「プログラミング言語」という新しい言葉をマスターして「コンピューターと自由に会話ができる」「思い通りに作業を指示できるようになる」ことが大きな目標です。

授業の進め方

プログラミング技術の基礎の習得は、プログラミング言語という新しい言語を習得することでもあります。したがって、必要となる学習の方法は、新しい外国語を学習していくプロセスに似ています。そこで、各講義は、「説明」「演習」「課題」に分かれます。

各講義の前半では主に、新しく学ぶプログラムの書き方やそれらの機能など、知識の「説明」をします。また、そこで学んだことを利用して、実際にプログラミングを「演習」として行ってもらいます。プログラミングは、プログラム(文章)を書くことでもありますが、「このようなプログラムの書き方で、コンピューターがこのように動いてくれる」ということを体感します。

各講義の後半では、「課題」として出題されるプログラムを実際に作ってもらうことで、プログラミング技術の体得を目指します。課題によっては、レポートとして提出してもらうものもあります。なお、課題はいくつかのテーマごとにコースに分かれて用意されているので、各自興味を持ったテーマを選択し取り組むことができます。プログラミングを上達する唯一とも言える方法は、とにかくプログラムをたくさん読んだり書いたりすることです。毎回の演習や課題では、まず与えられた文章やプログラムをよく読んで自分で考え、手を動かして自分でプログラムを書くようにして下さい。それを続けるうちに、プログラミングは自然に身につきますし、その手順を踏まずにプログラミングが身に付くことはありません。

プログラム課題への取り組み方

このコースでは3種類のプログラムに関する問題を出題します。

  • 例題
  • 練習問題
  • 課題

最初の「例題」は、新しい文法などを「説明」する際のプログラムです。プログラム全体を提示するので、必ず書写して実際に動作を確認してください。

次の「練習問題」は、説明の途中で出題する例題を変形したプログラムです。基本的には「説明」の途中にある「演習」で作成してください。プログラム全体を提示することはしませんが、直前の例題を参考にすれば問題なく作成できるはずです。

最後の「課題」は、毎回の内容を組み合わせたプログラムです。持ち帰って作成し、提出してください。また、作成したプログラムは各自で保管しておくと今後の学習の役に立ちます。

評価基準

各クラス共通の期末試験を行い、修得度を評価します。プログラミング言語Javaの文法や機能の理解度、プログラムの読解力や作成力を総合的に判定します。

Eclipseを利用したプログラミング

このコースでは、Eclipseという統合開発環境(Integrated Development Environment, IDE)を使ってプログラミングをします。プログラムを作成することを「開発する」とも呼び、このEclipseはJavaを使ってプログラミングをする際に便利な機能が多数組み込まれています。

Eclipseの起動

まず、Eclipseを起動しましょう。[Windows] + [Q] キーで「アプリ」を表示します。

図: Windows – アプリ一覧

[検索] 欄に「Eclipse 4.3.x」と入力し「Eclipse 4.3.x」を選択します。

図: Windows – Eclipseの選択

しばらくすると、下図のようなスプラッシュウィンドウが表示されます。これは起動までに時間がかかるアプリケーションの状態を表示するためのものです。

図] Eclipse – スプラッシュウィンドウ

しばらくするとEclipseが起動し、「ようこそ」という画面が表示されます。ここではEclipseの様々な機能について学ぶことができますが、今回はタブの右側に配置された×ボタンを押してこの画面を終了させます。

図: Eclipse – ようこそ

ここまでがEclipseの起動方法です。次回以降は「ようこそ」画面が表示されず、もう少し素早く起動します。

Eclipseの設定

Eclipseが起動したら、各種設定を行います。

下図のように、メニューバーから「ウィンドウ」をクリックし、そこからさらに「パースペクティブを開く」「Java」の順に選択して下さい。

図: Eclipse – 準備

次に、下図のように、メニューバーから「ウィンドウ」をクリックし、そこからさらに「設定」と選択して下さい。

図: Eclipse – 設定メニュー

すると、設定ウィザードが開きますので、ウィンドウの左側から「一般」「エディター」「テキスト・エディター」の順に選択して下さい。

図: Eclipse – テキスト・エディターの設定

「テキスト・エディター」の設定画面で、下図のように勧めて下さい

  • (a) 「行番号の表示」にチェックを入れる
  • (b) 上記を確認して「OK」ボタンをクリック
図: Eclipse – 行番号の表示設定

なお、環境によっては日本語のテキストに関する設定がこのコースと異なっている場合があります。設定ウィザードを再度表示し、「一般」「ワークスペース」を表示して「テキスト・ファイル・エンコード」という項目が「デフォルト(U) (utf-8)」になっていることを確認して下さい。もし「utf-8」以外の値が設定されている場合、「その他」を選択し、その右のドロップダウンボックスから「UTF-8」を選択して最後に「OK」ボタンをクリックします。

図: Eclipse – ワークスペースエンコーディングの設定

以上の設定はEclipseを終了させても残りますので、次回以降はそのままEclipseを使用して大丈夫です。自宅学習で別のコンピューターを利用する場合には、同じ手順で設定を変更して下さい。

プロジェクトの作成

次に、この授業でプログラムを書く際に使用する「プロジェクト」というものを作成します。下図のように、メニューバーから「ファイル」をクリックし、そこからさらに「新規」「Javaプロジェクト」と選択して下さい。

図: Eclipse – プロジェクトの新規作成

すると、下図のような「新規Javaプロジェクト」というウィザードが表示されます。次の手順で進めて下さい。

  • (a) 「プロジェクト名」のところに「java1」と入力
  • (b) 「プロジェクト・レイアウト」が「ソースおよびクラス・ファイルのフォルダーを個別に作成」になっていることを確認 (なっていなければ手動で選択して下さい)
  • (c) 上記を確認して、「完了」ボタンをクリック
図: Eclipse – 新規Javaプロジェクトウィザード

以上の手順が完了すると、Eclipse上に「java1」という名前のプロジェクトが作成されます。下図のように、画面左側に「java1」という項目が増えていれば成功です。このコースでは作成したプロジェクトを使い続けますので、この作業は今回だけしか行いません。自宅学習で別のコンピューターを利用する場合には、同じ手順でプロジェクトを新規に作成して下さい。

図: Eclipse – プロジェクト作成後

クラスの作成

次に、プログラムの中身 を書くための「クラス」というものを作成します。先ほど作成したプロジェクトを右クリックしてコンテキストメニューを表示し、「新規」「クラス」の順に選択して下さい。

図: Eclipse – クラスの新規作成

すると、下図のような「新規Javaクラス」というウィザードが表示されます。次の手順で進めて下さい。

  • (a) 「パッケージ名」のところに「j1.lesson01」と入力
  • (b) 「名前」のところに「First」と入力
  • (c) 「どのメソッド・スタブを作成しますか?」の項目のチェックをすべて外す
  • (d) 上記を確認して、「完了」ボタンをクリック
図: 新規Javaクラスウィザード

すべての入力が完了したら、ダイアログの「終了」ボタンを押して下さい。処理が正しく行えていれば、下記のような画面になるはずです。

図: Eclipse – 準備完了

ここまでのいくつかの用語を解説しておきます。授業の中でEclipseの操作を行うときにはこれらの用語を使って解説しますので、少しずつ覚えて下さい。

  • (a) メニューバー。基本的な操作はすべてここから行える
  • (b) ツールバー。メニューバーでよく使われる項目をアイコン表示している
  • (c) パッケージエクスプローラー。プロジェクトやクラスなど、作成したリソースをツリー状に表示している
  • (d) エディター領域。クラスの内容を表示、編集する領域
図: Eclipse – 用語

初めてのプログラム

それでは、エディター領域に表示されたFirst.javaを書き換えて初めてのプログラムを作成してみましょう(間違えてFirst.javaの画面を閉じてしまった人は、左にあるパッケージエクスプローラーからFirst.javaを探し出してダブルクリックすれば開きます)。

まず、表示されている内容を次のように書き換えて下さい。これは授業中に使うプログラムのひな型 です。

リスト: First
package j1.lesson01;

import javax.swing.JOptionPane;

public class First {

    public static void main(String[] args) {
        new First().start();
    }

    void start() {

    }
}

プログラムのひな型を作成したら、「void start() { … }」のうち、{ と } の間に命令を書いていきます。少し長いですが、void start() {}の部分を次のように書き換えて下さい。

void start() {
    String input = JOptionPane.showInputDialog("メッセージをどうぞ");
    JOptionPane.showMessageDialog(null, input);
}

これで最初のプログラムは完成です。写し間違いがないか確認したら、実際にプログラムを実行してみましょう。プログラムを実行するには、今まで書いた内容をコンピューター上に保存します。保存されるまでは、下図のようにエディター領域の上部タブ(プログラムの名前が書いてあるところ)に「*」というマークが付けられています。これは「このプログラムに変更があったが保存されていない状態」を表しています。

図: Eclipse – 変更されたプログラム

これを保存するには、ツールバーの左にあるフロッピーディスクのマークをクリックします。この他にも、メニューバーの「ファイル」から「保管」を選んだり、キーボードの「Ctrl」キーを押さえながら「S」キーを押したりしても同様の効果が得られます。

図: Eclipse – プログラムの保存

プログラムを保存すると、先ほどエディター領域の上部タブに表示されていた「*」マークは解除されます。

図: Eclipse – 保存後のプログラム

保存が完了したら、プログラムを実行してみましょう。パッケージエクスプローラーからプログラムを書いたファイル(First.java)を選択し、右クリックしてコンテキストメニューを表示させます。

図: Eclipse – プログラムのコンテキストメニュー

表示されたメニューから、「実行」「Javaアプリケーション」の順に選択し、クリックして下さい。もしここに「Javaアプリケーション」という項目が表示されていない場合は、プログラムの「public static void main…」の辺りがおかしい場合があります。再度確認して下さい。

図: Eclipse – プログラムの実行

プログラムを実行すると、下図のように「入力ダイアログ」が表示されます。ここに好きなメッセージを入力して「了解」ボタンを押します。

図: Eclipse – 入力ダイアログ

すると、下図のように「メッセージダイアログ」が表示され、先ほど入力した文字列がここに表示されます。

図: Eclipse – メッセージダイアログ

以上がEclipseを使ってプログラミングを行う手順です。以降でも同様にプログラムを作成し、実行して確認するという流れで授業を進めていきます。この流れをまとめたものが下図です。

図: プログラミングの流れ

プログラミングへの入門

入出力を行うプログラム

先ほど作成したプログラムを見ていきましょう。

リスト: First(再掲)
package j1.lesson01;

import javax.swing.JOptionPane;

public class First {

    public static void main(String[] args) {
        new First().start();
    }

    void start() {
        String input = JOptionPane.showInputDialog("メッセージをどうぞ");
        JOptionPane.showMessageDialog(null, input);
    }
}

ひな型に追加した命令の1行目は、入力ダイアログ を表示する部分です。実際にダイアログを表示している部分は「JOptionPane.showInputDialog("メッセージをどうぞ")」という部分で、それ以外の「String input = …; 」という部分では入力した文字列をコンピューター上に記憶 させています。この1行分の処理は、ダイアログに文字列を入力してOKボタンを押すと 完了します。

なお、ここに含まれている「"メッセージをどうぞ"」という部分は、入力ダイアログに表示されるメッセージの内容の前後を " と " で囲んでいます。

String input = JOptionPane.showInputDialog("メッセージをどうぞ");

追加した命令の2行目は、入力した文字列をメッセージダイアログで表示する部分です。

JOptionPane.showMessageDialog(null, input);

Javaのプログラムは基本的に上から順番に命令が処理されていきます。このため、2行目に書いたメッセージダイアログを表示する部分は、1行目に書いた入力ダイアログが表示され終わった後に処理されることになります。入力ダイアログに入力した文字列は「String input = …;」の部分でコンピューター上に記憶され、2行目ではその文字列を表示するようになっています。

このダイアログを表示する行を連続して2回書くと、「ダイアログを表示する命令」が2回処理されるようになります。書き換えてどのように動くか試してみましょう。

String input = JOptionPane.showInputDialog("メッセージをどうぞ");
JOptionPane.showMessageDialog(null, input);
JOptionPane.showMessageDialog(null, input);

なお、プログラムの先頭にある「import javax.swing.JOptionPane;」という個所は、上記の入力ダイアログとメッセージダイアログを表示するために必要なものです。試しにこれを消してみると、どうなるか観察してみましょう (観察し終わったら元に戻してあげて下さい)。

練習: 入出力を行うプログラム

利用するクラスの名前
First

先ほど作成したプログラムを変更し、入力ダイアログに入力した文字列を、メッセージダイアログで3回表示するようにしなさい。

一般的なプログラム

次のプログラムを実行するとどのような処理が行われるでしょうか。

リスト: YourName
package j1.lesson01;

import javax.swing.JOptionPane;

public class YourName {

    public static void main(String[] args) {
        new YourName().start();
    }

    void start() {
        String name = JOptionPane.showInputDialog("名前をどうぞ");
        JOptionPane.showMessageDialog(null, "名前は" + name);
    }
}

これは非常に単純なプログラムですが、世の中の多くのプログラムはこれとよく似た構造を持っています。プログラムは利用者やコンピューター、インターネット などから「入力」をデータとしてうけとり、そのデータを元に「処理」を行います。処理した結果はコンピューターの画面に表示したり、インターネット上の別のコンピューターに転送したり、様々な形で「出力」します。

図 : 一般的なプログラム

今回のプログラムでは、あなたの名前をダイアログに「入力」し、入力した名前の前に「名前は」という文字列を追加するという「処理」を行い、最後に出来上がった文字列をメッセージダイアログに「出力」しました。他にも「入力→処理→出力」の形式で表せそうなプログラムをいくつか紹介します。

種類 入力 処理 出力
今回のプログラム 名前 入力された文字列の手前に「名前は」と追加 「名前は~」と表示
Web検索エンジン 検索キーワード キーワードに関係するページを探す 検索結果 (Webページ)
音楽プレーヤー 楽曲ファイル 楽曲データを音のデジタル波形に変換 楽曲の演奏 (音)
自動改札機 切符 運賃等の計算 ゲートの開閉や、切符を切って返すなど

さて、「入力→処理→出力」ということを考えながら先ほどのプログラムを見てみましょう。void start() {…}の部分は次のようになっています。

String name = JOptionPane.showInputDialog("名前をどうぞ");
JOptionPane.showMessageDialog(null, "名前は" + name);

このうち1行目は、最初に作成したプログラムとほとんど同じ命令です。ただし、最初に作成したプログラムで「"メッセージをどうぞ"」という部分を、「"名前をどうぞ"」という内容に書換え、さらに「String input = …;」の部分を「String name = …;」としています。表示される入力ダイアログには、「名前をどうぞ」のように「"名前をどうぞ"」の部分で指定した内容が表示されています。

図: 入力ダイアログ

次の2行目も最初に作成したプログラムとほとんど同じ内容ですが、「input」の部分が「"名前は" + name」のように書き替わっています。この「"名前は"」という部分はそのまま文字列の「名前は」を表し、「name」は入力ダイアログに入力した文字列を表します。その間に + (プラス)をはさんでいますが、これは前後の文字列を連結するための命令です。今回のプログラムで「input」が出てこないのは、最初に「String name = …;」のように、「name」という名前で入力された値を記憶させていたためです。

つまり、入力ダイアログに「Alice」と入力した場合、nameは「Alice」という文字列で置き替わるため、「名前は」「Alice」という文字列を連結して「名前はAlice」という文字列がメッセージダイアログに表示されることになります。

図: 文字列の連結

この + は算数の足し算と同様に3つ以上の値(文字列)を連結する場合にも使えます。たとえば先ほどの例で「名前はAliceです」のように末尾にも文字列を追加する場合には、次のように書けます。試してみましょう

JOptionPane.showMessageDialog(null, "名前は" + name + "です");

注意すべき点として、「"名前は"」のほうは " (ダブルクウォーテーション)で囲んでいますが、「name」のほうはそのまま書いています。" と " で囲まれた文字列は書いた通り に表示されてしまうため、「"name"」と書くと「名前はname」と表示されてしまいます。

まとめると、メッセージを表示する際には次のように書きます。

JOptionPane.showMessageDialog(null, <表示したい文字列>);

また、入力ダイアログにも好きな文字列を表示させられます。

String <入力を記憶させる名前> = JOptionPane.showInputDialog(<表示したい文字列>);

練習: 一般的なプログラム

作成するクラスの名前
Greeting

入力ダイアログを表示し、その後にメッセージダイアログに「はじめまして、~さん」と表示するプログラムを書きなさい。ただし、「~」の部分には入力ダイアログに入力した文字列が表示されるようにし、さらに入力ダイアログには何をすればよいかわかりやすいメッセージを表示すること。

課題について

このコースでは、一般的なJavaを用いたプログラミング教材 (ベーシック)の他に、情報科学の題材を使った「分化教材」というものを用意しています。「ベーシック」では入力ダイアログやメッセージダイアログなどのJavaに最初から用意されている仕組みだけを使って、様々な問題にチャレンジしてもらいます。分化教材では「スプレッドシート」や「キャンバス」など、このコースのために特別に用意した仕組みを使って情報科学特有の問題に挑戦してもらうことになります。

授業は全体的にベーシックの内容を元に進めますが、課題では分化教材を使った問題に挑戦してもかまいません。学期末試験では、どの教材にも共通する内容からのみを出題します。以下、それぞれの教材の特徴を簡素にまとめたものです。

教材 特徴
ベーシック Java標準の仕組みを使い、基礎的なプログラミングについて学ぶ
スプレッドシート 表データの処理やコンピューターの仕組み について学ぶ
キャンバス 画像処理やユーザーインターフェースについて学ぶ
Webアプリケーション ネットワークやWebの仕組みについて学ぶ (途中から追加)
音声 デジタル信号処理や音声の仕組みについて学ぶ (途中から追加)

いくつかの教材については講義の途中から追加されます。初回の課題はベーシック、スプレッドシート、キャンバスのすべてに触れてもらう形で、次回以降はテーマを絞ってそれぞれの課題に挑戦してください。

まとめ

今回は初回ということで、主にコース全体の進め方やプログラミングの基本的な考え方について説明しました。プログラミングとはコンピューターを制御するプログラムを作成することで、コンピューターは作成されたプログラムに書かれた命令を元に、忠実に処理を行います。

プログラムの基本的な構造は「入力された値を処理し、結果を出力する」という「入力→処理→出力」の流れです。処理の方法は無数にありますが、みなさんが使っているプログラムもほとんどこの基本的な構造を複雑に組み合わせたものです。

今回紹介したプログラムは、この基本的な構造のうち「入力された値を(ほとんど)そのまま出力する」といった非常に単純なものでした。

リスト: First (復習)
package j1.lesson01;
import javax.swing.JOptionPane;
public class First {
    public static void main(String[] args) {
        new First().start();
    }
    void start() {
        String input = JOptionPane.showInputDialog("メッセージをどうぞ");
        JOptionPane.showMessageDialog(null, input);
    }
}

なお、今回は void start() {…}のうち{…}の部分を書き換えていくつかの命令を書きました。ここでメッセージを表示する際には次のように書きます。

JOptionPane.showMessageDialog(null, <表示したい文字列>);

また、入力ダイアログを表示するには次のように書きます。

String <入力を記憶させる名前> = JOptionPane.showInputDialog(<表示したい文字列>);

次回以降では、入力されてから出力するまでの間に、コンピューターに様々な処理をさせるプログラムの書き方を紹介していく予定です。プログラミングはこれから情報科学を学ぶ上でも非常に重要な道具となりますので、少しずつ丁寧に進めていきます。