SlideShare a Scribd company logo
1 of 33
オブジェクト指向
プログラミング入門
ソフトウェア基礎講座 第 1 回
2011年2月9日
服部健太
オブジェクト指向とは
 “Object” は最も汎用的な英単語
 認識できるすべてのものはオブジェクトである
 要するにほとんど何の意味もない
 オブジェクト指向の決定的な定義はない
 いろいろな人がいろいろなことを言ってる
2011/2/9 オブジェクト指向プログラミング入門 1 2
2011/2/9 オブジェクト指向プログラミング入門 1 3
オブジェクト指向の重要な特徴
 カプセル化( Encapsulation )
 情報 / 実装の隠蔽( Information/implementation
hiding )
 状態保持( State retention )
 オブジェクトの固有性( Object identity )
 メッセージ( Messages )
 クラス( Classes )
 継承( Inheritance )
 多態性( Polymorphism )
 総称性( Genericity )
2011/2/9 オブジェクト指向プログラミング入門 1 4
カプセル化( Encapsulation )
 カプセル化の概念はソフトウェアと同じくらい古い
 1940 年くらいには,プログラマ達は同じような命
令のパターンが同じプログラムに何度も現れること
に気づいた
 人々は,そのような繰返しパターンはプログラムの
隅っこの箱の中に閉じ込めておき,メインプログラ
ムの異なる場所から単一の名前単一の名前で呼び出し得ること
を理解した
⇒  こうしてサブルーチン( subroutine )が発明されたカプセル化とは,関連する概念を一つのユ
ニットにグループ化し,それ以後,単一の名
前で参照できるようにすることである
2011/2/9 オブジェクト指向プログラミング入門 1 5
サブルーチン( Subroutine )
 サブルーチンは当時の貴重なメモリを節約する良い
手段だった
 後に人々は,人間の記憶も節約できることに気づい
た
 人が単一の観念として捉え,操作できる概念の塊として表
される
月々のローン
返済額の計算
元金
ローン期間
利率
返済額
ローンの許可
入力変数
出力変数サブルーチン
コードはサブルーチン
の中にカプセル化され
る
2011/2/9 オブジェクト指向プログラミング入門 1 6
オブジェクト指向におけるカプセル
化
 オブジェクト指向におけるカプセル化の目的もサブ
ルーチンのそれと同じ
 ただし,構造的にはより洗練されている
オブジェクト指向におけるカプセル化とは,
データを取り巻く手続きをグループ化したも
のである
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
メソッ
ド
変数
2011/2/9 オブジェクト指向プログラミング入門 1 7
オブジェクト指向におけるオブジェ
クト
 複数のメソッドと複数の変数から構成される
 変数はオブジェクトのメソッドからアクセス
され更新される
 それぞれの変数は非公開であり,他のオブ
ジェクトは変数に直接アクセスすることはで
きない
 他のオブジェクトがそのオブジェクトの変数の情
報が必要なら,そのオブジェクトのメソッドにお
願いしてアクセスする
2011/2/9 オブジェクト指向プログラミング入門 1 8
情報 / 実装の隠蔽
( Information/Implementation
Hiding ) カプセル化されたユニットは外( public view )と
内( private view )から眺めることができる
 良いカプセル化に対する報酬はプライベートビュー
に見られる無数のこまごまとしたことを,パブリッ
クビューでは伏せておけることである
 情報の隠蔽と実装の隠蔽
情報 / 実装の隠蔽とは,カプセル化された構
造の内側にある特定の情報や実装上の決定に
ついて,外部への見せ方を制限することであ
る
2011/2/9 オブジェクト指向プログラミング入門 1 9
情報 / 実装隠蔽によるオブジェクト
のブラックボックス化
 外部の観察者は,オブジェクトが何( what )がで
きるかについては知っている
 オブジェクトがどのように( how )するのか,中
がどうなってるのか,についてはまったく知らない
 情報 / 実装隠蔽の2つの利点
 設計上の決定を局所化する
 情報の内容を表現の形式と分離する
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
2011/2/9 オブジェクト指向プログラミング入門 1 10
状態の保持( State Retention )
 オブジェクトは状態を保つことができる
 伝統的な手続きモジュール(関数,副プログラム
,手続き,など)では,呼び出し元に戻ってその
モジュールが終了すると,結果だけが残る
 同じモジュールが再び呼ばれても,あたかも最初
に呼び出されたかのように生み出される
 オブジェクトは情報をそれ自身の中に無期限
に保持する
2011/2/9 オブジェクト指向プログラミング入門 1 11
抽象データ型( ADT )
 カプセル化,情報 / 実装隠蔽,状態の保持は
,オブジェクト指向の核ではあるが,新しい
アイディアではない
 計算機科学者たちは,それらを抽象データ型の分
野として何年もの間,研究してきた
 オブジェクト指向は ADT よりさらに進んで
