230 likes | 483 Views
プログラミング言語論. 理工学部 情報システム工学科 新田直也. 講義概要. 私の研究室: 13 号館 2 階 (13-206) 講義資料について : http://www.center.konan-u.ac.jp/~n-nitta/ 参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」 , 技術評論社 成績評価 : 主に試験 (1 回 ) ,演習,レポートで評価. 講義計画. 第 1 回 (4/6) プログラミング言語の種類と歴史 第 2 回 (4/13) 変数と型 第 3 回 (4/20) 式と評価
E N D
プログラミング言語論 理工学部 情報システム工学科 新田直也
講義概要 • 私の研究室: • 13号館2階(13-206) • 講義資料について: • http://www.center.konan-u.ac.jp/~n-nitta/ • 参考図書:河西朝雄:「原理がわかる プログラムの法則」, 技術評論社 • 成績評価: • 主に試験(1回),演習,レポートで評価
講義計画 第1回 (4/6) プログラミング言語の種類と歴史 第2回 (4/13) 変数と型 第3回 (4/20) 式と評価 第4回 (4/27) 制御構造(ここらへんでレポート?) 第5回 (5/11) 配列 第6回 (5/18) 手続き呼出し 第7回 (5/25) 記憶クラス 第8回 (6/1) 演習 第9回 (6/8) プリプロセッサ 第10回 (6/15) 分割コンパイル 第11回 (6/22) オブジェクト指向言語(1) 第12回 (6/29) オブジェクト指向言語(2) 第13回 (7/6) オブジェクト指向言語(3) 第14回 (7/13) プログラミング環境 第15回 (7/20) 試験
ハードウェアとソフトウェア • ソフトウェアがなければコンピュータは動かない.「コンピュータ,ソフトがなければただの箱」 • ソフトウェアの例: • OS(Windows, Mac, UNIX…) • アプリケーションソフト(Netscape,Word,メーラー…) • 組み込みソフト(携帯電話,DVDプレーヤ,車,ロケット…) • ソフトウェアは誰かが作っている. • 皆さんも作ることができる(プログラミング).
プログラミング言語 • プログラム:コンピュータへの作業指示書(命令列). • プログラミング言語: • 作業指示書で用いる言語. • 意味が厳密に定められている.→解釈にあいまい性がない. • コンピュータが自動で実行可能. プログラム
プログラミング言語の種類 • プログラミング言語の数は,おそらく100以上. • 用途の違い. • 技術の進歩. • 趣味の違い. • プログラミング言語の分類. • 低級言語と高級言語 • 手続き型言語と宣言型言語 • コンパイラとインタプリタ(プログラムの処理方式の分類)
低級言語と高級言語 • 低級言語(低水準言語): • コンピュータ(CPU)を直接操作できる言語. • そのコンピュータでできることはすべて指示できる. • 細かい内容までいちいち指示する必要. • ハードウェア毎に異なる. • 例) 機械語,アセンブラ • 高級言語(高水準言語): • より自然言語に近い(人間にとって理解し易い). • 最終的に機械語に翻訳される. • 例) Basic, C, Java…
機械語とアセンブラ • 機械語は,数字(命令コード)の列. • アセンブラは,数字の列を単に見易くしたもの(ニーモニック).機械語の命令とアセンブラの命令は1対1に対応する. 3E 00 CD 3C 57 32 7E A0 C3 55 39 機械語 アセンブラ 3E 00 CD 3C 57 32 7E A0 C3 39 55 LD A, 00h CALL 573Ch LD A, [A07Eh] JP 5539h
高級言語の誕生 • FORTRAN(1957年) • 科学技術計算用 • ALGOL(1958年) • アルゴリズム用 • COBOL(1959年) • 事務処理用 • Lisp(1962年) • リスト処理用 手続き型言語 関数型(宣言型)言語
高級言語の発展 • BASIC(J. ケムニー & T. カーツ, 1964年) • 初心者向き会話型言語 • 構造化プログラミング(E.W.Dijkstra) • 構造化BASIC • C (D.M.リッチー, 1972年) • Visual Basic(1991年) • 人工知能(論理型言語) • PROLOG(1972年) • オブジェクト指向 • C++(1983年) • Java(SUN, 1995年)
手続き型言語と宣言型言語 • 手続き型言語 • 処理の手順を与える. • 現在の主流. • コンピュータは与えられた手順通りに,処理を実行. • プログラムの動作が予測しやすい反面,細かい指示をいちいち記述する必要がある. • 宣言型言語 • 必要な知識と,処理の目的を与える. • 特に,研究者の間で広まっている. • コンピュータは与えられた目的を達成するように,推論しながら処理を実行. • プログラムの動作が予測しにくく,細かい処理を記述しにくい.
手続き型と宣言型の記述例 • 階乗を計算する関数 fact <手続き型> int fact(int x) { int y = 1; while (x > 0) { y = y * x; x--; } return y; } <宣言型(関数型)> fact(x) == if x > 0 then fact(x – 1) * x else 1
構造化プログラミング • E.W.Dijkstraが提唱.どんなプログラムも go to 文を使わずに書ける(構造化定理). • 構造化定理:任意のプログラムは,連接,判断(if文),前判定反復(while文)を組み合わせて記述することができる. int s = 0; start: s++; if (s > 100) goto fin; goto start; fin:; goto文を 取ると… int s = 0; while (s <= 100) { s++; }
オブジェクト指向プログラミング • 発祥は定かではない. • SIMULA 67 (1967年) • SmallTalk (1972年) • 現在の主流である. • C++ (1983年) • Visual C++ (1992年) • Java (1995年) • データ構造と手続きをクラスとしてまとめて記述する. • プログラムの可読性の向上. • プログラムの再利用性の向上. • プログラムのモジュラリティの向上.
プログラムの処理方式 • プログラムはテキストファイルで書く(ソースコード). • テキストエディタで書いてもよいが,専用のエディタの方が便利. • ソースコードを処理する方式には以下のものがある. • コンパイラ方式: • ソースコードを機械語に変換.(高速) • インタプリタ方式: • ソースコードを解釈しながら実行.(低速) • 中間コード方式: • コンパイラとインタプリタの中間.Javaなどで採用.(中速) • 処理方式がわからないとプログラミング言語は使えない!!
プログラム実行 のための準備 コンパイラとインタプリタ • コンパイラはソースコードから機械語への変換プログラム. • インタプリタはソースコードの解釈と実行を同時に行うプログラム. コンパイラ & リンカ ソースコードA 実行プログラムA 実行プログラムA 出力 入力 実行 インタプリタ ソースコードB 解釈&実行
中間コード方式 • 機械語は,機種に依存する.(Windowsのプログラムは,Macでは動かない) • いっぽう,インタプリタ方式は実行速度が遅い. • 機種に依存しない部分だけを先にコンパイルする. 中間コードA コンパイラ ソースコードA 出力 入力 中間コードA インタプリタ 解釈&実行 機種が違っても良い
今日のまとめ • プログラミング言語の種類 低級言語 機械語,アセンブラ 非オブジェクト指向言語 BASIC,C 手続き型言語 オブジェクト指向言語 C++,Java 高級言語 関数型言語 Lisp, Scheme, ML 宣言型言語 論理型言語 Prolog
本日のまとめ • プログラミング言語の種類 低級言語 機械語,アセンブラ 非オブジェクト指向言語 BASIC,C 手続き型言語 オブジェクト指向言語 C++,Java 高級言語 関数型言語 Lisp, Scheme, ML 宣言型言語 論理型言語 Prolog