九月份的读书计划:系统的读完<<thinking in java>>,<<人月神话>>
抽象:所有编程语言都提供抽象
问题空间<->面向对象设计方法<->解空间
通过面向对象的设计方法将问题空间和解空间更加统一的映射在一个描述思想内,是问题的抽象更灵活和强大
对象有状态:对象的属性
行为:对象的对外所见的方法
标示:语言级别上通过为内存中的唯一地址来标示对象;但在业务逻辑中,将状态和行为相同的类的实例看作为同一对象和副本,这个时候通过oid(对象表示符)来唯一确定一个对象,同时修改object的equals,hashcode方法
类是一种数据类型,解决特定问题的数据类型,而浮点型数据类型是为了表示机器的存储单元而设计的元类型,有点像在api上开发应用程序
如何在问题空间的元素与解决空间的对象之间建立一种对应关系和一对一映射
领域模型 <-> 类图
what to do <-> how to do
1.对象提供服务
当开发程序或者分析一个程序的设计时,理解对象的最佳方式是把它们当作“服务的提供者”,而这些对象要完成这些服务又该用那些对象呢(划分的原则是逻辑相对独立性),当然有些功能和类是已经存在与第三方的类库中,比如很多开源的类库
2.内聚性和隐蔽实现控制访问权限
这样的好处是保护实现内部减少bug,分离接口和实现,更改内部实现而不影响外部特征
3.接口
暴露的对外行为特征,接口是一种数据类型,任何实现此接口的类均可被视为接口类型而同一行为方式
4.继承
抽象类和派生类,从实现上讲属于代码级的共享方式和静态编译,从设计上讲,有利于概念的清析划分和抽象
5.多态
重构和精炼代码,使代码有更好的可读性而不需要if类型判断。多态依赖于继承,如何在设计中更好的使用?
系统设计的两个原则:
(1)针对接口编程而不是针对实现编程
不将变量声明为某个具体类而是声明为让他遵循抽象类接口,减少系统各部分实现的相互依赖和提供复用,更好的分离代码
(2)优先使用对象组合,而不是继承
继承可以被称为“白箱复用”,父类的内部细节对子类是可见的。多态性的优点可以通过接口来体现。
面向接口的设计和对象组合的设计有助于保持每个类被封装并集中在单个任务中,并会保持类和类的继承层次较低而不可控。基于对象组合设计会有更多的对象(而有较少的类),且系统的行为将依赖于对象间的关系而不是定义在某个类中