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

High Quality Coding

  几条面向对象课上介绍的高质量代码写作原则:

   1. Don't Repeat Yourself

        不要重复你自己,重复代码,类似代码都是问题的隐患。程序员为了能够节省时间,喜欢复制现成的代码,稍加修改制作自己的调用的函数(方法),这种做法将会把原有的问题复制一份,修改的时候也要修改两份。重复代码的问题在诸多问题之中往往被列为首位。

      2. Single Responsibility Principle
       单一职责原则。一个类只干与自己相关的事情,一个方法只做一件事情,一个变量只表达一个意思。如果违背这个原则,那么代码理解的速度就会降低。并且,调用的时候会由于名称的误导而导致重复调用、意外行为等不可预期的错误。而修改代码的时候也因为其职责过多而致使影响性变大,导致无从下手,或者不敢下手。

      3. Open Closed Principle
       开放封闭原则,指的是代码对变更封闭,对扩展开放。当系统需要扩展的时候,可以通过派生子类或者重载函数的方式进行扩展,而无需修改原来的代码。这样做的好处是,当系统进行扩展的时候由于无需修改原来的代码,所以对原来系统的影响性也可以降到最小。

      4. Liskov Substitute Principle

         里氏代换原则。子类可以替代父类。这句话看似废话。但是实际上含义很深。比如经典的对面向对象技术的质疑话题:园非椭圆问题。即根据面向对象原则,园应该是椭圆的一个子类。但是当椭圆进行单轴拉伸的时候,圆无法做到这一点。实际上这违反了里氏代换原则。即圆是受限制的椭圆,圆无法继承椭圆所有行为和属性。所以,在面向对象课上老师爱用的例子:动物->狗这个例子也会有其谬误之处。动物在这里更应该是多个接口,而不是类,因为它不能保证所有的属性都会被所有的子类正确的继承。例如:

      5. Interface Segregation Principle
         接口分离原则。一个接口只做一类事情,将无关的行为分离成为其他的接口。从而使得接口单元变小。则调用方只需要了解自己相关的几个接口就可以了,而无需了解那些与自己无关的接口。同时也避免了去访问那些它不应该访问的接口。 

      6. Dependency Inversion Principle

        依赖倒置原则。有两层意思:访问依赖于抽象,不依赖于具体实现;实现依赖于抽象,抽象不依赖于实现。当调用方和实现都依赖于接口的时候,二者的耦合度就大为降低了。
      7. Law of Demeter

        迪米特法则。也叫最少知识原则。即对象只需要了解那些它需要的属性,只访问那些和它关系最密切的对象。这样可以减少对象的外部依赖。但是,需要了解的是,迪米特法则会创建大量的中介类。

转载于:https://www.cnblogs.com/HughParker/p/4549829.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 精心收集的必须熟悉的vim快捷键操作
  • Game publishing request was abnormally terminated (ID 27492).
  • iOS8推送消息的回复处理速度
  • Tiny模板编辑器
  • windows整体性能检测
  • 我的书签
  • 16 行为型模式-----备忘录模式
  • Nodejs部署再思考
  • root权限引发的/sbin/init不存在故障的血案
  • python代码`if not x:` 和`if x is not None:`和`if not x is None:`
  • USB那点事3 -使用端口2作为custom HID的传输(转)
  • CentOS开启FTP及配置用户
  • IOS 打开相机和相册的方法
  • DirectSound应用
  • C语言及程序设计进阶例程-25 排序问题及其求解
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • gcc介绍及安装
  • javascript面向对象之创建对象
  • Nacos系列:Nacos的Java SDK使用
  • webpack入门学习手记(二)
  • 百度地图API标注+时间轴组件
  • 记一次用 NodeJs 实现模拟登录的思路
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端存储 - localStorage
  • 巧用 TypeScript (一)
  • 深入 Nginx 之配置篇
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 突破自己的技术思维
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 异步
  • 鱼骨图 - 如何绘制?
  • elasticsearch-head插件安装
  • zabbix3.2监控linux磁盘IO
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (笔试题)合法字符串
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (理论篇)httpmoudle和httphandler一览
  • (力扣)1314.矩阵区域和
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net core使用ef 6
  • .Net7 环境安装配置