当前位置: 首页 > news >正文

labview关于OOP

这几天看了知乎李时珍,李老师的文章,还有labview编程之道,汪老师的文章,对于OOP有了一些认识,这里做了一些记录。

1.简介 

类是一种自定义数据类型,和与该数据交互的方法,是一个集合,方法和数据捆绑在一起。

1.1创建方法

主要介绍两种

基于动态模板分配的VI:这个是后面想用子类来重写功能创建的,可以是优化,更新功能。

基于静态模板分配的VI:静态VI不能重写,只能继承,用于一些不会变的固定的方法。

1.2类的继承

涉及到OOP就离不开封装,继承,多态,这三大件,这里将一下继承。

在一个已有类的基础上可以生成定义更细致的子类,子类拥有原有的类(父类)所有公开的属性和方法,他还具有一些更为具体的属性和方法,可以定义相似的类型,相似关系的建模。就相当于动物类下面还细分哺乳动物和非哺乳动物类。这两者都是动物,但是有具有不同的特性。

1.3类的封装

把高度相关的一组数据和方法组织在一起,形成一个相对独立的模块,外部程序只能通过严格定义的接口访问这个模块公开的数据和方法,不需要和外部发生联系的数据和方法把他隐藏起来。可以保护数据不被意外破坏,保护数据不会被其他函数意外修改,封装可以提高代码的可维护性和可重用性。

1.4类的多态

同一种方法,在不同的子类中具有不同的表现方法,虽然子类中具有很多继承自父类相同的方法,但是他们的实现可以是不同的,调用这些方法可以使用父类的名称调用他们,可以通过继承父类的方法,通过接入子类的不同来实现执行不同的子类方法。

1.5接口

接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。一个类只能继承一个父类,一个类可以实现多个接口,接口中不包含任何数据,包含一个以上的虚方法,直接调用接口实现会报错,必须在子类中重写方法来使用,接口为多继承模式,一个子类可以继承多个接口,类继承接口后必须重写。

2.单一职责SRP

原则规定每一个类都应该有一个单一的功能,并且这个功能应该由这个类完全封装起来,最终一个类或者模块应该有且只有一个改变的原因。

核心思想:一个VI只做一件事,并且把它做好,例如厨师只负责炒菜,服务员只负责上菜,收银员只负责结账。

优点:一个类只做一件事,类的复杂性降低,实现什么功能有准确定义,一个类的颗粒性变小,提高类的可读性,因为职责单一,所以一个类变更功能对其它类的影响会比较小。

缺点:会造成类的膨胀,增加开发时间。

3.接口隔离原则ISP

尽量将臃肿的接口拆分成更小的更具体的接口。可以把一个丰富的接口拆分成几个小接口,用来给不同的类继承。

核心思想:不要强迫模块使用它不需要的接口,例如你给了我整套文具,但是我只需要一支笔。

优点:比较小的颗粒度接口设计程序,使代码高内聚,低耦合,减少代码冗余,使代码更容易理解和维护。

4.依赖倒置原则DIP

高层模块不应该依赖于底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节依赖抽象。

核心思想:高层模块不该依赖底层模块,二者都应该依赖抽象,就像老板不直接管理员工,而是通过企业文化,员工手册约束员工。

优点:可以降低模块之间的耦合性,解耦类之间的依赖,提高系统的稳定性,提升代码的可拓展性,减少并行开发引起的风险。从顶层开始设计忽略实现细节,让不同的开发人员做不同的事情,将设计和实现分离定义好接口或抽象类后两边并行开发,提高效率。

5.里氏替换原则LSP

为继承必须确保超类所拥有的性质在子类中仍然成立,确保所有子类使用父类方法后软件功能正常,确保所有子类重写父类方法在软件运行时功能正常。

核心思想:子模块必须能无缝替换父模块,且系统不崩溃。就像备胎必须能替换原装轮胎,且不影响汽车的运行。

