Java 面向对象的设计原则

Wesley13
• 阅读 666

一、

1、面向对象思想的核心:

封装、继承、多态。

2、面向对象编程的追求:

  高内聚低耦合的解决方案;

  代码的模块化设计;

3、什么是设计模式:

  针对反复出现的问题的经典解决方案,是对特定条件下(上下文)问题的设计方案的经验总结,是前人设计实践经验的精华。

4、面向对象设计原则

  是面向对象设计思想(法理精神)的提炼(基本宪法),比面向对象思想的核心要素更具有实操性,比设计模式(各种具体法律条文)更抽象。

5、如何最大限度降低耦合度?

  1. 少用类的继承,多用接口隐藏实现细节。
  2. 避免使用全局变量。
  3. 多用设计模式。如MVC~
  4. 尽量不用“硬”编码方式写程序,尽量避免直接使用SQL语句操作数据库。
  5. 避免直接操作或调用其它模块或类,无法避免就尽量减小耦合程度

7、面向对象常用设计原则:SOLID

  1. 单一职责原则;
  2. 开放封闭原则;
  3. Liskov替换原则;
  4. 接口隔离原则;
  5. 依赖倒置原则;
  6. 迪米特法则;
  7. 合成/聚合复用原则;

  二、

1、最小化访问权限

  从信息隐藏的角度看,应该最大程度对类进行封装,只要有可能就把方法和属性成员定义为私有,再考虑逐步增加权限。       

防御式(Defensive)编程:防御式设计的体现,为了保证对程序的不可预见的使用不会造成之后程序功能的破坏。

如何保护程序免受非法数据的破坏?

  1. 检查来自外部资源的数据值,例如来自网络的数据值和来自文件的数据值;
  2. 检查子程序所有输入参数的值,与上类似;
  3. 决定如何处理错误的输入数据,对不同的错误类型进行处理。

  2、以类代替基本数据类型

  类中如果有相互关联的多个基本数据类型,应将其抽取为一个类。

  3、单一职责

  涵义:一个类只涉及用来实现一个职责,只会有一个引起变化的原因。

  面向对象设计的核心任务,就是发现职责并把这些职责相互分离。如果能想到多余一个动机去改变一个类,那么这个类就具有多一个职责,应考虑分解。

  4、不要重复造轮子

  定义:不写重复的代码(针对功能而不是代码),用Abstraction类抽象公有的东西。 

  若多次用到一个硬编码值,则将其设置为公共常量;

  若需要在两个以上的地方使用一个代码块,可以将其抽取为一个独立的方法。

  不能滥用功能代码的合并!

  5、开放封闭原则(OCP)

  定义:软件实体应该对扩展开放,而对修改封闭。

  对扩展开放,意味着有新的需求变化时,可以对现有代码进行扩展,适应新情况。

  对修改封闭,意味着一旦设计完成,不要对类的实现做修改。

如何做到?

       核心思想:对抽象编程,不是针对具体编程。

  编程角度:

  针对接口编程,而不是针对实现编程。

  应该使用接口类型作为方法返回类型、方法参数类型。

  6、里氏替换原则(LSP)

定义:任何基类可以出现的地方,子类一定可以出现。

  只有当子类可以替换父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也可以在父类的基础上增加新的行为。

  如果子类不能完整地表达父类,那么建议断开父子继承关系,采用组合等关系替代。

  7、依赖倒置原则(DIP)

  定义:程序设计要依赖抽象,不要依赖具体。即对抽象编程,不要对实现进行编程,降低调用类与实现模块间的耦合。

高层次模块不应该依赖于低层次模块,都应该依赖于抽象;

  抽象不应该依赖于具体,具体应该依赖于抽象。

8、迪米特法则

  涵义:又称最少知识原则,即一个对象应当对其他对象了解得尽可能少。

目的:

  降低类之间的耦合,让每个类尽量减少对其他类的依赖。

  不过这样也可能造成系统中存在大量的中介类,臃肿。

点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?
前言:1)java面向对象语言,面向过程围绕过程(解决问题步骤),面向对象围绕实体(名词,特性(属性),行为(动作、方法))。它们设计思想区别在于关心核心不同的。主流都是面向对象的。实际开发,先按面向对象思想进行设计,具体实现时面向过程(人习惯)2)java怎么支持面向对象呢?a.万物皆对象,所有的类都是Object子类b.java中支
菜园前端 菜园前端
1年前
什么是面向对象编程?
原文链接:什么是面向对象编程?面向对象程序设计(ObjectOrientedProgramming,OOP)是一种计算机编程架构,也可以理解为是一种编程的思想。面向对象程序设计的核心就是对象和类,对象也是类的实例化,类是对现实对象的抽象。对象间通过消息传递
待兔 待兔
2年前
面向对象设计原则之 - 高内聚
通常在面向对象设计中,我们经常听到,高内聚,低耦合,那么到底什么是内聚呢?内聚究竟是什么?参考百度百科的解释,内聚的含义如下:内聚(Cohesion),科学名词,是一个模块内部各成分之间相关联程度的度量。我自己的理解是:内聚指一个模块内部元素之间的紧密程度看起来很好理解,但只要深入思考一下,其实没有那么简单。首先,“模块”如何理解?一定会有人说,模块
亚瑟 亚瑟
3年前
面向对象设计原则
面向对象设计原则对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。7种常用的面向对象设计原则|设计原则名称|定义|使用频率||
待兔 待兔
2年前
面向对象设计原则之 - 低耦合
耦合到底是什么?耦合(或者称为依赖)是程序模块之间的依赖程度。从定义上看,耦合和内聚是相反的:内聚关注模块内部的元素的结合程度耦合关注模块之间的依赖程度理解耦合的关键有两点:什么是模块?模块和内聚里面提到的模块是一样的,耦合中的模块其实也是可大可小的。常见的模块有函数,类,包,子模块,子系统等什么是依赖?依赖这个词很好理解,通俗地讲,就是
可莉 可莉
3年前
20175212童皓桢 Java实验二
20175212童皓桢Java实验二面向对象程序设计实验报告实验内容初步掌握单元测试和TDD理解并掌握面向对象三要素:封装、继承、多态初步掌握UML建模熟悉S.O.L.I.D原则了解设计模式实验步骤
Stella981 Stella981
3年前
20175212童皓桢 Java实验二
20175212童皓桢Java实验二面向对象程序设计实验报告实验内容初步掌握单元测试和TDD理解并掌握面向对象三要素:封装、继承、多态初步掌握UML建模熟悉S.O.L.I.D原则了解设计模式实验步骤
Wesley13 Wesley13
3年前
Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四Java面向对象之多态(来源于身边的案例)1\.为什么要用多态?1.1 多态是面向对象的三大特性之一1.2 多态是基于接口设计的模型1.3 多态具有横向扩展特性1.4 可以非常标准匹配“依赖倒置原则”,降低前端与后端间的耦合2.不一样的多态案例2.1 UML静态模型图!