软件工程 3:模块化设计

文章目录

  • 软件工程 3
    • 面向过程:模块化设计
      • 模块设计原则:高内聚、低耦合
      • 函数设计:不知道如何下手怎么办
      • 错误处理:每个函数都有错误处理
      • 模块的编译和链接
    • 面向对象:万事万物皆对象
      • 类:一组相似事物的统称
      • 对象:一个真实存在的类
      • 接口:一组相关的交互功能点定义的集合
      • 抽象类:基于类而抽象出来的,用于继承,不能被实例化为具体的对象
      • 封装:保护隐私、隔离关注点,减低复杂度
      • 继承:生物的遗传
      • 多态:指向父类的指针或引用,可以调用子类对象

 


软件工程 3

软件工程并不是一种科学,而且其重要性也与计算机本身并无关系。

软件工程革命是有关我们如何去思考的方式,以及我们如何去表达自己的思考的一个革命。

在第一课时,对比了【面向过程】、【面向对象】。

这一课,我们来说说他们的思想,具体的设计细节。

面向过程以【计算机】为核心,符合 CPU 顺序处理数据的流水线思路。

面向过程程序 = 算法 + 数据结构:

  • 面向过程的程序是流水线的产品;
  • 算法是流水线;
  • 数据结构是原料;

面向对象以【人】为核心,不再注重机器,而侧重于人对现实世界的观察。

您可以往周围看看,看到的是什么/p>

可能是您的同事、桌子、墙、电脑、花盆;或者是电话、窗子、书本……这些都是【对象】,是吗~

除了观察目标聚焦于【对象】外,当我们观察人类世界各种事情的运作的时候,我们也不知不觉的聚焦于【对象】。

  • 家庭:父亲、母亲、大哥、小哥等;
  • 公司:董事长、经理、主管、员工等;
  • 国家:…

人一般是按照面向对象的方式思考的,而且人类世界的运转方式通常也是按照面向对象的方式运作的。面向对象,是我们天然的视角。

面向对象程序 = 对象 + 交互:

  • 对象:具体存在的事物;
  • 交互:事物之间的链接;

在工业系统中,面向过程的流水线工艺以【效率】著称,一环套一环非常高效,可灵活性却不好。

一条流水线从建成开始,接下来几年甚至十几年生产的都是同一产品。

但对于软件系统来说,一款软件可能因为增加新功能、需求的变更,每年都要扩展多次…如果用流水线工艺,由于每次需求的变更,流程里的每一步骤、一环套一环,哪怕只是更改了某一环,整个流水线都得重新调整一下。

一想到是这样的情况,头就大了。这就是一个无底洞呀,小型项目还好,要是大项目,每更改一次,软件出现 bug 的概率就大几分。

所以,所以,就有了【面向对象】来解决这个问题,其实就是比较灵活(术语叫“可扩展性”)。

面向对象,适合用于经常变化的地方。

对于软件开发来说,可变的通常集中于客户需要,不变的是计算机系统的基础。

  • 操作系统、数据库、各种协议,它们相对稳定,用【面向过程】更贴切;
  • 企业应用、互联 、游戏,需求经常变更、功能不断扩展的,用【面向对象】才适合。

原来吃一碗杂酱面是这么幸福,回想我们想吃杂酱面,只需要在手机点几下就好啦。

为什么我们想吃一碗杂酱面,就这么容易呢/p>

因为平等,带来了合作,而整个 会的分工合作带来了群体演化速度加快。

正如上图的面,汤是汤、面是面、大排是大排(配料),这也是模块的高内聚、低耦合。

  • 高内聚:汤是汤、面是面、大排是大排(配料),相互独立;
  • 低耦合:面与汤之间关联很少,一眼就能清晰的看出面和汤来。

check宏的使用方式,和库函数assert()一样,都是断言(断言括 里的表达式为真,程序能正常运行)。

否则,【打印错误信息】并跳转到【错误标签】error处,清理。

我有许多这样,用于错误处理的宏,十分方便。

我还为这些错误处理宏,加上了颜色,输出错误信息时很美观哒。

这套错误处理宏真的好玩,像苏州面一样,要是每天都能接触到,实在是太开心啦。

这套宏,也分享给远方的你。

错误处理模块:自动化错误处理、实现异常机制

宏类似 ,都是断言为真,只不过功能更加丰富,为出错处理而设计的。

只能实现函数内部的跳转,不能实现跨函数跳转。

在一些中,在一个调用中发生了错误,需要放弃当前任务,从多层函数调用中返回,并且(或许是在 main() 函数中)。

要做到这一点,可以让每个函数都返回一个状态值,由函数的调用者检查并做相应处理,不过一层层的检查比较麻烦, 宏和 函数 可以实现【非本地局部跳转】,也就是。

无论使用什么样的错误处理方式,都不要忘记发现程序中错误的最好方法其实是,这样可以【观察数据在函数中的流动】,同时【检查出类似于上溢和下溢错误】、【数据转换错误】、【NULL 指针错误】、【错误的内存单元】、【用 = 代替 ==】、【运算优先级错误】、【逻辑运算】等错误。

 


模块的编译和链接

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月18日
下一篇 2020年2月18日

相关推荐