首页 > 其他分享 >代码大全阅读笔记1

代码大全阅读笔记1

时间:2023-04-18 13:00:29浏览次数:46  
标签:对象 代码 笔记 子程序 接口 设计 复杂度 大全

第 5 章:软件构建中的设计
5.1 设计中的挑战

设计是一个险恶的问题;
设计是个了无章法的过程 => 直到你没时间做了为止。
设计就是确定取舍和调整顺序的过程。
设计受诸多限制。
设计是不确定的。
设计是一个启发式过程。
设计是自然而然形成的。
几乎所有的系统都在其开发的起始阶段经历某种程度的设计变更,而当它们进入到后续版本中都会进行更大的改变。软件的性质决定了这些改变在多大程度上是有益且可被接受的。

5.2 关键的设计概念

软件的首要技术使命:管理复杂度。

将整个系统拆解为多个子系统;
保持子程序的短小精悍:从问题的领域着手,而不是从底层实现细节入手去编写程序。
写出容易让人理解的代码;
如何应对复杂度
高代价、低效率的设计一般来源于:
用复杂的方法解决简单的问题;
用简单但错误的方法解决复杂的问题;
用不恰当的复杂方法解决复杂的问题;
解决方法:
把任何人在同一时间需要处理的本质复杂度的量降到最小;
不要让偶然性的复杂度无畏地快速增长;
理想的设计特征
最小的复杂度;
易于维护;
松散耦合;
可拓展性;
可重用性;
高扇入:让大量的类使用某个特定的类。
低扇出:一个类里少量或适中地使用其他类。
可移植性。
精简性。
层次性。

第 6 章:可以工作的类
6.1 类的基础:抽象数据类型 ADTs

定义:指一些数据以及对这些数据所进行的操作的集合。
使用 ADT 的益处:

可以隐藏实现细节;
改动不会影响到整个程序;
让接口提供更多信息;
更容易提高性能;
让程序的正确性显而易见;
程序更具自我说明性;
无须在程序内到处传递数据;
你可以像在现实世界中那样操作实体,而不用在底层实现上操作它;

6.2 良好的类接口
6.2.1 良好的封装:

尽可能地限制类和成员的可访问性;
不要公开暴露成员数据;
避免把私用的实现细节放在类的接口中;
不要对类的使用者做出任何假设;
避免使用友元类;(友元类是 C++ 中的概念,可以访问其他类的私有成员)
不要因为一个子程序里仅使用公共子程序,就把它归为公开接口;
让阅读代码比编写代码更方便;
要格外警惕从语义上破坏封装性;
留意过于紧密的耦合关系;

6.3 有关设计和实现的问题

警惕超过约 7 个数据成员的类;
让类中子程序的数量尽可能的少;
禁止隐式地产生你不需要的成员函数和运算符;
减少类中所调用的不同子程序的数量;
对其他类的子程序的间接调用尽可能的少;
一般来说,应尽可能减少类和类之间相互合作的范围,尽量让下面这几个数字最小:
所实例化的对象的种类;
在被实例化对象上直接调用的不同子程序的数量;
调用由其他对象返回的对象的子程序的数量;

6.4 创建类的原因

为现实世界中的对象建模;
为抽象的对象建模;
降低复杂度;
隔离复杂度;
隐藏实现细节;
限制变动的影响范围;
隐藏全局数据,尽可能通过方法来对数据进行访问或修改;
让参数传递更顺畅;
建立中心控制点;
让代码更易于重用;
为程序族做计划:把某些预料到可能会改的抽离到单独的类中;
把相关操作包装在一起;
实现某种特定的重构;
避免创建万能类;
消除无关紧要的类;
避免用动词命名的类:只有行为而没有数据的类往往不是一个真正的类;

作者:nanchen2251
链接:https://www.jianshu.com/p/02ad9e5756ea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:对象,代码,笔记,子程序,接口,设计,复杂度,大全
From: https://www.cnblogs.com/lmyy/p/17329187.html