,以降に示すような特徴を持つ
2011/2/9 オブジェクト指向プログラミング入門 1 12
オブジェクトの固有性( Object
Identity )
 オブジェクト指向の決定的な特徴は,それぞれのオ
ブジェクトが固有のアイデンティティを持つことに
ある
 仲間のオブジェクトと区別するための何かユニーク
なものがある
 オブジェクトハンドル機構によって提供される
オブジェクトの固有性とは,各オブジェクト
が異なるソフトウェア実体として識別され,
扱われるという特性である
2011/2/9 オブジェクト指向プログラミング入門 1 13
142857
102237
オブジェクトハンドル
 そのオブジェクトに何が起ころうとも,オブジェクトが生きて
いる限りハンドルは同じものであり続ける
 2つのオブジェクトが同じハンドルを持つことはない
 システムがオブジェクトを生成するときは常にそれぞれ異なる
(過去,現在,未来を通じて)ようなハンドルを割当てる
 2つのオブジェクトが,たとえ同じ構造と情報を持っていたと
しても,それらは区別される
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
2011/2/9 オブジェクト指向プログラミング入門 1 14
オブジェクトハンドル(2)
 プログラマやユーザが実際に新しいオブジェクトのハンドル
( 102237 )をみることは出来ない
 代わりに変数 hom1 を通じてオブジェクトにアクセスする
 オブジェクトのメモリ番地をハンドルとして使用するオブジェ
クト指向環境もある
 シンプルではあるがオブジェクトがメモリ中を移動したらいや
な感じになる
102237
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
142857
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
102237 142857
hom1 hom2
var hom1 := HOMINOID.new; var hom2 := HOMINOID.new;
2011/2/9 オブジェクト指向プログラミング入門 1 15
オブジェクトハンドル(3)
 hom2 := hom1  したら...
 オブジェクト 142857 にはもはやアクセス不可能となる
 多くのオブジェクト指向環境ではガーベッジコレクタによって
メモリから回収される
102237
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
142857
direction
location
set-in-grid
turn-left
turn-right
advance location
facing-wall
display
102237 102237
hom1 hom2
2011/2/9 オブジェクト指向プログラミング入門 1 16
メッセージ( Messages )
 オブジェクトは別のオブジェクトに対して,
メッセージによってアクティビティを遂行す
る
 典型的なメッセージでは,一つのオブジェク
トから別のオブジェクトに対して何らかの情
報を運ぶメッセージは送信者オブジェクト ob1 があて
先オブジェクト ob2 に対して, ob2 がそのメ
ソッドの一つに適用するための要求物を運ぶ
手段である
2011/2/9 オブジェクト指向プログラミング入門 1 17
メッセージの構造
 Ob1 が ob2 にメッセージを送るには, ob1 は以下の3つを知っ
てる必要がある
 Ob2 のハンドル
 Ob2 のメソッド名
 Ob2 がメソッド実行に必要とする追加的な情報(引数)
 メッセージ送信の例:
hom1.turn-left;
 オブジェクトにお願いする
 伝統的な手続き(関数)呼び出しと逆になってる
call turn-left(hom1);
 手続きユニットにお願いする
 多態,オーバロード,動的束縛を議論するとき,この逆転は実
際上重要な違いをもたらす
2011/2/9 オブジェクト指向プログラミング入門 1 18
メッセージ引数
hom1.advance(no-of-squares; advance-ok)
 純粋なオブジェクト指向環境では,メッセージの引
数はオブジェクトのハンドルである
あて先オブジェクト
メソッド名
入力引数 出力引数
シグネチャ
メッセージ
2011/2/9 オブジェクト指向プログラミング入門 1 19
メッセージにおけるオブジェクトの
役割
 メッセージの送信者
 メッセージのあて先
 別のオブジェクトの中の変数から指されるも
の
 メッセージの引数から指されるもの
method
2011/2/9 オブジェクト指向プログラミング入門 1 20
メッセージの種類
 情報メッセージ(過去指向)
 オブジェクトに情報を提供し,更新させる
 例: hom1.set-in-grid
 質問メッセージ(現在指向)
 オブジェクトの情報を明かすように要求する
 例: hom1.location
 命令メッセージ(未来指向)
 オブジェクトにあるアクションをするように要求
する
 例: hom1.advance
2011/2/9 オブジェクト指向プログラミング入門 1 21
クラス( Classes )
 クラスとオブジェクトの違い
 クラスはあなたが設計しプログラムするもの
 オブジェクトとはあなたが実行時に(クラスか
ら)生成しようとするもの
クラスとは,そこからオブジェクトが生成
(具体化)される雛形である.各オブジェク
トはそれの生成元であるクラスと同じ構造と
振る舞いを持つ
オブジェクト ob がクラス C に属するとき,
「 ob は C のインスタンスである」と言う
2011/2/9 オブジェクト指向プログラミング入門 1 22
オブジェクトに必要なメモリ
 概念図
 実際の実装
