黑马程序员Java培训、Android培训_交通灯系统笔记

时间:2021-06-08 00:13:52
  交通灯管理系统

在解说这个视频中,张老师特别提到了面向对象的一个重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。通过老师举列车司机紧急刹车和用手关门的例子让我深刻领会了这点,并且非常认同这点,但我对老师提到的人在黑板上画圆及售货员统计收获小票金额的例子有些个人异议,倒不是例子举的不对,只是认为老师解释起来比较吃力,讲课匆忙也不好给同学们解释清楚的。

       列车司机紧急刹车,人用手关门,这两个例子都很清楚的体现了“拥有数据的一方提供操作数据的方法”这个规律,刹车时,司机并没有具体操作怎么去刹车,而是由列车自己去完成的,人只是踩刹车给列车一个信号,或者说一个功能实现的请求,真正完成刹车的是拥有刹车系统的列车,只是列车是按照我们司机的指示操作刹车的而已;

       人用手关门,人自己没法关门的,是门自己通过自身旋转关上的,人只是给了操作信号,门接收到了这个信号,在人外力的协助下转动自己完成关门动作的。

       但是,人用粉笔在黑板上画圆这个例子却不好分清谁提供了完成画圆的方法,是圆么?个人认为不是,画圆的参数,直径和位置等等信息可是在人脑海中的,不是圆拥有的,完成画圆这个动作可是完完全全是由人完成的,更何况圆只是最后的结果,圆都没有出来呢,怎么提供操作方法啊?这个时候,是人既当了对象又当了操作对象的工具,人提供了画圆的数据也提供了画圆的方法动作,如果将这个例子改为,人用圆规在纸上画圆,那就很好说明“拥有数据的一方提供了操作数据的方法”这点了,要想画出圆,我们给圆规定个尺寸,圆规拥有画圆的半径尺寸后,在人力转动的协助下,圆规就可以在纸上画出圆了吧,圆规是实现画圆方法的主体,人是协助。

       同样的,售票员统计收获小票的金额这个例子,也是需要改进的,应改为,售票员用统计器统计出小票的数量,统计器拥有小票这个数据,统计器给出这个小票的方法——统计出总额。

在听视频的整个过程中,印象最深刻的是张老师分析这个交通灯系统实现的整个过程。他解决问题的思路和方法很是给我一种豁然开朗的感觉。

首先,分析这个交通灯系统,先按事件发展的时间顺序纵向分析过程,交通灯是怎么变化的,变化后路上的车行驶方向怎么变化的。在这个过程中,要去除重复性问题的考虑,简化问题,比如,主要就只需要考虑四个方向的灯亮灭问题,另外也只需要考虑两个方向的车辆通断变化问题。

其次,横向分析所要建立的各个模块如何实现,分别需要实现什么功能,先是设计了灯的类,先存储了各个灯的变化情况及其取值范围,这个过程分析的越仔细越准确,就越有利于我们选择出最合适的设计程序的方法,再者又设计了反映道路通断的Road类,并在这个类中依据灯变化情况提供操作车辆的方法。

最后是提供灯控制的类。

此外,在设计过程中,老师还不忘提点我们设计程序时候注意的一些小技巧,能体现自己实力的地方要会表现。

整个程序讲解过程中,张老师的思路非常清晰,顺序非常明确,本人很是受益。