SlideShare a Scribd company logo
1 of 117
オブジェクト指向型プログラミング
HIRENJAK
2016/4/25 1
今回の流れ
2016/4/25 2
ページ数的にはこんな感じです.
前準備(歴史とか)
関数化・参照範囲について
クラスについて
オブジェクト指向型プログラミングの解説
今回の流れ
2016/4/25 3
今回の流れはこんな感じです.
p4 ~前準備~ p13
p15 ~関数化~ p46
p48 ~クラス~ p79
p81 ~オブジェクト指向~ p117
基本を押さえる(C/C++の講義でやってたこと)
2016/4/25 4
基本は条件分岐(if) 繰り返しは透明性向上(while)
それぞれを合わせたのがdo-while, for, foreach
switch, else, else if はifの拡張
基本を押さえる - 透明性?保守性?
2016/4/25 5
可読性 保守性 透明性 再利用性
言語が
分かりやすい
後で見やすい
流れが
分かりやすい
他でも使える
基本を押さえる – プログラミングの歴史的には
2016/4/25 6
可読性 保守性 透明性 再利用性
高級言語の開発
構造化言語の開発機械語の開発
オブジェクト指向
型言語の開発
富豪型プログラミ
ングの普及
スプリクト言語の
普及
スプリクト言語の
開発
goto派閥の
宗教戦争
要求言語の多様化
による宗教戦争
基本を押さえる – プログラミングの歴史的には
2016/4/25 7
可読性 保守性 透明性 再利用性
高級言語の開発
構造化言語の開発機械語の開発
オブジェクト指向
型言語の開発
富豪型プログラミ
ングの普及
スプリクト言語の
普及
スプリクト言語の
開発
goto派閥の
宗教戦争
要求言語の多様化
による宗教戦争
基本を押さえる – プログラミングの歴史的には
2016/4/25 8
可読性 保守性 透明性 再利用性
高級言語の開発
構造化言語の開発機械語の開発
オブジェクト指向
型言語の開発
富豪型プログラミ
ングの普及
スプリクト言語の
普及
スプリクト言語の
開発
goto派閥の
宗教戦争
要求言語の多様化
による宗教戦争
基本を押さえる – プログラミングの歴史的には
2016/4/25 9
可読性 保守性 透明性 再利用性
高級言語の開発
構造化言語の開発機械語の開発
オブジェクト指向
型言語の開発
富豪型プログラミ
ングの普及
スプリクト言語の
普及
スプリクト言語の
開発
goto派閥の
宗教戦争
要求言語の多様化
による宗教戦争
基本を押さえる – プログラミングの歴史的には
2016/4/25 10
可読性 保守性 透明性 再利用性
アセンブラ
C機械語 C++
C#
Java
BASIC
simula
基本を押さえる – プログラミングの歴史的には
2016/4/25 11
可読性 保守性 透明性 再利用性
アセンブラ
C機械語 C++
C#
Java
BASIC
simula
基本を押さえる – 適材適所
2016/4/25 12
可読性
保守性
透明性
再利用性
アセンブラ
C
C++
C#
言語の
速度
環境の
汎用性
付随効果 言語例
言語の
可読性
基本を押さえる – 適材適所
2016/4/25 13
大規模なプログラムを組
みたい 再利用性を重視
C#やJavaが推奨重要なシステムでは無い
ので刺さっと組みたい
何よりも速度を出さなく
てはいけない
言語速度を重視
アセンブラやCが推奨
環境(ハード含む)
に依存しそう
環境の限定性を重視
アセンブラやC・それぞれに合った
言語が推奨
この後の流れ
2016/4/25 14
基礎的なことその1
関数化 参照範囲
クラス
オブジェクト指向
関数化
2016/4/25 15
キャラA
地面
キャラB
重
力
重
力
関数化
2016/4/25 16
キャラA
地面
キャラB
重
力
重
力
抗
力
抗
力
地面
関数化
2016/4/25 17
抗
力
キャラA
抗
力
外積計算
関数化
2016/4/25 18
外積計算 X1 * Y2 + Y1 * X2
関数化
2016/4/25 19
X1 * Y2 + Y1 * X2
地面側のベクトル
キャラまでのベクトル
必要なもの
引数
関数化
2016/4/25 20
地面側のベクトル
キャラまでのベクトル
地面側のベクトル
キャラまでのベクトル
必要なもの
関数化
2016/4/25 21
位置から割り出したベクトル 外積計算関数 外積値
地面
関数化
2016/4/25 22
抗
力
キャラA
抗
力
外積計算関数
外積による計算結果が値として帰ってくる.
処理関数化(void型)
2016/4/25 23
キャラA
地面
処理関数化
2016/4/25 24
キャラA
地面
キャラの移動
処理関数化
2016/4/25 25
キャラA
地面
描画処理
キャラA 新しい位置の計算
描画処理
入力処理 衝突判定
衝突応答
処理関数化
2016/4/25 26
地面
キ
ャ
ラ
A
キ
ャ
ラ
A
キ
ャ
ラ
A
キ
ャ
ラ
A
処理関数化
2016/4/25 27
新しい位置の計算
描画処理
入力処理
衝突判定
衝突応答
移動処理関数
処理関数化
2016/4/25 28
キャラA
地面
移動処理関数
処理関数化
2016/4/25 29
地面
キ
ャ
ラ
A
キ
ャ
ラ
A
キ
ャ
ラ
A
キ
ャ
ラ
A
移動処理関数 移動処理関数 移動処理関数
処理を纏めてあるだけなので
戻り値があっても無くても良い
この後の流れ
2016/4/25 30
基礎的なことその2
関数化 参照範囲
クラス
オブジェクト指向
参照範囲(SCOPE) 宣言について
2016/4/25 31
メイン関数
関数A 関数B
int temporary; int temporary;
参照範囲とは宣言した関数の階層以下でのみ変数が扱
えるということ
なので変数名が被っててもこれはセーフ
int temporary;
参照範囲(SCOPE)宣言について
2016/4/25 32
メイン関数
if 文内 for文内
int temporary; int temporary;
これはメイン関数で宣言している変数名とその内に
入っている処理の中で宣言している
変数名が被っているのでアウト
int temporary;
参照範囲(SCOPE) 引数の内容
2016/4/25 33
メイン関数
関数A temporary = 4;
print(temporary);
関数に対して単に引数として値を渡しても中身が入れ
替わるわけではなく値をコピーして別の変数として
扱っているだけなので関数を抜けた際には値が戻って
る(変わってない)
int temporary = 0;
Console Screen
0
参照範囲(SCOPE) 引数の内容
2016/4/25 34
メイン関数 関数A
temp_temporary = 4;print(temporary);
値をコピーして別の変数として扱っているので
メイン関数の値が変わらないのが原因
int temporary = 0; int temp_temporary = 引数の値;
値渡し
参照範囲(SCOPE) 引数の内容
2016/4/25 35
メイン関数 関数A
temp_temporary = 4;print(temporary);
関数内で元の変数を操作したいのであれば参照
している位置を引数として渡してあげることで
解決される
int temporary = 0; int temp_temporary = 引数の位置;
参照渡し
メモリ空間
参照範囲(SCOPE) 値渡し・参照渡し
2016/4/25 36
メモリ空間
参照範囲(SCOPE)値渡しの中身
2016/4/25 37
値
値
値渡し
int temporary = 0;
メモリ空間
参照範囲(SCOPE)値渡しの中身
2016/4/25 38
値 値
値渡し
値のコピー
int temp_temporary = 引数の値;
メモリ空間
参照範囲(SCOPE)値渡しの中身
2016/4/25 39
値 値
値渡し
値
temp_temporary = 4;
メモリ空間
参照範囲(SCOPE)値渡しの中身
2016/4/25 40
値 値
値渡し
値
print(temporary);
メモリ空間
参照範囲(SCOPE)参照渡しの中身
2016/4/25 41
値
参照渡し
値
int temporary = 0;
メモリ空間
参照範囲(SCOPE)参照渡しの中身
2016/4/25 42
値 位置
参照渡し
位置の保存
int temp_temporary = 引数の位置;
メモリ空間
参照範囲(SCOPE)参照渡しの中身
2016/4/25 43
値 位置
参照渡し
値の参照 値
temp_temporary = 4;
メモリ空間
参照範囲(SCOPE)参照渡しの中身
2016/4/25 44
値 位置
参照渡し
値の参照 値
temp_temporary = 4;
メモリ空間
参照範囲(SCOPE) 参照渡しの中身
2016/4/25 45
値 位置
参照渡し
値
print(temporary);
参照範囲(SCOPE) 動的変数・静的変数
2016/4/25 46
親となる関数
+
変数名
変換 メモリ位置
動的変数
変数名 変換 メモリ位置
静的変数
動的変数は親となる関数によっ
て変換されるアドレスが変わる
のに対して、
静的変数は変数名がアドレスと
直結しているのでどの関数にい
ようと関係が無い
この後の流れ
2016/4/25 47
これらのことを踏まえた上でクラスの話に入って、
最終的にオブジェクト指向の話に入っていきます.
関数化 参照範囲
クラス
オブジェクト指向
クラスに入る前に
2016/4/25 48
ざっくり説明するとクラスは関数化と参照範囲の集合体です.
なので変数や関数に加えてクラスの命名なども行わなくてはいけません.
さらに規模が大きくなるので多人数でプログラムすることもあれば
他人にプログラムの質問をすることもあるでしょう.
変数名
関数名
クラス名
プログラムの規模
命名規則
2016/4/25 49
変数名 関数名 クラス名
tmp_value val tmpValue
itizitekiAtai
temporaryValuetemporary_value
ataiitiziteki_tai
value
命名規則
2016/4/25 50
変数名 関数名 クラス名
tmp_val val tmpVal
3~4文字で短く纏める派
命名規則
2016/4/25 51
変数名 関数名 クラス名
temporaryValuetemporary_value value
長いけど間違えにくい
基にした単語全部書く派
命名規則
2016/4/25 52
変数名 関数名 クラス名
itizitekiAtaiataiitiziteki_atai
そこは日本語で書くでしょ派
命名規則
2016/4/25 53
変数名 関数名 クラス名
tmp_value
temporary_value
itiziteki_tai
「 _ 」を使って文字を区切る
スネークケース派
命名規則
2016/4/25 54
変数名 関数名 クラス名
tmpValue
itizitekiAtai
temporaryValue
区切りの部分で大文字を使う
キャメルケース派
命名規則
2016/4/25 55
変数名 関数名 クラス名
ちなみに現在の私は混合派です.
temp_Valuetemp_InitValue value
命名規則
2016/4/25 56
変数名 関数名 クラス名
これは特に種類ありません.(てか、知りません)
1文字目を大文字にするだけです.
これが一番分かりやすいと思います.
Value_FunctionValueFunction Class
命名規則
2016/4/25 57
変数名 関数名 クラス名
クラスの1文字目が大文字で変数名の1文字目が小文字だと都合が良いのは
クラス変数を作った時に1文字目を小文字にすれば済むからです.
ValueFunction valueFunction
クラス?
2016/4/25 58
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
とりあえず例として適当なゲームのキャラをパラメータ群に変換しました.
クラス?
2016/4/25 59
名前[string]
レア度[int]
レベル[int]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
Etc…
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
各パラメータを変数として宣言
各変数にアクセスしてキャラのパラメータを弄れる!
クラス?
2016/4/25 60
【各パラメータ】×【必要キャラ分】の変数達の生成
名前1[string]
レア度1[int]
レベル1[int]
HP1[int]
画像パス1[string]
テキスト1[string]
物理ダメージ1[int]
Etc1…
名前2[string]
レア度2[int]
レベル2[int]
HP2[int]
画像パス2[string]
テキスト2[string]
物理ダメージ2[int]
Etc2…
名前3[string]
レア度3[int]
レベル3[int]
HP3[int]
画像パス3[string]
テキスト3[string]
物理ダメージ3[int]
Etc3…
キャラクター1 キャラクター2
キャラクター3
クラス?
2016/4/25 61
さらにキャラごとにちょっと要素を足したり引いたり
名前1[string]
レア度1[int]
レベル1[int]
HP1[int]
画像パス1[string]
テキスト1[string]
物理ダメージ1[int]
Etc1…
名前2[string]
レア度2[int]
レベル2[int]
HP2[int]
画像パス2[string]
テキスト2[string]
物理ダメージ2[int]
テキスト[string]
名前3[string]
レア度3[int]
レベル3[int]
HP3[int]
画像パス3[string]
テキスト3[string]
物理ダメージ3[int]
追加ダメージ[int]
キャラクター1 キャラクター2
キャラクター3
Etc2…
クラス?
2016/4/25 62
結果的になんの変数があったかなんて忘れる. → 収集が着かなくなる
名前1[string]
レア度1[int]
レベル1[int]
HP1[int]
画像パス1[string]
テキスト1[string]
物理ダメージ1[int]
Etc1…
名前2[string]
レア度2[int]
レベル2[int]
HP2[int]
画像パス2[string]
テキスト2[string]
物理ダメージ2[int]
Etc2…
名前3[string]
レア度3[int]
レベル3[int]
HP3[int]
画像パス3[string]
テキスト3[string]
物理ダメージ3[int]
Etc3…
キャラクター1 キャラクター2
キャラクター3
クラス?
2016/4/25 63
変数がばらばらにならないように変数群を
ひとまとめにすることでどんなに
キャラを増やしても大丈夫
キャラクター1 キャラクター2
キャラクター3
キャラクター1
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
キャラクター2
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
キャラクター
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
構造体
2016/4/25 64
これらを構造体と呼ぶ
キャラクター1
• 名前[string]
• レア度[int]
• レベル[int]
• HP[int]
• 画像パス[string]
• テキスト[string]
• 物理ダメージ[int]
• Etc…
構造体
構造体 → クラス
2016/4/25 65
構造体 変数群
クラス ?
構造体 → クラス
2016/4/25 66
構造体
クラス?
関数群
構造体 → クラス
2016/4/25 67
構造体
構造体
関数群
構造体 → クラス
2016/4/25 68
構造体 クラス
明確な違いは公的には無い.
↓
各言語によって定義が異なる.
構造体 → クラス
2016/4/25 69
構造体 クラス
基本的にメンバ変数がpublic 基本的にメンバ変数がprivate
値型 参照型
メンバ変数?
2016/4/25 70
クラス
メンバ変数、クラス変数変数
関数 メンバ関数、クラス関数
変数?変数
関数 メソッド
public
メンバ変数?
2016/4/25 71
private
メンバ変数、クラス変数変数
関数 メンバ関数、クラス関数
変数?変数
関数 メソッド
構造体 → クラス
2016/4/25 72
構造体 クラス
一番説得力があるこじ付けとしてはオブジェクト指向としての機能を使った構造体をクラス
そうでないほぼただの変数群としての機能のみのものを構造体というのが、
多分一番分かりやすいし伝わりやすい(面倒くさかったらオブジェクト指向言語の構造体は
みんなクラスといっちゃっても伝わります.)
なので詳細の説明はオブジェクト指向の解説の時にします.
クラスの生成
2016/4/25 73
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
クラスの生成
2016/4/25 74
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
先ずは型を定義して何が必要なのかを
明記する.
クラスの生成
2016/4/25 75
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
クラスとしてのメモリを確保しメンバ変数を
受け入れる準備を行う.
クラスの生成
2016/4/25 76
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
メモリを確保してメンバ変数の準備を行う.
クラスの生成 – オブジェクトって?
2016/4/25 77
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
クラス変数の総称のことです.
クラスの型を基にして作られたものは
全てobjectです.
言い換えればobject型を継承した変数という
言い方もできます.
クラスの生成
2016/4/25 78
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
気の向くままに使える範囲で使ってください.
クラスの生成
2016/4/25 79
型の定義 インスタンス
オブジェクト
の利用
オブジェクト
の破棄
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
クラス変数の
生成
役目を終えたらメモリを解放
ようやく本題
2016/4/25 80
ようやく本題のオブジェクト指向の話に入っていきます.
関数化 参照範囲
クラス
オブジェクト指向
オブジェクト指向の3大要素
2016/4/25 81
再利用性
余計なところは見せない
同じ機能を持ったものは纏める
同じような処理は纏める
オブジェクト指向の3大要素
2016/4/25 82
余計なところは見せない
同じ機能を持ったものは纏める
同じような処理は纏める
カプセル化
継承
ポリモーフィズム(多態性)
オブジェクト指向の3大要素 -カプセル化 -
2016/4/25 83
Characterクラス
名前[string]
HP[int]
画像パス[string]
テキスト[string]
物理ダメージ[int]
名前がぼこぼこ変わることは無い
画像パスはむしろ変わられたら困る
HPは頻繁に変わることがある
物理ダメージは特殊な計算結果で欲しい
オブジェクト指向の3大要素 -カプセル化 -
2016/4/25 84
名前がぼこぼこ変わることは無い
画像パスはむしろ変わられたら困る
HPは頻繁に変わることがある
取得○:設定△
取得△:設定×
取得○:設定○
物理ダメージは特殊な計算結果で欲しい 取得△:設定△
アクセス修飾子について
2016/4/25 85
public private protected internal
internal
protected
Characterクラス
名前[string](public)
HP[int](public)
攻撃力[int](private)
攻撃関数[int](public)
ダメージ関数[int](private)
左図のようにpublicは外部から干渉できる
がprivateは干渉することが出来ない
これを利用することで外部から不用意に
クラス内の変数を触らせないようにする
ことで保守性を高めることが出来る
アクセス修飾子について
2016/4/25 86
public private protected internal
internal
protected
Character派生クラス別クラス
Characterクラス
名前[string](public)
HP[int](private)
攻撃力[int](protected)
protectedは派生したクラスからのみ外部から干渉することができる
アクセス修飾子について
2016/4/25 87
public private protected internal
internal
protected
Characterクラスと
同じプロジェクト別プロジェクト
Characterクラス
名前[string](public)
HP[int](private)
攻撃力[int](internal)
internalは同じプロジェクト内であれば干渉することができる
アクセス修飾子について
2016/4/25 88
public private protected internal
internal
protected
Character派生クラス
and
同プロジェクト内
別クラス
or
別プロジェクト
Characterクラス
名前[string](public)
HP[int](private)
攻撃力[int](internal protected)
internal protectedはinternalとprotected双方の制限を受ける為、
同じプロジェクトで且つ派生クラスからのみ干渉することが出来るといったもの
オブジェクト指向の3大要素 -カプセル化 -
2016/4/25 89
名前がぼこぼこ変わることは無い
画像パスはむしろ変わられたら困る
HPは頻繁に変わることがある
public get:private set
private get:
public get:public set
物理ダメージは特殊な計算結果で欲しい private get:private get
オブジェクト指向の3大要素 -カプセル化 -
2016/4/25 90
物理ダメージは特殊な計算結果で欲しい private get:private get
public int Damage() { return ~ }
直接値を触らせるのではなく関節的に触らせることでクラス制作者の意図しない触
られ方をするのを防ぐことが出来る.
オブジェクト指向の3大要素 - 継承 -
2016/4/25 91
外部入力できるか
AIのアルゴリズム
プレイヤー エネミー
オブジェクト指向の3大要素 - 継承 -
2016/4/25 92
位置変数を持っている
攻撃力を持っている
HPを持っている
素材画像がある
プレイヤー エネミー
Characterクラス
オブジェクト指向の3大要素 - 継承 -
2016/4/25 93
プレイヤー エネミー
位置変数を持っている
攻撃力を持っている
HPを持っている
素材画像がある
Characterクラス
オブジェクト指向の3大要素 - 継承 -
2016/4/25 94
position
attackValue
hitPoint
picturePass
Playerクラス Enemyクラス
Characterクラス Characterクラス
Characterクラス
オブジェクト指向の3大要素 - 継承 -
2016/4/25 95
position
attackValue
hitPoint
picturePass
Playerクラス Enemyクラス
Characterクラス Characterクラス
外部入力できるか AIのアルゴリズム
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 96
Playerクラス Enemyクラス
Characterクラス Characterクラス
外部入力できるか AIのアルゴリズム
初期化 初期化
ロジック ロジック
描画 描画
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 97
Playerクラス Enemyクラス
Characterクラス Characterクラス
外部入力 AIのアルゴリズム
Player初期化 Enemy初期化
Playerロジック Enemyロジック
Player描画 Enemy描画
Characterクラス
初期化
ロジック
描画
変数群
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 98
Playerクラス Enemyクラス
Characterクラス Characterクラス
外部入力 AIのアルゴリズム
Player初期化 Enemy初期化
Playerロジック Enemyロジック
Player描画 Enemy描画
Main関数クラス
Player初期化
Enemy初期化
Playerロジック
Enemyロジック
Player描画
Enemy描画
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 99
Main関数クラス
Player初期化
Enemy初期化
Playerロジック
Enemyロジック
Player描画
Enemy描画
Main関数クラス
Player-Enemy初期化
Player-Enemyロジック
Player-Enemy描画
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 100
Main関数クラス
temp_Character初期化
temp_Characterロジック
temp_Character描画
Main関数クラス
Player-Enemy初期化
Player-Enemyロジック
Player-Enemy描画
Character temp_Character
= { Player, Enemy }
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 101
Playerクラス Inputクラス
Player初期化 Input初期化
Playerロジック Inputロジック
Player描画
Main関数クラス
Player初期化
Input初期化
Playerロジック
Inputロジック
Player描画
Characterクラス
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 102
Playerクラス Inputクラス
Player初期化 Input初期化
Playerロジック Inputロジック
Player描画
Main関数クラス(理想)
Player-Input初期化
Player-Inputロジック
Player描画
Characterクラス
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 103
ModuleInterfaceクラス
初期化
ロジック
Playerクラス Inputクラス
Player初期化 Input初期化
Playerロジック Inputロジック
Player描画
Characterクラス
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 104
ModuleInterfaceクラス
初期化
ロジック
Playerクラス Inputクラス
Player初期化 Input初期化
Playerロジック Inputロジック
Player描画
Characterクラス
ModuleInterfaceクラス ModuleInterfaceクラス
描画 Input描画(空)
オブジェクト指向の3大要素 – ポリモーフィズム -
2016/4/25 105
Main関数クラス
moduleIF初期化
moduleIFロジック
moduleIF描画
Main関数クラス(理想)
Player-Input初期化
Player-Inputロジック
Player描画
ModuleInterface moduleIF
= { Player, Input }
修飾子
2016/4/25 106
static readonlyconst
静的変数・関数・クラスを作る時に使用
修飾子
2016/4/25 107
static readonlyconst
定数などの変更されると困る変数に使用
修飾子
2016/4/25 108
static readonlyconst
コンストラクタ以外で触られると困る変数に使用
関数の修飾子
2016/4/25 109
Playerクラス
Characterクラス
new ロジック
Characterクラス
ロジック
変数群
new overridevirtual async
基底となるクラスに存在する関数と同名で同じ引数を有する関数を派生クラスで作
成しようとした際に明示的に基底クラスの関数を隠蔽する場合に使用
状況次第では基底クラスの隠蔽されている関数が呼ばれる
関数の修飾子
2016/4/25 110
new修飾子よりもより強固に基底クラスの関数を隠蔽する際に使用
new修飾子では基底クラスで派生クラスをcastした際に基底クラスのメンバ関数が呼
び出されてしまうがこちらの修飾子を利用すると上記のような状況でも派生クラス
が呼び出される
new overridevirtual async
Playerクラス
Characterクラス
override ロジック
Characterクラス
virtualロジック
変数群
async 関数
ロジック
関数の修飾子
2016/4/25 111
new overridevirtual async
非同期処理を行いたい時に使用
Main関数クラス
asymcロジック
ロジック
async 関数
ロジック
関数の修飾子
2016/4/25 112
new overridevirtual async
非同期処理を行いたい時に使用
Main関数クラス
asymcロジック
ロジック
クラスの修飾子
2016/4/25 113
new sealed partial
クラスをインスタンスする際に使用
Characterクラス
変数群
Characterクラス
変数群
interfaceabstract
クラスの修飾子
2016/4/25 114
new interface sealedabstract partial
その名の通り抽象的なクラスを記述する際に使用
ポリモーフィズムで記載したようなことをする際に
基底クラスが実態を持たない場合はこちらを使い、
実態を持ったクラス群の出入り口を作成したい場合は後述のinterfaceを使う
abstract Aクラス
abstract 関数群(中身無)
変数群
Playerクラス
Aクラス
拡張部
関数群(中身有)
クラスの修飾子
2016/4/25 115
new interface sealedabstract partial
abstract(抽象クラス)と似てるが、こちらは多重継承が可能
代わりに実装部を書くことが出来ない名の通りのインターフェイス記述用
interface Aクラス
関数群(中身無)
変数群
interface Bクラス
関数群(中身無)
変数群
Playerクラス
Aクラス
Bクラス
実装部
クラスの修飾子
2016/4/25 116
new sealed partial
継承を禁止するクラスに使用
interfaceabstract
Playerクラス
Characterクラス
sealed Characterクラス
ロジック
変数群
クラスの修飾子
2016/4/25 117
new sealed partial
この修飾子を付け記述されたクラスは複数のファイルに渡って記述を行うことが出
来る
なので、継承を使用しないでクラスの拡張を行いたい際などに使用
interfaceabstract
partial Characterクラス
拡張関数
partial Characterクラス
ロジックA
変数群 拡張変数群