object1
method-a
method-b
var-v
handle
method-c
method-d
var-w
var-x
var-y
var-z
400
bytes
10 bytes
6 bytes
object2
method-a
method-b
var-v
handle
method-c
method-d
var-w
var-x
var-y
var-z
400
bytes
10 bytes
6 bytes
object3
method-a
method-b
var-v
handle
method-c
method-d
var-w
var-x
var-y
var-z
400
bytes
10 bytes
6 bytes
object
1
method-a
method-b
var-v
handle
method-c
method-d
var-w
var-x
var-y
var-z
400
bytes
16 bytes
object
2
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
3
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
4
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
5
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
6
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
・・・
2011/2/9 オブジェクト指向プログラミング入門 1 23
クラスメソッド,クラス変数
 どれだけ多くオブジェクトがインスタンス化されよ
うとも,ちょうど一セットだけのクラスメソッドと
クラス変数がある
 クラスメソッドとクラス変数は個々のオブジェクト
の責務でまかないきれない状況を扱うのに必要
 例: new メソッド, no-of-hominoids-created 変数 , etc.object
1
method-a
method-b
var-v
handle
method-c
method-d
var-w
var-x
var-y
var-z
400
bytes
16 bytes
object
2
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
3
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
4
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
5
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
object
6
var-v
handle
var-w
var-x
var-y
var-z
16 bytes
・・・
method-c
method-f
var-p
var-q
var-r
クラス変
数
クラス
メソッ
ド
インスタン
ス
メソッド
インス
タンス
変数
2011/2/9 オブジェクト指向プログラミング入門 1 24
継承( Inheritance )
 クラス C を書いた後で,いくつかのメソッドを除い
てほとんど同じようなクラス D が必要だとわかった
らどうする?
 コピペコードはメンテナンス上よろしくない
( D による C からの)継承とは,クラス D
のオブジェクトがクラス C のオブジェクトに
利用可能なメソッドと変数を,あたかも D で
定義されたメソッドや変数のように使えるよ
うにする機能のことである.
C は D のスーパークラスと呼ばれる. D は C
のサブクラスである.
2011/2/9 オブジェクト指向プログラミング入門 1 25
継承の例
var ac := AIRCRAFT.new;
var gl := GLIDER.new;
…
ac.turn(new-course;turn-ok); // OK
gl.release-towline; // OK
gl.turn(new-course;turn-ok); // OK
ac.release-towline; // NG
…
AIRCRAFT
course
turn()
GLIDER
whether-attached
release-towline()
2011/2/9 オブジェクト指向プログラミング入門 1 26
is-a 関係
 継承関係が適切かチェックする
 「 D は C である」と言えるなら, D はほぼ
確実に C のサブクラスである
 グライダーは航空機である (A glider is an aircraft)
2011/2/9 オブジェクト指向プログラミング入門 1 27
単一継承と多重継承
 多重継承では,単一継承における継承木が継
承格子( lattice )となる
 多重継承は設計上の困難な問題をもたらす
AIRCRAFT PASSENGER
-VEHICLE
PASSENGER
-AIRCRAFT
2011/2/9 オブジェクト指向プログラミング入門 1 28
多態性( Polymorphism )
 ありがちな例
(a) 多態性とは,単一のメソッド名が複数の
クラス上で定義され,それらのクラスにおい
て異なる実装を取りうる機能である
(b) 多態性とは,一つの変数が異なる時点の
異なるクラスを指すことによる特徴である.
POLYGON
area()
TRIANGLE
area()
RECTANGLE
area()
HEXAGON
2011/2/9 オブジェクト指向プログラミング入門 1 29
動的束縛( dynamic binding )
var p : POLYGON;
var t := TRIANGLE.new;
var h := HEXAGON.new;
…
If user says OK
then p:= t;
else p:=   h;
…
p.area(); // p は TRAIANGLE か HEXAGON のどちらか
動的束縛(実行時束縛や遅延束縛ともいう)
とは,実際に実行されるべきコードを(コン
パイル時ではなく)実行時に決める技術であ
る
オーバーライドとオーバーロード
 オーバーライド( overriding )
 クラス C で定義されたメソッドを C のサブクラスの
中で再定義すること
 オーバーロード( overloading )
 同一のクラス上に定義されたいくつかのメソッド(や
演算子)が同じ名前やシンボルを持つとき,名前やシ
ンボルがオーバーロードされたという
 多態性と関連した概念だが,オーバーライドとごっ
ちゃにしないこと
 メソッドのどのコードが実行されるかはシグネチャに
よって決まる
product1.mark-down()
product1.mark-down(huge-percentage)
2011/2/9 オブジェクト指向プログラミング入門 1 30
総称性( Genericity )
 コードをコピペしなくても済む技術
