プログラミング言語入門 手続き型言語としての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; } } } 演習 • これまでのプログラムを コンパイルして 実行してみよ。
© Copyright 2024 ExpyDoc