More Related Content

Viewers also liked

Wedding Gallery - Thina Doukas Photography
Wedding Gallery - Thina Doukas PhotographyWedding Gallery - Thina Doukas Photography
Wedding Gallery - Thina Doukas PhotographyThina Doukas Photography
 
Tritt die Branche auf der Stelle - Trends und Zukunft des Online Fundraisings
Tritt die Branche auf der Stelle - Trends und Zukunft des Online FundraisingsTritt die Branche auf der Stelle - Trends und Zukunft des Online Fundraisings
Tritt die Branche auf der Stelle - Trends und Zukunft des Online FundraisingsEva Hieninger
 
Governor’s ball project FINAL
Governor’s ball project FINALGovernor’s ball project FINAL
Governor’s ball project FINALKyle Robinson
 
Online Marketing 1x1 für NGOs
Online Marketing 1x1 für NGOsOnline Marketing 1x1 für NGOs
Online Marketing 1x1 für NGOsEva Hieninger
 
(ONLINE) FUNDRAISING - Was Changemaker wissen müssen
(ONLINE) FUNDRAISING - Was Changemaker wissen müssen(ONLINE) FUNDRAISING - Was Changemaker wissen müssen
(ONLINE) FUNDRAISING - Was Changemaker wissen müssenEva Hieninger
 
