迪米特法则java六大设计原则?

迪米特法则  时间:2021-07-09  阅读:()

嵌入式系统在硬件设计,操作系统的选择,以及软件的设计要遵循哪些原则

要把软件做得非常灵活又要便于维护是一个很困难的事情。

灵活的软件他的结构就复杂,维护起来就困难。

有得必有失,关键就在于如何处理这两者,使得大于失。

软件的设计开发应遵循以下六大原则:1. OCP全称:“Open-Closed Principle” 开放-封闭原则说明:对扩展开放,对修改关闭。

优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。

当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。

增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有模块进行重新测试。

如何实现“开-闭”原则在面向对象设计中,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。

换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。

解决问题关键在于抽象化,抽象化是面向对象设计的第一个核心本质。

对一个事物抽象化,实质上是在概括归纳总结它的本质。

抽象让我们抓住最最重要的东西,从更高一层去思考。

这降低了思考的复杂度,我们不用同时考虑那么多的东西。

换言之,我们封装了事物的本质,看不到任何细节。

在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。

对实体进行扩展时,不必改动软件的源代码或者二进制代码。

关键在于抽象。

2. LSP全称:“Liskov Substitution Principle” 里氏代换原则说明:子类型必须能够替换它们的基类型。

一个软件实体如果使用的是一个基类,那么当把这个基类替换成继承该基类的子类,程序的行为不会发生任何变化。

软件实体察觉不出基类对象和子类对象的区别。

优点:可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉。

3. DIP全称:“Dependence Inversion Principle”依赖倒置原则说明:要依赖于抽象,不要依赖于具体。

客户端依赖于抽象耦合。

抽象不应当依赖于细节;细节应当依赖于抽象;要针对接口编程,不针对实现编程。

优点:使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。

依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。

怎样做到依赖倒置?以抽象方式耦合是依赖倒转原则的关键。

抽象耦合关系总要涉及具体类从抽象类继承,并且需要保证在任何引用到基类的地方都可以改换成其子类,因此,里氏代换原则是依赖倒转原则的基础。

在抽象层次上的耦合虽然有灵活性,但也带来了额外的复杂性,如果一个具体类发生变化的可能性非常小,那么抽象耦合能发挥的好处便十分有限,这时可以用具体耦合反而会更好。

层次化:所有结构良好的面向对象构架都具有清晰的层次定义,每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务。

依赖于抽象:建议不依赖于具体类,即程序中所有的依赖关系都应该终止于抽象类或者接口。

尽量做到:1、任何变量都不应该持有一个指向具体类的指针或者引用。

2、任何类都不应该从具体类派生。

3、任何方法都不应该覆写它的任何基类中的已经实现的方法。

4. ISP全称:“Interface Segregation Principle” 接口隔离原则说明:使用多个专一功能的接口比使用一个的总接口总要好。

从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。

过于臃肿的接口是对接口的污染,不应该强迫客户依赖于它们不用的方法。

优点:会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里。

如何实现接口隔离原则不应该强迫用户依赖于他们不用的方法。

1、利用委托分离接口。

2、利用多继承分离接口。

5. CARP or CRP全称:“Composite/Aggregate Reuse Principle” 合成/聚合复用原则 or “Composite Reuse Principle” 合成复用原则说明:如果新对象的某些功能在别的已经创建好的对象里面已经实现,那么尽量使用别的对象提供的功能,使之成为新对象的一部分,而不要自己再重新创建。

新对象通过向这些对象的委派达到复用已有功能的。

简而言之,要尽量使用合成/聚合,尽量不要使用继承。

优点:1) 新对象存取成分对象的唯一方法是通过成分对象的接口。

2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。

3) 这种复用支持包装。

4) 这种复用所需的依赖较少。

5) 每一个新的类可以将焦点集中在一个任务上。

6) 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。

7) 作为复用手段可以应用到几乎任何环境中去。

缺点:就是系统中会有较多的对象需要管理。

6. LOD or LKP全称:“Law of Demeter” 迪米特原则 or “Least Knowledge Principle” 最少知识原则说明:对象与对象之间应该使用尽可能少的方法来关联,避免千丝万缕的关系。

如何实现迪米特法则迪米特法则的主要用意是控制信息的过载,在将其运用到系统设计中应注意以下几点:1) 在类的划分上,应当创建有弱耦合的类。

类之间的耦合越弱,就越有利于复用。

2) 在类的结构设计上,每一个类都应当尽量降低成员的访问权限。

一个类不应当public自己的属性,而应当提供取值和赋值的方法让外界间接访问自己的属性。

3) 在类的设计上,只要有可能,一个类应当设计成不变类。

4) 在对其它对象的引用上,一个类对其它对象的引用应该降到最低。

