Ruby面向对象

​ Ruby是真正的面向对象语言,一切皆为对象,甚至基本数据类型都是对象

基本用法

class Box
# 构造函数
def initialize(w,h)
@with, @height = w, h #加@的是实例变量
end
# get方法
def getWidth
@with # 默认最后一条语句的返回值作为函数返回值
end
def getHeight
@height
end
# set方法
def setWidth(w)
@with = w
end
# 实例方法
def getArea
@with * @height
end
end box = Box.new(10, 20)
box.setWidth 15
puts box.getWidth
puts box.getHeight
puts box.getArea

简化get,set

​ Ruby中,实例变量前面要加@,外部无法直接读写,要自己写get,set方法来访问。Ruby提供了一种方便的属性声明方法来更方便地做访问控制:

class Box
# 声明外部可读,要用符号类型
attr_reader :label
# 声明外部可写
attr_writer :width, :height
def initialize(w,h,label)
@width, @height = w, h
@label = label
end
def getArea
@width * @height,
end
end box = Box.new(10, 20,'box')
puts box.label
box.width = 15
puts box.getArea

​ attr_accessor声明相当于reader+writer

类变量&类变量

​ 类变量前面加上@@就可以,类方法只要前面加上self即可

class Box
# 初始化类变量
@@count = 0
def initialize(w,h)
@width, @height = w, h
@@count += 1
end
# 类方法
def self.printCount
puts "Box count is #{@@count}"
end
end box1 = Box.new(10, 20)
box2 = Box.new(15, 20)
Box.printCount

方法访问控制

​ 我们经常会对类做一些封装,因此访问控制还是必要的。Ruby的成员变量的访问控制在前面用get、set访问控制已经解决。方法的控制有三个级别:

  • public:默认情况下,除了initialize方法是private,其他都是public的
  • private:只有类内可以访问
  • protected:可以在类内和子类中使用

举例

class Box
def initialize(w,h)
@width, @height = w, h
end
def getArea
caculate
@area
end
def caculate
@area = @width * @height
end
# 方法的权限控制声明
private :caculate
end box = Box.new(10, 20)
puts box.getArea

继承

# 定义基类
class Box
def initialize(w,h)
@width, @height = w, h
end
def getArea
@width*@height
end
end # 定义子类
class BigBox < Box
def printArea
# 继承基类方法和变量
puts getArea
end
end box = BigBox.new(10,20)
box.printArea

方法重载&运算符重载

class Box
attr_reader :width, :height
def initialize(w,h)
@width, @height = w,h
end
def getArea
@width*@height
end
end class BigBox < Box
# 重载方法
def getArea
@area = @width * @height
puts "Big box area is: #{@area}"
end
# 运算符重载
def +(other) # 定义 + 来执行向量加法
BigBox.new(@width + other.width, @height + other.height)
end
end
box1 = BigBox.new(10,20)
box2 = BigBox.new(5,10)
box1.getArea
box3 = box1+box2
box3.getArea

小结

​ Ruby中的面向对象应该说非常简洁优雅,不愧是纯粹的面向对象语言。

Ruby面向对象的更多相关文章

  1. Ruby 面向对象知识详解

    Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现.Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串.数字,甚至连 true 和 false 都是对象.类本身也是一个对象 ...

  2. 雷林鹏分享:Ruby 面向对象

    Ruby 面向对象 Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现.Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串.数字,甚至连 true 和 false 都是对象 ...

  3. ruby面向对象class

    ruby对象是严格封装的:只能通过定义的方法访问其内部状态.方法使用的成员变量在对象外部不能直接访问,不过可以通过getter.setter等访问器方法(accessor),使他们看起来好像是直接访问 ...

  4. Python基础学习(一)之Python的概述与环境安装

    Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...

  5. 【Ruby】【高级编程】面向对象

    # [[面向对象]]#[实例变量]=begin实例变量是类属性,它们在使用类创建对象时就编程对象的属性.每个对象的属性是单独赋值的,和其他对象之间不共享.在类的内部,使用@运算符访问这些属性,在类的外 ...

  6. Ruby(面向对象程序设计的脚本语言)入门

    Ruby是一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言. 简单介绍 Ruby 是开源的,在Web上免费提供,但须要一个许可证. Ruby 是一种通用的.解释的编程语言. Ruby 是 ...

  7. ruby 基础知识(一)

    突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html    相信初学者会受益颇多 ruby  参考文档 ...

  8. Ruby之基本数据类型(三)

    前言 上一节我们介绍了常量以及变量的用法,这一节我们开始来介绍Ruby中的一些基本类型. 数值类型(Fixnum.Bignum.Float) Ruby的数值类型包括整数和浮点数.整数包括Fixnum和 ...

  9. Ruby之基础介绍(二)

    前言 上一篇我们简单介绍了下Ruby,这一节我们开始正式步入Ruby的世界,一探究竟. Ruby特点 (1)面向对象支持. (2)动态语言:我们可以修改已经定义过的类,也可以为现有类添加实例方法. ( ...

随机推荐

  1. 旋转矩阵 The Rotation Matrix

    参考: http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/geometry/how-does ...

  2. HTTP max-age与Expires的分别

    主要重点在于我们要明白一个相对(Expires)一个绝对(max-age). 分别 max-agemax-age是HTTP/1.1中,他是指我们的web中的文件被用户访问(请求)后的存活时间,是个相对 ...

  3. 【bzoj4976】宝石镶嵌

    题解: 比较水 注意k<=100这个条件 当n-k比较大的时候 我们显然会把它有的位都给取了 不然的话我们可以考虑dp 暴力状压就可以了 代码: #include <bits/stdc++ ...

  4. 【CF446D】DZY Loves Games

    题解: 不错的题目 首先要求的黑点个数非常多 比较容易想到矩阵乘法 于是我们可以求出从某个黑点出发到任意一个黑点之间的概率 发现不同出发点带来的变化只有常数项 于是我们可以预处理出从每个方程转移的系数 ...

  5. [转]Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能

    原文地址:http://support.esrichina-bj.cn/2009/0728/1007.html 文章编号 : 37033 软件: ArcGIS API for Microsoft Si ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-10asp.net core session的使用

    asp.net core session的使用   Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core ...

  7. 关于mac远程链接window服务器以及实现共享文件

    要最近换了新电脑mac 虽然运行速度666  但是真的很多地方都使用不习惯 这里记录一下 关于 远程链接window主机的问题 方便以后用 首先是 链接: 在应用里 找到    然后类似于  wind ...

  8. Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)

    原文链接https://www.cnblogs.com/zhouzhendong/p/9256033.html 题目传送门 - CF873F 题意 给定长度为 $n$ 的字符串 $s$,以及给定这个字 ...

  9. P1052 过河 线性dp

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  10. Nginx 关闭防火墙

    关闭防火墙 1) 重启后生效  开启: chkconfig iptables on  关闭: chkconfig iptables off    2) 即时生效,重启后失效  开启: service ...