设计模式->如何抽象出对象

这里说对象,而不说类,是因为我们总是先发现了对象,然后抽象出类的。绝不是相反的,不然很别扭,很不符合认知习惯。你要教你小孩鸟类这个概念你总不会说世界一种鸟类,有翅膀、有羽毛,会飞。看这就是鸟。你想你小孩会怎样,一脸蒙逼,但是你拿个模型呢,或者去宠物市场呢,看到一只鸟,再和你小孩讲解鸟类就容易很多。

那么两者的关系呢,个人理解从对象抽象出类,从类具象化为对象。在代码层面上先发现对象,然后定义类,然后使用对象来交互,从而形成代码。

那门如何发现对象呢,这里自己一个方法,就是找名词、找动词,这个也是我一个同事教会我的,希望对你有点帮助。

 

例如:有一只鸟,有羽毛、有翅膀、会飞、会吃东西

那么名词:鸟,羽毛,翅膀,

那么动词:飞、吃东西

 

那么就很好抽象了,鸟、羽毛、翅膀都是名词,都可能是对象,那么为什么羽毛和翅膀为什么有的人认为是属性呢,其实属性和对象很难区分,如果非要区分,我认为是作用域,这里我们研究鸟,我们将羽毛翅膀当成属性了,那天我们要详细研究了,抽象出羽毛类,那门羽毛可以认为是一个对象,注入到鸟的对象中来。

那么飞、吃东西就是行为了,就是鸟这对象的方法

再进一步,我们就抽象出了鸟类,有羽毛和翅膀属性,有飞和吃东西的方法。再进一步呢,猫有毛,猫会吃东西,共同点找到了,再抽象呢,就抽象出父类野兽了。缩小范围,会飞,是野兽吗,当然不是,不是所有的野兽都会飞。是鸟吗,可以这么说,鸟都会飞,但是只有鸟会飞吗,显然不是,飞机也会飞,蝙蝠也会飞,那么怎么理解呢,为什么不能再抽象的基础上再抽象下呢,不仅仅是抽象事务,我们抽象了行为,这就是接口的产生了,接口是行为的抽象,具体到这个例子就是飞这个动作的抽象,将这个抽象出接口,是JAVA的通用做法,当然你也可以用多继承,使用虚函数解决,这个是另外一个思路,看成是C++的解决方式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值