面向对象设计的设计原则
依赖倒转原则假定所有的详细类都是会转变的,这也不总是准确。有一些详细类可能是相当 稳固,不会转变的,使用这个详细类实例的应用完全可以依赖于这个详细类型,而不必为此建立一个抽象类型。
四、合成/聚合复用原则( Composite/Aggregate Reuse Principle 或 CARP )
4.1 观点
界说:在一个新的工具内里使用一些已有的工具,使之成为新工具的一部门;新的工具通过向这些工具的委派到达复用这些工具的目的。
应首先使用合成/聚合,合成/聚合则使系统天真,其次才思量继续,到达复用的目的。而使用继续时,要严酷遵照里氏代换原则。有用地使用继续会有助于对问题的明白,降低庞大度,而滥用继续会增添系统构建、维护时的难度及系统的庞大度。
若是两个类是“Has-a”关系应使用合成、聚合,若是是“Is-a”关系可使用继 承。"Is-A"是严酷的分类学意义上界说,意思是一个类是另一个类的"一种"。而"Has-A"则差别,它表现某一个角色具有某一项责任。
4.2 什么是合成?什么是 聚合?
合成(Composition)和聚合(Aggregation)都是关联 (Association)的特殊种类。
聚合表现整体和部门的关系,表现“拥有”。如疾驰S360汽车,对疾驰S360引擎、疾驰S360轮胎的关系是聚合关系,脱离了疾驰S360汽车,引擎、轮胎就失去了存在的意义。在设计中, 聚合不应该频仍泛起,这样会增大设计的耦合度。
合成则是一种更强的“拥有”,部门和整体的生命周期一样。合成的新的工具完全支 配其组成部门,包罗它们的建立和湮灭等。一个合成关系的身分工具是不能与另一个合成关系共享的。
换句话说,合成是值的聚合(Aggregation by Value),而一样平常说的聚合是引用的聚合(Aggregation by Reference)。
明确了合成和聚合关系,再来明白合成/聚合原则应该就清晰了,要制止在系统设计中泛起,一个类的继续条理凌驾3层,则需思量重构代码,或者重新设计结构。固然最好的措施就是思量使用合成/聚合原则。
4.3 通过合成/聚合的优弱点
优点:
1) 新工具存取身分工具的唯一要领是通过身分工具的接口。
2) 这种复用是黑箱复用,由于身分工具的内部细节是新工具所看不见的。
3) 这种复用支持包装。
4) 这种复用所需的依赖较少。
5) 每一个新的类可以将焦点集中在一个使命上。
6) 这种复用可以在运行时间内动态举行,新工具可以动态的引用与身分工具类型相同的工具。
7) 作为复用手段可以应用到险些任何情况中去。
弱点:就是系统中会有较多的工具需要治理。
4.4 通过继续来举行复用的优弱点
优点:
1) 新的实现较为容易,由于超类的大部门功效可以通过继续的关系自动进入子类。
2) 修改和扩展继续而来的实现较为容易。
弱点 :
1) 继续复用破损封装,由于继续将超类的实现细节袒露给子类。由于超类的内部细节经常是对于子类透明的,以是这种复用是透明的复用,又称“白箱”复用。
2) 若是超类发生改变,那么子类的实现也不得不发生改变。
3) 从超类继续而来的实现是静态的,不行能在运行时间内发生改变,没有足够的天真性。
4) 继续只能在有限的情况中使用。
五、 迪米特规则( Law of Demeter ,LoD )
5.1 概述
界说:一个软件实体应当尽可能少的与其他实体发生相互作用。
这样,当一个模块修改时,就会只管少的影响其他的模块。扩展会相对容易。
这是对软件实体之间通讯的限制。它要求限制软件实体之间通讯的宽度和深度。
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。