Ruby面向对象
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面向对象的更多相关文章
- Ruby 面向对象知识详解
Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现.Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串.数字,甚至连 true 和 false 都是对象.类本身也是一个对象 ...
- 雷林鹏分享:Ruby 面向对象
Ruby 面向对象 Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现.Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串.数字,甚至连 true 和 false 都是对象 ...
- ruby面向对象class
ruby对象是严格封装的:只能通过定义的方法访问其内部状态.方法使用的成员变量在对象外部不能直接访问,不过可以通过getter.setter等访问器方法(accessor),使他们看起来好像是直接访问 ...
- Python基础学习(一)之Python的概述与环境安装
Python介绍 Python语言介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php .ruby 面向对象对应 ...
- 【Ruby】【高级编程】面向对象
# [[面向对象]]#[实例变量]=begin实例变量是类属性,它们在使用类创建对象时就编程对象的属性.每个对象的属性是单独赋值的,和其他对象之间不共享.在类的内部,使用@运算符访问这些属性,在类的外 ...
- Ruby(面向对象程序设计的脚本语言)入门
Ruby是一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言. 简单介绍 Ruby 是开源的,在Web上免费提供,但须要一个许可证. Ruby 是一种通用的.解释的编程语言. Ruby 是 ...
- ruby 基础知识(一)
突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html 相信初学者会受益颇多 ruby 参考文档 ...
- Ruby之基本数据类型(三)
前言 上一节我们介绍了常量以及变量的用法,这一节我们开始来介绍Ruby中的一些基本类型. 数值类型(Fixnum.Bignum.Float) Ruby的数值类型包括整数和浮点数.整数包括Fixnum和 ...
- Ruby之基础介绍(二)
前言 上一篇我们简单介绍了下Ruby,这一节我们开始正式步入Ruby的世界,一探究竟. Ruby特点 (1)面向对象支持. (2)动态语言:我们可以修改已经定义过的类,也可以为现有类添加实例方法. ( ...
随机推荐
- Description Resource Path Location Type Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix. spark-MT line 1 Maven Co
1.相信大家新建的maven项目,然后添加好依赖(即修改了pom.xml文件以后就会出现如下所示的错误): Description Resource Path Location Type Projec ...
- [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
<JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...
- zjoi[ZJOI2018]胖
题解: 因为n,m很大 所以复杂度应该是和m相关的 考虑到每个点的影响区间是连续的 就很简单了 区间查询最小值线段树维护(st表也可以) 然后注意一下不要重复算一个就可以了 max函数用templat ...
- python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等
ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...
- 关于mac的一些常用操作记录
之前记录过一个关于mac远程连接window机,实现共享文件的记录,今天记录一些常用的操作,会持续更新. 1.谷歌浏览器 f12的操作 command+option+i 打开调试面板 2.打开指定位置 ...
- 移动端上拉加载下拉刷新插件-mescroll.js插件
官网地址是:http://www.mescroll.com // 初始化mescroll function initMeScroll() { //创建MeScroll对象,内部已默认开启下拉刷新,自动 ...
- 学习Spring必须了解的基础知识——回调机制
上面这张图如果能看得懂就能理解什么是回调机制: A对象在调用a()方法时会调用B对象的b()方法,b()方法必须能调用A对象的callback()方法. 谁白了:a()方法有B对象b()方法的引用,b ...
- ARM驱动:SEC S3C2410X Test B/D USB驱动 安装
s3c2410x驱动是一款非常好用的usb驱动程序,win7 64位下mini2440 USB下载驱动安装,解决win7下安装SEC S3C2410X Test B/D 驱动出现叹号的问题.如果你开始 ...
- Dicom文件转mhd,raw文件格式
最近在整理与回顾刚加入实验室所学的相关知识,那会主要是对DICOM这个医疗图像进行相应的研究,之前有一篇博客已经讲述了一些有关DICOM的基本知识,今天这篇博客就让我们了解一下如何将Dicom文件转为 ...
- 浅谈云计算SPI(SaaS、PaaS、IaaS)
The other day, I arrived at the SAP LABS CHINA for interview with my pleasure. That gave me a chance ...