一緒にRubyを征服します! 4番目のドロップ

ドロップをさらに収集します( 1、2、3 )。 今回は、RubyでのPLOの実装について学びます。



クラス、オブジェクト、メソッド



Rubyの構文をさらに掘り下げてループ、型、モジュールなどを手放す代わりに、後でそれらに戻ります。 次に、クラス、オブジェクト、およびメソッドの作成方法を見ていきます。



他のオブジェクト言語と同様に、オブジェクトはクラスによって定義されます。 たとえば、このクラスは犬(o_0)を定義します。



 class Dog def set_name( aName ) @myname = aName end end
      
      





さて、なぜあなたは犬なのですか-クラスではないのですか? ;)コードを見ます。 クラスの定義は、キーワードclass



およびクラス自体の名前で始まり、大文字で始まる必要があります 。 このクラスは、各dogオブジェクトを呼び出すset_name



def...end



)メソッドを定義します。 入力引数aName



、その値を@myname



変数に割り当てます。



@



始まる変数はクラスインスタンス変数です 。 重要なことは、そのような変数の値は、その変数が属するインスタンス内でのみ利用可能であるということです。 new



メソッドを使用して2つのオブジェクト(2つの特定の犬)を作成します。



 moya = Dog.new tvoya = Dog.new
      
      





私は思い出し、覚えています:私たちは大文字でのみオブジェクトを呼び出します-小文字でのみ。 set_name



メソッドを使用して、犬に名前を付けます。



 moya.set_name( 'Lassie' ) tvoya.set_name( 'Rex' )
      
      





犬の愛称を撤回する方法は? オブジェクトの内部データはそれだけが知っているので、変数@name



をオブジェクトから「引き出す」ことはできません(上記参照)。 これがOOPの主な原則です。オブジェクトデータはプライベートです。 これはデータ隠蔽と呼ばれ、 カプセル化の原則の一部です。



この問題を解決するには、変数を出力するクラスに新しいメソッドを追加するだけです:



 def get_name return @myname end
      
      





return



という単語return



オプションです。Rubyは最後に受け取った値を返しますが、それを書くのは良い習慣です。



犬の樹皮を作成し(このために別のメソッドを作成します)、すべてをヒープに配置します。



 class Dog def set_name( aName ) @myname = aName end def get_name return @myname end def gav return 'rrrr!' end end dog1 = Dog.new dog1.set_name( 'Fido' ) puts(dog1.get_name) puts(dog1.gav)
      
      





オブジェクト(特定の猫と犬)と同じ名前のメソッド(「話す」が猫の鳴き声と犬の鳴き声)によってそれぞれ定義される2つのクラス(猫と犬など)があるとします。 オブジェクトは同じメソッドに対して異なる反応をすることがわかります。 同じ名前のメソッドを含む複数のクラスを持つ機能は、 ポリモーフィズムと呼ばれます。 彼らは見つけました...そしてこの恐ろしい言葉を忘れました。



属性



タスクには別のアプローチがあります 。クラス属性を使用して必要なメソッドを作成します 。 タスクを複雑にし、動物園を作成します;)



 class Cat attr_accessor :name, :age, :gender, :color end class Dog attr_accessor :name, :age, :gender, :color end class Snake attr_accessor :name, :age, :gender, :color, :length end
      
      





2行目を考えます。 Cat



クラスに3つの属性を提供します。 各猫には独自のニックネーム、年齢、性別、色があり、コードがこれらの属性を作成します。 _accessor



は、「これらの属性を作成および変更できるようにする」ことを意味します。



オブジェクトを作成し、属性を適用します。



cat_object = Cat.new

cat_object.name = "Pussy"

........................

puts cat_object.name








継承



3つのクラスの宣言を含む最後のコードを見ると、それらが非常に類似していることが簡単にわかります。 追加の定義された長さを持つのはヘビだけです。 Rubyのプログラミングの原則を最初の一滴から思い出してください。 そのうちの1つ:DRY(繰り返さないでください)。これは、必要なコードを1回だけ記述する必要があることを意味します。 最適なOOP機能の1つである継承に注意する必要があります。



継承により、異なるクラスが互いに関連し、構造の類似性によってグループ化されます。 この例では、猫、犬、ヘビはすべてペットです。 では、 Pet



クラスを作成して、それが残りの「親」となり、すべてのペットに共通のプロパティが継承されるのはなぜですか。 私たちは書きます:



 class Pet attr_accessor :name, :age, :gender, :color end class Cat < Pet end class Dog < Pet end class Snake < Pet attr_accessor :length end
      
      





継承されたクラスを宣言するための原則とルールは理解できると思います。オブジェクトを作成し、パラメータを設定し、結果を表示しようとしています。 単純なクラスは、 階層内の複雑なクラスよりも優れていることに注意してください。



エピローグ



最後のドロップでは、OOPが何であるかを見つけました。これで、Rubyで知識を適用する方法を学び、いくつかのトリッキーな単語を学び、インスタンス変数とクラス属性に精通しました。 私たちのガラスのもう一つのドロップ;)



Hugh ColinbornとPeter Cooperのドロップの素晴らしい例に感謝します。 コメントとコメントは常に受け入れられます! じゃあね!




All Articles