1)关键的设计概念
软件的首要技术使命:管理复杂度。
在软件的架构层次上,可以通过把整个系统分解为多个系统来降低问题的复杂度。子系统间的相互依赖越少,你就越容易在同一时间里专注问题的一个小部分。精心设计的对象关系使关注相互分离,从而使你能在每个时刻只专注于一件事情。
保存子程序的短小精悍也能帮助你减少思考的负担。在最高抽象层次上工作,也能减少人的脑力劳动。
理想的设计设计特征:
最小的复杂度,如果你设计的方案不能让你专注于程序的一部分的话,这一设计就没有什么作用了。
易于维护
松散耦合,各个部分关联最小。
可移植性
层次性
设计的层次:
第一层,软件系统
第二层,分解为子系统或包。比如数据库,用户界面等。定义各个系统之间的通信规则,即一个系统怎么使用另一个系统。最简单交互一个子系统去调用另一个子系统中的子程序;稍微复杂一点就是包含另一个子系统中的类,最复杂就是继承另一个子系统的类。
第三层,分解为类
2)设计构造块:启发式方法
找出现实世界中的对象。使用对象进行设计的步骤:
1 辨识对象及其属性(方法和数据)。
2 确定可以对各个对象进行的操作。
3 确定对象对其他对象进行的操作。对象之间最常见的关系就是包含和继承。
4 确定对象的哪些部分为private和public。
形成一致的抽象。当你把一个东西称为"房屋",而不是木头,玻璃的组合体时,就是用抽象了。抽象的好处就在于使你能忽略无关的细节。
当继承能简化时就继承。当一项操作与具体子类无关时,这一操作就可以针对通用类型来进行。
隐藏信息。信息隐藏是减少重复工作的强大技术。在设计的所有层面上,都可以通过询问改隐藏些什么来促成好的设计决策。请养成问“我该隐藏些什么的习惯”。
找出容易改变的区域。目标应该是把不稳定的区域隔离出来,从而把变化所带来的影响限制在一个子程序,类或者包得内部。
软件的首要技术使命:管理复杂度。
在软件的架构层次上,可以通过把整个系统分解为多个系统来降低问题的复杂度。子系统间的相互依赖越少,你就越容易在同一时间里专注问题的一个小部分。精心设计的对象关系使关注相互分离,从而使你能在每个时刻只专注于一件事情。
保存子程序的短小精悍也能帮助你减少思考的负担。在最高抽象层次上工作,也能减少人的脑力劳动。
理想的设计设计特征:
最小的复杂度,如果你设计的方案不能让你专注于程序的一部分的话,这一设计就没有什么作用了。
易于维护
松散耦合,各个部分关联最小。
可移植性
层次性
设计的层次:
第一层,软件系统
第二层,分解为子系统或包。比如数据库,用户界面等。定义各个系统之间的通信规则,即一个系统怎么使用另一个系统。最简单交互一个子系统去调用另一个子系统中的子程序;稍微复杂一点就是包含另一个子系统中的类,最复杂就是继承另一个子系统的类。
第三层,分解为类
2)设计构造块:启发式方法
找出现实世界中的对象。使用对象进行设计的步骤:
1 辨识对象及其属性(方法和数据)。
2 确定可以对各个对象进行的操作。
3 确定对象对其他对象进行的操作。对象之间最常见的关系就是包含和继承。
4 确定对象的哪些部分为private和public。
形成一致的抽象。当你把一个东西称为"房屋",而不是木头,玻璃的组合体时,就是用抽象了。抽象的好处就在于使你能忽略无关的细节。
当继承能简化时就继承。当一项操作与具体子类无关时,这一操作就可以针对通用类型来进行。
隐藏信息。信息隐藏是减少重复工作的强大技术。在设计的所有层面上,都可以通过询问改隐藏些什么来促成好的设计决策。请养成问“我该隐藏些什么的习惯”。
找出容易改变的区域。目标应该是把不稳定的区域隔离出来,从而把变化所带来的影响限制在一个子程序,类或者包得内部。