第五章 用类组织对象
一、类和实例
1. 第一个类
class Ticket
end
ticket = Ticket.new
2. 实例方法与单例方法
(1)在类中定义、供类的所有实例使用的方法,称为实例方法(Instance methods)
class Ticket
end
(2)为一个特定的对象定义的方法,称为单例方法(Singleton methods)
class Ticket
end
ticket = Ticket.new
def ticket.price
end
3. 实例变量:使得单个对象可以记忆状态
class C
end
c = C.new
c.inst_var_init("Just some string")
c.inst_var_report
4. 初始化对象状态
class Ticket
end
二、设置方法
(1)改变对象状态(定义方法)
class Ticket
end
(2)语法糖衣(Syntactic sugar)
def price=(amount)
end
调用写方法的语法糖衣
ticket.price=(65.00)
可以这样写:
ticket.price = 65.00
三、属性和 attr_* 方法族
1. 产生获取和设置方法 attr_* 方法族的总结
方法名 | 效果 | 例子 | 等价的代码 |
attr_reader | 产生读方法 | attr_reader :venue | def venue @venue end |
attr_writer | 产生写方法 | attr_writer :price | def price=(price) @price = price end |
attr_accessor | 产生读写方法 | attr_accessor :price | def price=(price) @price = price end def price @price end |
attr | 产生读方法和可选的写方法(如果第二个参数为 true) | 1. attr :venue 2. attr :price, true | 1. 参见 attr_reader 2. 参见 attr_accessor |
2.属性访问修饰符的使用
class Ticket
end
四、类方法和 Class 类
1. 类也是对象:类是唯一具有创建新对象(实例)的能力的一类对象
下面定义一个类方法,找出最贵的入场券
def Ticket.most_expensive(*tickets)
end
我们可以用该方法找出哪张入场券是最贵的
th = Ticket.new("Town Hall","11/12/13")
cc = Ticket.new("Convention Center","12/13/14/")
fg = Ticket.new("Fairgrounds", "13/14/15/")
th.price = 12.55
cc.price = 10.00
fg.price = 18.00
highest = Ticket.most_expensive(th,cc,fg)
puts "The highest-priced ticket is #{highest.venue}."
2. 类方法的调用方式
Ticket.most_expensive 或 Ticket::most_expensive
五、常量
常量的名字以一个大写字母开头
class Ticket
end
puts Ticket::VENUES
六、继承
1. 抽象事物和特殊事物之间的关系可以通过继承(inheritance)来表达
class Publication
end
class Magazine < Publication
ddattr_accessor :editor
end
2. 继承和 Rails 设计
class ComposerController < ApplicationController
end
class ApplicationController < ActionController::Base
class Composer < ActiveRecord::Base
七、Object 类
Object 类位于继承树的顶部。每一个类都是 Object 的直系后代
class C
end
class D < C
end
puts D.superclass
puts D.superclass.superclass
输出为:
C
Object