当前位置: 首页 > 知识库问答 >
问题:

什么是高内聚性,如何使用/制作?

锺离飞尘
2023-03-14

我正在学习计算机编程,在好几个地方,我偶然发现了内聚的概念,我明白一个软件需要“高内聚”,但它意味着什么?我是一名Java、C和Python程序员,从《C入门》(C Primer)一书中学习C语言,书中提到了内聚性,但索引中没有内聚性,你能给我指出一些关于这个主题的链接吗?我没有发现维基百科页面上关于计算机科学凝聚力的信息,因为它只是说这是一个定性的衡量标准,没有给出真正的代码示例。

共有3个答案

索寒
2023-03-14

高内聚是一个软件工程概念。基本上,它说一个类应该只做它应该做的事情,并且做得很充分。不要用它不应该做的功能重载它,任何与它直接相关的东西也不应该出现在其他类的代码中。

这个例子是很主观的,因为我们还必须考虑规模。一个简单的程序不应该太模块化,否则就会支离破碎;而一个复杂的程序可能需要更高级别的抽象来处理复杂性。

e、 g.电子邮件课程。它应该包含指向、来自、抄送、密件抄送、主题、正文的数据成员,并且可能包含以下方法saveAsDraft()、send()、discardDraft()。但是login()不应该出现在这里,因为有许多电子邮件协议,应该单独实现。

纪正德
2023-03-14

史蒂夫·麦康奈尔(Steve McConnell)的代码完整版中对其内容的解释:

内聚性是指一个类中的所有例程或例程中的所有代码支持中心目的的程度。包含强相关功能的类被描述为具有强内聚性,启发式目标是使内聚性尽可能强。内聚是管理复杂性的有用工具,因为类中支持中心目的的代码越多,大脑就越容易记住代码所做的一切。

从Bob叔叔的干净代码中实现它的一些方法:

类应该有少量实例变量。一个类的每个方法都应该操作其中一个或多个变量。一般来说,一个方法处理的变量越多,该方法对其类的内聚性就越强。每个方法使用每个变量的类具有最大的内聚性。

一般来说,创建这样的最大凝聚力的班级既不可取,也不可能;另一方面,我们希望凝聚力更高。当内聚度较高时,这意味着类的方法和变量是相互依赖的,并作为一个逻辑整体连接在一起。

内聚的概念与耦合的概念密切相关;此外,还有一个基于高内聚启发式的原则,称为单一责任原则(SOLID中的S)。

戚兴思
2023-03-14

高内聚是指一个类做了一个定义良好的工作。低内聚是指一个类做了很多没有太多共同点的工作。

让我们举个例子:

您有一个添加两个数字的类,但是同一个类创建了一个显示结果的窗口。这是一个低内聚类,因为窗口和添加操作没有太多共同点。窗口是程序的可视部分,添加函数是它背后的逻辑。

要创建高内聚性的解决方案,必须创建一个类窗口和一个类和。窗口将调用Sum的方法来获取结果并显示它。这样,您将分别开发应用程序的逻辑和GUI。

 类似资料:
  • 我在理解语句。我已经在谷歌上搜索并阅读了很多关于这方面的内容,但仍然觉得很难理解。 据我所知,高内聚意味着我们应该有专门的类来执行特定的功能。希望这是正确的?就像信用卡验证类一样,它专门用于验证信用卡。 还不明白低耦合是什么意思?

  • 本文向大家介绍什么是幂等性?它是如何使用的?相关面试题,主要包含被问及什么是幂等性?它是如何使用的?时的应答技巧和注意事项,需要的朋友参考一下 幂等性指的是这样一种场景:您重复执行一项任务,但最终结果保持不变或类似。 幂等性主要用作数据源或远程服务,当它接收一组以上指令时,它只处理一组指令。  

  • 本文向大家介绍kafka高性能原因是什么?相关面试题,主要包含被问及kafka高性能原因是什么?时的应答技巧和注意事项,需要的朋友参考一下 零拷贝、利用操作系统页缓存、磁盘顺序写 kafka零拷贝原理 分区、分段、建立索引 生产者、消费者批处理

  • 本文向大家介绍Hbase内部是什么机制?相关面试题,主要包含被问及Hbase内部是什么机制?时的应答技巧和注意事项,需要的朋友参考一下 解答: 在HMaster、RegionServer内部,创建了RpcServer实例,并与Client三者之间实现了Rpc调用,HBase0.95内部引入了Google-Protobuf作为中间数据组织方式,并在Protobuf提供的Rpc接口之上,实现了基于服务

  • 问题内容: 我有点困惑。许多示例都显示了:和的用法,但似乎它们具有非常紧密的功能。我也没有找到有关如何设置自定义NotFound处理程序的信息。 我试图阅读源代码,并且它们都使用底层函数。但是,返回自己的方法并在提供文件之前进行一些准备工作(例如path.Clean())。 那么为什么需要这种分离呢?哪种方法更好用?以及如何设置自定义的NotFound处理程序,例如在找不到请求的文件时? 问题答案

  • 问题内容: 我一直在听到所有添加到JVM的新功能,这些功能之一是invokedynamic。我想知道它是什么,它如何使Java中的反射式编程更容易或更好? 问题答案: 这是一条新的JVM指令,它允许编译器生成代码,该代码以比以前更宽松的规范来调用方法-如果您知道“ 鸭子类型 ”是什么,invokedynamic基本上允许进行鸭子类型。作为Java程序员,您可以做的事情太多了。但是,如果您是工具创建