面向过程的扇入及扇出:
扇入:是指直接调用该模块的上级模块的个数。即:called by个数 (在McCabe 里度量名称为Fan in)
扇出:该模块直接调用的下级模块的个数。即:calls to 个数(在McCabe 里度量名称为Fan out)
面向对象的扇入及扇出:
扇入:派生类的数量:即一个子类继承的父类个数。通俗的讲即有多个个父类产生了此子类。(在McCabe 里度量名称为Fan in)
扇出:由一个类衍生出类的数量:即一个父类产生的子类个数。(在McCabe 里度量名称为NOC)
实例代码:
父类:People.java
1 public classPeople {2 privateString name;3 private intage;4
5 public People(String myName,intmyAge){6 this.name =myName;7 this.age =myAge;8 }9
10 public voideat(){11 System.out.println("I am eating");12 }13
14 public voidsleep(){15 System.out.println("I am sleep");16 }17
18 public voiddoWork(){19 this.eat();20 this.sleep();21 System.out.println("I am goto work");22 }23
24 }
View Code
子类1:Students.java
1 public class Students extendsPeople{2 privateString mySchool;3
4 public Students(String myName, intmyAge, String mySchool) {5 super(myName, myAge);6 //TODO Auto-generated constructor stub
7 this.mySchool =mySchool;8 }9
10 public voidgoSchool(){11 this.doWork();12 System.out.println("I am goto school");13 }14 }
View Code
子类2:Worker.java
1 public class Worker extendsPeople{2 privateString address;3
4 public Worker(String myName, intmyAge,String address) {5 super(myName, myAge);6 //TODO Auto-generated constructor stub
7 this.address =address;8 }9
10 public voiddoJob(){11 this.doWork();12 System.out.println("I am goto job");13 }14 }
View Code
主类:Famly.java
public classFamly {public static voidmain(String[] args) {//TODO Auto-generated method stub
Students stu = new Students("xx",15,"qinghua");
Worker wor= new Worker("yy",35,"tonghuashun");
stu.goSchool();
wor.doWork();
}
}
View Code
使用McCabe分析的类调用关系图:
People父类产生了子类Students 及Worker,故People类的扇出NOC为2,Students及Worker类的扇入Fan in为1。
McCabe度量信息截图如下:
使用McCabe分析模块调用关系图如下:
doWork方法调用了eat方法及sleep方法,故doWork方法的扇出为2,因doWork方法也调用了类方法system.out.println故:doWork的扇出为3;
同理eat方法及sleep方法的扇入为1,扇出为1。
使用McCabe分析如下:
针对eat模块扇入扇出分析如下:
针对doWork模块扇入扇出分析如下: