手続き型言語の紹介

Download Report

Transcript 手続き型言語の紹介

プログラミング言語入門
手続き型言語としてのJava
プログラミング言語入門
•
•
•
•
•
•
•
機械語
アセンブリ言語
高級言語
仮想機械
手続き型
関数型
オブジェクト指向
機械語(machine language)
• 計算機のCPU(central processing unit、中
央処理装置)によって直接的に実行。
• 機械語プログラムはメモリ上ではビット列に
よって表現され、CPUはビット列を機械語命
令(通常はワード)に区切って実行する。
• 機械語命令
– 命令の種類を表すopcode(operation code)
– 命令の引数を表すoperand
– 次に実行する命令に関する情報
アセンブリ言語(assembly language)
• 機械語命令におけるopcodeやoperandを人
間に理解しやすい記号で表現。
• 人間が機械語プログラムを書く場合は、アセ
ンブリ言語(assembly language)を用いて行
うのが一般的。
• アセンブラ(assembler)と呼ばれる処理系が、
アセンブリ・プログラムを機械語のプログラム
に変換。
高級言語(high-level language)
• 直接的にCPUで実行することはできない。
• 実行形態によって、大きく二つに分かれる。
• コンパイラ(compiler)
– 高級言語のプログラムを機械語に翻訳。
– プログラムの実行効率は高い。
• インタープリタ (interpreter)
– プログラムを機械語に翻訳せずに解釈実行。
– 即時にプログラムを実行することができるので、小規模な
プログラムの実行やプログラムを頻繁に改変して実行す
る状況には適している。
– スクリプト言語
• 文字列の簡単な操作とコマンドの起動などを組み合わせた処理
仮想機械(Virtual Machine)
• 実際のCPUを真似た仮想的かつ理想的な計算機
• コンパイラによっては、高級言語を仮想機械の機械
語に翻訳。
– Javaのコンパイラは、Java言語のプログラムを
JVM(Java Virtual machine)と呼ばれる仮想機械の機械
語に翻訳。
• 仮想機械の機械語プログラムは、さらに本当の機械
語に翻訳されて実行されるか、仮想機械のインター
プリタによって解釈実行される。
– Java
– 前者の場合、JVMの機械語から本当の機械語への翻訳
は、仮想機械のプログラムをJVMの処理系に読み込んだ
時点で行われる。(just-in-time compilation)
手続き型(procedural)
• 命令型(imperative)ともいう。
• 基本的な操作を組み合わせて、メモリ上に
表現されたデータを変更することにより計算
が行われる。
• ひとまとまりの処理を行うための一連の操作
をまとめたものを手続き(procedure)という。
• 手続きは、別の手続きから呼び出すことがで
きる。自分自身を呼び出すことも可能。
• プログラムは手続きの集まりとして作られる。
関数型(functional)
• 関数をプログラムの基本単位とする。
• 関数とは、与えられた入力に対して出力を返
すもので、手続き型言語の手続きのようにメ
モリ上にあるデータを変更するものではない。
• 手続き型言語においても関数という言葉は使
うが、値を返す手続きという意味であり、関数
型言語における純粋な関数とは異なる。
オブジェクト指向(object-oriented)
• 手続き型の言語を発展させ、オブジェクト(object)の
概念を取り入れたもの。
• オブジェクトとは一連の関連するデータを集めたもの。
– 例えば、学生を表すオブジェクトは、名前、所属学部、学生
証番号、学年、履修科目などからなる。
– オブジェクトに属するデータをフィールド(field)という。
• クラス(class)によってオブジェクトの形式を定義。
– 学生オブジェクトのクラス
• クラスには、フィールドだけではなく、そのクラスに属
するオブジェクトを操作するための手続きを定義。
– メソッド(method)という。
• 継承(inheritance)の機能により、既存のクラスをもと
にして新しいクラスを定義することができる。
手続き型言語としてのJava
•
•
•
•
•
•
手続き=スタティック・メソッド
コンパイルと実行
データの種類=型
制御構造
入出力など
ソーティング
手続き=スタティック・メソッド
• Javaの簡単なプログラム
class SimpleProgram {
...
}
– 適当な名前のクラス
• SimpleProgram
– クラス名に.javaを付けたファイルに格納。
• SimpleProgram.java
• この中に、手続き=スタティック・メソッド
(static method)を定義。
スタティック・メソッドの例
static int cubic(int x) {
int y;
y = x;
y = y*x;
y = y*x;
return y;
}
mainの例
public static void main(String[] args) {
int y;
y = new Integer(args[0]).intValue();
y = cubic(y);
System.out.println("Hello world.");
System.out.println(y);
}
class SimpleProgram {
static int cubic(int x) {
int y;
y = x;
y = y*x;
y = y*x;
return y;
}
public static void main(String[] args) {
int y;
y = new Integer(args[0]).intValue();
y = cubic(y);
System.out.println("Hello world.");
System.out.println(y);
}
}
コンパイルと実行
• コンパイル
% javac SimpleProgram.java
– ファイルの中の各クラスをコンパイル。
– クラスごとにクラス・ファイルが作られる。
% ls –l SimpleProgram.class
• 実行
% java SimpleProgram 7
• Eclipseの場合...
データの種類=型(type)
• とりあえず必要な型
int --- 整数
boolean --- 真偽値(trueかfalseか)
double --- 浮動少数点数
String --- 文字列
int[] --- 整数の配列
• 参照型(reference type)
– 上の中ではStringとint[]
– 変数の値として格納されたり、引数として受渡しされるの
は、データの本体への参照 (reference)であり、データ本
体そのものではない。
– newで始まる式によって明示的にデータ本体を生成。
制御構造(control structure)
• とりあえず必要な制御構造
if
for
while
do while
return
• 代入
変数 = 式;
配列の参照 = 式;
入出力など
• 出力
System.out.print(式);
System.out.println(式);
• コマンドの引数の利用
new Integer(args[0]).intValue()
– これも式
ソーティング(選択ソート)
class Sorting {
public static void main(String[] args) {
int n = args.length;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = new Integer(args[i]).intValue();
print(a, 0, n-1);
sort(a, 0, n-1);
print(a, 0, n-1);
}
static void print(int[] a, int from, int to) {
for (int i = from; i <= to; i++) {
System.out.print(a[i]);
System.out.print(" ");
}
System.out.println();
}
static void sort(int[] a, int from, int to) {
for (int i = from; i <= to; i++)
for (int j = i+1; j <= to; j++)
if (a[i] > a[j]) {
int w = a[j];
a[j] = a[i];
a[i] = w;
}
}
}
演習
• これまでのプログラムを
コンパイルして
実行してみよ。