5.Ruby面向对象的四个特征
目录
1、抽象
忽略与当前很多目标没有共性的东西,专注于与当前目标有共性的方面,就是把世界中的某一类共性东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口。抽象并不是提取全部东西,而是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一个数据抽象,二是行为抽象。
数据抽象 –>表示世界中一类事物的特征,就是对象的属性。比如鸟有翅膀,羽毛等(类的属性)
行为抽象 –>表示世界中一类事物的行为,就是对象的方法。比如鸟会飞,会叫(类的方法)
2、封装
封装就是把行为和数据包围起来,对数据的访问、更新、查询等操作都必须通过调用对象的方法来完成,不能直接从外部进行操作。
t = Time.now #从系统获取当前时间
p t.year #=> 2020 (从时间中提取年)
3、继承
ruby同JAVA一样只支持单继承,每个类只能有一个父类,为了提高程序的灵活性ruby引入了 模块 为实现多重继承提供了可能,模块可以说是类的一个补充。
class Point
def initialize(x, y)
end
end
class Point3D < Point
# 子类可以重写父类的方法
def initialize(x,y,z)
super(x,y)
end
end
通过继承可以实现:
- 在不影响原有功能的前提下追加新功能
- 在子类中重定义原有功能,使名称相同的方法产生不同的效果
- 在已有功能的基础上追加处理,扩展已有功能
4、多态
对象提供了将数据及其处理组合起来的“功能”。对象知道数据是怎么被处理的,换句话说,各个对象都有自己独有的消息解释权。同名方法属于多个对象(不同对象的处理结果也不一样),这种现象,用面向对象的术语来说,就是多态。例如,我们可以观察一下Object类、String类和Float类的各对象调用to_s方法的运行结果,可以看出,不同的类得到的结果是不一样的。
obj = Object.new #对象(Object)
str = "Ruby" #字符串(String)
num = Math::PI #数值(Float)
p obj.to_s #=> "<Object:0x7fa1d6bd1008>"
p str.to_s #=> "Ruby"
p num.to_s #=> "3.141592653589793"
面向对象程序设计具有许多优点:
1、可复用,开发时间短,效率高,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间。
2、应用程序易于维护、更新和升级,继承和封装使得应用程序的修改带来的影响更加局部化。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubyhigh/1460.html