软件系统设计的复杂性
例如:建筑商不会在盖好的100层楼里要求加入一个地下室,但这在软件领域确实很常见的。根本原因就是软件系统设计中面临频繁的需求变化,客户对象需求的变化,平台的变化等,这也是软件系统复杂的原因。
解决方法一般两种:
1是分而治之,对应于面向过程的语言,如c语言
2是抽象,既然不能全部掌握复杂的对象,我们选择忽视对象非本质的细节,而去处理泛化和理想化了的对象模型。
程序员向下应具有的两种思维。
底层思维:
如何把握机器底层,从微观理解对象构造。
1.语言构造 2.编译转换 3.内存模型 4.运行时机制
抽象思维
将我们周围的世界抽象为程序代码。
1.面向对象 2.组建封装 3.设计模式 4.架构模式
深入理解面向对象
向下:深入了解三大面向对象机制。
封装:隐藏内部实现。继承:复用现有代码。多态:改写对象行为。
向上:深刻把握面向对象所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是好的面向对象设计。
重新理解面向对象
1.理解隔离变化:面向对象的的构建方式更能适应软件系统的变化,能将变化带来的影响力减为最小。
2.各司其事,面向对象的方式更强调各个类的责任,由于需求变化导致的新增类型不应该影响原来类型的实现。所谓各司其职。
3.什么是对象,从语言实现层面上说,对象封装了代码和数据。从规格从面上说,对象是一系列可被使用的公共接口,从概念层面上说,对象是拥有某种责任的抽象。