2014年6月19日木曜日

クラスとは

Rubyは、多くのオブジェクト指向言語と同様、メソッドをまとめるのにクラスを使用しています。これらのクラスからインスタンスが生成されることでオブジェクトが作成されます。オブジェクト指向プログラミングの経験がない方にとっては何のことだかわからないと思いますので、いくつかの具体例を示すことにします。
確かにわかりません。
 しかもこの後の説明に更にコンストラクタという意味不明な単語…。

 とりあえず例を。
irb(main):059:0> class Word
irb(main):060:1>   def palindrome?(string)
irb(main):061:2>     string == string.reverse
irb(main):062:2>   end
irb(main):063:1> end
=> nil
irb(main):064:0> w = Word.new
=> #<Word:0x007fdf3de030e8>
irb(main):065:0> w.palindrome?("unko")
=> false
irb(main):066:0> w.palindrome?("panap")
=> true
でも、単語は文字列なので、わざわざクラスを作るのは不自然らしい。以下の通り、上位のStringクラスで 使用できるメソッドを継承させる方が自然。
irb(main):001:0> class Word < String
irb(main):002:1>   def palindrome?
irb(main):003:2>     self == self.reverse
irb(main):004:2>   end
irb(main):005:1> end
=> nil
irb(main):006:0> s = Word.new("panap")
=> "panap"
irb(main):007:0> s.palindrome?
=> true
irb(main):008:0> s.length
=> 5
irb(main):009:0> s.class
=> Word
irb(main):010:0> s.class.superclass
=> String
irb(main):011:0> s.class.superclass.superclass
=> Object
irb(main):012:0> s.class.superclass.superclass.superclass
=> BasicObject
selfはオブジェクト自分自身を表している。
 最後の方でクラスの継承について確認している。

 正直、まだクラスの立ち位置というか、どういうことなのかボンヤリしたところがあります。

 はっきり頭の中で整理がついたら追記したいと思います。

参考:
rubyのクラスやらモジュールがモヤっとしている人へ
クラス・モジュールの概念 Ruby

0 件のコメント:

コメントを投稿