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

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

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング基礎I(再) 山元進.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
第20章 Flyweight ~同じものを共有して無駄をなくす~
C#とC++とオブジェクト指向 上甲 健史.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
高度プログラミング演習 (11).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
ねらい 数値積分を例題に、擬似コードのアルゴリズムをプログラムにする。
値渡しと参照渡しについて.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

インデントについて(再掲) Javaの標準のインデントに従おう. public static void main(String[] args) { int x, y; x = 4; y = fact(x); System.out.println("4! = " + y); } public static int fact(int a) { if (a == 1) { return 1; return a * fact(a - 1); 行の 先頭 を揃 える 中括弧開くは 行の末尾に

再帰関数を使った階乗の実装 階乗を求める関数 fact() 再帰を使って実装する. public static void main(String[] args) { int x, y; y = fact(4); System.out.println("4! = " + y); y = fact(5); System.out.println("5! = " + y); y = fact(6); System.out.println("6! = " + y); } public static int fact(int a) { if (a == 1) { return 1; return a * fact(a - 1); 呼び出し 呼び出し 呼び出し 呼び出し(再帰)

内部処理(実装)の変更 factの内部の処理を変えてみる. public static void main(String[] args) { int x, y; y = fact(4); System.out.println("4! = " + y); y = fact(5); System.out.println("5! = " + y); y = fact(6); System.out.println("6! = " + y); } public static int fact(int a) { int x, b = 1; for (x = 1; x <= a; x++) { b = b * x; return b; 呼び出し側は 一行も変えていない 呼び出し側は 内部の処理を 知らなくてよい (情報隠蔽) 内部の処理を 書き換え

情報隠蔽の効用 再利用が容易になる. 作業を分担できる.(分業化) 何度も同じようなコードを書かなくて済む.(効率化) 何度もテスト&デバッグしなくて済む.(高信頼化) 作業を分担できる.(分業化) 変更が必要となったときに修正箇所を局所化できる. (変更の局所化,可変性の向上)

データ構造の情報隠蔽(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[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[v.size] = v; v.size++; public static void get(List l, int n) { return l.values[n]; Listクラスの 内部構造を知らなくてよい Listクラスの 内部構造を知っている

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