文章目录
- 软件工程 3
- 面向过程:模块化设计
- 模块设计原则:高内聚、低耦合
- 函数设计:不知道如何下手怎么办
- 错误处理:每个函数都有错误处理
- 模块的编译和链接
- 面向对象:万事万物皆对象
- 类:一组相似事物的统称
- 对象:一个真实存在的类
- 接口:一组相关的交互功能点定义的集合
- 抽象类:基于类而抽象出来的,用于继承,不能被实例化为具体的对象
- 封装:保护隐私、隔离关注点,减低复杂度
- 继承:生物的遗传
- 多态:指向父类的指针或引用,可以调用子类对象
软件工程 3
软件工程并不是一种科学,而且其重要性也与计算机本身并无关系。
软件工程革命是有关我们如何去思考的方式,以及我们如何去表达自己的思考的一个革命。
在第一课时,对比了【面向过程】、【面向对象】。
这一课,我们来说说他们的思想,具体的设计细节。
面向过程以【计算机】为核心,符合 CPU 顺序处理数据的流水线思路。
面向过程程序 = 算法 + 数据结构:
- 面向过程的程序是流水线的产品;
- 算法是流水线;
- 数据结构是原料;
面向对象以【人】为核心,不再注重机器,而侧重于人对现实世界的观察。
您可以往周围看看,看到的是什么/p>
可能是您的同事、桌子、墙、电脑、花盆;或者是电话、窗子、书本……这些都是【对象】,是吗~
除了观察目标聚焦于【对象】外,当我们观察人类世界各种事情的运作的时候,我们也不知不觉的聚焦于【对象】。
- 家庭:父亲、母亲、大哥、小哥等;
- 公司:董事长、经理、主管、员工等;
- 国家:…
人一般是按照面向对象的方式思考的,而且人类世界的运转方式通常也是按照面向对象的方式运作的。面向对象,是我们天然的视角。
面向对象程序 = 对象 + 交互:
- 对象:具体存在的事物;
- 交互:事物之间的链接;
在工业系统中,面向过程的流水线工艺以【效率】著称,一环套一环非常高效,可灵活性却不好。
一条流水线从建成开始,接下来几年甚至十几年生产的都是同一产品。
但对于软件系统来说,一款软件可能因为增加新功能、需求的变更,每年都要扩展多次…如果用流水线工艺,由于每次需求的变更,流程里的每一步骤、一环套一环,哪怕只是更改了某一环,整个流水线都得重新调整一下。
一想到是这样的情况,头就大了。这就是一个无底洞呀,小型项目还好,要是大项目,每更改一次,软件出现 bug 的概率就大几分。
所以,所以,就有了【面向对象】来解决这个问题,其实就是比较灵活(术语叫“可扩展性”)。
面向对象,适合用于经常变化的地方。
对于软件开发来说,可变的通常集中于客户需要,不变的是计算机系统的基础。
- 操作系统、数据库、各种协议,它们相对稳定,用【面向过程】更贴切;
- 企业应用、互联 、游戏,需求经常变更、功能不断扩展的,用【面向对象】才适合。
原来吃一碗杂酱面是这么幸福,回想我们想吃杂酱面,只需要在手机点几下就好啦。
为什么我们想吃一碗杂酱面,就这么容易呢/p>
因为平等,带来了合作,而整个 会的分工合作带来了群体演化速度加快。
正如上图的面,汤是汤、面是面、大排是大排(配料),这也是模块的高内聚、低耦合。
- 高内聚:汤是汤、面是面、大排是大排(配料),相互独立;
- 低耦合:面与汤之间关联很少,一眼就能清晰的看出面和汤来。
check宏的使用方式,和库函数assert()一样,都是断言(断言括 里的表达式为真,程序能正常运行)。
否则,【打印错误信息】并跳转到【错误标签】error处,清理。
我有许多这样,用于错误处理的宏,十分方便。
我还为这些错误处理宏,加上了颜色,输出错误信息时很美观哒。
这套错误处理宏真的好玩,像苏州面一样,要是每天都能接触到,实在是太开心啦。
这套宏,也分享给远方的你。
错误处理模块:自动化错误处理、实现异常机制
宏类似 ,都是断言为真,只不过功能更加丰富,为出错处理而设计的。
只能实现函数内部的跳转,不能实现跨函数跳转。
在一些中,在一个调用中发生了错误,需要放弃当前任务,从多层函数调用中返回,并且(或许是在 main() 函数中)。
要做到这一点,可以让每个函数都返回一个状态值,由函数的调用者检查并做相应处理,不过一层层的检查比较麻烦, 宏和 函数 可以实现【非本地局部跳转】,也就是。
无论使用什么样的错误处理方式,都不要忘记发现程序中错误的最好方法其实是,这样可以【观察数据在函数中的流动】,同时【检查出类似于上溢和下溢错误】、【数据转换错误】、【NULL 指针错误】、【错误的内存单元】、【用 = 代替 ==】、【运算优先级错误】、【逻辑运算】等错误。
模块的编译和链接
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!