Programming Ruby 学习笔记(2)

第三章类、对象和变量

类定义:

ruby 代码
  1. class Song   
  2. def initialize(name,artist,duration)   
  3. @name=name   
  4. @artist=artist   
  5. @duration=duration   
  6. end  
  7. end  

当使用Song.new创建一个Song的对象时,首先分配一些内存来保存为初始化的对象,然后调用对象的initialize方法,并把调用new 时所使用的参数传入该方法

继承自Object的方法:

inspect:默认将对象的ID和实例变量格式化。

to_s:Ruby标准消息,返回对象的字符串表示,默认为对象的ID

为类添加新特性:在Ruby中类不是封闭的,可以向一个已有的类中添加方法,当为类添加新方法时,只需打开类的定义,添加新方法,原有的方法依然存在。

例如要在Song类中重写to_s方法,只需向Song中添加一个to_s方法,而不必重写原来的类。

ruby 代码
  1. class Song   
  2. def to_s   
  3. "Song: #@name--#@artist (#@duration)"  
  4. end  
  5. end  

这时Song就重写了to_s方法,而原有的方法都不变。

继承

通过关键字"小于号"实现继承

super关键字:在方法中使用super而不使用参数时,Ruby向当前对象的父类发送一个消息,要求调用父类中的同名方法。

属性

一个对象的外部状态叫做属性,就是访问和操作对象的状态的方法。

访问对象状态,类似于Java的getter方法,操作对象状态,类似于Java的setter方法。

getter和setter
  1. class Song   
  2.   #访问属性的方法,类似于Java中的getter   
  3.   def name   
  4.     @name  
  5.   end  
  6.   def artist   
  7.     @artist  
  8.   end  
  9.   def duration   
  10.     @duration  
  11.   end  
  12.   #设置属性值的方法,类似于Java中的setter   
  13.   def name=(new_name)   
  14.     @name=new_name   
  15.   end  
  16.   def artist=(new_artist)   
  17.     @artist=new_artist   
  18.   end  
  19.   def duration=(new_duration)   
  20.     @duration=new_duration   
  21.   end     
  22. end  

此外,Rubby提供了一种方便的快捷方式:

ruby 代码
  1. class Song   
  2.     attr_reader :name:artist:duration  
  3.     attr_writer :name:artist:duration  
  4.   end  

类变量和类方法

类变量被类的所有对象所共享,相当于Java的static变量,类变量由两个@开头,在使用之前必需被初始化。

类变量
  1. class Song   
  2.   @@plays=0   
  3.   def play   
  4.     @@plays+=1   
  5.   end  
  6.   def Song.closeall   
  7.     @@plays=0   
  8.   end  
  9. end  

@@plays是Song类的一个类变量,每创建一个Song对象并调用play方法时,@@plays加一,@@plays依赖于Song类,而不是Song的对象。

类方法相当于Java中的static方法,它被类所使用。类方法的定义通过在方法名之前放置一个类名和句点来定义

Singleton

ruby 代码
  1. class MyLogger   
  2.   private:new  
  3.     @@logger=nil  
  4.   def MyLogger.create   
  5.     @@logger=new unless @@logger  
  6.     @@logger  
  7.   end  
  8. end  

你可能感兴趣的:(Ruby)