Python.use(better) #OOP:振舞〔behavior〕
‖記事一覧‖ Python.use(better)《Python3.1》
OOP:振舞〔behavior〕
オブジェクト指向プログラミング〔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