读书笔记:《代码大全第2版》 06.创建高质量的代码之伪代码编程

本文介绍了使用伪代码进行类和子程序创建的过程,强调伪代码在设计阶段的重要性。通过详细步骤,包括设计子程序、编写子程序代码、检查代码和收尾工作,阐述了如何利用伪代码提高代码质量,并提醒在编程时考虑错误处理、效率和模块化设计。

伪代码编程过程

创建类和子程序通常都是一个迭代的过程。在创建子程序的过程中获得的认识常常会反过来影响类的设计。

1、类和子程序的创建过程

类的创建过程

类的创建过程

子程序的创建过程

子程序的创建过程

2、伪代码

如何编写一段伪代码:

  • 用类似英语的语句来精确描述特定的操作
  • 避免使用目标语言中的语法元素
  • 用伪代码去描述解决问题的方法意图,而不是去写如何在目标语言中实现这个方法
  • 在一个足够低的层次上编写伪代码,以便可以近乎自动地从它生成代码

不好的伪代码示例:

不好的伪代码示例

好的伪代码示例:

好的伪代码示例

一份好的伪代码几乎可以直接照着它生成代码,之后伪代码还可以作为代码中的注释。

3、通过伪代码创建子程序

子程序说明

3.1 设计子程序

  1. 检查先决条件
    • 检查该子程序在设计上是否是真正必需的,是否能够与整体设计相匹配。
  2. 定义子程序要解决的问题
    1. 子程序将要隐藏的信息(示例隐藏了两项事实:错误信息的文本和当前的处理方式(交互式界面或命令行))
    2. 传给子程序的输入(示例中的给该子程序的输入数据是一个错误码)
    3. 从子程序得到的输出(示例中存在两种输出:错误信息或状态值)
    4. 在调用程序之前确保有关的前条件成立(比如输入数据的取值位于特定范围之内、初始化流、文件打开等,实例中没有任何需要保证的前条件)
    5. 在子程序将控制权交回调用方程序之前,确保其后条件的成立(如输出数据的取值位于特定范围之内。示例中的后条件是保证状态值或为Success,或为Failure)
  3. 为子程序取个清晰明了的好名字
  4. 在标准库中搜寻可用的功能(学会复用,你需要实现的功能可能已经有人帮你实现了)
  5. 考虑错误处理
  6. 考虑效率问题
    • 对大多数系统而言程序的效率并不是十分紧要。通常只需要关注子程序的接口是否经过很好的抽象,代码是否易读即可
    • 少数系统的性能是非常重要的。考虑是用空间换时间,还是时间换空间
    • 最主要的优化还是在于完善高层的设计,而不是完善某个子程序。先宏观后微观
  7. 研究算法和数据类型(有些答案可能就在某本算法书中)
  8. 编写伪代码
  9. 考虑数据
  10. 检查伪代码(确认很容易理解子程序在做什么以及它是怎么做的)
  11. 在伪代码中尝试更多的想法(用伪代码反复描述这个子程序直到用伪代码写出的句子甚至可直接编码)

3.2 编写子程序的代码

编写子程序的代码

  1. 写出子程序的声明
  2. 将伪代码转变为高层次的注释
  3. 在每条注释下面填充代码
  4. 检查代码是否需要进一步分解
    • 如果一段伪代码形成的代码量超出了预期,可以将这些代码重构为独立的子程序来调用或者先将该伪代码分解为更多行的伪代码

3.3 检查代码

  1. 在脑海里检查程序中的错误
  2. 编译子程序
  3. 在调试器中逐行执行代码
  4. 测试代码
  5. 消除程序中的错误(如果错误太多就重新思考后重写吧)

3.4 收尾工作

  1. 检查子程序的接口参数(第7节 "方法参数"小节)
  2. 检查整体的设计质量
    1. 是否功能内聚
    2. 子程序之间是否松耦合
    3. 子程序是否采用防御式设计
  3. 检查子程序中的变量
  4. 检查子程序中的语句和逻辑
  5. 检查子程序的布局
  6. 检查子程序的文档
  7. 除去冗余的代码注释

4、总结

核对表

【项目介绍】基于Java开发的OA办公审批系统源码+项目详细说明.zip该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,或者实际项目借鉴参考!当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。OA工程 一、项目概述办公系统是一套自动办公系统,系统主要包含:管理端和员工端管理端包含:权限管理、审批管理、公众号菜单管理员工端采用微信公众号操作,包含:办公审批、微信授权登录、消息推送等功能项目服务器端架构:SpringBoot + MyBatisPlus + SpringSecurity + Redis + Activiti+ MySQL前端架构:vue-admin-template + Node.js + Npm + Vue + ElementUI + Axios 二、核心技术| 基础框架:SpringBoot || ------------------------------------------------------------ || 数据缓存:Redis || 数据库:MySQL || 权限控制:SpringSecurity || 工作流引擎:Activiti || 前端技术:vue-admin-template + Node.js + Npm + Vue + ElementUI + Axios || 微信公众号:公众号菜单 + 微信授权登录 + 消息推送 | 三、项目模块- oa-parent:根目录,管理子模块:- common:公共类父模块- common-util:核心工具类- service-util:service模块工具类- spring-security:spring-security业务模块- model:实体类模块- service-oa:系统服务模块 四、接口汇总1. 角色管理--获取所有角色:/admin/system/sysRole/findAll2. 角色管理--分页查询:/admin/system/sysRole/{page}/{limit}3. 角色管理--根据id获取角色信息:/admin/system/sysRole/get/{id}4. 角色管理--新增角色:/admin/system/sysRole/save5. 角色管理--修改角色:/admin/system/sysRole/update6. 角色管理--删除角色:/admin/system/sysRole/remove/{id}7. 角色管理--根据id列表删除角色:/admin/system/sysRole/batchRemove8. 后台管理--登录:/admin/system/index/login9. 后台管理--获取信息:/admin/system/index/info10. 后台管理--登出:/admin/system/index/logout11. 用户管理--分页查询:/admin/system/sysUser/{page}/{limit}12. 用户管理--根据id获取用户信息:/admin/system/sysUser/get/{id}13. 用户管理--保存用户信息:/admin/system/sysUser/save14. 用户管理--更新用户信息:/admin/system/sysUser/update15. 用户管理--根据id删除用户信息:/admin/system/sysUser/remove/{id}16. 用户管理--批量删除用户信息:/admin/system/sysUser/batchRemove17. 用户管理--获取用户的角色信息:/admin/system/sysUser/toAssign/{userId}18. 用户管理--给用户分配角色:/admin/system/sysUser/doAssi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值