面向对象理论(2)-Object

什么是对象?
万事万物皆对象。
我以为这句话很精彩,因为它带有佛偈一样的色彩。
于是,不同的人理解这句话,有着不同的看法。我们并不想在这句话本身做更多的讨论,那太“宗教哲学”了。

你们看那天上的飞鸟,不稼不穑,我尚且养活它们,你们不比那飞鸟贵重得多吗?
----《马太福音》


我们在这里至少看到了飞鸟就是一个对象,而在我们的世界中,充满了各式各样的对象,人,飞鸟,百合花。
齿轮,轴承,阀。桌椅,鼠标,液晶显示器,等等。

我们认知世界是从具体到抽象的。
如果只是把看得见,摸得着的东西定义为对象,那么这未免太简单了。
一个过程,一个办法,一个概念也可以是对象。【1】我们的认识总是从具体到抽象的。
至于,一个对象是具体的,还是抽象的,我想这是一个哲学问题,也许取决于每一个人对一个事物的认识程度罢。
【1】我是这样想的,例如C++的仿函数,当我们用一个类来刻画一个函数的时候,就有些抽象了,以致于初学者总是有感费解。

对象有其类型
我们不得不先诠释类型的概念。
int a = 1;
这里,变量a的类型是int,那么它的类型就是int。当我们要表征数量,偏移,年份等这样的信息的时候,int类型的量就可以完成描述了。
而一个矩形呢?它的类型是什么呢?
我们知道在C语言里面采用struct关键字来描述这样的类型。
struct Point
{
    
int  x;
    
int  y;
};
struct Point p1;
struct Point p2;
p1.x = 0;

p1.y = 0;
p2.x = 0;
p2.y = 1;

Point就是我们自定义的类型了,那么这个类型的变量,我们就可以称为是一个 Point类型的对象了。
在上面的代码中,我们说 Point是类型,而p1和p2是Point类型的两个实例。


对象和类
初学者常常对语言中的static成员感到疑惑,于是我们讲解一下static关键字的面向对象的意义。这个static已经不是C语言中的static了。看如下代码:
class  Point
{
    
static   int  count;
    
int  x;
    
int  y;
}
这里,我们有三个成员,其中,count被冠以static关键字。那么它与成员x,y就有了非常大的差别了,我们称count是类成员,而x和y是对象 成员。count成员不属于某一个对象,它不是某一个对象的属性,而是属于整个类的。例如,在一个二维平面上,有若干个点,那么每一个点就是一个Point类的实例对 象,它们有自己的坐标,一个点的x值(横坐标),和另外一个点的x值是两个不同的量(尽管它们的值可能相等),而这个平面上点的数量(值)只有一个,就是Point实例的个数,并且,这个数量不是某一个Point实例的属性,而是表达整个Point类的某一种属性。
【2】对于C++的程序员来说,类成员往往被直接翻译为静态成员了,但是,这似乎不能直观地反映它的意义。
在这个系列的专题中,请大家注意对象这个词,有时候,它可能强调对象的类型的概念,有时候则表达对象实例的含义,而有时候则含有这两重意思,读者要仔细辨析和体会。但是初学者,还是要注意区分类型和实例之间的关系。


【3】在 这个系列的专题中,我尽量采用C++和Java代码作为例子,而且会忽略其中的一些语法要素,比如是private还是public,是int,还是 Integer。并且还有可能用C#,JavaScript,Ruby的代码作为例子。但是大家能体会到代码所表达的意义即可,不必深究其中的语法细节。而在某个议题上,也许用C++来表达能达到更好的效果,届时我会指明那是C++的代码的。

转载于:https://www.cnblogs.com/healerkx/articles/1214993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值