`
酷的飞上天空
  • 浏览: 517954 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

ruby的OOP学习

阅读更多

ruby的所有类都继承自object,而object又继承自BasicObject(此类为ruby1.9新增)

类的定义

定义类使用关键字class,定义方法使用def,

例子:

class MyClass
  #定义类方法
  def self.method1
    puts "类方法mothod1"
  end
  #另一种方式定义类方法
  def MyClass.method2
    puts "另一种定义的类方法method2"
  end
  #定义实例方法
  def method3
    puts "实例方法method3"
  end
end
myclass = MyClass.new
MyClass.method1
MyClass.method
myclass.method

  类方法相当于java中的静态方法,无须实例化可直接调用.但不能被实例化后的对象调用

定义属性又4个方法,attr,attr_reader,attr_writer,attr_accessor,他们的作用分别是只读或或可读属性,只读属性,只写属性,可读写属性,他们属于Module类的方法.

例子:

class MyClass
  attr_accessor :attr1
  def attr2
    @attr2
  end

  def set_attr2(value)
    @attr2 = value
  end
end

myclass = MyClass.new
myclass.attr1="attr1"
puts myclass.attr1

myclass.set_attr2("attr2")
puts myclass.attr2

 访问控制

ruby提供三个关键字,public,protected,private.其中ruby默认的级别是public即没有任何限制.

protected级别的方法只能被该类自身和其子类的对象 所调用

private级别的方法只能被self调用,换句话来说就是只能被其自身和子类自身的方法的调用.
例子:

class MyClass
  #默认是public
  def public_method
    puts "public_method"
  end
  #定义protected方法
  protected
  def protected_method
    puts "protected_method"
  end
  #定义private方法
  private
  def private_method
    puts "private_method"
  end
end

class MySubClass<MyClass
  #调用父类中的protected方法
  def call_protected_method
    protected_method
  end
  #调用父类的private方法
  def call_private_method
    private_method
  end
end

my_sub_class = MySubClass.new
my_sub_class.call_protected_method
my_sub_class.call_private_meth

 

类的扩展和继承

通过代码

puts 1.class.name

 可知

1是Fixnum的一个实例,下面就对Fixnum进行扩展

class Fixnum
  def speak
    puts "我的值是#{self}"
  end
  def abs
    puts "abs不能用了"
  end
end
#扩展类方法
def Fixnum.say_hello
  puts "Hello!"
end

1.speak
-1.abs
Fixnum.say_hello

 输出

我的值是1

abs不能用了

Hello!

 

self和super

ruby中的self用来引用自身,和java中的this功能相似.super关键字则用来引用父类的相同方法

例子:

class Person
  attr_accessor :name,:age
  def say_hello
    puts "你好,我是#{self.name}"
  end
  def say_age
    puts "我的年龄是#{self.age}"
  end
end
class Man<Person
  def sex
    "男"
  end
  def say_sex
    puts "我的性别是#{self.sex}"
  end
  def say_hello
    super
    say_age
    say_sex
  end
end
man = Man.new
man.age=20
man.name="jone"
man.say_hello

 输出:

你好,我是jone

我的年龄是20

我的性别是男

 

ruby的构造方法initialize和给对象创建属于对象的方法

class Man
  attr_accessor :myname,:myage
  #类的构造方法
  def initialize(name,age)
    @myname = name
    @myage = age
  end
end
@myname = "test"
@myage = 10
me = Man.new("jack", 30)
#为对象定义方法
def me.about_me
  puts "我叫#{self.myname},年龄是#{self.myage}"
end
me.about_me

 

最后再说下ruby的==和equal?

对于数值形来说这两个貌似没什么区别

对于字符串来说

==比较的是字符串是否相同

equal?比较的是是否是同一个字符此

如:

a="123"

b="123"

a==b 返回true

a.equal? b 返回false

分享到:
评论

相关推荐

    mastermind:游戏Mastermind的实现。 我在The Odin Project的Ruby编程课程中学习的OOP概念的演示

    游戏Mastermind的实现。 我在Odin Project的Ruby编程课程中学到的OOP概念的演示。

    The-Ruby-Workshop:一种新的交互式学习Ruby的方法

    无论您是要创建Web应用程序,编写简单脚本,操纵数据,还是只是学习面向对象编程的基础知识,这本书都将使您Swift步入正轨。 您将学到什么 掌握Ruby的语法和功能,以构建有用的应用程序 使用常见的设计模式来简化...

    程序员考试刷题-prof_shiba:学生学习OOP,关于adt,优化基本算法,介绍机器学习。已链接的基本Web应用程序项目

    程序员考试刷题您好,欢迎来到 IBCS 的第一年!...ruby​​ 是最新的 brew install ruby 创建一个 GitHub 帐户 确保你保持专业。 这就是整个编程世界都会认识你的方式 项目启动 什么是IBCS? 嗯,它的目

    fullstack_challenges_531

    OOP :学习 (面向对象编程)的基础。 好的,您现在知道如何在ruby中构建小程序了……恭喜! 但是,等等,如果您想构建更高级的软件,例如餐厅预订平台,租车系统,社交网络等,您可以使用10000行Ruby文件和数十种...

    Horus Framework:Smart Micro PHP Framework受Ruby中Sinatra的启发,但不是克隆版-开源

    一个OOP PHP微框架,一个轻量级的工具包,可帮助开发人员奠定其基于PHP的网站和应用程序的基础。Horus框架是相当可靠的尝试,... Horus易于学习,并且代码注释得很好,以防万一开发人员需要帮助来弄清楚发生了什么。

    编程新手真言......

    什么是语言级和语言外要学习的(数据结构与代码结构) 15 什么是语言级要学习的 17 编程学习方法 18 计算机学生专业课程本质讲解 18 用C++开发要学到什么程度 20 本书目录安排 21 第二部分 基础:导论 25 第1章 系统 ...

    毕业设计网站开发源码-CV:降价中的当前简历

    坚信终身学习并热衷于发现新事物。 前世的技术招聘人员,为了更接近令人惊叹的伦敦科技界,他首先跳入了重大的职业转变。 目前正在寻找一个可以让我有机会以我在 Makers Academy 期间以令人难以置信的速度继续进步和...

    WARCRAFT3-SIM

    我们将使用 OOP 来模拟魔兽争霸 III 对人类的单位训练。 您将阅读 RSpec 示例以确定需要构建哪些功能,然后构建它以使所有规范都通过。 注意:逻辑将不会与魔兽争霸 III 相同...处理它!指示提供了多个测试文件。 ...

    java8stream源码-hello-scala:你好-scala

    一个更好的网络资源来逐步学习 SCALA 关于 Scala 的一些重要信息 它是由 Martin Odersky(javac 之父)创建的现代 jvm 平台编程语言,受 Java、Ruby、Smalltalk、ML、Haskell、Erlang 等的影响。 这是一种高级语言 ...

    python-webserver

    从头开始创建Python3 Web服务器 当您以前的经验主要是基于Web的语言(PHP,Javascript,Ruby)时,跳入Python可能是一项艰巨的任务。 Python提供了用于构建强大的HTTP Server或框架的所有工具,...对Python3的语法和OOP

    Matlab代码verilog-timo-cmd:我的GitHub个人资料-readme:star::sparkles:

    常识:Lua,Ruby,Crystal,Golang,Haskell,Elixir / Erlang,Dart / Flutter和Verilog 前缀板 :telescope: 我目前正在研究Haiku分散式区块链 :seedling: 我目前正在学习同构编译器的构造 :people_with_bunny_ears...

    matlab代码做游戏-CV:简历

    我不仅对编码充满热情,而且对使用TDD,OOP,MVC等以正确的方式进行编码充满热情。 我学习很快,并且能够相对容易地选择新语言。 我认为,良好的用户界面对于交付真正满足最终用户需求的产品至关重要。 专案 项目 ...

    java毕业论文源码-CV:真相只能在一个地方找到:代码

    在我的角色中,我想在一个实践敏捷和高质量测试的中型团队中为专注于学习和Craft.io的文化做出贡献。 同事们可能会形容我是一名团队合作者,并且我富有创造力和奉献精神。 我于 2017 年毕业于创客学院,被福布斯描述...

    生命游戏的实现:Conway的生命游戏以多种语言实现

    我这样做是为了学习新的编程语言,并通过简单的实现粗略了解每种语言的语法差异和运行速度(没有特定语言的优化无法应用于其他语言)。 为了进行公平的比较,所有实现都使用核心语言中可用的功能(尽可能没有框架...

Global site tag (gtag.js) - Google Analytics