AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.

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(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
JavaBeans とJSP データベース論 第5回.
ピカチュウによる オブジェクト指向入門 (新版)
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
9 オブジェクト指向プログラミング ソフトウェア工学 OBJECT-ORIENTED PROGRAMMING
Javaとオブジェクト指向プログラミングの基礎
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Javaによる Webアプリケーション入門 第4回
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース

AI プログラミングの簡単な歴 史  1960 年代~現在 Lisp (関数型,リスト処理,ゴミ集め)  1980 年代~現在 Prolog (論理型,述語,パターン照合,深さ優先 探索)  1995 年~現在 Java (オブジェクト指向,ネットワーク, GUI ) Write-Once Run-Anywhere ( プラットフォーム非依存 )

構成  Part1 オブジェクト指向の基本概念  Part2 オブジェクト指向の3大特徴

Part1 オブジェクト指向の基本概念

X 軸方向 のみに進 むロボッ ト オブジェクトとは? データと操作をカプセル化した「も の」 位 置位 置 速 度速 度 燃 料燃 料 データ(フィール ド) 進 め進 め どこ ? 変 速変 速 オブジェク ト カプセル化 メンバ 操作(メソッ ド)

進 め 進 め どこ ? 変速 メモリ内に オブジェクトがうようよでき る 位置 速度 燃料 8 11 8 進 め進 め どこ ? 変 速変 速 44 2 0 進 め進 め 変 速変 速

船 クラ ス ロボット ク ラス いろんな種類(クラス)の オブジェクトが共存する

オブジェクトはクラス (ひな 形) から 生成されるインスタンス (実 例) 位 置位 置 速 度速 度 燃料 どこ ? 変速 進 め進 め 2 3 4 インスタン ス クラス 6 2 9 2 5 4 操作(メソッ ド)は クラスで共通 データ(フィール ド)は インスタンス毎

Javaではクラスを記述する ( ロボットになったつもりで書く) class ロボット { int 位置 ; int 速度 ; int 燃料 ; int どこ ?() { return( 位置 ); } void 変速 (int 新速度 ) { 速度 = 新速度 ; } クラス 名 フィールド名 種々の名前には 日本語を使える メソッド 名 整数型 値を戻す 戻り値の データ型 戻り値 なし

Javaではクラスを記述する (続き) class ロボット { int 位置 ; int 速度 ; int 燃料 ; // int 進め () { if ( 燃料 > 0) { 位置 = 位置 + 速度 ; 燃料 = 燃料 - 1 ; return 0; } else { return (-1); } 再掲

コンストラクタも記述する class ロボット { int 位置 ; int 速度 ; int 燃料 ; // ロボット (int p, int v, int f) { 位置 = p; 速度 = v; 燃料 = f; } 再掲 クラス定義 の終わり Constructor インスタンス生成時 フィールドを初期化

ロボットを生成し,使用する ( ロボットのコントローラを持ったつもり で書く) public class ロボットのテスト { public static void main(String args[]) { ロボット robocop = new ロボット (0,1,10); robocop. 進め (); robocop. 変速 (2); while(robocop. どこ ?() < 10) { robocop. 進め (); } ローカル変数 宣言 ロボット生成 ( コンストラクタ呼出 し ) ロボットを使う ( メソッド呼出し )

Part2 オブジェクト指向の3大特徴 特徴 1 カプセル化 2 継承(インヘリタン ス) 3 ポリモーフィズム(多 相性)

特徴1:カプセル化 特徴 1 カプセル化 2 継承(インヘリタンス) 3 ポリモーフィズム(多相 性)

船のフィールドの宣言 船の操作(メソッド)の宣言 船 クラス 制作者B いろんなクラスが出てきた ら... ロボットのフィールドの宣言 ロボットの操作(メソッド)の宣言 ロボット クラ ス アクセス不可能 カプセル化 制作者A

カプセル化 メソッドを通してのみ,フィールドにア クセス可 フィールド メソッド フィールド アクセ ス オブジェクトとは, データと操作をカプ セル化した「もの」. メソッド名 ( 引数,..., 引 数 )

ゲッター,セッター,コンスト ラクタ は超基本メソッド class Robot { int position; int getPosition() { return(position); } void setPosition(int p) { position = p; } Robot(int p) { position = p; } } Getter 値を取得 Setter 値を設定 Constructor 値を初期化 ローカル変数 寿命が短い

ゲッター,セッターを通してフィールドにア クセス getPosition( ) Robot( p ) setPosition( p ) メソッド Position アクセ ス.setPosition(10)

クラス図 (API: Application Programmer's Interface ) クラス 名 フィール ド メソッ ド メン バ Robot int position Robot(int p) int getPosition() void setPosition(int p)

ロボットのクラス図 ロボット int 位置 int 速度 int 燃料 ロボット (int p, int v, int f ) int どこ? ( ) void 変速 (int 新速度 ) int 進め ( ) コンストラ クタ ゲッター セッター オペレータ (一般のメソッ ド)

特徴2:継承(インヘリタ ンス) 特徴 1 カプセル化 2 継承( インヘリタンス ) 3 ポリモーフィズム(多相 性)

位置 速度 燃料 進め どこ ? 変速 容量 補給 再利用可能 ロボット 継承(インヘリタンス) 親を再利用して子を作る 位置 速度 燃料 進め どこ ? 変速 使い捨ての ロボット 親 子親 子 親子 スーパー クラス サブ クラス

サブクラスの定義 新属性,新機能,新コンストラクタのみ 記述 class 再利用可能ロボット extends ロボット{ int 容量 ; void 補給 () { 燃料 = 容量 ; } 再利用可能ロボット (int p, int v, int f, int c) { super(p, v, f); 容量 = c; } スーパークラスの指定 スーパークラス を書き直したり 再コンパイルす る必要はない

継承のクラス図 ロボット int 位置 int 速度 int 燃料 int どこ? ( ) void 変速 (int 速度 ) int 進め ( ) 再利用可能ロボット int 容量 void 補給 ( ) スーパー クラス

継承の使用例 public class 再利用可能ロボットのテスト { public static void main(String args[]) { 再利用可能ロボット robo2 = new 再利用可能ロボット (0,1,10,10); for (int i=0; i<100; i=i+1) { if(robo2. 進め ()< 0) { robo2. 補給 (); robo2. 進め (); } 進め ( ) は, 正常に進めたら0, 燃料切れで進めな かったら-1を返 す. 新しいメソッ ド の使用 継承されたメソッ ドの使用

特徴3:ポリモーフィズム (多相 性) 特徴 1 カプセル化 2 継承( インヘリタンス ) 3 ポリモーフィズム(多 相性)

ポリモーフィズム(多 相性) 同じメッセージでもクラスによって処理が異 なる polymorphis m メッセー ジ. 進め ( ) 進め ロボットク ラス 進め 船クラス. 進め ( ) 授業を 進める 先生クラス 進め

型の階層(包含) 進め ロボット 型 船 型船 型先生 型 進めるもの 型

「進めるもの」のインタフェー ス interface 進めるもの { int 進め (); } 抽象メソッド

「進めるもの」の実装 class ロボット implements 進めるもの{ int 位置 ; int 速度 ; int 燃料 ; int どこ ?() { return( 位置 ); } void 変速 (int 新速度 ) { 速度 = 新速度 ; } int 進め () { if ( 燃料 > 0) { 位置 = 位置 + 速度 ; 燃料 = 燃料 - 1 ; return 0; } else { return (-1); } ここを追加す る

実装のクラス図 ロボット int 位置 int 速度 int 燃料 int どこ? ( ) void 変速 (int 速度 ) int 進め ( ) interface 進めるもの int 進め ( ) 実装

ポリモーフィズムの使用例 いろいろな「進めるもの」を統一的に進ま せる 進めるもの [] A = new 進めるもの [3]; A[0] = new ロボット (0,1,10); A[1] = new 船 (" 横浜 "); A[2] = new 先生 (" 数学 "," 舞黒素太 "); 01 2 進め

ポリモーフィズムの使用例(続き) いろいろな「進めるもの」を統一的に進ませる 進めるもの A[] = new 進めるもの [3]; A[0] = new ロボット (0,1,10); A[1] = new 船 (" 横浜 "); A[2] = new 先生 (" 数学 "," 舞黒素太 "); for(i=0; i<3; i++) A[i]. 進め (); 01 2 進め

オブジェクト指向のまとめ  基本用語 – オブジェクト,フィールド,メソッド,メン バ – クラス,インスタンス – ゲッター,セッター,コンストラクタ – スーパークラス,サブクラス,クラス図 – インタフェース,抽象メソッド,実装  特徴 – 1 カプセル化 – 2 継承(インヘリタンス) – 3 ポリモーフィズム(多相性)