今天把“类”说清楚

一、准确解读类:1、类是面向对象领域最基础的一个概念,也是面向对象分析和设计的基石。许多书和资料对类的解释通常是:类是一组对象的抽象。这个解释看是清晰明了,但实际上犯了个逻辑上的错误:以未明确的概念来解释待明确的概念,在什么是对象、什么是抽象还不明白的时候,却用这个解释类,容易看的是懂非懂。还有种解释:类就是属性和方法的集合!这里犯了一个本末倒置的错误:类是本,代码是末,只有清楚了类,才能写出好代码。2、定义类时可不需要同面向对象扯上关系。简单的定义:“类就是一组相似事物的统称定义里的玄机有六个字,”一组“(思考下,为什么是一组,而不是一个?),玄机在于多个,单个事物无法成为类;”相似“(思考下,为什么是相似,而不是相同?),玄机在于‘比较象,但不完全相同’;”统称“(思考下,为什么是统称,而不是名称?)玄机在‘统’也可以叫作‘通称’,要能够概括多个事物。

二、怎么划分类:“只要有相似点就可以划为同一类!“我和你是一类,因为同是‘人’;人和猪是一类,因为同是‘哺乳动物’;人和树是一类,因为同是‘生物’。为什么还要划分那么多的类,因为角度决定看法!站在你的角度观察,只要能看到相似点的事物,就可归为同一类!

三、面向对象类:它由两部分组成:属性和方法属性:指类具有的特性。方法:指类具有的功能。在实际设计和编码时,我们怎么划分属性和方法?有一个简单的判断方法:名词是属性,动词是方法。如:我的身高是175CM,这里‘身高’就是‘人’的一个属性;我能玩足球,这里‘玩足球’就是‘人’的一个方法。这看上去简单,实际上会遇到很多复杂情况。

(一)第一个问题是:怎么设计属性?最典型的就是‘地址‘。如:陕西省西安市长安区西街韦曲路15号。这里其实包含了多个‘省、市、区、街、路’号‘多个信息,在设计时,是记录一个属性’地址‘,还是记录4个属性’省、市、区、街‘?一个或四个都没问题,关键看应用场景,看需求。如果不知道应用场景,最保险的是选择4个属性方案,因为这种方法能适应多种场景。这里引出设计属性的一个基本原则:属性最小化原则,即‘属性不可再分’!

(二)第二个问题是:怎么设计方法?方法看上去简单,看到一个动词就是方法了。但实际操作远没有这么简单。如:玩足球,就是一个动作,但这里的动词是‘玩‘还是’玩足球‘?如果是’玩‘,那么’玩篮球‘、’玩网球‘都是一个动词’玩‘,那这几个运动都是一个方法吗?而且如果它们都在一个方法里,那么这个方法如何区分我是玩什么球呢?只能增加一堆if-else来进行区分;而且我如果新加一个’玩排球‘岂不是又要改这个’玩‘的方法?这样这个玩的方法最后就成了一个大杂烩了。这里引出设计方法的一个基本原则:方法单一化原则,即’一个方法只做一件事’!

四、对象:有了‘类‘的清晰定义后,‘对象’就比较容易理解了。对象就是一个具体的类,一个真实存在的类。如:‘人’是一个类,我是一个‘人’的对象,你是一个‘人’的对象,普京也是‘人’的对象……;又比如:我们去京东买‘冰箱’,但国美肯定没有一个单独叫‘冰箱’的东西卖给我们,而是具体的某台海尔XX型号的冰箱、西门子YY型号的冰箱等。这里‘冰箱’就是一个类,而具体的‘某台海尔XX型号的冰箱‘就是一个具体的对象。

       我们继续探究一下:有了类,为什么还会有对象?“类“和”对象“各自的作用是什么?我们知道,在人类出现之前,世界上就有各种各样的物种了,有恐龙、老虎、鳄鱼、松树、空气等,也就是说,真实存在的是对象,而‘类‘是有了人类文明后,根据观察分析,加以归纳总结出来的。在软件世界中也是这样的,真正存在于软件运行过程中的是’对象‘,而不是’类‘,’类‘只是在程序编写中由程序员分析归纳出来的。这也是面向对象之所以叫作’面向对象‘而不是’面向类‘的一个原因吧。

      虽然我们定义对象就是‘一个具体的类‘,但是否意味着必须先有类后有对象呢?要回答这个问题,必须先澄清几个概念::a.现实对象:我们能看到的物体都可以称为现实对象;b.现实类:对现实对象的归纳总结;c.软件对象:软件实际运行过程中存在的对象;e.软件类:软件设计过程中归纳总结出来的类。它们的区别和联系为:

        现实对象——归纳概括——现实类——抽象模拟——软件类

 

            软件类——实例化——软件对象——活动、交互——程序

   那这样是否意味着能够感知的对象才能抽象为类呢?对于现实类确实是这样,但对于软件类和软件对象来说,并不全是这样,‘软件类来源于现实类,但高于现实类‘。首先,软件类同现实类并不全是一一对应的,有时需要将现实类拆成几个软件类;其次,软件类并不一定是现实存在的。例如:’策略‘是人类提取出来的一个概念。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值