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

27
アアアアアアアアアアアアアア (Algorithms and Programming) アア アアアアアアアアアアアア 4: •アアアアアアアアアアアアアアアアア •UML (Unified Modeling Language) •アアアアアアアアアア アアア •アアアアアアアアアア •アアアアアアアア アアア アア アアアアア アアアアアアアア アアアアアhttp://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

Upload: nairi

Post on 07-Jan-2016

24 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

アルゴリズムとプログラミング

(Algorithms and Programming)第4回:オブジェクト指向の考え

方•オブジェクト指向的な問題解決法とは•UML (Unified Modeling Language)•オブジェクトの設計図:クラス•クラスとインスタンス•オブジェクト指向3大原則

継承カプセル化ポリモーフィズム

•オブジェクト指向的な問題解決法とは•UML (Unified Modeling Language)•オブジェクトの設計図:クラス•クラスとインスタンス•オブジェクト指向3大原則

継承カプセル化ポリモーフィズム

講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

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

オブジェクト指向とは?これまで(オブジェクト指向以前):

コンピュータ (CPU)が扱えるデータ型と演算をまず考え、人間が解決したい問題をそれに合わせて解釈し直し、プログラム言語に変換する。

コンピュータ (CPU)が扱えるデータ型と演算をまず考え、人間が解決したい問題をそれに合わせて解釈し直し、プログラム言語に変換する。

オブジェクト指向プログラミングの理想

人間が解決したい問題から、その問題を解くために必要となる概念(対象)を抽出し定義する。問題解決はその“対象“への”操作”に帰着。機械の都合は2の次。

人間が解決したい問題から、その問題を解くために必要となる概念(対象)を抽出し定義する。問題解決はその“対象“への”操作”に帰着。機械の都合は2の次。

機械中心主義

人間中心主義対象=

オブジェクト

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

問題設定例1:猫をメインキャラクターとするペット育成シミュレーションソフトの開発この課題では、猫キャラクターが重要な鍵を握る

猫 どんな属性に注目するか

猫顔デザイン毛の色体重属性=観察す

べき特性

どんな振る舞いをするか

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

猫オブジェクトの定義

猫顔デザイン毛の色体重

鳴く ()食べる ()遊ぶ ()

属性(attribute)

操作(operation)

オブジェクト = 属性 + 操作これらを定義する作業をモデリングという

観察すべき特性

独特の振る舞い

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

オブジェクトの設計図=クラス

猫 猫顔デザイン毛の色体重

猫顔デザイン毛の色体重

鳴く ()食べる ()遊ぶ ()

これらは全てクラス図

クラス名

属性

操作

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

オブジェクトの生成設計図 (クラス )の属性と操作に値を与えて具体化したもの=オブジェクト

ミケ:猫顔デザイン毛の色:三色体重: 2400g

オブジェクト図

オブジェクト名:クラス名

 :クラス名オブジェクト名

3つの記法:どれも可インスタンス化するという

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

トラ:猫顔デザイン毛の色:トラ柄体重: 3000g

ミケ:猫顔デザイン毛の色:三色体重: 2400g

クロ:猫顔デザイン毛の色:黒色体重: 1500g

猫顔デザイン毛の色:体重:クラス (設計図 )

オブジェクト

クロ:猫 オブジェクトは猫クラスのインスタンスである

属性と操作に具体的な値を与えて生成された実体

属性と操作に具体的な値を与えて生成された実体

クラスとオブジェクトの関係

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

クラスの階層構造

クロ:猫顔デザイン毛の色:黒色体重: 1500g

クラス図

オブジェクト図ミケ:猫顔デザイン毛の色:三色体重: 2400g

トラ:猫顔デザイン毛の色:トラ柄体重: 3000g

哺乳類スーパークラス

サブクラス

脊椎動物

動物 汎化

特化

矢印の向きは汎化する向き

一般的抽象的

個別的具体的

相対的な階層関係

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

オブジェクト指向の表記法UML (Unified Modeling Language) :   統一されたモデリングの方法論と表記法

クラス図オブジェクト図ユースケース図ステートチャート図シーケンス図アクティビティ図コラボレーション図コンポーネント図配置図

Java言語と直接の関係はないがオブジェクト指向用語や概念の標準であり、 Java言語にも基本部分が取り入れられている。

世の中を、これらのチャート図を用いて表現 (モデリング )し、最終段階で Javaのクラスやオブジェクトの関係として設計、プログラムを作成し、問題を解決する。

世の中を、これらのチャート図を用いて表現 (モデリング )し、最終段階で Javaのクラスやオブジェクトの関係として設計、プログラムを作成し、問題を解決する。

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

クラス同士の関係

猫人間えさをあげる

関連 (association)

じゃれる

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

クラス同士の関係

猫人間えさをあげる

ロール (role)

ペット飼い主

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

クラス同士の関係

猫人間

多重度(multiplicity)

1 1..*

表記法 0..3   0から 3まで      1..*    1以上      1,5,7   1か 5か 7

猫から見て飼い主としての人間が1人であることが保証された状況をモデリングしかし、家族の複数名が飼い主と見なせる可能性を考慮すれば → 1..*

飼い主は猫を複数飼うことができる

一般に0も許せば → 0..*

車輪自転車1 2

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

クラス同士の関係

猫人間

限定子 (qualifier)1名前

えさをあげる1

複数の猫を名前で限定することで、多重度を1対1にできる

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

クラスが別のクラスで構成

動物園

集約 (aggregation)

部分要素が集まり全体を構成

ゾウ

キリン

ライオン

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

クラスが別のクラスで構成

コンポジション集約 (composition)

部品だけでは意味をなさない場合

天板

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

オブジェクト指向3原則:継承

哺乳類

猫クラスは、哺乳類クラスを継承している

