一、继承的应用场景
在上篇文章分析了继承的应用,本文反过来讲继承和实例。可以理解对上文的继承进行一下基础知识的铺垫,继承的应用场景非常多,典型的应用场景包括:
1、单纯属性的继承
这种继承非常常见,在前面也举过类似的例子,比如公司开发一款硬件产品,其通信协议为一个类Protocol,其中有二十个属性。过了一年,公司生产了新的升级产品,多提供了几项功能的监测,体现为增加了十几个属性。那么此时,就可以使用继承类Protocol的方式来进行新硬件的协议的开发。既兼容老的硬件产品,又减少了新硬件产品开发的复杂度。
2、行为的继承
同理,比如开发了一个监控软件,当监控到某个现象或某个开关被触发时,就报不同的警告并发送短信或通知消息等。当此监控软件升级后,可能增加一些诸如天气、扬尘等的监控,那么只需要继承原有的事件类,就可以继续在此基础上开发新的功能。
3、混合继承
这个就比较好理解了,可能我们的设备既需要硬件的数据属性的增加又需要事件或消息的通信,而实际上这种情况更为多见,所以把二者统一继承下来即可。
仅使用继承的程序一般都是相对简单的场景,更多是在继承的基础上使用多态。后面会更详细的分析一下多态的设计应用。所以继承的单一应用,一般都不会涉及到过多的复杂情况。如果涉及璚这种情况,大多数情况都是继承仅仅在其中起到了一个很小的作用。这点大家要明白,继承只是一个基础,更多的丰富应用是在此基础上展开的。
二、实际的例子
来看一个测量电力设备的协议处理:
struct w5a{
float I1;
float I2;
float I3;
float U0;
float U1;
float U3;
float S;
float P;
float Q;
};
struct w2k:public w5a{
double factor;
int type;
};
再看一个大桥监控的例子:
class monitor{
public:
void sendBridgeTilt(Event* e,int type );
void sendBridgeAltimeter(Event*e,int type);
void sendMsg(int type,double d);
protected:
double angle_;
};
class bj_monitor:public monitor{
public:
void sendTrafficAccident(Event*e);
void sendTrafficFlow(Event*e);
protected:
double height_;
};
以大桥的监控为例,可能早期的大桥只控制大桥的高、倾斜等,后期可能为增加交通流量、事故处理等等。这种小而专的场景下,单纯继承的应用还是非常多的。另外一个非常多的情况是电力系统的仪表监控,记得类得继承很深,原因就是一个设备往往衍生出几个甚至十几个升级版。如果开发者遇到这种情况,就可以非常清晰明白单纯继承的作用。
三、分析说明
大家有没有看到上面的例子,它体现在一些专有场景上的应用能更清晰的看清楚继承的应用,或者说这种场景更典型的举出了继承的例子。而一些中大型的软件上,继承其实很难单纯的体现在学习者的眼前,它一定混合着不同的情况的应用,这样就让一些新手有些措手不及。
正如学习一个知识,由简入深,循序渐进,才能更容易的理解和掌握这个知识,然后再加以应用,从中吸取经验教训,如此反复,则可以迅速的真正的理解这门知识。
四、总结
设计的学习难度说大很大,说小很小,关键看开发者的知识驾驭程度和水平。条条大路通罗马,但有没有捷径,这种捷径是否适合每个开发者?是不是有更适合具体到某一个人的捷径?这就需要每一个开发者和设计者不断的探索。
总体而言,多学习理论知识,多写代码,多看优秀的开源代码和框架,多和优秀的设计者进行有效的交流。在此基础上不断的思考和实践,对大多数开发者来说,是一条不错的提升之路 !