首页 > 其他 > 详细

代码中的软件工程--menu

时间:2020-11-06 00:17:12      阅读:23      评论:0      收藏:0      [点我收藏+]

序言本篇博客是由根据孟宁老师上课内容,在以VS Code + GCC中为主要环境,通过孟宁老师讲解的如何从搭建一个简单的命令行menu小程序开始,一步步根据软件工程的一般规律开发、完善,最终实现了一个成长起来的menu程序。这其中涉及到了模块化设计、可重用接口、线程安全等问题

参考文献:https://gitee.com/mengning997/se/blob/master/README.md#%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B

1通过VSCode装C++及环境配置

在官网下载地址:http://mingw-w64.org下载MinGW的安装工具技术分享图片根据个人喜好,下载到全英文路径下技术分享图片

在我的电脑-属性-环境变量的路径下设置环境变量:

技术分享图片

最后通过cmd执行gcc -v查看安装和设置环境变量是否成功:技术分享图片

打开Visual Studio Code软件,在扩展的应用商店中下载安装c/c++

技术分享图片

在vscode创建一个hello.cpp文件,直接运行:

技术分享图片

 

再选择(GDB/LLDB),选择gcc.exe生产和调试活动文件

技术分享图片

技术分享图片

 这样tasks.json和launch.json文件就自己生成而且修改好了,并且它的路径是完全正确的

 

技术分享图片

再运行hello world.cpp可得:

技术分享图片

至此,关于VsCode上C/C++编译调试环境配置和minGW编译器的安装完成。

2.模块化和接口

模块化(Modularity)是在软件系统设计时保持系统内各部分相对独立,以便每一个部分可以被独立地进行设计和开发。关注点的分离的思想背后的根源是由于人脑处理复杂问题时容易出错,把复杂问题分解成一个个简单问题,从而减少出错的情形。

 耦合度是指软件模块之间的依赖程度,一般可以分为紧密耦合(Tightly Coupled)、松散耦合(Loosely Coupled)和无耦合(Uncoupled)。 一般在软件设计中我们追求松散耦合。

                           无耦合                                                      松散耦合                                                     紧密耦合

 技术分享图片

内聚度是指一个软件模块内部各种元素之间互相依赖的紧密程度。 理想的内聚是功能内聚,也就是一个软件模块只做一件事,只完成一个主要功能点或者一个软件特性(Feather)。

而在menu测试项目中,对比lab3.1 和 lab3.3 为了将不同功能进行了划分,lab3.3就将lab3.1的结构体struct DataNode单独拿出来做到linklist.h中,并通过linkli.h文件声明,在menu.c 和 linklist.c里面调用

技术分享图片

 

 

技术分享图片 

3.可重用接口

接口是双方共同遵守的一种协议规范,在软件系统内部通常是定义一组API函数约定模块之间的通信关系。有两种函数接口方式:Call-in方式的函数接口和Callback方式的函数接口。在menu例子lab5中的listlink.h的SearchLinkTableNode函数其中有一个函数作为参数,这个作为参数的函数就是callback函数技术分享图片

 

技术分享图片

在lab.5.2的代码中函数接口SearchLinkTableNode增加了一个参数args,callback函数Conditon也增加了一个参数args就是call-in方式。

技术分享图片

4.线程安全

 线程安全是多线程编程时的计算机程序代码中的一个概念。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

回到项目中,menu小程序的线程安全主要体现在对链表的各种操作上,项目中主要通过对链表加锁的操作实现线程安全:

技术分享图片

这2个步骤就是给链表加锁和解锁,实现了线程的安全。

5.总结

在本篇博客中通过阅读老师提供的menu代码,看到了代码怎么一步步进行成长优化的,这其中穿插啦工程中的模块化设计、可重用接口、线程安全等问题,在这些内容的学习之后,我在以后编写代码的实践对这些问题有了认知。

代码中的软件工程--menu

原文:https://www.cnblogs.com/tk7955/p/13933510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!