简单理解面向对象-《大话设计模式》

面向对象

什么是面向对象呢?

个人理解的是抽象映射
抽象出对象,映射现实事物;

  • 即用自己的代码来模拟实现真实世界的一个事物;通过对真实世界的的属性、行为进行抽象,来映射真实世界的实际事物。通过代码抽象出属性和方法,映射为代码;用对象对代码进行组织。

“对象”即真实世界事物的特征抽象;

什么是类?什么又是对象?

    1. 类是具有相同属性和方法的一组对象的抽象的集合(一个类对应有多个对象)。
    2. 类又是对象模板
  • 对象
    1. 对象是类的实例,是具体的,真实存在的。
    2. 对象必定具备类的属性和行为。
  • 类与对象的关系
    • 类是对一类事物的描述,是抽象的。
    • 对象是一类事物的实例,是具体的。
    • 类是对象的模板,对象是类的实体。

例如:人类,能吃饭,睡觉。小明也能吃饭,睡觉。

面向对象和面向过程的区别

例如 洗衣服

  • 面向过程:把衣服脱下来–>找一个盆–>放点洗衣粉–>加点水–>浸泡10分钟–>揉一揉–>清洗衣服->拧干–>晾起来
  • 面向对象:把衣服脱下来–>打开全自动洗衣机–>扔衣服–>按钮–>晾起来
    区别:
    • 面向过程:强调步骤。
    • 面向对象:强调对象,这里的对象就是洗衣机。

面向对象的三大特性

  • 封装
      将对象的成员变量、方法进行保护隐藏细节并绑定,提供公共的访问接口(get、set方法),保证一定安全性;构成一个不可分割独立的实例对象。
    • 优点:
      • 复用
        许多共有重复的代码能够通过抽取封装一个类成员方法,达到复用代码的目的;
      • 解耦
        当复杂的逻辑代码杂糅在一起,耦合度很高,不符合开-闭原则。通过抽取封装代码,达到解耦,拓展功能更易,不会影响原有逻辑;

编写的方法就是对实现细节的封装,编写的类就是对数据和操作数据的封装,只提供最简单的接口

  • 继承
      继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类;得到继承信息的类被称为子类。
      子类能有自己本身的功能不会影响到父类,所以继承让变化中的软件系统有了延续性和拓展性。
    • 优点:
      • 拓展
      • 复用
      • 让类与类之间产生关系,是多态的前提
    • 缺点:
      向上转型是安全的,而向下转型则是有一定风险的。 PS:Instanceof 可以来防止异常风险

因子类继承于父类,使用父类的程序也能使用子类。即子类就能当做父类,让父类被复用,而子类又在父类基础上增加新的行为,也能在父类的基础上对父类原有功能进行增强。

  • 多态
      指同一个方法,不同的对象有不同的实现形式。
    • 编译时的多态
      • 重载(Overload):方法的参数不同,方法名相同。
        指在编译期传入参数时就确定好具体调用的实现方法。
    • 运行时的多态
      • 重写(OverWrite):方法名、参数、返回值也相同,仅执行的方法体不同。
        指只有程序运行时期才会知道具体执行的方法。
        具体实现步骤:
        1.子类重写父类[父接口]的方法
        2.父类[父接口]引用指向子类(不同的子类对象,会有不同的表现形式)

例如猫吃鱼,老虎吃肉,都是吃的行为,表现出不同的形式,即多态。

面向对象的基本原则

单一职责原则(SRP)

  • 一个类应该仅有一个引起它变化的原因

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责。—《大话设计模式》

开放封闭原则(OCP)

  • 对拓展开发,对于更改是封闭的
  • 遵循开发-封闭原则进行设计和开发系统,能带来可维护、可拓展、可复用、灵活性好的系统架构

无论模块多么封闭,都会存在无法对之封闭的变化,不可能完全封闭,那么就需要对那些变化做出抽象出抽象类或接口隔离同类变化,等到变化时立即采取行动。
“面对需求,对程序的改动是通过新增代码进行的,而不是更改现有的代码” —《大话设计模式》

依赖倒置原则(DIP)

  • 高层模块不应依赖低层模块,两个都应该依赖抽象
  • 抽象不应该依赖细节,细节应该依赖于抽象
    个人简单的理解的话就是面向接口编程,不针对实现编程。

里氏替换原则(LSP)

  • 子类型必须能够替换掉它们的父类型

软件实体如果使用的是一个父类的话,那么一定适用于其子类而且察觉不出父类对象和子类对象的区别。—《大话设计模式》

个人理解为就是面向对象中的继承,继承相当于是里氏替换原则的具体实现。

接口隔离原则(ISP)

  • 客户端不应该依赖它不需要的接口;
  • 一个类对另一个类的依赖应该建立在最小的接口上。

建立单一接口,不建立庞大的接口,细化接口,接口中的方法尽量少。也就是要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的约定,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

迪米特法则(Law Of Demeter)

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

  • 根本思想:强调类之间的松耦合!!
    类直接的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。即信息隐藏隔离更有利于解耦。

组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)

  • 组合关系:强调部分和整体,一种强的“拥有”关系,就像鸟和翅膀。PS:个人理解话就是内部类吧
  • 聚合关系:强调是包含,一种弱“拥有”的关系,就像鸟群和小麻雀。PS:个人理解就是集合和集合里的元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值