需求
假设你在一个会议上担当讲师,听课的人在课后还要去听其他课程,但他们不知道下一堂课的地点,你的责任就是,确保大家都知道下一节课去哪里上。
针对这个需求, 先来看下结构化方法的分析过程:首先获取听课人的名单,其次,对于名单上的每个人,讲师需要做如下事情:
- 找到他要听的下一堂课
- 找到该课程的听课地点
- 找到从你的教室到下一唐课的路线
- 告诉这个人怎么
对于这个分析过程,我们可以发现,当听课的人很多时,讲师会忙不过来的,导致这个问题的原因在于讲师承担了所有责任。知道了问题的症结所在,我们就可以对症下药了,即可以将讲师的责任分摊给学生。例如:在教室的门口贴一张地图,标出每个教室的位置和路线;告诉大家,下课后大家自己去看门口地图,找下一节课的位置。在这个过程中,讲师只需要对学生发出一个"笼统"的指令:去下一个教室,但是不用关系具体的细节。
除了上面这个优点之外,面向对象设计还有没有其他优点呢?答案是有!!还是上面那个栗子,只是需求内容发生了一点点变化:听课的学生中还有研究生助教,他们需要把本节课的反馈收集一下,先交给会议办公室,然后再去下一个教室。
对于这个变更需求,结构化的分析方法需要修改控制程序,即需要区分是研究生学生还是普通学生。而对于面向对象设计,根本不需要区分哪类学生,这是对学生这个抽象概念说:gotoNextRoom()。
总结
面向对象设计相比于面向过程设计的优点:
- 职责转移:把职责划分到合适的类中去,例如:将讲师的职责划分到学生中;把细节封装起来,例如:将讲师要做的具体细节封装到学生类中。
- 只对接口进行操作,例如:gotoNextRoom()。