相关文章

  • 若依前端后端分离 代码生成修改(1)
    模板引擎修改2023年3月7日9:26主要配置参数的引用和定义表字段.vm模板:参数名使用位置(.vm模板文件中)前端表单表头默认值来源db表:gen_tablepackageNamepackage${packageName}.controller;生成包路径配置文件Package_nameClassName和class......
  • 使用Task的一些知识优化了一下同事的多线程协作取消的一串代码
    最近在看一个同事的代码,代码的本意是在main方法中开启10个线程,用这10个线程来处理一批业务逻辑,在某一时刻当你命令console退出的时候,这个时候不是立即让console退出,而是需要等待10个线程把检测状态之后的业务逻辑执行完之后再退出,这样做是有道理的,如果强......
  • 当模板方法遇到了委托函数,你的代码又可以精简了
    现如今当你翻看一些开源项目源码的时候,你会发现现在到处充斥着委托函数,如Func,Action,Predicate,确实现在的C#在函数式编程的路上越来越成为主流,越来越显示威力,曾经的一些经典设计模式写法,在函数式下可以稍微优化一下了,这篇我们就来说说模板方法。一:实际场景1.模板方法定义......
  • 若依前后端分离 代码生成修改(2)
    修改若依代码生成模块目标:多级目录情况下实现模块名/mvc名[controller/…]/功能名/XXXController原格式:多级目录:模块名/功能名/mvc名[controller/…]/xxxController修改共分为两部分:文件路径和模板代码中的引用路径若依代码生成配置1.修改生成文件路径Com......
  • ChatGPT/大模型+零代码,给中小企业带来哪些机会?
    ChatGPT让2023年成了AI之年。正如iPhone在2007年开启了智能手机时代,我们现在正在进入人工智能时代。新形势下,零代码应如何借势发力?伙伴云“AI+零代码”给出了答案。作为零代码领域的头部平台,伙伴云全量发布【AI零代码应用搭建平台】,无需用户单独训练,无需额外投资,根据用户具体需求、......
  • SpringBoot学习笔记
    一、Springboot简介目的:设计目的是用来简化Spring应用的初始搭建以及开发过程Spring程序和SpringBoot程序对比SpringBoot项目快速启动对SpringBoot项目打包(执行Maven构建指令package)执行启动命令(cmd中)java-jarspringboot.jar注:jar支持命令行启动需要依赖maven......
  • 【敲敲云】零代码实战,主子表汇总统计—免费的零代码产品
    近来很多朋友在使用敲敲云时,不清楚如何使用主子表,及如何在主表中统计子表数据;下面我们就以《订单》表及《订单明细》表来设计一下吧,用到的组件有“设计子表”、“公式”、“汇总”等。《订单》表展示总金额=订单明细中“小计”求和小计=单价*数量首选我们打开敲敲云......
  • 面对CICD分析的代码静态测试工具Klocwork 2023.1版本更新快讯
    前言  Klocwork2023.1为CI/CD分析pipeline引入灵活的管理选项。使用差异分析加速静态分析扫描,在CI/CD管道构建中提供上下文结果,并可以用和服务器端相同的方式管理issue。 扩展了对Java14/15和C#8.0语言的支持,C/C++/C#PATH分析性能提升高达50%*。此外,此版本还包括对M......
  • 动力节点2023最新MybatisPlus学习笔记(一)入门篇
    MyBatis是很火的框架,一般的项目都是基于ssm,虽然mybatis可以直接在xml中通过SQL语句操作数据库,很灵活,但其操作都要通过SQL语句进行,就必须写大量的xml文件,非常麻烦。而MyBatis-Plus可以很好的解决了这个问题,比Mybatis简单太多了,不用搞那么多xml文件的配置,直接与Springboot整合,开发效......
  • 动力节点2023最新MybatisPlus学习笔记(二)基础篇
    2【基础篇】2.1通用Mapper接口介绍有关于通用Mapper接口,之前我们已经看到了,我们自己编写的Mapper接口继承自BaseMapper接口,由BaseMapper接口提供了很多单表的增删改查相关的操作方法,在入门案例中,我们测试了查询所有的操作。在这一章节,我们介绍一些简单的Mapper接口中的方法,主要......