オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アルゴリズムとデータ構造 第2回 線形リスト(復習).
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
第20章 Flyweight ~同じものを共有して無駄をなくす~
C#とC++とオブジェクト指向 上甲 健史.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
~手続き指向からオブジェクト指向へ[Ⅱ]~
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向プログラミング クラス 継承
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
値渡しと参照渡しについて.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也

データ構造の情報隠蔽(1/4) 処理(アルゴリズム)の隠蔽 データ構造の隠蔽 関数を用いる. 構造体を用いる. 配列を使ったリストの例: struct list { int values[1000]; int size; } データ構造

データ構造の情報隠蔽(2/4) 構造体変数を引数に渡したり戻り値で返したりすることで情報隠蔽を行う. main() { int v; struct List *l; l = create(); add(l, 11); add(l, 22); v = get(l, 1); } struct List* create() { return malloc(sizeof(struct List)); void add(struct List *l, int v) { l->values[l->size] = v; l->size++; List構造体の 内部構造を知らなくてよい List構造体の 内部構造を知っている

データ構造の情報隠蔽(3/4) オブジェクト指向(Java)でそれっぽく書いてみる. List構造体は,JavaではListクラスに相当する. Listクラスを新規に作成する. public class List { int values[] = new int[1000]; int size; } データ構造(List構造体とほぼ同じ)

データ構造の情報隠蔽(4/4) オブジェクト指向(Java)でそれっぽく書いてみる. Listクラスを使うプログラムを書いてみる. public static void main(String[] args) { List l = new List(); add(l, 11); add(l, 22); int v = get(l, 1); System.out.println("v = " + v); } public static void add(List l, int v) { l.values[l.size] = v; l.size++; public static int get(List l, int n) { return l.values[n]; Listクラスの 内部構造を知らなくてよい Listクラスの 内部構造を知っている

データ構造の変更(1/2) Listクラスのデータ構造とアルゴリズムを配列を使ったリストから線形リストに変更する. public class List { int value; List next; } データ構造(線形リスト) ⇒Listクラスを使っている関数にどのように影響するか?

データ構造の変更(2/2) メインクラスも一部修正の必要がある. public static void main(String[] args) { : } public static void add(List l, int v) { while (l.next != null) { l = l.next; l.next = new List(); l.next.value = v; l.next.next = null; public static int get(List l, int n) { for (int i = 0; i <= n; i++) { return l.value; Listクラスの 内部構造を知らなくてよい データ構造の 修正に合わせて アルゴリズムを 書き換え Listクラスの 内部構造を知っている

構造化指向の問題点 構造化指向(C言語)または構造化指向っぽく書いたオブジェクト指向(Java)のプログラムでは,データ構造の変更に伴って変更すべき箇所が散乱する. public class Main { public static void main(String[] args) { List l = new List(); add(l, 11); add(l, 22); int v = get(l, 1); System.out.println("v = " + v); } public static void add(List l, int v) { l.values[l.size] = v; l.size++; public static void get(List l, int n) { return l.values[n]; public class List { int values[] = new int[1000]; int size; } データ構造の修正 (構造体) アルゴリズムの修正(関数)

カプセル化(1/2) それなら,一緒に変更されるデータ構造とアルゴリズムを一箇所にまとめればいい. 構造体 関数を構造体の中に public class Main { public static void main(String[] args) { List l = new List(); add(l, 11); add(l, 22); int v = get(l, 1); System.out.println("v = " + v); } public static void add(List l, int v) { l.values[l.size] = v; l.size++; public static void get(List l, int n) { return l.values[n]; public class List { int values[] = new int[1000]; int size; } 関数を構造体の中に 入れてしまえばよい 関数

カプセル化(2/2) それなら,一緒に変更されるデータ構造とアルゴリズムを一箇所にまとめればいい. public class Main { public static void main(String[] args) { List l = new List(); l.add(11); l.add(22); int v = l.get(1); System.out.println("v = " + v); } public class List { int values[] = new int[1000]; int size; public void add(int v) { values[size] = v; size ++; } public int get(int n) { return values[n]; 構造体 部分 関数部分 構造体と関数をまとめた(カプセル化した)ものをクラスと呼ぶ. クラスの内部にデータ構造とアルゴリズムの両方を隠蔽できる. クラスはモノに相当すると考えよう(オブジェクト指向).

課題提出 課題提出先: http://bit.ly/2QoGRXC 講義時間内に提出すること. 提出後に訂正はできないが,講義時間内なら再提出可能. 学籍番号は半角の数字で.