02--第二章 面向对象设计原则.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.6 LoD:迪米特法则 对其进行重构,将家人和狱友隔离开: Prisoners类起到中介的作用,将Family类和Inmates类联系到一起。 public class Prisoners { private Inmates inmates = new Inmates(); public void helpEachOther() { Console.WriteLine(“犯人和狱友之间应该互相帮助...); Console.Write(“狱友说:); inmates.weAreFriend(); } } public class Inmates { public void weAreFriend() { Console.WriteLine(“我们是狱友,我们互相帮助...); } } 2.6 LoD:迪米特法则 运行结果 家人说:犯人和狱友之间应该互相帮助... 狱友说:我们是狱友,我们互相帮助… 家人和狱友就分开了,但是也表达了家人希望狱友能跟犯人互相帮助的意愿。 public class Family { //家人探望犯人 public void visitPrisoner(Prisoners prisoners) { //家人希望犯人与狱友互帮互助 Console.Write(“家人说:); prisoners.helpEachOther(); } } public class Prison { public static void Main(String []args) { Family family = new Family(); family.visitPrisoner(new Prisoners()); Console.Read(); } } 2.6 LoD:迪米特法则 应用迪米特法则的注意事项: 在类的划分上,应该创建有弱耦合的类; 尽量降低类的访问权限; 在类的结构设计上,每一个类都应当尽量降低成员的访问权限; 不要暴露类成员,而应该提供相应的访问器(属性)。 在类的设计上,只要有可能,一个类应当设计成不变类(没有可变成员的类——稳定且多线程安全); 在对其他类的引用上,一个对象对其它对象的引用应当降到最低; 谨慎使用序列化Serialize功能(序列化和反序列化必须对外暴露很多可序列化的成员); 迪米特法则的缺点: 在系统中造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的业务逻辑无关。 会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。 2.7 CARP:合成/聚合复用原则 尽量使用合成/聚合,而不是使用继承 合成表示一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样; 例如:人有两个胳膊,胳膊和人就是部分和整体的关系,人去世了,那么胳膊也就没用了,也就是说胳膊和人的生命周期是相同的; 合成关系用实心的菱形+实线来表示。 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象并不是A对象的一部分 例如:人是群居动物,所以每个人属于一个人群,一个人群可以有多个人,所以人群和人是聚合的关系; 聚合关系用空心的菱形+实线来表示。 2.7 CARP:合成/聚合复用原则 正确区分“Has-A”和“Is-A”关系 “Is-A”表达的是继承关系,表达了一个类是另外一个类的一种; “Has-A”表达的是聚合关系,代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类。 一个人无法同时拥有多个角色,是雇员就不能再是学生了,这显然是不合理的。 把“角色”的等级结构与“人”的等级结构区分开来,关系改为“Has-A” 角色是一个变化点,如何封装? 2.7 CARP:合成/聚合复用原则 继承复用的优点 新的类实现较为容易,因为父类的大部分功能可以通过继承关系自动进入子类。 修改或扩展继承而来的实现较为容易。 继承复用的缺点 继承复用破环封装,因为继承将父类的实现细节暴露给子类。由于父类的内部细节常常是对子类是可见的,因此这种复用是透明的复用,又称白箱复用。 继承是父类和子类间的紧耦合

文档评论(0)

麻将 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档