还有个单一职责原则: SRP简介(SRP--Single-Responsibility Principle): 就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。

所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。

也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。

因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。

使用SRP注意点: 1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责; 2、在没有变化征兆的情况下应用SRP或其他原则是不明智的; 3、在需求实际发生变化时就应该应用SRP等原则来重构代码; 4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码; 5、如果测试不能迫使职责分离,僵化性和脆弱性的臭味会变得很强烈,那就应该用Facade或Proxy模式对代码重构; SRP优点: 消除耦合,减小因需求变化引起代码僵化性臭味

面向对象设计的6个设计原则最早谁提出的

Booch最先描述了面向对象的软件开发方法的基础问题。

面向对象设计的六大基本原则: 1)开闭原则 2)里氏代换原则 3)依赖倒转原则 4)接口隔离原则 5)迪米特法则 6)合成/聚合复用原则

面向对象的设计模式有什么原则?

1.面向对象设计模式解决的是“类与相互通信的对象之间的组织关系”,包括它们的角色、职责、协作方式几个方面。

2.面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变化,提高服用”的设计。

3.面向对象设计模式描述的是软件设计,因此它是独立于编程语言的,但是面向对象设计模式的最终实现仍然要使用面向对象编程语言来表达,本课程基于C#语言,但实际上它适用于支持.NET框架的所有.NET语言,如Visual Basic.NET、C++/CLI等。

java六大设计原则?

1、单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。

2、里氏替换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。

LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

里氏代换原则是对“开-闭”原则的补充。

实现“开-闭”原则的关键步骤就是抽象化。

而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

—— From Baidu 百科 历史替换原则中,子类对父类的方法尽量不要重写和重载。

因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。

3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。

写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。

使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

5、迪米特法则(最少知道原则)(Demeter Principle) 就是说:一个类对自己依赖的类知道的越少越好。

也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。

这样当被依赖的类变化时,才能最小的影响该类。

最少知道原则的另一个表达方式是:只与直接的朋友通信。

类之间只要有耦合关系,就叫朋友关系。

耦合分为依赖、关联、聚合、组合等。

我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。

局部变量、临时变量则不是直接的朋友。

我们要求陌生的类不要作为局部变量出现在类中。

6、合成复用原则(Composite Reuse Principle) 原则是尽量首先使用合成/聚合的方式,而不是使用继承。

美国云服务器 1核 1G 30M 50元/季 兆赫云

【双十二】兆赫云:全场vps季付六折优惠,低至50元/季,1H/1G/30M/20G数据盘/500G流量/洛杉矶联通9929商家简介:兆赫云是一家国人商家,成立2020年,主要业务是美西洛杉矶联通9929线路VPS,提供虚拟主机、VPS和独立服务器。VPS采用KVM虚拟架构,线路优质,延迟低,稳定性强。是不是觉得黑五折扣力度不够大?还在犹豫徘徊中?这次为了提前庆祝双十二,特价推出全场季付六折优惠。...

青果网络618:洛杉矶CN2 GIA/东京CN2套餐年付199元起,国内高防独服套餐66折

青果网络怎么样?青果网络隶属于泉州市青果网络科技有限公司,青果网络商家成立于2015年4月1日,拥有工信部颁发的全网IDC/ISP/IP-VPN资质,是国内为数不多具有IDC/ISP双资质的综合型云计算服务商。青果网络是APNIC和CNNIC地址分配联盟成员,泉州市互联网协会会员单位,信誉非常有保障。目前,青果网络商家正式开启了618云特惠活动,针对国内外机房都有相应的优惠。点击进入:青果网络官方...

HostKvm四月优惠:VPS主机全场八折,香港/美国洛杉矶机房$5.2/月起

HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月商家针对全场VPS主机提供8折优惠码,优惠后美国洛杉矶VPS月付5.2美元起。下面列出几款不同机房VPS主机产品配置信息。套餐:美国US-Plan0CPU:1cores内存:1GB硬...

迪米特法则为你推荐
stackoverflow电脑上一开机出现stack overflow at line:0怎么办有道云笔记网页版win10怎么用有道云笔记网页gravatar游戏王mycrad怎样换头像?知识库管理系统什么是知识管理知识库管理系统急求一款电子文档管理系统,有好用的推荐下~?网关和路由器的区别网关和路由器的区别是什么有b吗34B的胸围有多大?有b吗有什么好看的b级片waves插件请问下waves9是什么东西,插件吗?微信论坛手机微信论坛如何实现
北京主机租用 win8.1企业版升级win10 北京主机 最好的空间 小米数据库 中国电信测速112 架设服务器 howfile hostker cdn联盟 静态空间 酷番云 in域名 视频服务器是什么 河南移动梦网 主机管理系统 双线空间 镇江高防 广东主机托管 移动王卡 更多