您的位置:

c语言降低耦合,降低代码耦合性

本文目录一览:

C/C++程序中的event该如何理解

c c++并没有event功能。

不过一些事件循环框架 例如windows 的核心库和qt这类是有event的。 还有很多项目也用到event这个概念,这个玩意就是设计上的一个概念, 一般来说是用来降低耦合的, 比如我写了一个模块用来做IO, 成功后会发一个event, coordinator收到这个event会调用其他业务逻辑模块来做一些操作。 这种设计在C语言项目中比较多, 因为C语言的项目层次结构一般比较散比较平, 不太好做成层次结构, 需要消息队列这类手段来协调各种功能。

c语言回调函数究竟有什么用处?我觉的用普通的函数调用替换也可以,谢谢

从功能上来说 普通函数也是可以的

但在比较大的程序设计中 会对很多功能模块进行封装

比如 上层一个模块

底层一个模块

同时规定,上层可以调用底层的函数,但是底层不可以调用上层函数。

这时就需要使用回调函数。

通过上层调用底层的注册回调借口,传入回调指针。

实现底层通知上层的作用。

另外 回调函数的一个好处是,可以通过回调函数,调用不同接口。

比如接收数据,不同数据需要不同的解析函数。

但是接收数据的流程是相同的

这样 使用回调函数,在接收数据的时候就可以不用判断,而是自动使用不同的解析函数。

总之 使用回调函数,可以降低耦合,实现多样性。

c语言中耦合度、内聚度、复杂度、数据传输特性相关含义

尽可能的独立。

处理一个模块时,不应该依赖另一个模块的内部工作。

内聚原则是指,在一个给定的模块内部,所有的代码应该只完成一个单个的目标。

IT界有一句很著名的口号:强内聚、松耦合。

即使是最初级的程序员,在常常的被教导中,他也了解了这句口号的含义:我们的程序要模块化,模块要完成明确的一组关联的服务功能,要求它的各部分是相关的、有机组合起来是完整体(外部程序来看黑盒子),模块的内部各成分之间相关联程度要尽可能高(强内聚);而模块与模块之间又要求是可分拆的、少依赖的(松耦合)。

人们易于实现强内聚的模块,例如:一个函数实现一个独立的功能,这就是强内聚。

人们不易实现松耦合,因为,孤独的模块毫无意义,只有模块间的相互协调地工作,才能实现系统的目的。而对于模块间的相互关系的设计,没有一定的经验是难以把握。耦合的强度依赖于:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。等等。

当然,“强内聚、松耦合”也是有矛盾的,如:内聚性越强,则要求的函数越多(每个函数只作一件“事”),这样,将它们组合成“大”的功能,也就越复杂,就不可能达到松耦合。因此,应在二者之间作出平衡与折衷的选择,这也体现程序员的水平。从系统论的角度来看,系统是有层次的,即系统可以分为子系统,模块可分为子模块,“强内聚、松耦合”的“度”的把握,应结合系统的次层性来考虑,即通常应在层次性上作出折衷,如:模块内子程序(下一个层次上)应共享数据(有一定的耦合度),而减少全局变量能降低子程序性间的耦合性。

面向对象的语言进一步强化了“强内聚、松耦合”,类的封装性既强调了相关内容(数据及其操作)的内聚,又强调了类的独立性和私密性。而类的继承性以及友元等,就是在松耦合的原则下规范了类之间的关联关系。类与类之间通常通过接口的契约实现服务提供者/服务请求者模式,这就是典型的松耦合。

“强内聚、松耦合”对于程序编写分工、程序的可维护性以及测试都有重要的关系,如:从设计角度来看,在“强内聚、松耦合”的指导下进行的设计得到的程序模块,符合项目管理的WBS(工作分解结构)的要求,其相对独立的模块可以分配到具体的程序员进行开发,另外,程序编码外包也必须建立在这种原则的设计之下;从程序生命期角度来看,它有利于提高程序质量,特别是方便于程序的日后维护,即程序模块的相对独立性是可维护性的保证;再从测试角度来看,符合“强内聚、松耦合”的程序,易于对局部(模块)进行黑盒测试,也易于编写测试用的“桩”和“驱动”。

