免费智能真题库 > 历年试卷 > 程序员 > 2015年下半年 程序员 上午试卷 综合知识
  第50题      
  知识点:   块独立性   聚类   模块独立   模块独立性   内聚
  关键词:   模块   内聚类型        章/节:   系统分析和设计基础知识       

 
从模块独立性角度看,以下几种模块内聚类型中,(50)内聚是最好的。
 
 
  A.  巧合
 
  B.  逻辑
 
  C.  信息
 
  D.  功能
 
 
 

 
  第49题    2013年上半年  
   52%
某教务系统的部分需求包括:教务人员输入课程信息;学生选择课程,经教务人员审核后安排到特定的教室和时间上课;教师根据安排的..
  第48题    2011年下半年  
   28%
在面向对象开发方法中,(48)是一种信息隐蔽技术,目的是使对象的使用者和生产者分离。
  第48题    2018年上半年  
   30%
创建型设计模式抽象了实例化过程,它分为面向类和面向对象两种。其中,( )模式是保证一个类仅有一个实例,并提供一个访问它的全..
   知识点讲解    
   · 块独立性    · 聚类    · 模块独立    · 模块独立性    · 内聚
 
       块独立性
        块独立性要求每个模块要完成独立的子功能与其他模块的联系少而接口简单。衡量独立性的标准有耦合性和内聚性。
        耦合性也称为块间联系,按耦合性从低到高的顺序,模块的耦合性有:无直接耦合、数据耦合、标记耦合、控制耦合、公共耦合和内容耦合。内聚性指的是块内联系,按内聚性从低到高的顺序,模块的内聚性有:偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚和功能内聚。
 
       聚类
        聚类是一种无监督学习过程。根据数据的特征,将相似的数据对象归为一类,不相似的数对象归到不同的类中,这就是聚类,每个聚类也称为簇。“物以类聚,人以群分”就是聚类的典型描述。
        聚类的典型算法有:基于划分的方法、基于层次的方法、基于密度的方法、基于网格的方法和基于统计模型的方法。基于划分的方法将单个数据对象划分为k个不相交的集合,每个集合称为一个簇。典型的算法有k-均值、k-中心点算法等。基于层次的方法将数据对象集进行层次的分解。根据其是自底向上还是自顶向下分解,可以分为凝聚的方法和分裂的方法,而前者的典型算法是AGNES,后者的典型算法是DIANA。基于密度的方法基于数据对象的邻域来进行聚类分析,因此可以识别各种形状的簇,以及一个数据对象可以属于多个不同的簇,DBSCAN、OPTICS和DENCLUE是其中的典型算法。基于网格的方法把对象空间量化为有限个单元,形成一个网格结构。所有的聚类操作在该网格上进行,STING和CLIQUE是其中的两个算法。基于统计模型的算法将数据对象集看作多个服从不同分布的数据集构成,聚类的目的是识别出这些不同的分布的数据对象,EM算法是其中的一个典型算法。
 
       模块独立
        模块独立是指模块只完成系统要求的独立的子功能,并且与其他模块的接口简单,符合信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可能小。衡量模块独立性的标准是耦合度和内聚度。内聚度是衡量同一个模块内部的各个元素彼此结合的紧密程度;耦合度是衡量不同模块彼此间相互依赖的紧密程度。
        (1)内聚。内聚是一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块(在理想情况下)应当只做一件事。一般模块的内聚性分为7种类型,如下图所示。
        
        内聚的种类
        .偶然内聚(巧合内聚)。指一个模块内的各处理元素之间没有任何联系。
        .逻辑内聚。指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
        .时间内聚。把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
        .过程内聚。指一个模块完成多个任务,这些任务必须按指定的过程执行。
        .通信内聚。指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
        .顺序内聚。指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
        .功能内聚。这是最强的内聚,指模块内所有元素共同作用完成一个功能,缺一不可。
        (2)耦合。耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。一般模块之间可能的耦合方式有7种类型,如下图所示。
        
        耦合的种类
        .无直接耦合。指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,模块独立性最高。
        .数据耦合。指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
        .标记耦合。指两个模块之间传递的是数据结构。
        .控制耦合。指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内某一功能。因此,被调用模块内应具有多个功能,哪个功能起作用受调用模块控制。
        .外部耦合。模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)时,称为外部耦合。
        .公共耦合。指通过一个公共数据环境相互作用的那些模块间的耦合。
        .内容耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部,这种模块之间的耦合为内容耦合。
 
       模块独立性
        (1)模块化。
        模块化是将系统化分为若干模块的工作。模块化设计可以使整个系统设计简单,结构清晰,可维护性增强。模块化设计的目标是:每个模块完成一个相对独立的特定功能;模块之间的结构简单。简而言之就是要保证模块之间的独立性,提高每个模块的独立程度。
        (2)模块独立性的度量。
        功能独立而且和其他模块之间没有过多相互作用和信息传递的模块被称为独立的模块。模块的独立程度可有两个定性标准度量:聚合(cohesion)和耦合(coupling)。聚合衡量模块内部各元素结合的紧密程度。耦合度量不同模块间互相依赖的程度。
        .聚合,聚合度量模块内部各元素的关系,即其紧凑程度,表现在模块内部各元素为了执行处理功能而组合在一起的程度。模块的聚合有7种不同的类型,其中前三种聚合属于弱聚合。
        .偶然聚合,如果模块所要完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系,我们就称之为偶然聚合。例如,设计模块A、B、C均具有相同的部分代码α,则把α抽出作为一个单独的公用模块,如下图所示,这种聚合便被称为偶然聚合。
        
        偶然聚合
        .逻辑聚合,如果一个模块内部的各个组成部分在逻辑上具有相似的处理动作,但是功能上、用途上却彼此无关,则被称为逻辑聚合。
        .时间聚合,时间聚合又称为经典内聚。如果一个模块内部的各个组成部分所包含的处理动作必须在同一时间内执行,则被称为时间聚合。
        .过程聚合,模块内部各个组成部分所要完成的动作虽然彼此间没什么关系,但是必须以特定的次序(控制流)执行,这种情况属于过程聚合。
        .通信聚合,如果一个模块的各个组成部分所完成的动作都使用了同一个输入数据或产生同一输出数据,则被称为通信聚合。
        .顺序聚合,对于一个模块内部的各个组成部分,如果前一部分处理动作的最后输出是后一部分处理动作的输入,则被称为顺序聚合。例如,模块A由两部分组成,一部分为编辑,另一部分为输出。编辑部分将其输出数据作为输出部分的输入,模块A即为顺序聚合模块。如下图所示。
        
        顺序聚合
        .功能聚合,如果一个模块内部各个组成部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可少,则称该模块为功能聚合模块。
        将以上各种类型的模块聚合方式从耦合程度、可修改性、可读性和通用性4个角度进行一下比较,可以得到下表。
        
        聚合特性比较
        在进行模块设计中,应当尽可能提高模块的聚合程度,使每个模块执行单一的功能,以降低模块间的联系,争取获得较高的模块独立性。尤其应该追求模块的功能聚合,如果可能,要将非功能性聚合的模块转化为功能聚合的模块。
        .耦合,耦合用于度量系统内不同模块之间的互联程度。耦合强弱取决于模块间连接形式及接口的复杂程度。模块之间的耦合程度直接影响系统的可读性、可维护性及可靠性。在系统设计中应改进可能追求松散耦合的系统,因为模块连接越简单,错误传播的可能性就会越大,而且在这样的系统中测试、维护任何一个模块并不需要对其他模块有很多了解。模块之间的连接形式有数据耦合、控制耦合、公共耦合和内容耦合4种类型。
        .数据耦合,如果两个模块彼此间通过数据参数(不是控制参数、共公数据结构或外部变量)交换信息,那么这种耦合就是数据耦合。例如,A模块向子模块A1、 A2传递的是数据信息,构成了数据耦合,如下图所示。
        
        数据耦合
        .控制耦合,如果两个模块彼此间传递的信息中有控制信息,那么,这种耦合被称为控制耦合。控制耦合与数据耦合很相似,只是传递参数中一个仅有数据,另一个还包含了控制信息。控制耦合可以通过适当的方式加以避免,如模块的再分解。例如,模块A与子模块A1、A2之间传递的既有数据信息又有控制信息则构成了控制耦合,如下图所示。
        
        控制耦合
        .公共耦合,若两个模块之间通过一个公共的数据区域传递信息,则被称为公共耦合或公共数据域耦合。公共数据域实际上就是多个模块公用数据的区域。公共耦合是一种不好的连接形式,尤其当一个公共数据区域被多个模块共同使用时,模块数越多,则其耦合的复杂度越大。这会给数据的保护、维护等带来很大的困难。例如,模块A、A2.1、Y1共用公共数据区内的元素,尽管A与Y1没有联系,但是它们之间存在着公共耦合,如下图所示。
        
        公共耦合
        .内容耦合,如果一个模块需要涉及另一个模块的内部信息时,则这种耦合成为内容耦合。例如,一个模块访问另一个模块的内部数据;一个模块调用另一个模块的部分程序代码等情况。
        对这4种类型的耦合的优劣对比可以总结在下表中。
        
        4种耦合的优劣对比
        总之,聚合和耦合是相辅相成的两个设计原则,是进行模块设计的有力工具,模块内的高聚合往往意味模块之间的松耦合。要想提高模块内部的聚合性,必须减少模块之间的联系。
 
       内聚
        内聚是指模块内部各元素之间联系的紧密程度,例如一个完成多个功能的模块的内聚度就比完成单一功能的模块的内聚度低。内聚度越低,模块的独立性越差。内聚性有以下几种类型:
        (1)偶然内聚:指一个模块内的各个处理元素之间没有任何联系。
        (2)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
        (3)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
        (4)通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
        (5)顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
        (6)功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
        耦合性和内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚、低耦合,提高模块的独立性。
   题号导航      2015年下半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第50题    在手机中做本题