- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ruby 面向对象思维 概念由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
面向对象是一个挺让人迷惑的措辞.叫一切东西都是面向对象会让别人觉得你很时髦.Ruby声称自己是面向对象的脚本语言;但究竟什么才是"面向对象"?
我们已经有了各种各样的答案,但所有这些恐怕都归结于同一件事.与其快速地概括它,不如让我们先花点儿时间考虑一下传统的编程模式. 。
传统意义上,一个编程问题从出现的各种数据,以及处理数据的过程(procedures)着手.在这一模式下,数据是呆板,被动和无用的;它完全的求助于那个体积庞大的,主动的,逻辑性的,全能的过程体. 。
这一做法的问题在于程序是由程序员写的,而他们仅仅能在工作中记下为数不多的细节.而随着工程的加大,它的核心也增长到难以记住整个工程是如何工作.细微的失误和敲打错误变得越来越容易造成难以发现的臭虫(bugs).繁杂和意外的干扰开始在核心内出现,维护也变得像企图抓住一只愤怒的乌贼还要不让它的触须碰到你脸.当然,对于传统方法,我们也有很多指导你去缩小和检测这些臭虫的方法,但更好的解决方法是彻底的改变我们的工作方式. 。
而面向对象所做的就是让我们将现实的,重复性的逻辑工作交给数据本身;它将我们对数据的概念从被动变为主动.换种说法
我们不再让数据像一个开口的盒子一样让我们随意地伸手进去并取出东西. 。
我们将其看作一个封口的并带有开关和刻度盘的机器. 。
上面所说的"机器"的内部可能相当简单或者复杂;我们不能从外面窥视,我们也不能允许自己打开机器外壳(除非我们确实发现其中有误),因此我们只需要通过拨动开关,读取刻度来操作数据.机器一旦建好,我们便不再必须考虑它是如何运转. 。
也许,你会觉得这是在无端的增加自己的工作量,但这一方法可以让我们有效避免事情向坏的方向发展. 。
让我们从一个简单的毫无实际价值却至少能说明部分概念的例子开始.你的汽车有个计程器.它的工作就是记录从上次复位以来的行车路 。
程.我们将如何用编程语言建模?在C里面,这个计程器也许就是个数值变量,大概是float类型的.这个程序会通过每隔一定的行程增加它的值,在合适的时候也会复位为零.哪里会出问题呢?程序里的一个臭虫会无端的向这个变量赋一个伪值,这可以由某些未预料到的原因而发生.任何有过C编程经验的人都会知道那会花掉数小时或数天来除掉这个当找出时简单得荒唐无比的臭虫.(找出它的那一刻往往会使劲地拍拍前额) 。
同样的问题在使用面向对象时会从一个截然不同的角度着手.当设计它时,程序员会问的头一件事不会是"什么是最类似它的数据类型?"而是"究竟这玩意儿是干什么的?"这不同之处引出了一个稍带难度的东西.我们需要花点儿时间确定到底计程器是用来干什么的,外部世界希望怎样操纵它.然后我们决定构造一个允许我们增加,复位,读值的小机器,再就没别的了. 。
我们并未提供一种用于向计程器赋任意值的方法:为什么?因为我们都知道计程器不是那样工作的.你只能向计程器做那定义好的几件事,而且是那些允许我们去做的事.因此,如果程序里的别的什么东西错误地向其赋值(比如,车的温度控制器),这立刻意味着错误的发生.当运行它的时候(或者当编译时,视语言的性质而定)我们便会被告之禁止向计程器这个对象赋任意值.给出的消息也许并非如此清楚,但它应该接近其真实原因.这并不防止错误的发生,是吧?但它很快给我们直接指出了问题所在.这只是OO编程会为我们节约很多时间的许多方法中的一个. 。
一般的,我们会考虑将上面的那玩意儿抽象化,因为建个工厂来造机器比一个个单独地造要简单的多.我们不希望直接的造单独的计程器,
换句话,我们希望所有的计程器都能由一个模型造出.这个模式(如果你喜欢,叫它计程器工厂)对应于我们所称的一个类,每一个由它生成的单独的计程器(或由工厂造出)对应于一个对象.许多面向对象的语言要求我们在拥有一个新的对象之前定义它的类,但Ruby不是如此. 。
当然运用面对对象语言并不意味着就会有好的面对对象设计.实际上,用任何语言都有写出模糊,粗心,多虫,低造诣及不稳定的代码.Ruby能为你做的(作为反例,特别是C++)是让OO编程的实践足够自然,即使你仅仅在小范围内使用也不会感到必须凭借丑陋的代码去提高效率.我们将会随着这本手册深入地讨论Ruby实现这些预定目标的机制;下一章将是"开关和刻度表"(对象方法),然后我们将讨论到"工厂"(类).你还会跟我们来吗?
最后此篇关于ruby 面向对象思维 概念的文章就讲到这里了,如果你想了解更多关于ruby 面向对象思维 概念的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!