מרינה - מצגת חומרים
מרינה  - מצגת חומריםמרינה  - מצגת חומרים
מרינה - מצגת חומריםAlex Rubanny
 

Viewers also liked (9)

Wedding Gallery - Thina Doukas Photography
Wedding Gallery - Thina Doukas PhotographyWedding Gallery - Thina Doukas Photography
Wedding Gallery - Thina Doukas Photography
 
Redvolucion
RedvolucionRedvolucion
Redvolucion
 
Night Dress For Women Sex
Night Dress For Women SexNight Dress For Women Sex
Night Dress For Women Sex
 
richard_p_Integration
richard_p_Integrationrichard_p_Integration
richard_p_Integration
 
Tritt die Branche auf der Stelle - Trends und Zukunft des Online Fundraisings
Tritt die Branche auf der Stelle - Trends und Zukunft des Online FundraisingsTritt die Branche auf der Stelle - Trends und Zukunft des Online Fundraisings
Tritt die Branche auf der Stelle - Trends und Zukunft des Online Fundraisings
 
Governor’s ball project FINAL
Governor’s ball project FINALGovernor’s ball project FINAL
Governor’s ball project FINAL
 
Online Marketing 1x1 für NGOs
Online Marketing 1x1 für NGOsOnline Marketing 1x1 für NGOs
Online Marketing 1x1 für NGOs
 
(ONLINE) FUNDRAISING - Was Changemaker wissen müssen
(ONLINE) FUNDRAISING - Was Changemaker wissen müssen(ONLINE) FUNDRAISING - Was Changemaker wissen müssen
(ONLINE) FUNDRAISING - Was Changemaker wissen müssen
 
מרינה - מצגת חומרים
מרינה  - מצגת חומריםמרינה  - מצגת חומרים
מרינה - מצגת חומרים
 

オブジェクト指向型プログラミング