面向对象程序设计的五个基本原则

面向对象程序设计一共有五个基本原则,分别是:

单一职责原则(SRP)、开放-封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)

单一职责原则(SRP):

WHAT:对于一个类而言,应该仅有一个引起它变化的原因。

WHY:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

辅助理解:单细胞生物进化成为多细胞生物的过程中,从前的单细胞生物一个细胞负责很多功能,防御、繁衍、消化、进食等等,而多细胞生物一个细胞只负责一个功能,淋巴细胞负责防御,血红细胞负责运输,精元细胞负责繁衍。软件工程的发展过程与之非常接近,现在我们编程中的类理解成一个细胞,一个类只负责一个功能。

开放-封闭原则(OCP):

WHAT:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。

WHY:开放-封闭原则是面向对象编程的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可拓展、可复用、灵活性好。开发人员应该仅仅对

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
UML类图 UML(Unified Modeling Language),即统一建模语言,是图标式软件设计语言。 类图(Class diagram)是最常用的UML图,显示类、接口以及它们之间的静态结构和关系,用于描述系统的结构化设计。类图最基本的元素是类或者接口。 第1页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第1页。 类的UML图 UML类图显示类的三个组成部分,第一是Java中定义的类名,第二个是该类的属性,第三个是该类提供的方法。 第一层为类的名称,第二层是类的属性,第三层表示的是类的方法或称为操作。 一个类图的类名是必须的 第2页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第2页。 类的UML图 注意:属性和方法之前附加的可见性修饰符, "+"表示public,"-"表示private,"#"表示protected。省略这些修饰符表示具有package(包)级别的可见性。冒号后边表示数据的类型或方法的返回值类型。 如果是抽象类,类名以斜体表示。 第3页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第3页。 UML类图及关系 第4页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第4页。 接口的UML表示 第5页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第5页。 依赖关系:虚线+箭头 第6页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第6页。 关联关系:空心的菱形+实线箭头 第7页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第7页。 组合关系:实心的菱形+实线箭头 第8页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第8页。 实线+空心的三角形,起始端是子类,空心三角形指向终点端的父类。 泛化关系: 第9页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第9页。 实现关系 实现关系的UML表示法:虚线+空心三角形。 第10页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第10页。 发现变化,并封装变化 在软件设计之初,需要发现所要开发软件中可能存在或已经存在的"变化",然后利用抽象的方式对这些变化进行封装。抽象是没有具体的代码实现,抽象代表了一种可扩展 。 参阅教材例9.1 第11页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第11页。 单一职责原则和最少知识原则 在单一职责(Single Responsibility Principle, 简称为SRP)中,就一个类而言,应该仅有一个引起它变化的原因。也就是说,不要把变化原因各不相同的职责放在一起。 第12页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第12页。 单一职责原则和最少知识原则 最少知识原则(Least Knowledge Principle, 简称为LKP)又叫迪米特法则(Law of Demeter,简写为LoD),就是说一个对象应当对其他对象有尽可能少的了解。就像我国古代老子所说的"使民无知"和"小国寡民"的统治之术,"是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。"以及 "小国寡民……邻国相望,鸡犬之声相闻,民至老死,不相往来"。 第13页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第13页。 开放-封闭原则 所谓"开放-封闭原则"(Open-Closed Principle),也称"开-闭原则",就是让设计对扩展开放,对修改关闭。也就是说,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。高层模块不应该依赖低层模块,抽象不应该依赖细节,使系统设计更为通用、更为稳定。面向抽象编程,这里的抽象主要指的是抽象类或接口。 第14页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第14页。 开放-封闭原则 "开放-封闭原则"实质上是指当一个设计中增加新的模块时,不需要修改现有模块。 第15页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第15页。 子类型能够替换基类型原则 子类型能够替换基类型原则也叫里氏代换原则(Liskov Substitution Principle ,简称LSP),里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现,且程序运行正常。 特
面向对象程序设计原则(SOLID原则)是一组指导面向对象程序设计基本准则,旨在使代码更易于理解、维护和扩展。以下是我对每个原则的理解: 1. 单一职责原则 (SRP) 每个类或模块应该只有一个责任。这意味着一个类应该只有一个改变的原因,这样可以使它更容易维护和测试。如果一个类有多个职责,那么当其中一个职责发生改变时,会影响到其他职责。 2. 开放封闭原则 (OCP) 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着我们应该尽量避免修改已有的代码,而是通过扩展代码来实现新的功能。这样可以减少代码的风险和不稳定性,同时也能更好地支持软件的演化。 3. 里氏替换原则 (LSP) 子类应该可以替换它们的父类并且不会影响程序的正确性。这意味着子类必须与父类保持一致的行为和约束。这样可以确保代码的可重用性和可扩展性。 4. 接口隔离原则 (ISP) 客户端不应该依赖于它不需要使用的接口。这意味着我们应该尽量将接口拆分成更小的部分,只提供客户端需要的接口。这样可以减少代码的依赖性和复杂性。 5. 依赖倒置原则 (DIP) 高层模块不应该依赖于低层模块,它们应该都依赖于抽象。这意味着我们应该尽量使用抽象类或接口来实现依赖关系,而不是直接依赖于具体实现。这样可以减少代码的耦合性和提高代码的灵活性。 这些原则可以帮助我们编写高质量、可维护和可扩展的面向对象程序。它们不是硬性规定,而是提供了一些指导性的准则,需要根据具体的场景和需求进行适当的调整和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值