アルゴリズムとプログラミング (Algorithms and Programming)

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(
シミュレーション演習 G. 総合演習 ( Mathematica 演 習) システム創成情報工学科 テキスト作成: 藤尾 光彦 講義担当: 尾下 真樹.
クラス図(1) FM12013 山口 亨. クラスとは 現実に存在する “ 物体 ” (オブジェクト)の 構造や振る舞いなどに着目して注目し抽 象化したもの クラス図を含む UML のほとんどの図で使用 されている.
Chapter1 UML の概要とオブジェクト指向の基本概念 1 情報工学専攻 MFM10004 奥平 健太.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Chapter3 クラス図(後半)             FM12014 劉鎧誠.
ソフトウェア工学特論III 第10回 その他の図 情報通信工学専攻 GM11013 堀江 真史
オブジェクト指向プログラミング(4) 静的分析(2)
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
3-5 クラス図の関係その3 福本研究室 神田 祐輔.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
3-3 クラス図の関係その2.
クラス図(1) 後半 FM13010 村上 太一.
アルゴリズムとプログラミング (Algorithms and Programming)
UMLの概要と オブジェクト指向の 基本概念
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
BPMN(Business Process Modeling Notation)
10 ソフトウェア工学 Software Engineering ソフトウェアモデリング SOFTWARE MODELING.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
UMLとは           032234 田邊祐司.
オブジェクト指向モデリング [3] 2003年10月14日.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
~手続き指向からオブジェクト指向へ[Ⅱ]~
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向基礎学習Ⅱ 平成20年7月1日 森田 彦.
アルゴリズムとプログラミング (Algorithms and Programming)
その他の図 Chapter 7.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
UMLの概要とオブジ工クト指向の基本概念 第2回
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
10 ソフトウェア工学 Software Engineering ソフトウェアモデリング SOFTWARE MODELING.
第11週:super/subクラス、継承性、メソッド再定義
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
社会シミュレーションのための モデル作成環境
オブジェクト指向モデリング [2] 2003年10月 7日.
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
第1章 実世界のモデル化と形式化 3.地物インスタンスの表現
47070 オブジェクト指向モデリング [3] 2001年10月16日.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
1-3 UMLの図(ダイアグラム) コンポーネント図 システムの物理的な構成を表現 ソフトウェアコンポーネントの依存性を表現
UMLの概要とオブジェクト指向の基本概念
第7回放送授業.
第8回放送授業.
アルゴリズムとプログラミング (Algorithms and Programming)
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとプログラミング (Algorithms and Programming)
サブゼミ第7回 実装編① オブジェクト型とキャスト.
プログラム分散化のための アスペクト指向言語
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
47070 オブジェクト指向モデリング [3] 2001年10月15日.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
Presentation transcript:

アルゴリズムとプログラミング (Algorithms and Programming) 第4回:オブジェクト指向の考え方 オブジェクト指向的な問題解決法とは UML (Unified Modeling Language) オブジェクトの設計図:クラス クラスとインスタンス オブジェクト指向3大原則 継承 カプセル化 ポリモーフィズム 講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

オブジェクト指向とは? 機械中心主義 人間中心主義 対象= オブジェクト これまで(オブジェクト指向以前): コンピュータ(CPU)が扱えるデータ型と演算をまず考え、人間が解決したい問題をそれに合わせて解釈し直し、プログラム言語に変換する。 機械中心主義 オブジェクト指向プログラミングの理想 人間が解決したい問題から、その問題を解くために必要となる概念(対象)を抽出し定義する。問題解決はその“対象“への”操作”に帰着。機械の都合は2の次。 対象= オブジェクト 人間中心主義

問題設定例1:猫をメインキャラクターとするペット育成シミュレーションソフトの開発 この課題では、猫キャラクターが重要な鍵を握る 猫 どんな属性に注目するか 猫 顔デザイン 毛の色 体重 どんな振る舞いをするか 属性=観察すべき特性

猫オブジェクトの定義 猫 属性 操作 オブジェクト = 属性 + 操作 観察すべき特性 独特の振る舞い 顔デザイン 毛の色 体重 属性 (attribute) 観察すべき特性 鳴く() 食べる() 遊ぶ() 操作 (operation) 独特の振る舞い オブジェクト = 属性 + 操作 これらを定義する作業をモデリングという

オブジェクトの設計図=クラス 猫 猫 猫 これらは全てクラス図 クラス名 属性 操作 顔デザイン 顔デザイン 毛の色 毛の色 体重 体重 鳴く() 食べる() 遊ぶ() 操作 これらは全てクラス図

オブジェクトの生成 ミケ:猫 設計図(クラス)の属性と操作に値を与えて 具体化したもの=オブジェクト インスタンス化するという 3つの記法:どれも可 ミケ:猫 オブジェクト名:クラス名 顔デザイン 毛の色:三色 体重:2400g  :クラス名 オブジェクト名 オブジェクト図

クラスとオブジェクトの関係 猫 クロ:猫 ミケ:猫 トラ:猫 クラス(設計図) オブジェクト 顔デザイン 毛の色: 体重: クラス(設計図) オブジェクト 属性と操作に 具体的な値を 与えて生成 された実体 クロ:猫 ミケ:猫 トラ:猫 顔デザイン 毛の色:黒色 体重:1500g 顔デザイン 毛の色:三色 体重:2400g 顔デザイン 毛の色:トラ柄 体重:3000g クロ:猫 オブジェクトは猫クラスのインスタンスである

クラスの階層構造 汎化 特化 動物 脊椎動物 スーパークラス 哺乳類 サブクラス 猫 クラス図 オブジェクト図 クロ:猫 ミケ:猫 トラ:猫 一般的 抽象的 脊椎動物 スーパークラス 哺乳類 矢印の向きは 汎化する向き 相対的な階層関係 サブクラス 猫 クラス図 個別的 具体的 オブジェクト図 特化 クロ:猫 ミケ:猫 トラ:猫 顔デザイン 毛の色:黒色 体重:1500g 顔デザイン 毛の色:三色 体重:2400g 顔デザイン 毛の色:トラ柄 体重:3000g

オブジェクト指向の表記法 UML (Unified Modeling Language) : 統一されたモデリングの方法論と表記法 クラス図   統一されたモデリングの方法論と表記法 クラス図 オブジェクト図 ユースケース図 ステートチャート図 シーケンス図 アクティビティ図 コラボレーション図 コンポーネント図 配置図 Java言語と直接の関係はないが オブジェクト指向用語や概念の 標準であり、Java言語にも基本部分が 取り入れられている。 世の中を、これらのチャート図を 用いて表現(モデリング)し、最終段階 でJavaのクラスやオブジェクトの関係 として設計、プログラムを作成し、 問題を解決する。

クラス同士の関係 関連(association) えさをあげる 人間 猫 じゃれる

クラス同士の関係 ロール(role) えさをあげる 人間 猫 飼い主 ペット

クラス同士の関係 多重度 (multiplicity) 人間 猫 自転車 車輪 表記法 0..3 0から3まで 1..* 1以上 表記法 0..3  0から3まで      1..*   1以上      1,5,7  1か5か7 1 1..* 人間 猫 猫から見て飼い主としての人間が1人で あることが保証された状況をモデリング 飼い主は猫を複数飼うことができる 一般に0も許せば → 0..* しかし、家族の複数名が飼い主と見なせる可能性を考慮すれば → 1..* 1 2 自転車 車輪

クラス同士の関係 限定子(qualifier) 1 1 人間 えさをあげる 猫 名前 複数の猫を名前で限定することで、多重度を1対1にできる

クラスが別のクラスで構成 集約(aggregation) ゾウ 動物園 キリン ライオン 部分要素が集まり全体を構成

コンポジション集約(composition) クラスが別のクラスで構成 コンポジション集約(composition) 天板 机 脚 部品だけでは意味をなさない場合

オブジェクト指向3原則:継承 猫クラスは、哺乳類クラスを継承している すべての属性と操作を受け継ぐ スーパークラス 哺乳類 例外無し! 体重 食べる() 母乳で育てる() 例外無し! 矢印の向きは 汎化する向き UML表記 サブクラス 猫 体重 毛の色 哺乳類から継承した属性 猫クラス 独自の属性 省略可 食べる() 母乳で育てる() 鳴く() 遊ぶ() 哺乳類から継承した操作 猫クラス 独自の操作

継承と集約の区別 継承: is-a 関係 集約: has-a 関係 哺乳類 (猫は哺乳類である) (ゾウは動物園である) 犬 猫 人 動物園 キリン ライオン

カプセル化 猫 属性 操作 オブジェクト指向3原則:カプセル化 クラス図 他のクラスの属性や操作と厳格に区別するためのしくみ。 顔デザイン 毛の色 体重 属性 (attribute) カプセル化 鳴く() 食べる() 遊ぶ() 操作 (operation) 他のクラスの属性や操作と厳格に区別するためのしくみ。

カプセル化の実現: 可視性(visibility) 猫 顔デザイン 毛の色 体重 それぞれがどの範囲から見えるかを定義(可視性のレベル) private: 同クラスからのみ参照可能(-) protected: 継承関係にあるクラス            からも参照可能(#) public: 全てのクラスから参照可能(+) 属性 鳴く() 食べる() 遊ぶ() 操作

可視性の表記(ー,#,+) 乗り物 飛行機 全てサブクラスへ継承される 飛行機クラスでは、継承していても スピード属性を参照できない。 -スピード 全てサブクラスへ継承される #スピードを変える() #スピードを表示する() 飛行機 飛行機クラスでは、継承していても スピード属性を参照できない。 → スピードを表示する()操作を使う -高度 #離陸する() #着陸する() #高度を表示する()

抽象クラス:オブジェクトを生成できないクラス 乗り物 クラス名をイタリックにすると 抽象クラス -スピード #スピードを変える() #スピードを表示する() 乗り物クラスのインスタンスは 存在しないことが保証される 飛行機 飛行機クラスでは、依然として スピードを表示する()操作は必須 であり、乗り物クラスは使われる。 -高度 #離陸する() #着陸する() #高度を表示する()

オブジェクト指向3原則:ポリモーフィズム (多態性:オブジェクトは1つだが複数の形を持っていること) 乗り物 ジェット機クラスのインスタンスを、乗り物オブジェクトとして扱うことができる。 飛行機 自動車 ジェット機クラスのインスタンスに対する操作を、乗り物に対する操作として記述できる ジェット機 プロペラ機 このような記述の仕方にどんなメリットがあるの? ジェット機は飛行機でもあり、乗り物でもある

操作名は同じだが、実際の操作内容はそれぞれ異なる 乗り物 #動力を始動する() 飛行機 自動車 #動力を始動する() #動力を始動する() ジェット機 プロペラ機 操作名は同じだが、実際の操作内容はそれぞれ異なる #動力を始動する() #動力を始動する()

ジェット機クラスのインスタンスを生成する :ジェット機 このインスタンスを乗り物オブジェクトと見なす (乗り物オブジェクト変数に格納する) :乗り物 変数名:乗り物1 動力を始動する()メッセージを送る この記法は、ジェット機に限らず、プロペラ機にも自動車にも、将来的に追加される乗り物にもそのまま変更なく使える。 乗り物1.動力を始動する() 乗り物オブジェクトの操作が呼び出されるように記述されているが、自動的にジェット機オブジェクトに対する操作が呼び出される 上位概念(スーパークラス)オブジェクトに対する操作として記述しておくと、サブクラスの細かい修正や追加などに対して強いプログラムになる(保守性が高い)

ジェット機クラスのインスタンスを生成する :ジェット機 このインスタンスをジェット機オブジェクト変数に格納する) :ジェット機 変数名:ジェット機1 動力を始動する()メッセージを送る ジェット機1.動力を始動する() この記法では、プロペラ機や自動車、さらには将来的に追加される乗り物に対しては、そのままでは使えない。

オブジェクト指向プログラミングの有効性! ポリモーフィズムのまとめ ポリモーフィズム(polymorphism)の意味:   1つのオブジェクトが複数の形を持つ ← 継承により実現 ポリモーフィズムの活用の仕方:   上位概念(スーパークラス)への操作として表現する(プログラムを記述する) その効果:   サブクラスの細かい修正や追加などに対して強い(保守性が高い)プログラムになる オブジェクト指向プログラミングの有効性!

まとめ オブジェクト指向的な問題解決法とは UML (Unified Modeling Language) オブジェクトの設計図:クラス クラスとインスタンス オブジェクト指向3大原則 継承 カプセル化 ポリモーフィズム