面向对象就是对现实世界进行建模,它的基石是封装、多态、继承、组合。
初读本书,感觉作者只是在泛泛而谈;再读本书,发现原来肤浅的是自己。作者写作本书是为了将封装、多态、继承、组合这四个概念及相互间的关联阐述清楚,而读者明了了这四个概念也就洞悉面向对象的本质——建模。作者只是定义了“接口”,得靠读者自己去“实现”。
类是创建对象的蓝图,对象有状态与生命周期(即:属性与方法),而数据与操作数据的方法被封装到单个实体中。
类不可能孤立地存在,对象与对象之间通过接口进行交互。封装分离了接口与实现,接口是暴露出的方法签名,用户不需要关心接口背后的具体实现。用户接口应当最小化,在接口设计合理的情况下,实现的修改不应该影响接口。
多态是指不同的对象对相同的消息有着不同的响应。契约是要求开发人员遵循API规格要求的一种机制,抽象类与接口实现了契约。
只有通过继承与组合,才能实现代码重用(用现有类构建新类)。继承是is-a关系,组合是has-a关系。继承弱化了父类与其子类之间的封装,子类应当是父类的特化,从而使修改父类所造成的影响可预期。组合可以分阶段构建系统及子系统,并独立地测试和维护这些系统,从而降低构建系统的复杂性。组合可分为聚合和联合,各个对象间有基数关系。聚合是指复杂的对象由其他对象组成,而联合是指一个对象需要其他对象的服务。
类的职责应当单一,只有抽象的接口才具备可重用性,构造函数应当把对象设置为安全的初始化状态,设计合理的异常处理机制。
文摘
稳定的复杂系统通常具有一定的层级结构,每个系统由更简单的子系统构建而成,这些子系统又由更简单的子系统构建而成。
稳定的复杂系统是可分解的。
稳定的复杂系统往往由不同类型的子系统以不同的方式组合而成。
可工作的复杂系统往往是从可工作的简单系统演化而来。