面向对象的概念:ruby 面向对象思维 概念

面向对象个挺让人迷惑措辞.叫切东西都是面向对象会让别人觉得你很时髦. Ruby 声称自己是面向对象脚本语言;但究竟什么才是"面向对象"?
我们已经有了各种各样答案,但所有这些恐怕都归结于同件事.和其快速地概括它,不如让我们先花点儿时间考虑下传统编程模式.
传统意义上,个编程问题从出现各种数据,以及处理数据过程(procedures)着手.在这模式下,数据是呆板,被动和无用;它完全求助于那个体积庞大,主动,逻辑性,全能过程体.
做法问题在于是由员写,而他们仅仅能在工作中记下为数不多细节.而随着工程加大,它核心也增长到难以记住整个工程是如何工作.细微失误和敲打变得越来越容易造成难以发现臭虫(bugs).繁杂和意外干扰开始在核心内出现,维护也变得像企图抓住只愤怒乌贼还要不让它触须碰到你脸.当然,对于传统思路方法,我们也有很多指导你去缩小和检测这些臭虫思路方法,但更好解决思路方法是彻底改变我们工作方式.
而面向对象所做就是让我们将现实,重复性逻辑工作交给数据本身;它将我们对数据概念从被动变为主动.换种说法:

  • 我们不再让数据像个开口盒子样让我们随意地伸手进去并取出东西.
  • 我们将其看作个封口并带有开关和刻度盘机器.

上面所说"机器"内部可能相当简单或者复杂;我们不能从外面窥视,我们也不能允许自己打开机器外壳(除非我们确实发现其中有误),因此我们只需要通过拨动开关,读取刻度来操作数据.机器旦建好,我们便不再必须考虑它是如何运转.
也许,你会觉得这是在无端增加自己工作量,但这思路方法可以让我们有效避免事情向坏方向发展.
让我们从个简单毫无实际价值却至少能介绍说明部分概念例子开始.你汽车有个计程器.它工作就是记录从上次复位以来行车路
程.我们将如何用编程语言建模?在C里面,这个计程器也许就是个数值变量,大概是float类型.这个会通过每隔行程增加它值,在合适时候也会复位为零.哪里会出问题呢?个臭虫会无端向这个变量赋个伪值,这可以由某些未预料到原因而发生.任何有过C编程经验人都会知道那会花掉数小时或数天来除掉这个当找出时简单得荒唐无比臭虫.(找出它刻往往会使劲地拍拍前额)
同样问题在使用面向对象时会从个截然区别角度着手.当设计它时,员会问件事不会是"什么是最类似它数据类型?"而是"究竟这玩意儿是干什么?"这区别的处引出了个稍带难度东西.我们需要花点儿时间确定到底计程器是用来干什么,外部世界希望怎样操纵它.然后我们决定构造个允许我们增加,复位,读值小机器,再就没别了.
我们并未提供种用于向计程器赋任意值思路方法:为什么?我们都知道计程器不是那样工作.你只能向计程器做那定义好几件事,而且是那些允许我们去做事.因此,如果什么东西地向其赋值(比如,车温度控制器),这立刻意味着发生.当运行它时候(或者当编译时,视语言性质而定)我们便会被告的禁止向计程器这个对象赋任意值.给出消息也许并非如此清楚,但它应该接近其真实原因.这并不防止发生,是吧?但它很快给我们直接指出了问题所在.这只是OO编程会为我们节约很多时间许多思路方法中个.
,我们会考虑将上面那玩意儿抽象化,建个工厂来造机器比个个单独地造要简单多.我们不希望直接造单独计程器;
换句话,我们希望所有计程器都能由个模型造出.这个模式(如果你喜欢,叫它计程器工厂)对应于我们所称个类,每个由它生成单独计程器(或由工厂造出)对应于个对象.许多面向对象语言要求我们在拥有个新对象的前定义它类,但Ruby不是如此.
当然运用面对对象语言并不意味着就会有好面对对象设计.实际上,用任何语言都有写出模糊,粗心,多虫,低造诣及不稳定代码.Ruby能为你做(作为反例,特别是C)是让OO编程实战足够自然,即使你仅仅在小范围内使用也不会感到必须凭借丑陋代码去提高效率.我们将会随着这本手册深入地讨论Ruby实现这些预定目标机制;下章将是"开关和刻度表"(对象思路方法),然后我们将讨论到"工厂"(类).你还会跟我们来吗?

Tags:  面向对象程序设计 面向对象 面向对象概念 面向对象的概念

延伸阅读

最新评论

发表评论