2011/2/9 オブジェクト指向プログラミング入門 1 31
総称性とは,あるクラス C を,1つかそれ以
上のクラスとして実行時(クラス C のオブ
ジェクトがインスタンス化されたとき)に供
給されるように構築することである.
総称的な TREE クラスの例
class TREE [NODE-ITEM];
…
var current-node := NODE-ITEM.new;
…
current-node.print();
2011/2/9 オブジェクト指向プログラミング入門 1 32
26
17 42
14 22 44
10 15 29 34
31
Mike
Dave Ted
Bob Fred Zack
Alice Carol Norb Rud
Pat
var prod-tree := TREE.new[PRODID]; var cust-tree := TREE.new[CUSTOMER];
次回予定
 日時:2011年2月16日(水)
 場所: LB2  2 F / A 会議室
 内容:モジュール
2011/2/9 オブジェクト指向プログラミング入門 1 33

More Related Content

What's hot

3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計増田 亨
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話dcubeio
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニックHidekatsu Izuno
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
DMBOKをベースにしたデータマネジメント
DMBOKをベースにしたデータマネジメントDMBOKをベースにしたデータマネジメント
DMBOKをベースにしたデータマネジメントKent Ishizawa
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)Koichiro Matsuoka
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪崇之 清水
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組みTakayuki Shimizukawa
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)増田 亨
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 

What's hot (20)

3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
凝集度と責務
凝集度と責務凝集度と責務
凝集度と責務
 
DMBOKをベースにしたデータマネジメント
DMBOKをベースにしたデータマネジメントDMBOKをベースにしたデータマネジメント
DMBOKをベースにしたデータマネジメント
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
形態素解析
形態素解析形態素解析
形態素解析
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 

Similar to オブジェクト指向入門1

~PHPで学ぶ~ オブジェクト指向プログラミング
~PHPで学ぶ~ オブジェクト指向プログラミング~PHPで学ぶ~ オブジェクト指向プログラミング
~PHPで学ぶ~ オブジェクト指向プログラミングJunRails
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向hakoika-itwg
 
オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?sumim
 
オブジェクト指向講座
オブジェクト指向講座オブジェクト指向講座
オブジェクト指向講座Kaito Sato
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向keki3
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514龍一 田中
 
早稲田大学授業 - Java Programing上級
早稲田大学授業 - Java Programing上級早稲田大学授業 - Java Programing上級
早稲田大学授業 - Java Programing上級Ippei Arita
 
CVPR2011祭り 発表スライド
CVPR2011祭り 発表スライドCVPR2011祭り 発表スライド
CVPR2011祭り 発表スライドAkisato Kimura
 

Similar to オブジェクト指向入門1 (10)

~PHPで学ぶ~ オブジェクト指向プログラミング
~PHPで学ぶ~ オブジェクト指向プログラミング~PHPで学ぶ~ オブジェクト指向プログラミング
~PHPで学ぶ~ オブジェクト指向プログラミング
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
 
オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?
 
オブジェクト指向講座
オブジェクト指向講座オブジェクト指向講座
オブジェクト指向講座
 
2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向2019年度 若手技術者向け講座 オブジェクト指向
2019年度 若手技術者向け講座 オブジェクト指向
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514
 
早稲田大学授業 - Java Programing上級
早稲田大学授業 - Java Programing上級早稲田大学授業 - Java Programing上級
早稲田大学授業 - Java Programing上級
 
Cpp v3
Cpp v3Cpp v3
Cpp v3
 
CVPR2011祭り 発表スライド
CVPR2011祭り 発表スライドCVPR2011祭り 発表スライド
CVPR2011祭り 発表スライド
 
I lang-modeling
I lang-modelingI lang-modeling
I lang-modeling
 

More from Kenta Hattori

オブジェクト指向入門2
オブジェクト指向入門2オブジェクト指向入門2
オブジェクト指向入門2Kenta Hattori
 
オブジェクト指向入門10
オブジェクト指向入門10オブジェクト指向入門10
オブジェクト指向入門10Kenta Hattori
 
オブジェクト指向入門9
オブジェクト指向入門9オブジェクト指向入門9
オブジェクト指向入門9Kenta Hattori
 
オブジェクト指向入門8
オブジェクト指向入門8オブジェクト指向入門8
オブジェクト指向入門8Kenta Hattori
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7Kenta Hattori
 
オブジェクト指向入門6
オブジェクト指向入門6オブジェクト指向入門6
オブジェクト指向入門6Kenta Hattori
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5Kenta Hattori
 
オブジェクト指向入門4
オブジェクト指向入門4オブジェクト指向入門4
オブジェクト指向入門4Kenta Hattori
 
オブジェクト指向入門3
オブジェクト指向入門3オブジェクト指向入門3
オブジェクト指向入門3Kenta Hattori
 
ソフトウェア・テスト入門2
ソフトウェア・テスト入門2ソフトウェア・テスト入門2
ソフトウェア・テスト入門2Kenta Hattori
 
