设计心得——继承和实例

一、继承的应用场景

在上篇文章分析了继承的应用,本文反过来讲继承和实例。可以理解对上文的继承进行一下基础知识的铺垫,继承的应用场景非常多,典型的应用场景包括:
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_;
};

以大桥的监控为例,可能早期的大桥只控制大桥的高、倾斜等,后期可能为增加交通流量、事故处理等等。这种小而专的场景下,单纯继承的应用还是非常多的。另外一个非常多的情况是电力系统的仪表监控,记得类得继承很深,原因就是一个设备往往衍生出几个甚至十几个升级版。如果开发者遇到这种情况,就可以非常清晰明白单纯继承的作用。

三、分析说明

大家有没有看到上面的例子,它体现在一些专有场景上的应用能更清晰的看清楚继承的应用,或者说这种场景更典型的举出了继承的例子。而一些中大型的软件上,继承其实很难单纯的体现在学习者的眼前,它一定混合着不同的情况的应用,这样就让一些新手有些措手不及。
正如学习一个知识,由简入深,循序渐进,才能更容易的理解和掌握这个知识,然后再加以应用,从中吸取经验教训,如此反复,则可以迅速的真正的理解这门知识。

四、总结

设计的学习难度说大很大,说小很小,关键看开发者的知识驾驭程度和水平。条条大路通罗马,但有没有捷径,这种捷径是否适合每个开发者?是不是有更适合具体到某一个人的捷径?这就需要每一个开发者和设计者不断的探索。
总体而言,多学习理论知识,多写代码,多看优秀的开源代码和框架,多和优秀的设计者进行有效的交流。在此基础上不断的思考和实践,对大多数开发者来说,是一条不错的提升之路 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中,交换机与控制器之间的通信基于 OpenFlow协议,其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析: 一、交换机连接控制器的流程(初始化阶段&…

opentitan riscv

OpenTitan‌是一个开源的硅根信任(Root of Trust, RoT)项目,旨在使硅RoT的设计和实现更加透明、可信和安全,适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理,作为一个协作项目,旨在生产高质量…

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的,自己不知道选什么题材进行分析,使用scitable包后这个完全不用担心,选题多到你只会担心你写不完,写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…

电脑内存智能监控清理,优化性能的实用软件

软件介绍 Memory cleaner是一款内存清理软件。功能很强,效果很不错。 Memory cleaner会在内存用量超出80%时,自动执行“裁剪进程工作集”“清理系统缓存”以及“用全部可能的方法清理内存”等操作,以此来优化电脑性能。 同时,我…

C#控制台应用程序学习——3.8

一、语言概述 1、平台相关性 C# 主要运行在.NET 平台上。.NET 提供了一个庞大的类库,C# 程序可以方便地调用这些类库来实现各种功能,如文件操作、数据库访问、网络通信等。 2、语法风格 C# 的语法与 C、C 和 Java 有一定的相似性。例如,它使用…

鸿蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏,内容栏和公工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示&am…

初阶数据结构(C语言实现)——4.1栈

目录 1.栈1.1栈的概念及结构1.2 栈的实现1.1.0 栈的初始化1.1.1 销毁1.1.2 入栈1.1.3 出栈1.1.4 获取栈中有效元素个数1.1.5 检测栈是否为空,如果为空返回非零结果,如果不为空返回01.1.6 获取栈顶元素1.1.7 验证 附录 栈的C语言实现源码.h文件.c文件test…

计算光学成像与光学计算概论

计算光学成像所涉及研究的内容非常广泛,虽然计算光学成像的研究内容是发散的,但目的都是一致的:如何让相机记录到客观实物更丰富的信息,延伸并扩展人眼的视觉感知。总的来说,计算光学成像现阶段已经取得了很多令人振奋…

什么样的物联网框架适合开展共享自助KTV唱歌项目?

现在物联网的广泛应用,也让更多用户们看到了它的实力,也使得共享经济遍地开花。其中共享自助唱歌设备也备受欢迎,那么适合开展共享自助KTV唱歌项目的物联网框架都应具备哪些特点呢? 智能化与自动化管理 物联网技术在共享KTV中的应…

机器视觉选型中,不同焦距的镜头成像视野有什么不同?

不同焦距的镜头成像视野的差异主要体现在视角范围和透视效果上。焦距越长,视角越窄,能捕捉的景物范围越小;焦距越短,视角越广,覆盖的景物范围越大。以下是具体分析: 焦距与视角的关系 焦距(Foc…

Linux16-数据库、HTML

数据库: 数据存储: 变量、数组、链表-------------》内存 :程序运行结束、掉电数据丢失 文件 : 外存:程序运行结束、掉电数据不丢失 数据库: …

开源订货系统哪个好 三大订货系统源码推荐

在数字化转型加速的今天,企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率,还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求,为您精选三款主流订货系统源码,助您快速搭…

行为模式---迭代器模式

概念 迭代器模式是设计模式的行为模式,它的主要设计思想是提供一个可以操作聚合对象(容器或者复杂数据类型)表示(迭代器类)。通过迭代器类去访问操作聚合对象可以隐藏内部表示,也可以使客户端可以统一处理…

Maven的学习以及安装配置 2024/3/1 idea

1. Maven的安装 1.1 首先查看编程工具合适的Maven版本 我使用的是2024/3/1 版本的idea,接下来我会用这个版本的idea进行演示。idea没有汉化的也可以参考我的步骤。 1、打开idea的设置,搜索Maven,进入Maven设置。 我们可以看到,…

基于 Docker 的跨平台镜像构建与增量更新实战指南

引言:破解容器化两大核心问题 在实际开发中,我们常常面临两个棘手问题: 跨平台兼容性:如何在Windows平台开发的镜像,无缝运行在 ARM64 服务器?更新效率低下:每次代码调整都要重新安装全部依赖…

支付通道开通对接一般需要多少钱

不少老板都想开通AIP线上接口,但是不知道这个成本到底是多少? 其实目前第三方支付公司对外提供了标准的线上接入技术方案,一般以API、SDK等形式。因此,商户在完成签约审核后,可以顺利拿到技术的密钥,正常调用第三方支…

什么是 spring 的循环依赖?

什么是 spring 的循环依赖? 首先,认识一下什么是循环依赖,举个例子:A 对象被 Spring 管理,并且引入的 B 对象,同样的 B 对象也被 Spring 管理,并且也引入的 A 对象。这种相互被引用的情况&#…

thrift软件、.thrif文件和thrift协议是什么关系,有什么用

Thrift软件、.thrift文件和Thrift协议是Apache Thrift框架的三个核心组成部分,它们协同实现跨语言服务的高效开发与通信。以下是三者关系及作用的详细解析: 一、核心组件关系 1. Thrift软件(框架) • 定位:Apache Th…

STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步

主题内容教学目的/扩展视频旋转编码器电路原理,跳线设置,结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子,杜洋老师 📑文章目录 一、旋转编码器原理与驱动结构1.1 旋转编码器工作原理1.2 驱动程序结构 二、方向判断…

elementplus的cascader级联选择器在懒加载且多选时的一些问题分析

1. 背景 在之前做的一个项目中使用到了element的级联选择器,并且是需要懒加载、多选、父子不关联等等,在选的时候当然没问题,但是回显的时候就会回显不出来,相信大部分伙伴都遇到过这个问题。我在以前出过一篇文章写过关于级联选…