当前位置: 首页 > news >正文

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

前言

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

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

算法实现

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

结构优化

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

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

算法优化

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

总结

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

转载于:https://www.cnblogs.com/d442130165/p/5747237.html

相关文章:

  • 分享一个VS主题
  • 使用ajaxfileupload.js上传文件
  • Lisp永远成不了编程主流语言
  • 【leetcode #84 #85】Maximal Rectangle
  • MAC系统下,删除.svn文件
  • NOIP2000进制转换
  • 264. Ugly Number II
  • 黑盒测试用例设计——错误猜测法
  • 初学Java:我为什么来学Java?
  • hdoj5835【水题】
  • Android ScrollView+ViewPager+PullToRefreshListView
  • CF #367 DIV2 E
  • dl标签和table标签
  • sql 分割字符串 存储过程
  • GUI之绘画控制
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 4. 路由到控制器 - Laravel从零开始教程
  • Angular4 模板式表单用法以及验证
  • ES6之路之模块详解
  • IDEA常用插件整理
  • nodejs调试方法
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redux系列x:源码分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 分享几个不错的工具
  • 计算机在识别图像时“看到”了什么?
  • 讲清楚之javascript作用域
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何选择开源的机器学习框架?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 思考 CSS 架构
  • 应用生命周期终极 DevOps 工具包
  • 智能合约开发环境搭建及Hello World合约
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #图像处理
  • (4)事件处理——(7)简单事件(Simple events)
  • (C++17) std算法之执行策略 execution
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)c52学习之旅-独立按键
  • (六)vue-router+UI组件库
  • (七)Java对象在Hibernate持久化层的状态
  • (三)终结任务
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)Game
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式