简要笔记
- 功能分解, 以最小函数分析问题, 最后组合起来解决问题.
- 通过"名词"和"动作"发现对象, 对象对自己负责.
- 责任转移.
- 视角(抽象为概念;抽象成员及方法为规格;派生类为实现) .
- 继承可以实现代码重用,在使用时,必须遵守is-a;组合也是重要方法之一,比继承优先考虑使用.
- 分层设计主要为了实现“高内聚,低耦合”、逻辑复用、设计分工:对象尽量封装,以最少的窗口提供服务
- 接口是一种契约,上层与下层之间的约定。什么时候使用,就是在上层使用下层时,如果可能会出现变化点,则必须由接口介入它们之间。
- 多态可以引用父类指向子类, 实现可扩展性.
- OOA (面向对象分析:建立模型):
- 在客户需求中确定问题域, 在概念上认识问题域.
- 在问题域中, 发现并描述涉众对象.
- 进一步建立涉众对象之间的关系.
- 与客户沟通, 确认自己的理解.
- 细节不在这认识.
- OOD (面向对象设计:实现模型):
- 设计是涉众对象向类进行抽象的过程,它拥有处于当前问题域中的属性和行为, 以及类之间的关系.
- 属性: 就是说 什么什么是什么什么.
- 行为: 就是说 什么什么能被什么什么.
- 关系: 就是说 什么与什么能完成什么什么
- 设计是一个逐步理想的过程,也是对类的认识从浅到深的过程.
- 不断发现和优化分离对象的职责,以及修改本质性的属性和行为,逐步使对象趋向于稳定,而对不确定的因素可以进行抽象隔离.
- 对象有自己基本的特征和行为,是以生俱来的.但又在实际中承载多重角色,不同的角色又赋予不同的特征和行为.因此在分析对象时:
- 把对象直接设计成当前角色对象,拥有自身的基本的特征和行为,且结合角色的特征和行为为一体.
- 先把对象设计出基本的特征和行为, 再设计出角色对象的特征和行为, 然后把基本对象赋予角色对象.
- 依赖注入:
- 确定依赖对象
- 抽象依赖对象为依赖接口
- 把由自身创建依赖对象的方式转换为由使用者创建依赖对象并注入的方式.
- 可使用 Unity 实现依赖注入, 步骤: 创建容器、注册接口映射和获取对象实例.
- 变量的生命周期和作用域
- 生命周期是变量从创建到释放的时段,是时间的概念.
- 声明-创建-赋值
- 作用域是变量起作用的区域,是空间的概念.
- 通常在声明的大括号之内有效
- 生命周期是变量从创建到释放的时段,是时间的概念.
- 设计模式:只是一种问题的解决方案和经验的总结,运用得当,则可以事半功倍。
- 设计原则:在任何设计中,都必须以原则为基础,这样才能把设计引向设计模式。
- 创建型模式(Creational Patterns):解决对象如何产生的问题(Factory Method,Abstract Factory,Singleton,Builder,Prototype)
- 结构型模式(Structural Patterns):解决对象如何组织的问题(Adapter,Bridge,Composite,Decorator,Facade,Flyweight,Proxy)
- 行为型模式(Behavioral Patterns):解决对象之间关系的问题(Chain of Responsibility,Command,Interpreter,Iterator,Mediator,Memento,Observer,State,Strategy,Template,Visitor)
- 当一个类依赖另一个类时,则两类就会构成“耦合”,如果一个类大量使用另一个类的方法和属性时,则为“高耦合”,这样另一个类的修改将完全受约束。
- 哪里耦合, 就在哪进行抽象编程, 怎么知道哪里耦合, 就看功力了, 如: 两个对象A,B之间存在具体依赖, 那就在它们之间加入抽象接口C,进行解耦, 并且C对A是要属于依赖注入的. 这里要注意的是不要把B的具体实现直接作为注入对象, 而是要把B中的C注入到A中, 这样 A跟B 就完全解耦. class A{IC ic_; public A(IC ic){ic_=ic;}} class B:IC{...} class Client { void Main(){ IC ic=new B(); A= new A(ic); }}
- 场景是角色活动和表演的场合与环境,也可以说是对象聚合的服务类。服务类规范允入的接口,只要实现的对象皆可进入。这样的服务类是解耦的,可测的。