面向对象设计 
变化是复用的天敌,面向对象设计最大的优势在于:抵御变化!
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、特性、代码与方法。
抽象 
对象是什么?
- 从语言层面来看,对象封装了代码和数据
 - 从规格面讲,对象是一系列可被使用的公共接口
 - 从概念层面讲,对象是某种拥有责任的抽象
 
抽象是,由于不能掌握全部的复杂对象,我们选择忽略它的非本质细节,而去处理泛化和理想化了的对象模型。
- 抽象主要是隐藏方法的实现,让调用者只关心有哪些功能而不是关心功能的实现
 - 抽象可以提高代码的可扩展性和维护性,修改实现不需要改变定义,可以减少代码的改动范围
 
在下面的示例中只要实现了 IStorage 接口的对象都可以被 User 使用。
ts
interface IStorage {
  save(key: any, value: any): void;
  read(key: any): void;
}
class User {
  constructor(public name: string, public storage: IStorage) {}
  save() {
    this.storage.save('userInfo', JSON.stringify(this));
  }
  read() {
    return this.storage.read('userInfo');
  }
}interface IStorage {
  save(key: any, value: any): void;
  read(key: any): void;
}
class User {
  constructor(public name: string, public storage: IStorage) {}
  save() {
    this.storage.save('userInfo', JSON.stringify(this));
  }
  read() {
    return this.storage.read('userInfo');
  }
}三大特征 
面向对象编程(OOP)的三大特性包括:封装、继承和多态。
- 封装,隐藏内部实现,确保数据的完整性和安全性
 - 继承,减少重复代码,提高代码复用性和可维护性
 - 多态,改写对象行为,可以编写更加通用、可扩展的代码,提高代码的灵活性