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