通俗来讲子类可以扩展父类的功能,但不能改变父类原有的功能,也就是说子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类方法。

6.开闭原则OCP

软计设计应该对扩展开放对修改关闭,具体操作就是软件功能变动时只增加子类扩展即可,无需或尽量减少对程序的修改。

核心思想:软件实体对扩展开放,对修改关闭。例如对于已经搭好的积木,可以再上面添加积木,无需拆毁原有的东西。

提高代码的可复用性,由于各个功能都是由子类完成,如果子类无法完成时,通过扩展子类或组合子类完成新的功能,提高代码的复用性。也可以提高软件的可维护性,当功能改变时,只需要添加新的子类即可,无需修改主程序代码,隐藏了软件框架的细节。


文章转载自:
http://beard.hfytgp.cn
http://anglia.hfytgp.cn
http://bigg.hfytgp.cn
http://blowball.hfytgp.cn
http://andersen.hfytgp.cn
http://achromycin.hfytgp.cn
http://aerarium.hfytgp.cn
http://blockhouse.hfytgp.cn
http://airbag.hfytgp.cn
http://bend.hfytgp.cn
http://bowler.hfytgp.cn
http://chemosphere.hfytgp.cn
http://biconical.hfytgp.cn
http://catsuit.hfytgp.cn
http://beluchistan.hfytgp.cn
http://cholesterol.hfytgp.cn
http://cacodaemon.hfytgp.cn
http://bydgoszcz.hfytgp.cn
http://chloritic.hfytgp.cn
http://ang.hfytgp.cn
http://ceiled.hfytgp.cn
http://budding.hfytgp.cn
http://bobbly.hfytgp.cn
http://boredom.hfytgp.cn
http://backscratching.hfytgp.cn
http://calefacient.hfytgp.cn
http://batfish.hfytgp.cn
http://autoff.hfytgp.cn
http://catskinner.hfytgp.cn
http://auxochrome.hfytgp.cn
http://www.dtcms.com/a/280943.html

相关文章:

  • labview生成exe应用程序常见问题
  • Java行为型模式---责任链模式
  • redis集群的部署
  • 渭河SQL题库-- 来自渭河数据分析
  • JavaScript与Vue:现代前端开发的完美组合
  • King’s LIMS:实验室数字化转型的智能高效之选
  • AWS S3事件通知实战:从配置到生产的完整指南
  • 云蝠智能赋能呼入场景——重构企业电话服务
  • JVM——为什么Java8移除了永久代(PermGen)并引入了元空间(Metaspace)?
  • 订单初版—7.支付和履约实现的重构文档
  • 域名备案是否可以加急
  • DirectX12(D3D12)基础教程九 间接绘制
  • Dynadot邮箱工具指南(十二):删除域名邮箱
  • 学习软件测试的第十六天
  • C++ Qt插件开发样例
  • Git Bash 实战操作全解析:从初始化到版本管理的每一步细节
  • 读取和写入json,xml文件
  • Kubernetes 架构原理与集群环境部署
  • Codeforces Round 907 (Div. 2) F. A Growing Tree(2000,子树修改)
  • 拥抱 Spring Boot:开启 Java 后端开发的“快车道”
  • MySQL功能模块探秘:数据库世界的奇妙之旅
  • 解决了困扰我的upload靶场无法解析phtml等后缀的问题
  • JAVA学习笔记 使用notepad++开发JAVA-003
  • SpringBoot 3.x集成阿里云OSS:文件上传 断点续传 权限控制
  • 填补空白!openKylin率先完成RISC-V商业打印驱动全适配
  • AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段
  • Python打卡训练营Day58
  • 大白话解释一下RTC实时时钟
  • 【机器学习深度学习】大模型推理速度与私有化部署的价值分析
  • 元宇宙内容生产工具终局之战:三维编辑、实时协同与跨平台发布的黄金三角