プログラミング言語入門.

Slides:



Advertisements
Similar presentations
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Advertisements

6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
JavaScript プログラミング入門 2006/11/10 神津.
プログラミング言語としてのR 情報知能学科 白井 英俊.
FORTRAN 科学技術計算用 数値演算精度を重視したシステム K=0 DO 10 I=0,N,1 K=K+I 10 CONTINUE
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
基礎プログラミングおよび演習 第9回
プログラミング言語論 第1回 情報工学科 篠埜 功.
プログラミング言語論 第1回 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
プログラミング論 II 電卓,逆ポーランド記法電卓
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
プログラムはなぜ動くのか.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
プログラミング言語論 第2回 情報工学科 篠埜 功.
プログラミング言語入門 手続き型言語としてのJava
1.コンピュータと情報処理 p.18 第1章第1節 2.コンピュータの動作のしくみ CPUと論理回路
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
コンパイラ 2012年11月15日
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
動的データ依存関係解析を用いた Javaプログラムスライス手法
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
アルゴリズムとデータ構造 2011年7月8日課題の復習
C言語 はじめに 2016年 吉田研究室.
独習Java ・ 5.7  静的変数と静的メソッド ・ 5.8  ローカル変数と変数のスコープ  11月20日    小笠原 一恵.
JAVAバイトコードにおける データ依存解析手法の提案と実装
コンピュータアーキテクチャ 第 2 回.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
コンピュータアーキテクチャ 第 2 回.
アルゴリズムとデータ構造1 2009年6月15日
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラミング言語論 第2回 篠埜 功.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第6回放送授業.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
プログラミング 4 文字列.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
情報処理Ⅱ 2005年11月25日(金).
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
1.2 言語処理の諸観点 (1)言語処理の利用分野
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

プログラミング言語入門

プログラミング言語入門 機械語 アセンブリ言語 高級言語 仮想機械 手続き型 関数型 オブジェクト指向

機械語(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) オブジェクトとは一連の関連するデータを集めたもの。 例えば、学生を表すオブジェクトは、名前、所属学部、学生証番号、学年、履修科目などからなる。 オブジェクトに属するデータをフィールド(field)という。 クラス(class)によってオブジェクトの形式を定義。 学生オブジェクトのクラス クラスには、フィールドだけではなく、そのクラスに属するオブジェクトを操作するための手続きを定義。 メソッド(method)という。 継承(inheritance)の機能により、既存のクラスをもとにして新しいクラスを定義することができる。

オブジェクト オブジェクト: 意味的なまとまりのあるデータの単位. メソッド: オブジェクトに対して可能な操作 単純なもの: 整数,文字列など 複雑なもの: 有理数,スタック,リストなど メソッド: オブジェクトに対して可能な操作 整数に対する加算,文字列に対する置換 スタックに対するpush, pop クラス: 同じ種類のオブジェクトを定義する単位.適用可能なメソッドはクラスで定まる.

クラス定義 class BaseballPlayer attr_accessor :team, :position, :bat_order Ruby クラス定義 class BaseballPlayer attr_accessor :team, :position, :bat_order def initialize(t,p,bo) @team = t @position = p @bat_order = bo end ichiro = BaseballPlayer.new("Mariners", "right field", 1)

スタックの定義 Ruby class Stack def initialize(size) # newのときの初期化 @data = Array.new(size) @pos = -1 # @posがスタックのトップを表す.最初はボトムを指す -1. end def push(obj) # objがプッシュされるデータ @pos += 1 # @pos = @pos + 1 と同じ意味 @data[@pos] = obj # 前頁の図では上のほうが番地が大きい def pop @pos -= 1 # 先にトップへのポインタを減らす @data[@pos + 1] # ∵ 最後の式が値となるため def empty?() @pos == -1 end end この定義の後に 試してみよう s = Stack.new(100) s.push :abc s.push :def p s.pop

スタックの定義 Ruby class Stack attr_accessor :pos def initialize(size) # newのときの初期化 @data = Array.new(size) @pos = -1 # @posがスタックのトップを表す.最初はボトムを指す -1. end def push(obj) # objがプッシュされるデータ @pos += 1 # @pos = @pos + 1 と同じ意味 @data[@pos] = obj # 前頁の図では上のほうが番地が大きい def pop @pos -= 1 # 先にトップへのポインタを減らす @data[@pos + 1] # ∵ 最後の式が値となるため def empty?() @pos == -1 end end

色々な変数 class BaseballPlayer attr_accessor :team, :position, :bat_order Ruby 色々な変数 BaseballPlayerはクラス class BaseballPlayer attr_accessor :team, :position, :bat_order def initialize(t,p,bo) @team = t @position = p @bat_order = bo end ichiro = BaseballPlayer.new("Mariners", "right field", 1) これも変数 これも変数 ichiroは変数

変数の有効範囲 局所変数: 宣言された場所の含まれる範囲内でのみ有効. 範囲: 通常はメソッド定義の初めから終わり より小さい単位はブロック より大きい単位はクラス/モジュール定義の初めから終わり インスタンス変数: 1つのオブジェクト内で有効.Rubyでは変数名の語頭に@をおく規約 クラス変数:1つのクラス内で有効.Rubyでは変数名の語頭に@@をおく規約 大域変数: プログラム全体で有効.Rubyでは変数名の語頭に$をおく規約