一、

  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、迪米特法则

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

  目的:

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

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

Java 面向对象的设计原则的更多相关文章

  1. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

  2. GOF 的23种JAVA常用设计模式总结 03 面向对象七大设计原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 各位代码界的大佬们总结出的七 ...

  3. Java面向对象课程设计——购物车

    Java面向对象课程设计——购物车 小组成员:余景胜.刘格铭.陈国雄.达瓦次仁 一.前期调查 流程 客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Sh ...

  4. PHP 进阶篇:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 (麦子学员 第三阶段)

    以下是进阶篇的内容:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 ================================== ...

  5. AJPFX总结面向对象思想设计原则

    面向对象思想设计原则   A.单一职责原则           其实就是开发人员经常说的”高内聚,低耦合”           也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原 ...

  6. 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...

  7. 第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)

    2. 里氏替换原则(Liskov Substitution Principle,LSP) 2.1 定义 (1)所有使用基类的地方必须能透明地使用子类替换,而程序的行为没有任何变化(不会产生运行结果错误 ...

  8. JAVA面向对象-----java面向对象的六大原则

    现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种 种问题,导致尽管是面向对象的语言,却是面向过程的逻辑 ...

  9. 实验二 Java面向对象程序化设计

    实验二 Java面向对象程序设计 一.  实验要求 1.完成实验.撰写实验报告,以博客方式发表在博客园 2.实验报告重点是运行结果.遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办 ...

随机推荐

  1. 【分类模型评判指标 二】ROC曲线与AUC面积

    转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80499031 略有改动,仅供个人学习使用 简介 ROC曲线与AUC面积均是用来 ...

  2. maven坐标及依赖范围的学习(1)

    首先,我们先了解什么是maven的坐标(重中之重): 在这里我们可以看到那三个红色的行,基本是pom.xml中出现的最多的配置     例如这个配置:这里我们可以看到我们这个项目的pom文件中,他对名 ...

  3. centOS7搭建hadoop,zookeeper,hbase

    1.配置ssh免密登录 (本人使用的是centOS7虚拟机) (本人未在root用户下安装,建议使用root用户,不然很麻烦!!) ① 本机无密钥登录 1.进入~/.ssh目录(若无,则执行一次ssh ...

  4. nginx实现负载均衡、缓存功能实战

    nginx实现负载均衡.缓存功能实战 什么是正向代理?应用场景:翻墙 什么是反向代理?例如:haproxy和nginx   Nginx实现反向代理 nginx代理基于是ngx_http_proxy_m ...

  5. QObject 的拷贝构造和赋值操作

    QOject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承自 ...

  6. Flume-概述

    Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume 基于流式架构,灵活简单. Flume最主要的作用就是,实时读取服务器本地磁盘的数据, ...

  7. P2456 [SDOI2006]二进制方程

    P2456 [SDOI2006]二进制方程 题解 拿个样例模拟一下发现 把等式两边对应展开,每个位置的填数都是一一对应的 比如第二个样例 分类讨论: (1)xi  yi  都是数字,但是不相同,此时无 ...

  8. UTC ISO 8601

    如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z.Z是相对协调世界时时间0偏移的代号.如下午2点30分5秒表示为14:30:05Z或143005Z:只表示小时和分 ...

  9. WordPress窗体化侧边栏

    窗体化侧边栏是一个支持 Widget 的侧边栏或者说是窗体化(widgetized)的侧边栏几乎是 WordPress 主题的标准. 首先,什么是窗体化(widgetizing)呢?简单的说,窗体化就 ...

  10. MySQL 如何使用show processlist进行过滤

    在使用show processlist的时候,直接使用会显示很多的内容,无法很快找到需要的信息. 如何过滤操作呢? 其实,show processlist展示的内容是从information_sche ...