连载:面向对象葵花宝典:思想.技巧与实践(6) - 不要说你懂"类"

方以类聚,物以群分——《周易易传》。

类是面向对象领域里最基础的一个概念,也是面向对象分析和设计的基石。

然而,如此重要的一个概念,竟然很难找到深入的说明,绝大部分介绍面向对象的书籍或者资料基本上都是这么解释的:“类是一组对象的抽象”,这个解释看起来清晰明了,但实际上犯了一个逻辑上的错误:以未明确的概念来解释待明确的概念,什么是对象,什么是抽象,我们都还不知道,你却用这个概念来解释类?那当然看不懂了。

还有另外一个解释:类就是属性和方法的集合!甚至还会给出如下这样的样例:

ClassPerson{

Intage;

Stringname;

Voidplay();

}

这种解释深究一下,其实很容易发现其犯了本末倒置的错误:类是本,代码是末,只有清晰地掌握了类的概念,才能写出好的代码。否则,即使写出了代码,也是一堆烂代码。

那究竟何为类呢?

其实,抛开面向对象,抛开程序开发,即使在我们的现实世界中,类也是无处不在的:

古语云:物以类聚,人以群分,这里的“类”,其实和面向对象中的“类”的逻辑含义并无不同。

我们的生物学将生物分为动物、植物、微生物等种类,这里的“类”,和面向对象中的类概念也是一致的。

因此,当我们在定义什么才是“类”的时候,其实完全不需要和面向对象扯上关系。简单来说,类就是一组相似事物的统称

这个定义看起来再简单不过了,但为了避免在实践过程中设计不合理的类,我们还要深挖背后的玄机,玄机在哪里呢?

玄机就在定义里面,我们来认真分析一下定义:

首先:请看“一组”,思考一下为什么是“一组”,不是“一个”?

其次:请看“相似”,思考一下为什么是“相似”,不是“相同”?

最后:请看“统称”,思考一下为什么是“统称”,不是“名称”?

第一个玄机——“一组”:一组的玄机在于“多个“,单个事物无法成为类。

一个很简单的例子:“人“可以是一类,但“我”就不是一个类(那又是什么呢,请看后文分解?)

第二个玄机——“相似”:相似的玄机在于“比较像,但不完全相同”。

还是“人”这个例子:奥巴马和克林顿都是美国总统,都是人,有很多相似的地方,但他们两个绝对不是完全相同的。

第三个玄机——“统称”:统称的玄机在于“统”,也可以叫做“通称”,统称要能够概括这多个事物。

还是上一个例子:奥巴马和克林顿的统称可以为“人”、“男人”、“总统”,但不会统称为“奥巴马”,因为奥巴马是一个具体的人了。

类的定义玄机我们已经基本解读,看起来已经比较清晰了,但不要高兴太早,还有一个更大的玄机:我们怎么划分类?

一个很简单的问题:你和我是一类么?

。。。应该是:)

再一个简单的问题:你和猪是一类么?

你肯定会跳起来:我怎么和猪是一类呢?

但我要说,我们和猪确实是一类,我们都是“哺乳动物“。

再一个简单的问题:你和松树是一类么?

这次你可能学乖了:也是一类,都是“生物“。

。。。。。。

到这里你可能已经迷惑了“到底我和什么是一类“?

这个问题引出了类最重要的一个玄机:“如何定义类“?

其实答案就隐藏在我们前面的问题中:“只要有相似点的就是同一类“!

我和你都是一类,是因为我们都是“人“;

你和猪是一类,是因为都是“哺乳动物“;

你和树一类,是因为都是“生物“;

。。。。。。

但这样又引出另外一个问题:如果只要有相似点就是同一类,那么最后是不是只要用一个类“事物”或者“东西”就可以了呢,干嘛还用得着分那么多类么?

万法归一,所有的事物当然最后都可以归为一类(例如在Java中就有一个大一统的类Class),但这显然远远不能满足我们的要求,实际应用中我们肯定需要不同的、多种多样的类,那么具体如何操作呢?

有一句广告词可以很好的概括:角度决定看法!

也就是说:站在你的观察角度,能够看到相似点就是同一类!

当你观察人时,我和你是一类,但你和猪就不是一类了;

当你观察动物时,我、你、猪都是一类,但树就不是了;

当你观察生物时,我、你、猪、树都是一类

。。。。。。。

所以最后我们总结一下如何划分类:站在你的观察角度,具有相似点的事物就是同一类

分类:编程语言 时间:2014-08-04 人气:9
本文关键词: C/C++编程
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.053 (s). 10 q(s)