すべての属性と操作を受け継ぐ

矢印の向きは汎化する向き

体重

食べる ()母乳で育てる ()

体重毛の色

食べる ()母乳で育てる ()鳴く ()遊ぶ ()

哺乳類から継承した属性

哺乳類から継承した操作

猫クラス独自の属性

猫クラス独自の操作

スーパークラス

サブクラスUML表記

省略可

例外無し!

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

継承:  is-a 関係

集約:  has-a 関係

継承と集約の区別

哺乳類

(猫は哺乳類である)(ゾウは動物園である) 人犬

キリン

動物園

ライオンゾウ

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

オブジェクト指向3原則:カプセル化

カプセル化

猫顔デザイン毛の色体重

鳴く ()食べる ()遊ぶ ()

属性(attribute)

操作(operation)

クラス図

他のクラスの属性や操作と厳格に区別するためのしくみ。

他のクラスの属性や操作と厳格に区別するためのしくみ。

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

カプセル化の実現: 可視性(visibility)猫

顔デザイン毛の色体重

鳴く ()食べる ()遊ぶ ()

属性

操作

それぞれがどの範囲から見えるかを定義(可視性のレベル )

private : 同クラスからのみ参照可能(-)

protected: 継承関係にあるクラス           からも参照可能(#)

public: 全てのクラスから参照可能 (+)

それぞれがどの範囲から見えるかを定義(可視性のレベル )

private : 同クラスからのみ参照可能(-)

protected: 継承関係にあるクラス           からも参照可能(#)

public: 全てのクラスから参照可能 (+)

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

可視性の表記(ー,#,+)

乗り物-スピード#スピードを変える ()#スピードを表示する ()

飛行機- 高度

# 離陸する ()#着陸する ()# 高度を表示する ()

飛行機クラスでは、継承していてもスピード属性を参照できない。→ スピードを表示する ()操作を使う

飛行機クラスでは、継承していてもスピード属性を参照できない。→ スピードを表示する ()操作を使う

全てサブクラスへ継承される全てサブクラスへ継承される

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

抽象クラス:オブジェクトを生成できないクラス

乗り物-スピード#スピードを変える ()#スピードを表示する ()

飛行機- 高度

# 離陸する ()#着陸する ()# 高度を表示する ()

飛行機クラスでは、依然としてスピードを表示する ()操作は必須であり、乗り物クラスは使われる。

飛行機クラスでは、依然としてスピードを表示する ()操作は必須であり、乗り物クラスは使われる。

クラス名をイタリックにすると抽象クラスクラス名をイタリックにすると抽象クラス

乗り物クラスのインスタンスは存在しないことが保証される

乗り物クラスのインスタンスは存在しないことが保証される

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

オブジェクト指向3原則:ポリモーフィズム

(多態性:オブジェクトは1つだが複数の形を持っていること)

ジェット機

乗り物

自動車飛行機

プロペラ機

ジェット機は飛行機でもあり、乗り物で

もある

ジェット機は飛行機でもあり、乗り物で

もある

ジェット機クラスのインスタンスを、乗り物オブジェクトとして扱うことができる。

ジェット機クラスのインスタンスを、乗り物オブジェクトとして扱うことができる。

ジェット機クラスのインスタンスに対する操作を、乗り物に対する操作として記述できる

ジェット機クラスのインスタンスに対する操作を、乗り物に対する操作として記述できる

このような記述の仕方にどんなメリットがあるの?

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

乗り物

#動力を始動する ()

飛行機

#動力を始動する ()

自動車

#動力を始動する ()

ジェット機

#動力を始動する ()

プロペラ機

#動力を始動する ()

操作名は同じだが、実際の操作内容はそれぞれ異なる

操作名は同じだが、実際の操作内容はそれぞれ異なる

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

ジェット機クラスのインスタンスを生成する

:ジェット機

このインスタンスを乗り物オブジェクトと見なす(乗り物オブジェクト変数に格納する)

:乗り物

乗り物1 .動力を始動する ()

動力を始動する ()メッセージを送るこの記法は、ジェット機に限らず、プロペラ機にも自動車にも、将来的に追加される乗り物にもそのまま変更なく使える。

変数名:乗り物1

上位概念(スーパークラス)オブジェクトに対する操作として記述しておくと、サブクラスの細かい修正や追加などに対して強いプログラムになる(保守性が高い)

乗り物オブジェクトの操作が呼び出されるように記述されているが、自動的にジェット機オブジェクトに対する操作が呼び出される

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

ジェット機クラスのインスタンスを生成する

:ジェット機

このインスタンスをジェット機オブジェクト変数に格納する)

:ジェット機

ジェット機1 .動力を始動する ()

動力を始動する ()メッセージを送る

この記法では、プロペラ機や自動車、さらには将来的に追加される乗り物に対しては、そのままでは使えない。

変数名:ジェット機1

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

その効果:  サブクラスの細かい修正や追加などに対して強い(保守性が高い)プログラムになる

ポリモーフィズム (polymorphism)の意味:  1つのオブジェクトが複数の形を持つ ← 継承により実現ポリモーフィズムの活用の仕方:  上位概念(スーパークラス)への操作として表現する(プログラムを記述する)

ポリモーフィズムのまとめ

オブジェクト指向プログラミングの有効性!

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

まとめ

•オブジェクト指向的な問題解決法とは•UML (Unified Modeling Language)•オブジェクトの設計図:クラス•クラスとインスタンス•オブジェクト指向3大原則

継承カプセル化ポリモーフィズム

•オブジェクト指向的な問題解決法とは•UML (Unified Modeling Language)•オブジェクトの設計図:クラス•クラスとインスタンス•オブジェクト指向3大原則

継承カプセル化ポリモーフィズム