ソフトウェア・テスト入門1
ソフトウェア・テスト入門1ソフトウェア・テスト入門1
ソフトウェア・テスト入門1Kenta Hattori
 
ソフトウェア・テスト入門8
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8Kenta Hattori
 
ソフトウェア・テスト入門7
ソフトウェア・テスト入門7ソフトウェア・テスト入門7
ソフトウェア・テスト入門7Kenta Hattori
 
ソフトウェア・テスト入門6
ソフトウェア・テスト入門6ソフトウェア・テスト入門6
ソフトウェア・テスト入門6Kenta Hattori
 
ソフトウェア・テスト入門5
ソフトウェア・テスト入門5ソフトウェア・テスト入門5
ソフトウェア・テスト入門5Kenta Hattori
 
ソフトウェア・テスト入門4
ソフトウェア・テスト入門4ソフトウェア・テスト入門4
ソフトウェア・テスト入門4Kenta Hattori
 
ソフトウェア・テスト入門3
ソフトウェア・テスト入門3ソフトウェア・テスト入門3
ソフトウェア・テスト入門3Kenta Hattori
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15Kenta Hattori
 
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14アルゴリズムとデータ構造14
アルゴリズムとデータ構造14Kenta Hattori
 
アルゴリズムとデータ構造13
アルゴリズムとデータ構造13アルゴリズムとデータ構造13
アルゴリズムとデータ構造13Kenta Hattori
 

More from Kenta Hattori (20)

オブジェクト指向入門2
オブジェクト指向入門2オブジェクト指向入門2
オブジェクト指向入門2
 
オブジェクト指向入門10
オブジェクト指向入門10オブジェクト指向入門10
オブジェクト指向入門10
 
オブジェクト指向入門9
オブジェクト指向入門9オブジェクト指向入門9
オブジェクト指向入門9
 
オブジェクト指向入門8
オブジェクト指向入門8オブジェクト指向入門8
オブジェクト指向入門8
 
オブジェクト指向入門7
オブジェクト指向入門7オブジェクト指向入門7
オブジェクト指向入門7
 
オブジェクト指向入門6
オブジェクト指向入門6オブジェクト指向入門6
オブジェクト指向入門6
 
オブジェクト指向入門5
オブジェクト指向入門5オブジェクト指向入門5
オブジェクト指向入門5
 
オブジェクト指向入門4
オブジェクト指向入門4オブジェクト指向入門4
オブジェクト指向入門4
 
オブジェクト指向入門3
オブジェクト指向入門3オブジェクト指向入門3
オブジェクト指向入門3
 
ソフトウェア・テスト入門2
ソフトウェア・テスト入門2ソフトウェア・テスト入門2
ソフトウェア・テスト入門2
 
ソフトウェア・テスト入門1
ソフトウェア・テスト入門1ソフトウェア・テスト入門1
ソフトウェア・テスト入門1
 
ソフトウェア・テスト入門8
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8
 
ソフトウェア・テスト入門7
ソフトウェア・テスト入門7ソフトウェア・テスト入門7
ソフトウェア・テスト入門7
 
ソフトウェア・テスト入門6
ソフトウェア・テスト入門6ソフトウェア・テスト入門6
ソフトウェア・テスト入門6
 
ソフトウェア・テスト入門5
ソフトウェア・テスト入門5ソフトウェア・テスト入門5
ソフトウェア・テスト入門5
 
ソフトウェア・テスト入門4
ソフトウェア・テスト入門4ソフトウェア・テスト入門4
ソフトウェア・テスト入門4
 
ソフトウェア・テスト入門3
ソフトウェア・テスト入門3ソフトウェア・テスト入門3
ソフトウェア・テスト入門3
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
 
アルゴリズムとデータ構造14
アルゴリズムとデータ構造14アルゴリズムとデータ構造14
アルゴリズムとデータ構造14
 
アルゴリズムとデータ構造13
アルゴリズムとデータ構造13アルゴリズムとデータ構造13
アルゴリズムとデータ構造13
 

Recently uploaded

【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 

Recently uploaded (20)

【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 

