• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,484
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
17
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ruby 的类和对象模型 David Ruan
  • 2. Reference Ruby Hacking Guide (ruby 1.7.3 2002-09-12) http://code.google.com/p/rhgchs/ Metaprogramming Ruby(ruby 1.9) 本页是最有用的信息,读过这两个资料和打算去读的就不 用往下看了。
  • 3. 为什么还要了解 C 语言的实现 因为 C 语言里没有 Magic
  • 4. Ruby 中关于对象的理论 1 Ruby 中一切都是对象 2 类也是对象 3 对象有自己的类
  • 5. 对象的定义及其 C 语言的结构 1 能够区分自身与其它(拥有标 识) 2 能够响应请求(方法) 3 保持内部状态(实例变量)
  • 6. 1 能够区分自身与其它(拥有标识) • 在 ruby 中,对象的内容表示为 C 的结构体, 通常是以指针对其操作。每个类用一个不同 的结构体表示, 但指针的类型都是 VALUE
  • 7. 能够响应请求(方法)和保持内部状态(实例变量) 响应请求必须通过类 (klass), 保持内部状态通过 (st_table*) struct RBasic { unsigned long flags; VALUE klass; };
  • 8. 类的定义及其 C 语言的结构 1 类也是对象 2 类有实例方法和超类 (superclass) 3 类是模块的子类
  • 9. RClass struct RClass { struct RBasic basic; struct st_table *iv_tbl; struct st_table *m_tbl; VALUE super; };
  • 10. C 数据结构中的 super 和 klass 与 Class#superlcass() 和 Object#class() 不同
  • 11. 类的类 (Eigenclass) 类也是对象,所以类也要属于某个类来存放自己 的方法,这就是引出 EigenClass
  • 12. 对象的 Eigen Class/Singleton Class
  • 13. 类的 Eigen Class/Singleton Class
  • 14. 类的引导 rb_cObject = boot_defclass("Object", 0); rb_cModule = boot_defclass("Module", rb_cObject); rb_cClass = boot_defclass("Class", rb_cModule); metaclass = rb_make_metaclass(rb_cObject, rb_cClass); metaclass = rb_make_metaclass(rb_cModule, metaclass); metaclass = rb_make_metaclass(rb_cClass, metaclass); (object.c)
  • 15. 引导图示
  • 16. 最终的类图 irb> A.eigenclass.superclass.superclass # 适用 1.7/1.8 , 1.9 还要多一个 superclass => Class
  • 17. Object#eigenclass 的实现 Monkey Patch: class Object def eigenclass class << self; self; end end end
  • 18. Dynamic Ruby 后面借用 CRUD 的方法来分析如何在 runtime 中 操作 ruby 各元素,只是为了方便从这种角度来 表明 ruby 拥有的某些动态性质,不一定是最佳 方法,也没有列完整,仅作示例。
  • 19. 对象的 CRUD 略去,但强调一下元类的作用 Singleton Class/Meta Class/Eigen Class
  • 20. 类的 CRUD C class keyword Class.new R Object.const_defined? U Openclass Module instance_eval, class_eval method_missing D Object.send(:remove_const,:MyClass) 不影响子类,因为只是删除 const
  • 21. 方法的 CRUD C def keyword define_method R method_defined? U Alias bind/unbind D undef_method
  • 22. 实例变量的 CRUD C @variable_name attr_reader, attr_writer, attr_accessor R instance_variable_defined? instance_variable_read U instance_variable_set D N/A
  • 23. Not Only OOP
  • 24. END