プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.

Slides:



Advertisements
Similar presentations
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング言語としてのR 情報知能学科 白井 英俊.
プログラミング基礎I(再) 山元進.
第13回構造体.
数値計算及び実習 第3回 プログラミングの基礎(1).
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向言語論 知能情報学部 新田直也.
プログラミング言語論 プログラミング言語の 特徴と分類 水野嘉明
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第20章 Flyweight ~同じものを共有して無駄をなくす~
C#とC++とオブジェクト指向 上甲 健史.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
関数の定義.
プログラミング言語入門.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向プログラミングと開発環境
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
18. Case Study : Imperative Objects
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
情報処理Ⅱ 第8回:2003年12月9日(火).
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何

参考書 各パラダイムごとの解説は多い。ここでは複数のパラダイムをまとめたもののみを挙げる。 新しいプログラミングパラダイム 井田哲雄・田中二郎 編、共立出版(1989) 続新しいプログラミングパラダイム 井田哲雄編、共立出版(1990)

パラダイム変化の流れ 手続き型(最初の方法, ’70) 論理型、関数型(’70後半~) オブジェクト指向(’80年代) コンピュータの仕組みを記述 変数←状態 x := x+y;  /* 左辺値 */ 構造化プログラミング 命令的(imperative) 論理型、関数型(’70後半~) 宣言的(declarative) オブジェクト指向(’80年代) 機械モデルから抽象的で人間中心のモデルへ 演算器 記憶

手続きプログラミングの例 任意個数の整数の和を求めるPascalプログラム procedure sum_of_sequence ; var i, s : integer ; begin s := 0 ; while i < > -9999 do readline(i) ; s := s+i ; end ; write(s) ;

手続き型+構造化プログラミングの弱点 背景となる計算モデル(テューリングマシン) は動作(意味)を把握しにくい。 プログラム自体を対象にすること(メタプログラミング)ができない。 プログラムの性質が意味対象と乖離 作成あるいは変更のプロセスを軽視

関数型プログラミング sum_of_sequence [ ] = 0 計算を関数でモデル化(Church λ-Calculus) リスト等、簡単なデータ構造(プログラム自身を格納する) 数学的帰納法で再帰プログラム リストで与えられた整数の和をもとめるMLプログラム sum_of_sequence [ ] = 0 sum_of_sequence (a : s) = a + sum_of_sequence s 呼び出し sum_of_sequence [1,3,7] ⇒11 (戻り値)

関数型プログラミングの利点 ;データとコード (+ 1 3) ;==>4 '(+ 1 3) ;==>(+ 1 3) ;データとしての関数 (lambda (x) (* x x)) ;==>(lambda (x) (* x x)) (funcall (lambda (x) (* x x)) 3) ;==>9 (setq two-times '(lambda (x) (* x x))) (funcall two-times 3) (fset 'ftwo-times two-times) (ftwo-times 3) ;データとコード (+ 1 3) ;==>4 '(+ 1 3) ;==>(+ 1 3) (eval '(+ 1 3)) (eval (cons '+ '(1 3)))

論理型プログラミング 論理式がプログラム 意図する述語の否定を入力して証明(背理法) 反例が代入される。 プログラム例 sum_of_sequence([ ],0)← sum_of_sequence(a : s, n) ← sum_of_sequence(s, n1) ∧ n=a+n1 入力(クエリ)  ←sum_of_sequence([1,3,7], n) 出力 n=11

オブジェクト指向 構造化プログラミングの拡張 継承(inheritance) 隠蔽または、カプセル化(encapsulation) フィールド(内部変数) メソッド(内部関数) 継承(inheritance) 隠蔽または、カプセル化(encapsulation)

ユーザ定義クラスの演算の例 /* "Complex.java" 複素数(和と積を実装) */ public class Complex{    複素数(和と積を実装) */ public class Complex{ double real,image;//実部と虚部 //コンストラクタ:パラメタは実部と虚部 Complex(double r, double i){ real=r; image=i; } //和:パラメタの複素数に自分を加えて返す。 Complex plus(Complex w){ return new Complex(real+w.real,image+w.image); //積:パラメタの複素数に自分を掛けて返す。 Complex times(Complex w){ return new Complex(real*w.real-image*w.image, real*w.image+image*w.real); //wと成す角(wから計る) double angle(Complex w){ double ang=Math.atan2(image,real); double ang_w=Math.atan2(w.image,w.real); return ang-ang_w; } //値表示(テスト用) void print(){ System.out.println(real+"+"+image+"i"); //テスト public static void main(String[] args){ Complex z1,z2; z1=new Complex(2.3,4.7); z2=new Complex(3.0,12.8); z1.plus(z2).print(); z1.times(z2).print();

パラダイムの融合(’90~) CLOS (CommonLisp Object System) λ-Prolog MLのmodule CommonLispのオブジェクト指向機構(ANSI標準) λ-Prolog 論理型言語の項にλ式を含める。 MLのmodule 隠蔽:型宣言(シグニチャ) 継承:ファンクター オブジェクト生成不可

関数型とオブジェクト指向 クロージャ(CommonLisp)は関数を実行する環境ごと保持する。 (defun generate-num () (let ((n 0)) #'(lambda () (prog1 n (setq n (+ n 1)))))) (setq counter (generate-num)) (funcall counter) ;==>0 ;==>1