オブジェクト指向言語論 第八回 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Generic programming と STL
オブジェクト指向プログラミング(4) 静的分析(2)
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとデータ構造 2011年6月13日
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
Javaとオブジェクト指向プログラミングの基礎
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
~手続き指向からオブジェクト指向へ[Ⅱ]~
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向プログラミング クラス 継承
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造1 2009年6月15日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
プログラミング 2 静的変数.
Presentation transcript:

オブジェクト指向言語論 第八回 知能情報学部 新田直也

オブジェクト指向の歴史 実は起源は明らかではない. チューリング賞: 現在の主流 Simula67: クリステン・ニガード, オルヨハン・ダール SmallTalk72: アラン・ケイ チューリング賞: 2001年 クリステン・ニガード, オルヨハン・ダール 2003年 アラン・ケイ 現在の主流 C++: ビャーネ・ストロヴストルップ (1979年) Java: ジェームズ・ゴスリング, SUN (1991年)

オブジェクト指向の主要概念 オブジェクト指向を特徴付ける3つの概念: カプセル化(クラス): データとそれに関連する手続きを一体化し,他の部分から分離(隠蔽)すること.分離した部分をクラスと呼ぶ.クラスは言語中では型としての役割を持つ(抽象データ型). 継承: あらかじめ基本となる機能を(親クラスとして)定義し,その機能を引き継ぐ形で拡張機能(子クラス)を定義すること. 多態性(ポリモルフィズム): オブジェクトの種類(クラス)を知ることなくその機能を使えるようにする仕組み.(遅延束縛,動的結合)

モジュールプログラミング カプセル化はC言語でも実現されている. 情報隠蔽,関心事の分離,カプセル化.

モジュールの例 配列を用いたリストモジュール(list.c) 《list.c》 《list.h》 #include “list.h” void init_list(List *lp) { lp->num = 0; } int read_list(List *lp, int k) { return lp->v[k]; : #define MAX_LIST 1000 typedef struct LIST { int num; int v[MAX_LIST]; } List; void init_list(List *lp); int read_list(List *lp, int k); :

モジュールによる情報隠蔽 関数の定義(実装)はカプセル化され隠蔽される. 《list.c》 情報隠蔽 他のファイル から見えない #include “list.h” void init_list(List *lp) { lp->num = 0; } int read_list(List *lp, int k) { return lp->v[k]; : 情報隠蔽 他のファイル から見えない

モジュールの利用方法 モジュールはヘッダ(list.h)を通じて利用. 《list.c》 #include “list.h” void init_list(List *lp) { lp->num = 0; } int read_list(List *lp, int k) { return lp->v[k]; : #include “list.h” : List l; init_list(&l); list.h list.h が橋渡し (インタフェース)の役割

実装の変更(1) たとえばリストを線形リストを使うように変更. 赤で示した部分が変更箇所,インタフェースは固定. 《list.c》 《list.h》 #include “list.h” void init_list(List *lp) { lp->next = NULL; } int read_list(List *lp, int k) { List *p; int n; for (n = 0; n < k && …) { : typedef struct LIST { int v; List *next; } List; void init_list(List *lp); int read_list(List *lp, int k);

実装の変更(2) 呼び出し側はまったく変える必要がない. 《list.c》 #include “list.h” void init_list(List *lp) { lp->num = 0; } int read_list(List *lp, int k) { return lp->v[k]; : #include “list.h” void init_list(List *lp) { lp->next = NULL; } int read_list(List *lp, int k) { List *p; int n; for (n = 0; n < k && …) { : #include “list.h” : List l; init_list(&l); list.h list.h が橋渡し (インタフェース)の役割

モジュールプログラミングのまとめ モジュールプログラミング: モジュール中の大域変数と関数定義はカプセル化され,他のモジュールから隠蔽される. モジュールのインタフェースは公開される. 利用者はインタフェースのみ知っていれば利用できる. 利用者は実装の変更の影響を受けない.

クラス 抽象データ型を直接表現したもの. 関数を構造体の中に入れたものと考えてもよい. typedef struct LIST { int list[LIST_MAX]; int num = 0; } List; class List { int list[LIST_MAX]; int num = 0; void init_list(void) { num = 0; } int get_list_num(void) { return num; : void init_list(List *lp) { lp->num = 0; } int get_list_num(List *lp) { return lp->num; :

クラスの定義 クラスは,インスタンス変数(フィールド)とメンバ関数(メソッド)によって構成される. インスタンス変数 メソッド class List { int list[LIST_MAX]; int num = 0; void init_list(void) { num = 0; } int get_list_num(void) { return num; : インスタンス変数 メソッド

クラスの利用 オブジェクト指向ではあるクラスを型とみなしたときの変数をインスタンス(オブジェクト)と呼ぶ. インスタンスは利用者側が生成する. インスタンスのメンバへは”.”でアクセスする. #include “list.h” : List l1, l2; init_list(&l1); init_list(&l2); l1.num = 0; l2.num = 0; List l1 = new List(); List l2 = new List(); l1.init_list(); l2.init_list(); l1.num = 0; l2.num = 0; : 利用者側でListクラスのインスタンスを生成.

カプセル化のまとめ クラス: データとその操作をカプセル化したもの. (モジュール×構造体?) クラス: データとその操作をカプセル化したもの. (モジュール×構造体?) インスタンス(オブジェクト): クラスを実体化したもの.クラスを型とみなしたときの変数に相当. フィールド: クラスが持つ変数. メソッド: クラスが持つ関数.