Python.use(better) #OOP:振舞〔behavior〕

記事一覧 Python.use(better)《Python3.1》《復刻版》

OOP:振舞〔behavior〕

《著》真樹育未、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪1988/05/23 ● 第2版♪2001/01/29 ● 第3版♪2009/12/15

オブジェクト指向プログラミング〔OOP〕の基本概念の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。

オブジェクトの3要素

オブジェクトを特徴付ける3要素として、

  • 識別性〔identity〕
  • 状態〔state〕
  • 振舞〔behavior〕

が挙げられます。

■ 振舞

振舞は、メッセージを送受信すると、オブジェクトの状態が変化して、他のオブジェクトと相互作用する様子を規定します。

■ 事例1:クラス Fraction

クラス Fraction を事例に取り上げて、オブジェクトの振舞について考察します。

>>> from fractions import Fraction
>>> f = Fraction(3,4)
>>> f+1
Fraction(7, 4)
>>> f.__add__(2)
Fraction(7, 4)


クラス Fraction のインスタンス f は、演算子 +(メソッド呼び出し __add__)に呼応して、分数の和を表わす新たなインスタンスを生成します。つまり、Fraction オブジェクトが演算子 + に反応する振舞は、自身の状態を変化させずに「新たなインスタンスを生成する」という規定を満たすことで、正確に実現されます。

演算子を利用すると

演算子 + に呼応して、特殊メソッド __add__ が起動されます。

オブジェクトの内部構造を捨象すると、その全体像が見えてきます。関数オブジェクトは、関数呼び出しによって(引数を介して)他のオブジェクトと関連付けられ、リターン値(オブジェクト)を生成します。このとき、引数(変数と同様)によってオブジェクトは束縛されます。そして、メソッドの本体に記述したコードを実行した後で、引数による束縛は解かれます。

役目を終えた関数オブジェクト自身も、ガーベッジコレクション〔garbage collection〕の対象になります。つまり(他のオブジェクトと同様に)関数オブジェクトがどこからも参照されなくなると、そのオブジェクトに割り当てられたリソース(メモリー領域)を解放して、新たなオブジェクトを生成するために再利用されます。

オブジェクトの内部構造を探索すると、特殊メソッド __add__ の仮引数(self および other)によって、任意のオブジェクト(ここでは f1: Fraction(3, 4) および 1)を束縛する様子が分かります。

さらに、オブジェクトの内部構造を探索すると、仮引数 self を介して参照される分数オブジェクトが、属性変数(numerator および denominator)によって、任意のオブジェクト(ここでは 3 および 4)を束縛する様子が分かります。同様に、リターン値である分数オブジェクトが、属性変数(numerator および denominator)によって、任意のオブジェクト(ここでは 7 および 4)を束縛する様子が分かります。

もはや全体像を俯瞰すると、各オブジェクト(クラス、関数、整数など)の違いを、すぐには区別できなくなりました。しかし、それでいいのです。なぜなら「オブジェクト」という概念によって、これらの違いを捨象すると、共通する特徴に着目できるようになるからです。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/12/30