第5回『オブジェクト生成とその利用』 |
※画像が大きすぎるときは,ブラウザの縮小を使って下さい(通常のWindows用Webブラウザの場合,コントロールキーを押しながら - キーを押すと縮小,コントロールキーを押しながら + キーを押すと拡大です)。
このページの内容は前回第4回の『変数の一生(その1)』と同じです。 内容を理解しているなら次のページに進みましょう。
●変数の一生(その1)
●今後数回は,下図の流れに沿って解説していく。下図は,正しく動作するプログラムの中で「変数(インスタンス)」が送る生涯(ライフタイム)の様子である。
(画像をクリック
すると今回の学習と関係するところが表示される)。
(0)まず,変数の設計図としての「データ型」がある。
「データ型」は「そのデータが何を表現しているか,1個につき何バイト使うか」といった情報を持っている。たとえば,
・「int型」は「データは整数値を表現していて,1個につき4バイト使う」という情報を持っているし,
・「double型」は「データは実数値を表現していて,1個につき8バイト使う」という情報を持っている。
「住宅の一生」に例えれば,「データ型」とは家の設計図に当たる。
(1)この「データ型」を設計図として,メモリ上の数バイトを使用して 実際の変数を作成する(変数の誕生)。
※
なお,変数(variable)はインスタンス(instance)とも言われる。インスタンスは「実例」とか「実体」という意味で,「データ型
のひとつひとつの実例」というニュアンスである。
これは一般の工業製品にも言えることで,工業製品も設計図がまずあり,その設計図を元に個々の製品が作られる。車で例えると
トヨタの乗用車プリウスは,設計図を元に「田中さんちのプリウス」,「加藤さんちのプリウス」など個々のプリウスが生産される。
つまり,
・「プリウスの設計図」が「変数の設計図である"データ型" 」に相当し,
・個々の「田中さんちのプリウス」や「加藤さんちのプリウス」などが,「プリウス」の個々の実例・実体(インスタンス)という
ことで,個々の「変数」にあたる
と言える。
「住宅の一生」に例えれば,家の設計図を基に,メモリという敷地の一部をいくらか使って,その上に家を建てる 段階に当たる。
(2)適切な初期化。
変数(インスタンス)の誕生した直後は,生成される毎に中に入っている値が異なる。そのため,変数を使用する前に,適切な初期値
で変数を初期化しないとプログラムの正しい動作が期待できない。
「住宅の一生」に例えれば,住宅のライフライン(電気・水道・下水・ガス等々)をひいたり,家具を揃えたりカーペットや畳を敷い
たりして住めるように仕上げる段階に相当する。
(3)適切な操作による値の変更。
変数が初期化されたら,いよいよその変数を使う(変数に値を代入したり,変数に入ってる値を使ったり)段階に入る。このとき,不正
な操作で変数の値が勝手にいじられると,プログラムが正しく動作しなくなってしまう。このようなことを防ぐには,変数へのアクセ
ス(変数を利用する行為)できるものを「正しい操作」だけに限定して,それ以外の「不正な操作・不正かもしれない操作」からアクセス
されるのを防がなくてはならない。
「住宅の一生」に例えれば,住宅の中のものを勝手にいじられないようにセキュリティをかため,家族のメンバーだけが入れるように
し,家族以外の部外者の侵入を防ぐようにする,ということである。
(4)結果を得る。
変数が役目を終えるのは,その中に入っている値を最後に参照したときである。「住宅の一生」に例えれば,家の中を最後に利用した
ときとなる。
(5)事後処理およびメモリ領域の開放。
役目が終わり,もう使用されることがない変数は,消滅してもらわなくてはならない。なぜなら,使用されることがない変数がそのまま
居残り続けると,メモリという敷地の一部を占領しつづけることになる。このような「居残り変数」が多くなると他の目的のために使用
できるメモリ領域(空きメモリ)が不足してしまう。このように不必要な変数がメモリ上に居残り続けて,空きメモリが不足する現象を
「メモリリーク(memory leak,メモリ漏れ)」と言う。メモリリークはプログラムの動作不良の代表的な原因である。メモリリークを防
ぐために,必要の無くなった変数には消滅してもらい,その変数が占拠していたメモリ領域を明け渡すようにする必要がある。Javaでは,
不必要になった変数(いわば「ゴミ」)は,ガベージコレクション(gabage collection,ゴミ集め)という仕組みによって自動的に調べられ,
自動的に消滅する(変数の占めていたメモリ領域を解放する)ようになっている。
「住宅の一生」 に例えれば,要らなくなった住宅を壊さずにそのまま放置すると土地を無駄使いして土地不足になるので,
不必要な住宅を壊して敷地を更地に直し,土地を他の用途に使えるようにすることに当たる。
※今回は特に,
上図の「データ型」の作り方と
上図(1)の「インスタンス(オブジェクト)の生成」について解説する。
※よく第5回の内容を復習して理解してから先に進もう。