index page
目次へ戻る   前へ戻る 次へ進む

インスタンス


プログラムについては、前のページからだんだんと本格的に説明し始めています。このページからは実際の植生調査などのデータ解析を念頭にいれて話を進めていきます。

  • インスタンスとは?
    インスタンスというのは、あるクラスに属するオブジェクトのことです。クラスがある決まった形式だとすれば、インスタンスはその形式に従ったオブジェクトのことです。実際の調査で言えば、白紙の調査票がクラスです。調査票にはあらかじめ、調査に必要な項目を作り、その記入欄を作っていますよね。その実際の調査をして記入した調査票がインスタンスということになります。

  • インスタンスを作る
    調査票ではありませんが、調査票の中の項目である「調査plot」「種名」「出現量」を記録するための List というクラスを作ってみましょう。

    class List                      #Listクラスの定義開始
        attr_accessor :plot, :species, :abundance  #アクセスメソッド
        def initialize(plot="new_plot", species="new_species", abundance=0)
                                    #初期化の定義とデフォルトの初期値の設定
        @plot = plot                #インスタンス変数に代入
        @species = species          #同上
        @abundance = abundance      #同上
        end                         #initializeメソッドここまで
    end                             #Listクラスここまで
    
    list1 = List.new                #Listクラスのインスタンス作成
    puts list1.plot                 #plotメソッドの呼出しと出力
    puts list1.species              #speciesメソッドの呼出しと出力
    puts list1.abundance            #abundanceメソッドの呼出しと出力
    
    list1 = List.new("plot2","species2",0.5)
    puts list2.plot
    puts list2.species
    puts list2.abundance
    

    順番が逆になりますが、まず initialize(plot="new_plot", species="new_species", abundance=0) についてです。これは、初期化メソッドと言います。 list1 = List.new という命令で、インスタンスを作ったときに、そのインスタンスに与えるオブジェクトを定義しています。このインスタンスには plot と speceis と abundance という3つの項目が与えられ、何も指定がなければ、new_plot と species と 0 が初期値として入ります。list1 にはこの初期値が入っています。それに対して、list2 では new の後に("plot2","species2",0.5) とそれぞれの値を指定をしていますので、 plot と speceis と abundance とにはそれぞれ、 plot2 と species2 と 0.5 が入ります。

    list1 と list2 では次に続く「@plot = plot」で plot に入った値をさらに @plot という変数に代入しています。なぜ、わざわざこんな2度手間なことをするかというと、 plot という変数は1つしかありません。これに対して @plot という変数はインスタンスごとに別の変数として使うことができます。つまり、 list1 の @plot と list2 の @plot とは別物として扱うわけです。続く @species @abundance についても同じことをしています。

    クラスの定義の始めに出てくる attr_accessor は少し説明が難しいですが、大雑把に言うと、:の後に書かれた plot などの変数を参照したり変更したりできるようにするためのもので、これを書いておかないとプログラムの下で書いている plot などのメソッドを使うことができなくなります。 attr_accessor を書かなくても、別に plot というメソッドを定義すればいいのですが、それよりも attr_accessor を使う方が簡単にできます。ちゃんとした説明ができなくて逃げているだけですが、とりあえずは「おまじない」として覚えて置いてください。

    最後の puts は print とすることはほとんど同じです。違う点は、最後に改行を書かなくても、改行するというところです。

    実際に上のプログラムを実行すると次のように出力されるはずです。

    new_plot
    new_species
    0
    plot2
    species2
    0.5
    

    とりあえず、これでインスタンスは作ることができるようになりました。しかし、いちいち、 list_n = List.new("MT001","Miscanthus sinensis",0.3) などと一つずつと書いて、データを入力していったのではきりがありません。

    次のページでは、インスタンス(オブジェクト)をまとめて管理するための配列について説明します。


    註とおわび:インスタンスもオブジェクトの一つです。時々、同じものに対してインスタンスと言ったり、オブジェクトと言ったりすることがあります。自分自身使い分けを明確にできていません。すみません。


    目次へ戻る   前へ戻る 次へ進む