比較プログラム言語論

Download Report

Transcript 比較プログラム言語論

The オブジェクト指向
神戸大学 宇宙物理学研究室
M2 大原 啓(けい)
M2 勝野 啓(あきら)
目次
1. プログラミング言語発展の歴史
イ)プログラミング言語発展の歴史(概観)
ロ)プログラムの基本構造
ハ)構造化プログラミング
2. オブジェクト指向
い) オブジェクト指向とは
ろ) オブジェクト指向言語の特色
プログラミング言語発展の歴史(概観)
時間
言語以前
低水準言語
機械語
アセンブリ言語
高水準言語
手続き型言語
FORTRAN(科学技術計算)
COBOL(事務処理)
ALGOL
BASIC(初心者向け)
非手続き型言語
Lisp(人工知能)
PL/1
PASCAL Ada
C(システム記述)
オブジェクト指向
言語
Visual Basic
Objective C
Object Pascal
C++
Java
Prolog
C#
Smalltalk(Object指向の基礎)
スクリプト言語
Perl
Ruby(純Object指向)
Python
PHP(web)
FORTRANの歴史
• 1954年 IBM社バッカス(Backus)らにより開発開始:
ソフトウェア開発のコストが急増
→使いやすい高水準プログラミング言語の必要性
• 1957年 IBM社の汎用大型コンピュータIBM704のプログラム
処理言語として実装
• 当初はIBM Mathematical FORmula TRANslating System と
命名 →”FORTRAN”
• 科学技術計算に適している。
発表後、FORTRANは進化し続けている。
(I→II→III→IV→66→77→90→95→2003→2008)
プログラム(アルゴリズム)の基本構造
連接
分岐
繰り返し
IF
処理A
条件
GOTO
処理B
処理C
IF
No
条件
Yes GOTO
Yes
処理A
No
処理B
処理A
GOTO
処理A,B,Cを
順に処理
条件が成立すれば処
理A、そうでなければ
処理Bを実行
条件が成立している間は、
処理Aを繰り返し実行
~70年代:『 IF 』 + 『 GOTO 』の世界
GOTO文
2.処理Bの前にCが必要に
→処理Cを挿入
1.処理A,Bの実行
処理A
処理A
処理C
処理B
GOTO文を用いると・・・
処理A
処理B
当時の編集
環境では手
間がかかる。
3.完成
処理A
処理C
処理B
作成時の順番を維持できる→(当
時としては)開発効率が上がる。
処理B
処理C
しかし、読みにくい。→ミスを誘発する。
処理の順番通りに記述した方が読みや
すい。
スパゲッティプログラム
例:BASIC
10
20
30
40
50
60
70
80
90
100
110
120
130
INPUT “input=”, S
GOTO 50
PRINT “answer =”, A
END
A=0
IF S >= 10 THEN 100
IF S < 5 THEN 130
A=1
GOTO 130
A=2
IF S > 14 THEN 130
A=3
GOTO 30
‘ユーザーが S に値を入れる
‘’50 行へ飛ぶ
‘結果 A を表示する
‘プログラム終了
読みにくい…
‘ Sが 10 以上なら 100 行へジャンプ
S
A
~4
0
5~9
1
10 ~ 14
2
15 ~
3
ダイクストラの主張
大規模なプログラムを効率よく記述し,プログラム設計上のミスが
起こりづらいようにするためにはどうすればよいか?
• 構造化定理:1つの入り口と1つの出口を持つような
アルゴリズムは、「連接」、「分岐」、「繰り返し」の基
本構造を(処理の順に)つなげることで記述できる。
• あらゆる処理(アルゴリズム)はGOTO文なしに記述
可能。
→ 1968年 Dijkstraが主張。
→構造化プログラミング運動の始まり。
分かりやすいプログラムを!
構造化プログラミングのメリット
• 処理の順番に記述されるので、プログラムが
読みやすい。
• フローチャートによるプログラム設計が可能
• バグの少ないプログラムの開発が可能
• 構造化により、無駄な処理が少なくなる。
プログラム開発の効率が向上する。
スパゲッティプログラムの構造化
スパゲッティプログラム
10
20
30
40
50
60
70
80
90
100
110
120
130
INPUT “input=”, S
GOTO 50
PRINT “answer =”, A
END
A=0
IF S >= 10 THEN 100
IF S < 5 THEN 130
A=1
GOTO 130
A=2
IF S > 14 THEN 130
A=3
GOTO 30
構造化プログラム
処
理
の
順
に
記
述
10
20
30
40
50
60
70
80
90
100
110
120
130
INPUT “input=”, S
IF S < 5 THEN A = 0
IF S >= 5 AND S < 10 THEN A = 1
IF S >= 10 AND S < 15 THEN A = 2
IF S >= 15 THEN A = 3
PRINT “answer =”, A
END
S
A
~4
0
5~9
1
10 ~ 14
2
15 ~
3
プログラムのモジュール化
• 構造化プログラミング
→プログラムを,基本構造(連接・分岐・反復)を(処理の
順に)つなげて表現する。
• 幾つかの基本構造→ひとまとまりの処理→モジュール
サブルーチン(FORTRAN),関数(C言語),メソッド(Java),etc
*プログラムの基本構造は、モジュールを(処理
の順に)つなげて表現できる
*個々の処理の詳細はモジュール内部で記述
構造化プログラミングの最終的な主張。
構造化プログラミングの工程
1. 要求される処理を幾つかの処理(モジュール)に分割
2. モジュールの命名
3. モジュールを適切な順に配置
4. 各モジュールの処理内容の記述
全体
トップダウン的思考が必要!
部分
(もちろんボトムアップ的思考も大切)
読み手・書き手からみた構造化プログラミング
• 「IF+GO TO」文の世界
→ 思いつくままに記述できる→ 書きやすい
• しかし、後から見ると読みにくい→ 開発効率に限界
一方、構造化プログラミングの世界では・・・
• 基本構造,モジュールの組み合わせで(処理順に)記述する
→ 記述する際にプログラムの全体構造を把握しておく必要
がある
→ 慣れるまで訓練(教育)が必要
• 出来上がったプログラムは読みやすい→ 開発効率は上が
る。
書きやすさから読みやすさへ
ソフトウェア危機
• 構造化プログラミング→ソフトウェアの生産性向上
• しかし、既存のソフトウェアの再利用性については十分
な向上が得られなかった。
• ソフトウェアの需要増に、ソフトウェアの生産が追いつか
ない→ソフトウェア危機
◎より効率の良い、プログラム開発形態が必要
→オブジェクト志向プログラミングが注目される。
プログラムの拡張の容易さ、再利用性の向上がキーポイント!
オブジェクト指向言語でどのように改善されるか?
まとめ(プログラミング言語発展の歴史)
• 現在のプログラミング言語の主流
→オブジェクト指向言語( java, C++, Visual
Basic…)
• 『 IF + GOTO 』の世界から『構造化プログラミン
グ』の世界へ
• 構造化プログラミング…プログラムを,基本構
造(連接・分岐・反復)を(処理の順に)つなげ
て表現する。
2.オブジェクト指向
•1 オブジェクト指向とは
•2 オブジェクト指向言語の特色
1.オブジェクト指向とは
•オブジェクト…物、目的、対象
•オブジェクト指向でのオブジェクト
…自身の状態に関する情報と、
自身に対する操作を有するもの
例
人間
状態:性別、身長、体重、使用言語 等
操作:歩く、走る、食べる、寝る 等々
オブジェクトのなかみ
•オブジェクト中の状態(データ)…プロパティ
•
操作
…メソッド
人間クラス
性別
身
長
町民A
プロパティ
寝る
食べる
メソッド
男
175cm
町民B
女
160cm
寝る
寝る
食べる
食べる
クラス:個々のオブジェクトと同じプロパティとメソッドの定義を持つ
オブジェクト指向的考え
•ある目的のためのオブジェクトがあれば…
そのオブジェクトのメソッドを
操作することで処理を実現
例: ITPASS で忘年会を行う
オブジェクト:青田
メソッド:忘年会
男
日本人
寝る
食べる
歩く
忘年会の企画を行う
青田オブジェクト
オブジェクト指向
プログラミング言語
• 「どのような部品(オブジェクト)を
組み合わせてプログラムを構成するか」
ということを考えて
プログラムの開発を行う言語
• プログラムの再利用性、見通しのよさが高い
⇒大きなプログラムを共同で開発するときに便利
• 記述には手間がかかる
オブジェクト指向言語の特色
• オブジェクト指向プログラミングの構成要件
・カプセル化
・多態性
・継承
• オブジェクト指向の様式
・クラスベース方式
・プロトタイプベース方式
カプセル化
• プログラムコードとデータを一体化して外部の
干渉や誤用から両者を保護する仕組み
• 例:色を表すオブジェクト
赤
緑
青
赤
要求された色を出力す
る
赤
カプセル化
黄
青
要求された色を出力す
る
緑
青
要求された色を出力す
る
内部表現を外部表現にして公開
非公開
多態性・継承
● 多態性
プログラミング言語の各要素について
それらが複数の型に属することを許す性質
●継承
1つのオブジェクトが他のオブジェクトの
特色を獲得するプロセスのこと
オブジェクト指向の特色
例:長方形オブジェクト
プロパティ : 縦、横の値
メソッド :面積を求める
縦:10
縦:
横:
長方形クラス
面積: 縦 × 横
横:15
面積: 縦 × 横
長方形オブジェクト
プロパティの値によって
様々なオブジェクトがある
縦:10
横:15
長方形A
インスタンス:個々に異なるプロパティの値だけ持つもの
縦:8
横:13
長方形B
長方形
オブジェクト
継承の例
○メソッドの継承
長方形A
縦:10
長方形クラス
横:15
面積
150
面積: 縦 × 横
○クラスの継承
正方形A
面積
縦 = 10
縦:
横:
面積: 縦 × 横
正方形クラス
横 = 縦
長方形クラス
縦:
横:
面積: 縦 × 横
100
サブクラス
新しくプロパティを追加
スーパークラス
多態性 の例
図形クラス
縦:
横:
デフォルトメソッド
定義の改良
メソッドの上書き
図形クラス
長方形クラス
面積: 縦 × 横
三角形クラス
面積:
縦 × 横 ÷2
縦:
面積: 縦 × 横
長方形クラス
同じ「面積」というメッセージに対して
振る舞いが異なる
横:
三角形クラス
面積:
縦 × 横 ÷2
スーパ擬似変数
図形クラス
縦:
横:
面積: 縦 × 横
長方形クラス
図形クラス
縦:
横:
面積: 縦 × 横
三角形クラス
面積:
縦 × 横 ÷2
長方形クラス
三角形クラス
面積:
super.面積 ÷2
重複を排除してプログラムの拡張を効率的に
まとめ
•
オブジェクト指向プログラミングは
オブジェクトを組み合わせて
プログラミングを行う
•
java,C++等のクラスベース方式では
クラスをもとにしてオブジェクトを作る
•
オブジェクト指向言語の備えている共通概念はカ
プセル化、多態性、継承
参考文献
• 独習 C++ 改訂版
ハーバート・シルト著 翔泳社
• わかりやすいJava 入門編
川場 隆 著 秀和システム
• 札幌学院大 森田彦先生の講義資料
su10.sgu.ac.jp/~morita/Seminar/13thStudent/ObjectOriented_2.ppt
• http://ja.wikipedia.org/wiki/オブジェクト指向
• みるみるプログラミングがわかる本 第3版
掌田 津耶乃 著 秀和システム
• まつもとゆきひろのプログラミング言語論
http://itpro.nikkeibp.co.jp