记录生活中的点点滴滴

0%

面向对象

这一篇主要写一下面向对象的一些理论知识,最近在看设计模式之美,算是提炼一下精华吧,让脉络思维更清晰广阔一点吧!

面向对象(OOP):以类和对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现的基石

面向过程:以过程(或方法)作为阻止代码的基本单位,它最重要的特点就是数据和方法相分离。

面向对象相对于面向过程的优势如下:

  1. 对于大规模复杂程序的开发,程序的处理流程并非单一的一条主线,而是错综复杂的网状结构,OOP更能应对
  2. 面向对象相比于面向过程,更具有丰富的特性(封装、抽象、继承、多态),更加易扩展、易复用、易维护

有哪些看似是面向对象,实际是面向过程?

比如我们常见的MVC模型,它是贫血模型,domain类只有getter、setter方法,却没有相关的业务逻辑操作,典型的面向过程,而非面向对象!

贫血模型的升级:充血模型,领域驱动设计(Domain Driven Design,简称DDD)

贫血模型中,数据和业务逻辑被分割到不同的类中,重Service轻BO

充血模型中,数据和业务逻辑被封装到同一个类中,轻Service重BO

OOP的四种特性:

  • 封装:信息隐藏或者数据访问保护,类通过暴露有限的访问接口,授权外部仅能通过类提供的方式访问内部信息或数据
  • 抽象:封装主要讲如何隐藏信息、保护数据,那抽象就是讲如何隐藏方法的具体实现,让访问者只需要关心方法提供了哪些功能,不需要知道这些功能是如何实现的
  • 继承:子类继承父类,is 关系,可以实现代码的复用
  • 多态:指子类可以替换父类,在实际的代码的运行过程中,调用子类的方法实现,多态可以提高代码的扩展性和复用性

接口 vs 抽象类

抽象类更多的是为了代码复用,而接口更侧重于解耦

抽象类需要满足is继承关系

接口是一系列行为的一种抽象

基于抽象而非实现编程,为什么?

因为业务会不断变化,越顶层越抽象,越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化