“强内聚、松耦合”也是对组织结构的要求,项目组分为几个小组(正式的或非正式的),各小组的工作应是高度相关的,各小组之间的工作应尽量是较少相关或有明确的接口,从而减少沟通成本。其实,“强内聚、松耦合”是系统中应遵守的普遍原则,我们在许多领域都可以找到它的应用。

“强内聚、松耦合”是我们不得不念的“三字经”,我们一定要念好它。

C语言中建立函数的目的是什么?

提高内聚,降低耦合,提高代码重用率。模块化设计,功能单一化

在c语言中定义的函数有什么作用?

函数的作用就相当于一台机器,这种机器的作用各不相同。不同的函数能完成不同的特定的功能。就像你放玉米进去,它出来的是爆米花一样。它就对玉米进行处理了。而c语言的函数就是你放入数据,它就会对数据进行处理。

数组的作用就是存储数据的作用。是存储数据的类型的一种。计算机处理的就是数据。存储数据,你说重要不?就像电脑没有内存,它怎么运行啊?

上面是通俗的介绍,补充几点:

1:函数是很重要的,没有函数c语言程序无法运行,包括大多数语言都是这样,因为必须要有一个主函数(main)。

2:函数可以把不同功能的代码独立到一个地方,减少耦合性,提高代码可重用性,增强程序的安全性。

3:不同类型的函数有不同的功能,按照不同分类有不同的叫法。比如库函数是系统自带的“库”,回调函数用于处理操作系统的问题,API函数叫做应用程序接口函数。

加油,越学越明白。

求解释c语言函数指针的作用

上面的话是有道理的。只是,要真的体会这些名词,需要你亲历躬行,一个“百度知道”是很难让你真正体会并理解的。国人一些教科书也不负责任,人云亦云的说这些话,但很少能透彻讲解。我小试一下。

1. 便于分层设计:函数指针是引用,是间接层,或曰隔离层。它输出到上层,给上层用户用。函数实体是实现,在下层,给开发者用,实现者(软件工程师)关注。这就是简单的分层的概念了。上层用户想让一个函数所做的东西会变化时,我们只需要改变底层实现,并用函数指针指向新的实现就行了。

再精炼一下分层:分层的核心是对接口进行设计和实现。函数指针的作用就是提供不同实现的统一接口。

2. 利于系统抽象:只有存在多个类似的实体需要模拟、操作或控制时(这种情况很多)才需要抽象。多个类似的实体就是对象,抽象的结果就是类。在C里边,可以用函数指针数组完成这种抽象。如, fopen 就是一个例子。他可以打开文件。C里面将磁盘文件、串口、USB等诸多设备抽象为文件。

3. 降低耦合度以及使接口与实现分开:第1条中的解释已经说明了这一点。

再具体一下:

我曾搭建过一个嵌入式平台。其中的设备操作(硬件驱动)采用了多组函数指针数据,并进行了简单的封装,其结果是:

业务软件使用函数指针数组的封装函数访问设备。这个封装可展示为:

int DevOpen(char *strDevName);

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong);

int Read(int DevID, char* DataTo, int StartDevAddr, int DataLong);

int DevClose(int DevID);

这组抽象出来的函数,是一组语义清晰且稳定的上层接口,为上层的业务开发团队使用。底层的驱动层,各自实现自己的设备打开、读、写及关闭代码,然后,注册自己的设备到系统列表里。上层业务接可以使用了。期间的耦合在这里:

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong)

{

/* Error detecting. */

return DevWrite[ DevID ]( char* DataFrom, int StartDevAddr, int DataLong );

}

其中,DevWrite[ DevID ]就是一个函数指针数组:

int (*DevWrite)[ MAX_DEV_NUM ]( char*,int,int ) = {0};

里面放的就是多个设备的写的操作。其中包括:UART,RTC,WatchDog。EEPROM,DigitalInput,DigitalOutput,Key,LCD,LED。

好了。说的太多了。如需要学习,可邮件livefuture@163.com。

但愿对你有所帮助。