得墨meter耳定律如何应用于具有耦合和凝聚力的面向对象系统?
我正在读一本书“软件开发和专业实践”,偶然发现了有关LoD的一章,并对如何将这一原理应用于面向对象的系统感到好奇。
得墨meter耳定律如何应用于具有耦合和凝聚力的面向对象系统?
我正在读一本书“软件开发和专业实践”,偶然发现了有关LoD的一章,并对如何将这一原理应用于面向对象的系统感到好奇。
Answers:
根据艾默生·马塞多(Emerson Macedo)的说法,得墨meter耳定律规定如下:
这直接对应于低耦合原理,因为单元(或对象)应该像上面那样:
耦合的最低形式之一是消息传递,即,通过带有参数的方法调用在对象之间共享数据。
此外,据我所知,得墨meter耳定律并不直接对应于高凝聚力原理,因为它仅说明对象本身应该知道其拥有的数据。内聚性低的对象具有其自身方法中不经常使用的数据成员。它更多地是关于对象的内容,而不是其关系和协作对象。
联轴器,简化
当一个对象调用另一个对象的方法,属性等时,我们说这些对象是耦合的。我们称之为耦合因为现在被叫不能改变任何有关其自己的方法/道具。不打断电话。
因此,更多的耦合-方法,道具。-更改被调用者代码而不破坏使用该代码的所有代码越难。
考虑耦合
大多数知识导致疯狂的耦合
在这里,我们有一个Employee
,有一个Person
具有“地址”
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
要上街,我必须致电:myEmployee.me.home.street
。这与最小知识原理相反180度。我必须知道关于内部结构,复合结构,的Employee
,Person
和Address
班级。
这种缺陷一流的设计力量我知道所有这些类,因此myEmployee.me.home.street
夫妻我(主叫对象)不低于3类-只得到一个单一的财产!
最少的知识可以节省一天
如果我仅与Employee
班级交谈,那么我本身就是在应用最低限度的知识原理,通过这样做,我们自动将耦合仅限于该班级,同时将耦合隔离到该班级。
通过在Employee
类中添加所有需要的属性,我们修复了耦合。
从而
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
请允许我打电话:myEmployee.street
-
Employee
Employee
-无论其结构多么复杂。最低的知识
我们从分离myEmployee Person
和Address
,理想情况下,我们应继续通过增加应用至少知识通过通特性,使得Employee
只会谈Person
,并Person
只会谈Address
研究(V. Basili,L。Briand和WL Melo。对面向对象设计指标作为质量指标的验证)表明,响应集较大的类比响应集较小的类倾向于产生更多错误,因为响应集更多意味着更高耦合的机会。
得墨Law耳定律的价值在于它可以减少定义的响应。对象的方法只能调用自身的方法,传递给该方法的任何参数,它创建的任何对象的方法以及任何直接持有的对象的方法。由于响应集较小,因此发生高耦合的机会较小。由于模块/方法仅使用立即可用的引用,因此具有更高的内聚性。