程序设计原则

▶1.程序设计的基本原则

程序设计中哪些因素很重要,不同专家有不同看法,专家们都有直己独到的见解。有人认为程序的清晰性很重要;有人认为程序的执行效率要优先考虑;有人认为程序的正确性是头等大事:有些人认为这些都不重要,如果客户不满意,这一切都没有意义。大部分专家认为,程序设计人员做到以下几点非常重要。
(1)阅读和理解代码。程序员都要具备阅读和理解其他人代码的能力。程序员很少完全从零开始写代码,经常需要在现有程序模块中添加功能。因此,阅读和理解代码是程序员的必备技能。例如,为了便于程序的阅读和理解,Python编码规范PEP8(Python增强建议书)推荐,代码中一行不要超过79个字符,这样可以方便查看代码。一个函数不要超过30行代码,即代码可显示在一个屏幕内。一个类不要超过200行代码,不要超过10个方法。一个模块不要超过500行代码。
(2)保持清晰。程序代码不清晰容易产生Bug,会在后续测试中产生很多问题。要避免将表达式写得过于精练,这会给维护人员带来工作量。大多数情况下,清晰的代码和聪明的代码不可兼得。计算机专家爱德华·基尼斯(Edward Guniness)指出:“你的代码是写给小孩看的,还是写给专家看的?答案是:写给你的观众看。程序员的观众是后续的维护人员,如果不知道具体是谁,那代码就要写得尽量清晰。”
(3)简单并不容易。所有问题都能够找到解决方案,最优雅的解决方案往往是最简单的。但是,简单并不容易,达到简单通常需要做很多的工作。所有人都能用复杂的方法解决问题,但是想让解决方案变得简单可靠,这需要花费很大的精力和付出艰辛的劳动。

▶2.程序模块化设计原则

模块化设计原则就是把一个较大的程序划分为若干子程序,每个子程序是一个独立模块;每个模块又可继续划分为更小的子模块(构件);使软件具有一种层次性结构。
在设计好软件的体系结构后,就已经在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位置。我们习惯从功能上划分模块,保持“功能独立”是模块化设计的基本原则。“功能独立”的模块可以降低开发、测试、维护等阶段的代价。但是“功能独立”并不意味模块之间保持绝对的孤立。软件要完成某项任务,需要各个模块相互配合才能实现,因此模块之间需要保持信息交流。
进行程序的模块化设计时,要充分考虑以下原则。

(1)模块可分解性。要控制和降低程序的复杂性,就必须有一套相应的将问题分解成子问题的系统化机制,这种机制是形成程序模块化设计的关键。
(2)模块可组装性。充分利用现有构件组装成新的软件系统,尽可能避免一切从头开始的设计方案。
(3)模块可理解性。程序模块应当容易理解,从而使程序模块易于构造和修改。

(4)模块连续性。在对软件系统进行小的修改时,要尽可能只涉及单独模块的修改,而不要涉及整个软件系统,从而保证修改后的副作用最小化。
(5)模块保护。程序模块出现问题时,要将影响尽可能控制在该程序模块的内部,要使错误引起的副作用最小化。

▶3.软件的复用

复用就是利用现有的东西。一个系统中大部分内容都很成熟,只有小部分内容需要创新,大量的工作可以通过复用来快速实现。程序员应该把大部分时间用在小比例的创新工作上,而把小部分时间用在大比例的成熟工作中,这样才能把工作做得又快又好。例如,截止到2015年,Google公司的代码库容量达到了86TB,存有10亿多个文件,其中有900多万个源代码文件,代码行数高达20亿行,并且每天以4万次提交在增长(注:谷歌有超过3万开发人员)。据估计,全球大约有1000多亿行代码,无数功能被重写了成千上万次,这是极大的思维浪费。程序设计专家的口头禅是:“请不要再发明相同的车轮子了。”
构造新软件系统时,不必每次从零做起,直接使用已有的成熟构件,即可组装(或加以合理修改)成新系统。复用合理地简化了软件开发过程,减少了总开发工作量与维护代价,既降低了软件成本又提高了生产率。另一方面,一些基本构件经过反复使用和验证后,具有较高的质量,由这些基本构件组成的新系统也具有较高的质量。

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

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

相关文章

EtherCAT主站SOEM -- 10 -- SOEM之基于QT搭建自己的EtherCAT主站

EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析 0 QT-SOEM视频预览:一 SOEM主站解析:1.1 调用ec_init(eth0) 函数:1.1.1 执行到 nicdrv.c 文件 (网络接口卡(NIC)驱动程序)1.1.1.1 ecx_setupnic函数1.1.1.2 ecx_setupnic函数解析1.1.1.3 ec_setupheader(void …

word如何快速制作简易代码块

先上解决方案。 方式一(全自动): typora编辑,导出选择word文档即可。内网环境,故放弃。 方式二(全手动): 在修改文档时,左侧会有“段落布局”按钮,点击该按…

力扣刷题-二叉树-路径总和

112 路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum 22, 返回 true, 因为…

记录 | Visual Studio报错:const char*类型的值不能用于初始化char*类型

Visual Studio 报错: const char *”类型的值不能用于初始化“char *”类型的实体错误 解决办法: 1,强制类型转换,例如: char * Singer::pv[] {(char*)"other", (char*)"alto", (char*)"c…

arp协议

arp协议 ARP协议简介 在探讨计算机网络的复杂世界时,我们不可避免地会遇到地址解析协议(ARP)。ARP协议扮演着一个关键角色,它允许网络设备在发送数据时确定目标设备的物理地址,即媒体访问控制(MAC&#x…

Linux常见面试题30题详细答案解析(三)

1. 如何使用Linux中的系统日志进行故障排查和问题诊断? Linux中的系统日志记录了系统运行过程中的各种事件和错误信息。通过查看和分析系统日志,可以帮助管理员进行故障排查和问题诊断。了解如何查看和使用系统日志,可以提高故障排查和问题解…

1848_emacs_org-mode代码块环境

Grey 全部学习内容汇总: https://github.com/greyzhang/g_org 1848_emacs_org-mode代码块环境 这一部分主要是涉及到一些代码的执行、引用以及输出处理等功能。从之前我看的资料来说,更加偏重于可重现研究但不一定是文学式编程的必要部分。 内容来源…

git 上传大文件操作 lfs 的使用

我们要先去下载 下载后安装 我最后还是下载到了D:\git\Git\bin这个目录下 如何检查是否下载成功呢,用 git lfs install 在命令行运行就可以查看 下面怎么上传文件呢 首先我们还是要初始化文件的 git init 下一步输入命令 git lfs install 下一步 git lfs tra…

【小程序】-【

swiper、swiper-item轮播图 swiper是滑块视图容器。其中只可放置swiper-item组件。部分常用属性如下&#xff0c;其余属性详见&#xff1a;官方文档 <view class"banner"><swiperprevious-margin"30rpx"circularautoplayinterval"3000&q…

EasyExcel实现⭐️本地excel数据解析并保存到数据库的脚本编写,附案例实现

目录 前言 一、 EasyExcel 简介 二、实战分析 1.Controller控制层 2. service方法和方法实现 3.EasyExcel相关类 3.1 excel表实体类 3.2 自定义监听器类 4.测试 4.1 准备工作 4.2 断点调试 5.生成脚本文件 三、分析总结 章末 小伙伴们大家好&#xff0c;最近开发的时…

Ansible-playbook编译.yml脚本

1、playbook是什么&#xff1f; 在Ansible中&#xff0c;Playbook是用于配置、部署和管理被控节点的剧本。它由一个或多个play&#xff08;角色&#xff09;组成&#xff0c;每个play可以包含多个task&#xff08;台词&#xff0c;动作&#xff09;。使用Ansible的Playbook&am…

网络编程-认识套接字socket

文章目录 套接字概念端口号网络字节序 套接字类型流套接字数据报套接字 socket常见APIsocket函数bind函数listen函数accept函数connect函数sockaddr结构 套接字概念 socket套接字是进程之间一种通信机制&#xff0c;通过套接字可以在不同进程之间进行数据交流。在TCP/UDP中&…

如何开发一个prompt?prompt的使用有哪些原则?

提示词使用原则 如何开发一个跟自己预期结果接近的提示词&#xff1f;有哪些基本原则&#xff1f; 提示词迭代开发 写提示词时&#xff0c;第一次尝试是值得的&#xff0c;反复完善提示&#xff0c;获得越来越接近你想要的结果 原文来源于B站吴恩达提示工程教学公开课。…

低代码是美食!!!

一、什么是低代码 低代码是一种软件开发方法&#xff0c;通过图形化界面和少量手写代码&#xff0c;让开发者能够更迅速、简单地构建应用程序。相比传统的编码方式&#xff0c;低代码平台提供了可视化的开发工具和预构建的组件&#xff0c;使开发过程更加快捷高效。 二、低代码…

web前端之复制图片到div中、使用contenteditable属性把元素变为可编辑状态、FileReader

MENU 方式一方式二contenteditableFileReader 方式一 <div id"idEditor" class"w_100_ h_200" contenteditable></div>1、存在兼容性问题&#xff0c;而且contenteditable属性只是把div变为可编辑形式而已&#xff1b; 2、只能处理截屏形式的图…

ActionCLIP:A New Paradigm for Video Action Recognition

文章目录 ActionCLIP: A New Paradigm for Video Action Recognition动机创新点相关工作方法多模态框架新范式预训练提示微调 实验实验细节消融实验关键代码 总结相关参考 ActionCLIP: A New Paradigm for Video Action Recognition 论文&#xff1a;https://arxiv.org/abs/21…

7-5 时间类(Java for PTA)

设计一个名为Time 的类。这个类包含&#xff1a; 表示时间的数据域hour、minute 和second。一个以当前时间创建Time 对象的无参构造方法&#xff08;数据域的值表示当前时间&#xff09;。一个构造Time 对象的构造方法&#xff0c;这个对象有一个特定的时间值&#xff0c;这个…

服务端主动给客户端发消息?实战教学:使用Nestjs实现服务端推送SSE

前言 服务端消息推送SSE是常用的服务器消息通信手段&#xff0c;适用于服务器主动给客户端发送消息的场景&#xff0c;例如私信通知&#xff0c;扫描登录等都可以使用SSE实现。SSE的底层原理是客户端与服务端建立 HTTP 长链接。 Nestjs 框架内置了对SSE的支持&#xff0c;本文…

【算法】【动规】环绕字符串中唯一的子字符串

跳转汇总链接 &#x1f449;&#x1f517;动态规划算法汇总链接 1.5 环绕字符串中的子字符串 &#x1f517;题目链接 定义字符串 base 为一个 “abcdefghijklmnopqrstuvwxyz” 无限环绕的字符串&#xff0c;所以 base 看起来是这样的&#xff1a; "...zabcdefghijklmnop…

ES6 面试题 | 15.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…