开发与重构

软件开发过程主要追求的是高效、易于维护。
高效开发体现了代码的复用率即开发效率,是为了缩短开发周期。
易于维护体现了代码的重构效率,是为了缩短维护周期。

编程语言,从C到C++,实现了从函数复用,到类复用。其实编程语言的更新换代过程,就是提高代码复用率的过程,即解决开发效率的问题。
注:还有一些其他类型的技术,都是为复用而生,如动态库,组件等。

开发语言偏向于解决开发效率的问题,而重构效率和开发效率几乎是一对成反比的变量。例如,使用C++开发时,如果只考虑提高代码复用率,那么在需求改变的时候,已有的架构很难适应新的需求,重构的任务很可能变得艰巨。C++开发相对于C开发过程,潜在地会有更多的代码重构工作。

例如,类的继承本来是一种提高复用性的手段,但是如果这种方法被滥用,会导致类的继承关系十分复杂,且十分固定,类与类之间的耦合性高。一旦产生修改需求,将会带来巨大的工作量。所以,有的特性并不是使用的越多越好,而是需要使用者根据实际情况制定使用方案。在一些需求固定的地方,如windows的界面开发框架,结构固定,运行方式百年不变,就特别适合用C++进行封装,特别是适合使用继承、多态等特性。

为什么需要重构?重构的动机是什么?

根据二八定律,软件代码中,有20%的代码占用了80%的软件运行时间。我们称20%的代码成为热点代码,80%的为冷代码。
随着需求的改变,某些功能模块/类的使用频率是会随之变化的,即有的代码变成冷代码,有的代码变成热代码。功能模块的使用频率发生改变,会导致两方面的问题:
1.开发效率降低。
新的需求如果继续使用已有的模块,而已有模块的实现方式下的代码重用率不是很高,这就导致在新需求下的开发效率会降低。
例如,为了实现相同的功能,未使用访问者设计模式编写的代码,在使用频率高了以后,相对于使用访问者设计模式下编写的代码更多,代码的重用率更低。首先在开发阶段就会导致开发效率变低,因为要写更多的代码。其次在后续的重构时,会因为相同的代码在多个地方分布,多个地方都要修改,导致修改的工作量更大。
2.运行效率降低。
有的模块的初始实现,可能并没有做很好的优化。在访问率提高后,效率问题将逐渐被放大。这时就会产生重构需求。如模块间的通信效率,数据解码效率等,需要更加高效的数据结构与算法来重构,以提高运行效率。

软件行业的任何层面都存在重构。需求变化越频繁的部分,重构越多。需求越固定的部分,重构越少。

如何理解设计模式?设计模式是为了解决什么问题?

使用设计模式是为了从软件开发的一开始,就通过人为分析现有需求,预测未来需求,对软件各个功能模块进行最优化设计,以期减少当前开发工作量和应对需求变动工作量的目的。如果一个项目急切开展起来,虽然初期开发速度快,但是可能会对后期软件的维护带来麻烦。
设计模式只是解决上述问题的方法和经验。应从代码重用即开发效率和运行效率的角度出发,理解每一种设计模式。
另外使用何种设计模式,由具体需求和预期的需求决定。使用设计模式有一定的使用成本,包括时间成本和过度设计的风险,要谨慎使用。

量化

如果能够将软件开发本身的一些指标进行量化,并且在量化后进行最优计算,最终实现自动化的软件设计模式的话,程序员就可以将更多的精力放在业务实现上,而非代码维护上。自动化的软件设计将允许人们设计规模更大、功能更复杂的软件系统,真正实现软件生产力的提高。

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

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

相关文章

【转】3.7(译)构建Async同步基元,Part 7 AsyncReaderWriterLock

传送门:异步编程系列目录…… 最近在学习.NET4.5关于“并行任务”的使用。“并行任务”有自己的同步机制,没有显示给出类似如旧版本的:事件等待句柄、信号量、lock、ReaderWriterLock……等同步基元对象,但我们可以沿溪这一编程习…

面向对象软件开发代码结构(1)

类内部结构 类内部架构实际上是一个小型的状态机,成员变量是状态变量,成员函数是处理机。一般提倡一个类实现一种特定的功能,这样可以降低实现的复杂性,状态机越简单,越利于实现。 实例间通信 软件的功能是多个模块…

python猜数字1001untitled_ML - Python 基础

数据类型 Numeric & String1. Python数据类型1.1 总体:numerics, sequences, mappings, classes, instances, and exceptions1.2 Numeric Types: int (包含boolean), float, complex1.3 int: unlimited length; float: 实现用double in C, 可查看 sys.float_inf…

【转】4.1触碰jQuery:AJAX异步详解

传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。它并非一种新的技术,而是以下几种原有技术的结合体。 1) 使…

