[20160807][系统设计的三次迭代]

前言

最近在工作中遇到一些关于面向过程和面向对象程序设计方法以及系统设计方法的困惑,做了一些深入思考得出了三次迭代法进行系统设计。在此做下记录,来指导我今后的工作。

系统设计的首要目标是降低系统复杂度,以最小原型法快速迭代出清晰高效的系统。在面向过程程序设计中用到的的高内聚与低耦合的模块化设计思想,如何与面向对象程序设计中的抽象与封装想结合,利用各自的优点,避免缺点进行程序设计是一个问题。面向对象在抽象与封装中引入了大量的冗余使效率降低,但却简化了系统结构。面向过程在设计过程中由于使用指针提高了效率,却使得在系统结构上不够清晰。如何融合面向过程高效和面向过程清晰的优点,参考高手的代码风格,提出了系统设计的三次迭代法。分为算法实现,结构优化和算法优化三次迭代。下面就各个部分进行介绍。

算法实现

算法也就是解决问题的方法。是程序设计首要要考虑的问题。程序等于数据结构加上算法。所以算法实现就是以最小原型法最快的进行系统设计。所谓最小原型法就是以最快能看到结果的方式进行算法设计。具体来讲,就是每一步都可以观察到现象来进行系统设计。这样才能首先保证系统是可以工作的。

结构优化

当系统的一个小模块迭代完成后就需要对算法的结构进行优化。在面向过程的程序设计中结合抽象来提高模块的内聚性,结合封装来提高模块的耦合性。内聚是指相对于自己,所需要的数据结构和算法都包括在内部;耦合是相对于别人,所需要依赖的输入和对别人的输出相对独立。具体实现如下。

首先把模块分别以单独的头文件和源文件进行封装。在头文件中包括头文件、宏定义、结构声明、函数声明四个部分。在源文件中包括头文件、全局变量、函数定义三个部分。结构声明和全局变量对应于面向对象中的成员变量,相当于数据结构设计;函数声明和函数定义对应于面向对象中的成员方法,相当于算法设计。程序设计中尽量避免使用全局变量,在需要全局变量的地方可以在源文件的全局变量部分定义指针变量,在函数定义中设计初始化函数来分配内存和销毁函数来释放内存。相当与面向对象中的构造函数和析构函数对对象的内存分配和回收的思想。通过这种方法来优化代码结构,不但没有失去面向过程以函数来驱动程序设计的高效,而且结合了面向对象对模块的抽象和封装的特点。相信能在一定程度上对系统结构进行优化。

算法优化

当系统结构得到优化后,就能更清晰的分析算法,并使用定点化和位运算对算法进行一定程度上的优化。

总结

运用方法对系统设计的最终目的使系统到达清晰高效。这并不是靠一次三次迭代就能到达的。要达到理想的效果必须反复运用使用该方法进行多次迭代。学而不思则罔,思而不学者殆。需要多学习、多思考、多动手,才能日益精进。

时间: 2024-10-13 08:03:38

[20160807][系统设计的三次迭代]的相关文章

第三次迭代目标

第三次迭代目标功能分配如下:订单界面的设计以及功能的实现.会员界面的设计以及功能的实现.功能的测试和整合 小组成员功能认领如下: 魏静.孙刘兰:订单界面的设计以及功能的实现 黄希.张梦霞:会员界面的设计以及功能的实现 张佳慧:功能的测试和整合 预估功能实现用时: 魏静.孙刘兰:订单界面的设计以及功能的实现:预估12h 黄希.张梦霞:会员界面的设计以及功能的实现:预估15h 张佳慧:功能的测试和整合:预估10h  

第三次迭代目标完成情况以及感想

第三次迭代目标完成情况如下: 首先是订单界面的设计如下: 主要XML代码是: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_heig

第三次迭代成果

在第二次迭代成果的基础上我们进行了第三次迭代,进一步增加完善了预想的功能. 前端部分: 由于第二次迭代前端部分已经完成了大部分,这次进行的是优化和收尾工作. 1.之前通过VUE框架axios来完成ajax请求,但是使用cdn不成功,所以实现的是静态界面.于是现在转向使用JS创建HTML元素来创建动态页面.通过后台PHP获取数据库数据显示界面. 2.对fit.html做了更新,完成了“用户自由搭配”界面. 3.实现了用Post向后台传输衣服ID,实现了智能搭配功能的前端部分. 后台: 这次迭代我们

Ultimate Chicken Horse GameProject第三次迭代成果文档

经过三次迭代我们实现了游戏的基本功能 下面是我们在第一次迭代中设定的验收验证标准(1为成功验收,0为验收失败) 测试功能 测试项 输入/操作 检验点 预期结果 验收情况 角色控制 跳跃高度 长按/短按跳跃键   跳跃高度随着按键时间长短  1 角色控制 攀墙 在垂直墙体边按住方向键   角色沿着墙体缓慢下滑  1 角色控制 攀墙跳 在攀墙状态下跳跃   角色向墙体反方向的斜上方跳跃  1 角色控制 加速  左shift   角色移动速度加快  1 界面选择 初始界面 点击左键   进入选择模式界

系统设计的三员管理

一.“三员”职责 系统管理员:主要负责系统的日常运行维护工作.包括网络设备.安全保密产品.服务器和用户终端.操作系统数据库.涉密业务系统的安装.配置.升级.维护.运行管理:网络和系统的用户增加或删除:网络和系统的数据备份.运行日志审查和运行情况监控:应急条件下的安全恢复. 安全保密管理员:主要负责系统的日常安全保密管理工作.包括网络和系统用户权限的授予与撤销:用户操作行为的安全设计:安全保密设备管理:系统安全事件的审计.分析和处理:应急条件下的安全恢复. 安全审计员:主要负责对系统管理员和安全保

博弈论学习笔记(三)迭代剔除和中位选民定理

迭代剔除劣势策略 先找出劣势策略,剔除劣势策略,再继续审视这个博弈,找出哪些现在也成了劣势策略,然后剔除他们.如此反复进行,这个过程被称之为迭代剔除劣势策略.它揭示了以下过程的主旨:站在对方的立场上去换位思考,推测对手的行动策略,同时想想对手也会站在你的立场推测你的意图,这样反复进行.像之前的猜数游戏,最后结果就剔除到1了. 中位选民定理在政治学中的一个案例 假设有两个候选人,而这两个候选人为了选举必须确定自己的政治主张,这两个人就是参与者(players).策略就是:他们要从一系列政治主张中选

Python学习笔记(三)——迭代

知识点 迭代 迭代 什么是迭代呢?和递归又有什么区别呢? 根据维基百科和网上的资料: 迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”, 而每一次迭代得到的结果会被用来作为下一次迭代的初始值. 如求1+2+3+4+5的和: 递归呢?指在函数的定义中使用函数自身的方法.也就是函数不停的调用自己直到满足一定条件. 而用递归是怎样求1--5的和呢? 斐波那契数列的递归和迭代实现: 1 def fib(n): 2 if n>0: 3 if

java 测试:iterator foreach for 三种迭代方式哪种更快?

代码: public class main { public static void main(String[] p_args){ ArrayList<String> _l_string = new ArrayList<>(); for (int o_a = 0; o_a < 100000; o_a++) { _l_string.add(String.valueOf(o_a)); } c_public_countTime _countTime = new c_public_c

三种迭代是否可以删除

普通for循环,可以删除,但是索引要-- 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常 增强for循环不能删除