オブジェクト指向入門1

  • 2. オブジェクト指向とは  “Object” は最も汎用的な英単語  認識できるすべてのものはオブジェクトである  要するにほとんど何の意味もない  オブジェクト指向の決定的な定義はない  いろいろな人がいろいろなことを言ってる 2011/2/9 オブジェクト指向プログラミング入門 1 2
  • 3. 2011/2/9 オブジェクト指向プログラミング入門 1 3 オブジェクト指向の重要な特徴  カプセル化( Encapsulation )  情報 / 実装の隠蔽( Information/implementation hiding )  状態保持( State retention )  オブジェクトの固有性( Object identity )  メッセージ( Messages )  クラス( Classes )  継承( Inheritance )  多態性( Polymorphism )  総称性( Genericity )
  • 4. 2011/2/9 オブジェクト指向プログラミング入門 1 4 カプセル化( Encapsulation )  カプセル化の概念はソフトウェアと同じくらい古い  1940 年くらいには,プログラマ達は同じような命 令のパターンが同じプログラムに何度も現れること に気づいた  人々は,そのような繰返しパターンはプログラムの 隅っこの箱の中に閉じ込めておき,メインプログラ ムの異なる場所から単一の名前単一の名前で呼び出し得ること を理解した ⇒  こうしてサブルーチン( subroutine )が発明されたカプセル化とは,関連する概念を一つのユ ニットにグループ化し,それ以後,単一の名 前で参照できるようにすることである
  • 5. 2011/2/9 オブジェクト指向プログラミング入門 1 5 サブルーチン( Subroutine )  サブルーチンは当時の貴重なメモリを節約する良い 手段だった  後に人々は,人間の記憶も節約できることに気づい た  人が単一の観念として捉え,操作できる概念の塊として表 される 月々のローン 返済額の計算 元金 ローン期間 利率 返済額 ローンの許可 入力変数 出力変数サブルーチン コードはサブルーチン の中にカプセル化され る
  • 6. 2011/2/9 オブジェクト指向プログラミング入門 1 6 オブジェクト指向におけるカプセル 化  オブジェクト指向におけるカプセル化の目的もサブ ルーチンのそれと同じ  ただし,構造的にはより洗練されている オブジェクト指向におけるカプセル化とは, データを取り巻く手続きをグループ化したも のである direction location set-in-grid turn-left turn-right advance location facing-wall display メソッ ド 変数
  • 7. 2011/2/9 オブジェクト指向プログラミング入門 1 7 オブジェクト指向におけるオブジェ クト  複数のメソッドと複数の変数から構成される  変数はオブジェクトのメソッドからアクセス され更新される  それぞれの変数は非公開であり,他のオブ ジェクトは変数に直接アクセスすることはで きない  他のオブジェクトがそのオブジェクトの変数の情 報が必要なら,そのオブジェクトのメソッドにお 願いしてアクセスする
  • 8. 2011/2/9 オブジェクト指向プログラミング入門 1 8 情報 / 実装の隠蔽 ( Information/Implementation Hiding ) カプセル化されたユニットは外( public view )と 内( private view )から眺めることができる  良いカプセル化に対する報酬はプライベートビュー に見られる無数のこまごまとしたことを,パブリッ クビューでは伏せておけることである  情報の隠蔽と実装の隠蔽 情報 / 実装の隠蔽とは,カプセル化された構 造の内側にある特定の情報や実装上の決定に ついて,外部への見せ方を制限することであ る
  • 9. 2011/2/9 オブジェクト指向プログラミング入門 1 9 情報 / 実装隠蔽によるオブジェクト のブラックボックス化  外部の観察者は,オブジェクトが何( what )がで きるかについては知っている  オブジェクトがどのように( how )するのか,中 がどうなってるのか,についてはまったく知らない  情報 / 実装隠蔽の2つの利点  設計上の決定を局所化する  情報の内容を表現の形式と分離する set-in-grid turn-left turn-right advance location facing-wall display
  • 10. 2011/2/9 オブジェクト指向プログラミング入門 1 10 状態の保持( State Retention )  オブジェクトは状態を保つことができる  伝統的な手続きモジュール(関数,副プログラム ,手続き,など)では,呼び出し元に戻ってその モジュールが終了すると,結果だけが残る  同じモジュールが再び呼ばれても,あたかも最初 に呼び出されたかのように生み出される  オブジェクトは情報をそれ自身の中に無期限 に保持する
  • 11. 2011/2/9 オブジェクト指向プログラミング入門 1 11 抽象データ型( ADT )  カプセル化,情報 / 実装隠蔽,状態の保持は ,オブジェクト指向の核ではあるが,新しい アイディアではない  計算機科学者たちは,それらを抽象データ型の分 野として何年もの間,研究してきた  オブジェクト指向は ADT よりさらに進んで ,以降に示すような特徴を持つ
  • 12. 2011/2/9 オブジェクト指向プログラミング入門 1 12 オブジェクトの固有性( Object Identity )  オブジェクト指向の決定的な特徴は,それぞれのオ ブジェクトが固有のアイデンティティを持つことに ある  仲間のオブジェクトと区別するための何かユニーク なものがある  オブジェクトハンドル機構によって提供される オブジェクトの固有性とは,各オブジェクト が異なるソフトウェア実体として識別され, 扱われるという特性である
  • 13. 2011/2/9 オブジェクト指向プログラミング入門 1 13 142857 102237 オブジェクトハンドル  そのオブジェクトに何が起ころうとも,オブジェクトが生きて いる限りハンドルは同じものであり続ける  2つのオブジェクトが同じハンドルを持つことはない  システムがオブジェクトを生成するときは常にそれぞれ異なる (過去,現在,未来を通じて)ようなハンドルを割当てる  2つのオブジェクトが,たとえ同じ構造と情報を持っていたと しても,それらは区別される direction location set-in-grid turn-left turn-right advance location facing-wall display direction location set-in-grid turn-left turn-right advance location facing-wall display
  • 14. 2011/2/9 オブジェクト指向プログラミング入門 1 14 オブジェクトハンドル(2)  プログラマやユーザが実際に新しいオブジェクトのハンドル ( 102237 )をみることは出来ない  代わりに変数 hom1 を通じてオブジェクトにアクセスする  オブジェクトのメモリ番地をハンドルとして使用するオブジェ クト指向環境もある  シンプルではあるがオブジェクトがメモリ中を移動したらいや な感じになる 102237 direction location set-in-grid turn-left turn-right advance location facing-wall display 142857 direction location set-in-grid turn-left turn-right advance location facing-wall display 102237 142857 hom1 hom2 var hom1 := HOMINOID.new; var hom2 := HOMINOID.new;
  • 15. 2011/2/9 オブジェクト指向プログラミング入門 1 15 オブジェクトハンドル(3)  hom2 := hom1  したら...  オブジェクト 142857 にはもはやアクセス不可能となる  多くのオブジェクト指向環境ではガーベッジコレクタによって メモリから回収される 102237 direction location set-in-grid turn-left turn-right advance location facing-wall display 142857 direction location set-in-grid turn-left turn-right advance location facing-wall display 102237 102237 hom1 hom2
  • 16. 2011/2/9 オブジェクト指向プログラミング入門 1 16 メッセージ( Messages )  オブジェクトは別のオブジェクトに対して, メッセージによってアクティビティを遂行す る  典型的なメッセージでは,一つのオブジェク トから別のオブジェクトに対して何らかの情 報を運ぶメッセージは送信者オブジェクト ob1 があて 先オブジェクト ob2 に対して, ob2 がそのメ ソッドの一つに適用するための要求物を運ぶ 手段である
  • 17. 2011/2/9 オブジェクト指向プログラミング入門 1 17 メッセージの構造  Ob1 が ob2 にメッセージを送るには, ob1 は以下の3つを知っ てる必要がある  Ob2 のハンドル  Ob2 のメソッド名  Ob2 がメソッド実行に必要とする追加的な情報(引数)  メッセージ送信の例: hom1.turn-left;  オブジェクトにお願いする  伝統的な手続き(関数)呼び出しと逆になってる call turn-left(hom1);  手続きユニットにお願いする  多態,オーバロード,動的束縛を議論するとき,この逆転は実 際上重要な違いをもたらす
  • 18. 2011/2/9 オブジェクト指向プログラミング入門 1 18 メッセージ引数 hom1.advance(no-of-squares; advance-ok)  純粋なオブジェクト指向環境では,メッセージの引 数はオブジェクトのハンドルである あて先オブジェクト メソッド名 入力引数 出力引数 シグネチャ メッセージ
  • 19. 2011/2/9 オブジェクト指向プログラミング入門 1 19 メッセージにおけるオブジェクトの 役割  メッセージの送信者  メッセージのあて先  別のオブジェクトの中の変数から指されるも の  メッセージの引数から指されるもの method
  • 20. 2011/2/9 オブジェクト指向プログラミング入門 1 20 メッセージの種類  情報メッセージ(過去指向)  オブジェクトに情報を提供し,更新させる  例: hom1.set-in-grid  質問メッセージ(現在指向)  オブジェクトの情報を明かすように要求する  例: hom1.location  命令メッセージ(未来指向)  オブジェクトにあるアクションをするように要求 する  例: hom1.advance
  • 21. 2011/2/9 オブジェクト指向プログラミング入門 1 21 クラス( Classes )  クラスとオブジェクトの違い  クラスはあなたが設計しプログラムするもの  オブジェクトとはあなたが実行時に(クラスか ら)生成しようとするもの クラスとは,そこからオブジェクトが生成 (具体化)される雛形である.各オブジェク トはそれの生成元であるクラスと同じ構造と 振る舞いを持つ オブジェクト ob がクラス C に属するとき, 「 ob は C のインスタンスである」と言う
  • 22. 2011/2/9 オブジェクト指向プログラミング入門 1 22 オブジェクトに必要なメモリ  概念図  実際の実装 object1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object2 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object3 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 10 bytes 6 bytes object 1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 16 bytes object 2 var-v handle var-w var-x var-y var-z 16 bytes object 3 var-v handle var-w var-x var-y var-z 16 bytes object 4 var-v handle var-w var-x var-y var-z 16 bytes object 5 var-v handle var-w var-x var-y var-z 16 bytes object 6 var-v handle var-w var-x var-y var-z 16 bytes ・・・
  • 23. 2011/2/9 オブジェクト指向プログラミング入門 1 23 クラスメソッド,クラス変数  どれだけ多くオブジェクトがインスタンス化されよ うとも,ちょうど一セットだけのクラスメソッドと クラス変数がある  クラスメソッドとクラス変数は個々のオブジェクト の責務でまかないきれない状況を扱うのに必要  例: new メソッド, no-of-hominoids-created 変数 , etc.object 1 method-a method-b var-v handle method-c method-d var-w var-x var-y var-z 400 bytes 16 bytes object 2 var-v handle var-w var-x var-y var-z 16 bytes object 3 var-v handle var-w var-x var-y var-z 16 bytes object 4 var-v handle var-w var-x var-y var-z 16 bytes object 5 var-v handle var-w var-x var-y var-z 16 bytes object 6 var-v handle var-w var-x var-y var-z 16 bytes ・・・ method-c method-f var-p var-q var-r クラス変 数 クラス メソッ ド インスタン ス メソッド インス タンス 変数
  • 24. 2011/2/9 オブジェクト指向プログラミング入門 1 24 継承( Inheritance )  クラス C を書いた後で,いくつかのメソッドを除い てほとんど同じようなクラス D が必要だとわかった らどうする?  コピペコードはメンテナンス上よろしくない ( D による C からの)継承とは,クラス D のオブジェクトがクラス C のオブジェクトに 利用可能なメソッドと変数を,あたかも D で 定義されたメソッドや変数のように使えるよ うにする機能のことである. C は D のスーパークラスと呼ばれる. D は C のサブクラスである.
  • 25. 2011/2/9 オブジェクト指向プログラミング入門 1 25 継承の例 var ac := AIRCRAFT.new; var gl := GLIDER.new; … ac.turn(new-course;turn-ok); // OK gl.release-towline; // OK gl.turn(new-course;turn-ok); // OK ac.release-towline; // NG … AIRCRAFT course turn() GLIDER whether-attached release-towline()
  • 26. 2011/2/9 オブジェクト指向プログラミング入門 1 26 is-a 関係  継承関係が適切かチェックする  「 D は C である」と言えるなら, D はほぼ 確実に C のサブクラスである  グライダーは航空機である (A glider is an aircraft)
  • 27. 2011/2/9 オブジェクト指向プログラミング入門 1 27 単一継承と多重継承  多重継承では,単一継承における継承木が継 承格子( lattice )となる  多重継承は設計上の困難な問題をもたらす AIRCRAFT PASSENGER -VEHICLE PASSENGER -AIRCRAFT
  • 28. 2011/2/9 オブジェクト指向プログラミング入門 1 28 多態性( Polymorphism )  ありがちな例 (a) 多態性とは,単一のメソッド名が複数の クラス上で定義され,それらのクラスにおい て異なる実装を取りうる機能である (b) 多態性とは,一つの変数が異なる時点の 異なるクラスを指すことによる特徴である. POLYGON area() TRIANGLE area() RECTANGLE area() HEXAGON
  • 29. 2011/2/9 オブジェクト指向プログラミング入門 1 29 動的束縛( dynamic binding ) var p : POLYGON; var t := TRIANGLE.new; var h := HEXAGON.new; … If user says OK then p:= t; else p:=   h; … p.area(); // p は TRAIANGLE か HEXAGON のどちらか 動的束縛(実行時束縛や遅延束縛ともいう) とは,実際に実行されるべきコードを(コン パイル時ではなく)実行時に決める技術であ る
  • 30. オーバーライドとオーバーロード  オーバーライド( overriding )  クラス C で定義されたメソッドを C のサブクラスの 中で再定義すること  オーバーロード( overloading )  同一のクラス上に定義されたいくつかのメソッド(や 演算子)が同じ名前やシンボルを持つとき,名前やシ ンボルがオーバーロードされたという  多態性と関連した概念だが,オーバーライドとごっ ちゃにしないこと  メソッドのどのコードが実行されるかはシグネチャに よって決まる product1.mark-down() product1.mark-down(huge-percentage) 2011/2/9 オブジェクト指向プログラミング入門 1 30
  • 31. 総称性( Genericity )  コードをコピペしなくても済む技術 2011/2/9 オブジェクト指向プログラミング入門 1 31 総称性とは,あるクラス C を,1つかそれ以 上のクラスとして実行時(クラス C のオブ ジェクトがインスタンス化されたとき)に供 給されるように構築することである.
  • 32. 総称的な TREE クラスの例 class TREE [NODE-ITEM]; … var current-node := NODE-ITEM.new; … current-node.print(); 2011/2/9 オブジェクト指向プログラミング入門 1 32 26 17 42 14 22 44 10 15 29 34 31 Mike Dave Ted Bob Fred Zack Alice Carol Norb Rud Pat var prod-tree := TREE.new[PRODID]; var cust-tree := TREE.new[CUSTOMER];
  • 33. 次回予定  日時:2011年2月16日(水)  場所: LB2  2 F / A 会議室  内容:モジュール 2011/2/9 オブジェクト指向プログラミング入門 1 33