QStackedWidget实现自适应紧凑布局

前言 本文提出了一种使QStackedWidget尺寸根据内容自适应调整的解决方法。 问题提出 我们知道,QStackedWidget可以包含多个可切换的子窗口。多个子窗口的高度不一样时,此时将QStackedWidget放在一个垂直布局中,所有子窗口会保持和最高的子…

linux查看tcl版本_查看Linux内核版本的方法有几个?你也是这样操作吗?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言内核是操作系统的核心组件。 它管理系统的资源,是计算机硬件和软件之间的桥梁。您可能因多种原因需要确切知道GNU / …

【转】4.2使用jQuery.form插件,实现完美的表单异步提交

传送门:异步编程系列目录…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 抓住6月份的尾巴,今天的主题是 今天我想介绍的是一款jQuery的插件:Jquery.form.js 官网。 通过该插件,我们可以非常…

python医学数据挖掘_GitHub - SSSzhangSSS/Python-Data-mining-Tutorial: Python数据挖掘教程

Python数据挖掘教程作者 : 长行说明 : 本教程以9周的数据挖掘教程为主,每周包括5天的知识学习和2天的案例实现。以周为阶段,每周包括5天的知识内容(Day)、1天的案例实现(Example)和1天的小测验(Test);此外还可能包含选学部分(Extra)。案例的难…

面向对象软件开发代码结构(2)

使用封装降低信息的复杂度 封装是面向对象编程的核心思想之一。 封装的过程,是将大量的信息(过程、数据),凝缩成满足特定需求的接口的过程。 从数量上来说,好的封装必然是将大量的、与业务交互无关的实现细节隐藏起来…

什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...

概述本周,许多Facebook用户都会发现,一些用户发布图片上出现了原本应该隐藏的图像标签。由此可以证明,图像可以携带大量表面上不可见的数据。实际上,Facebook和Instagram所使用的图片元数据与恶意攻击者制作的特制图像相比显得非常…

一种类的渐进式开发写法

// 主类,一般为窗口类 class MainClass { public:FuncClass1 *a;FuncClass2 *b; }// 实现某个功能的类 class FuncClass1 { public:FuncClass1(MainClass *) }// 实现某个功能的类 class FuncClass2 { public:FuncClass2(MainClass *) }每加一个大的功能&#xff0c…

【转】SQL中where, group by, having的用法和区别

group by,where,having 是数据库查询中最常用的几个关键字。在工作中,时常用到,那么,当一个查询中使用了where ,group by ,having及聚集函数时 ,执行顺序是怎么样的?为了回答这个问题,将这个三个关键字的用…

无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...

首先需要声明的是,本篇并非COMOS实用案例,只是希望借此让大家了解,如何使用微软的WPF和C#语言开发COMOS插件。首先看下效果图功能说明:拖拽COMOS设备至定制的浏览器,自动根据设备的名称和其制造商参数值,搜…

Win10上VMware的问题汇总

装xp很卡顿的问题 卸载360,重启电脑即可。 拖拽文件/文件夹到虚拟机直接卡住 使用15.1版本的VMware即可。 资源: 链接:https://pan.baidu.com/s/1dtr_cPwzprRTznpxj-OKTw 提取码:1wpj

【转】C#与C++的发展历程第一 - 由C#3.0起

C#5.0作为第五个C#的重要版本,将异步编程的易用度推向一个新的高峰。通过新增的async和await关键字,几乎可以使用同编写同步代码一样的方式来编写异步代码。 本文将重点介绍下新版C#的异步特性以及部分其他方面的改进。同时也将介绍WinRT程序一些异步编…

python数据库实例_Python操作MySQL数据库9个实用实例

用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了32与64版本。MySQL-python-1.2.3.win32-py2.7.exeMySQL-python-1.2.3.win-amd64-py2.7.exe实例 1、取得 MYSQL 的版本实例 2、创建一个表并且插入数据实例 3、 python 使…

Win10+VMware上安装macOS过程记录

2021年更新 主要参考文章:https://blog.csdn.net/qq_40143985/article/details/104011778 参考了其他一些文章,最后会出现…not successfully错误,安装失败。建议参考这篇文章。 FAQ 安装好macOS后,电脑运行有点卡的问题&#x…

【转】5.2高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO&#xff0…

vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的

如果把VBA比作一门刀法,那么经过前面内容的操练,大家已经掌握了很多实用的招式。如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。所以今天主要和大家分享——VBA“磨刀”心法之程序调试…

VMware使用

重要功能 快照 快照就是保存当前虚拟机完整状态,相当于手动克隆一个虚拟机副本,也相当于是git中的一个提交点。在安装好一个新的虚拟机之后,一般都要创建一个快照,便于日后恢复。