黑马程序员--交通灯管理系统

----------------------android培训java培训 、期待与您交流! ----------------------

看到我们的学长因为工作而失去了女朋友,心里也是很难过,觉得很不公平,我们程序员可能会因为工作中的事而缺少时间去陪自己关心的人。我觉得我们应该做的就是尽可能的提高自己解决问题的能力,能够花最少的时间去解决问题,这样才能够留出更多的时间和精力。

下面总结一下张老师讲得交通灯管理系统。

看了张老师讲解他分析这个系统的过程,给我最大的感触就是在一个项目中起关键作用的不是具体写代码的那些人,而是能够总体把握整个项目,抽象出项目模型的那个人。一个项目如果刚开始对项目的模型没有分析好,整个设计的过程就会变得非常的复杂,很有可能就会导致最后项目的无法顺利完成。我觉得做为一个学习者,学习别人的某一个具体的类的使用还是次要的,学习别人分析问题的思路才是重要的,以后在这点要多向前辈们学习。

  • 首先看一下这个交通灯管理系统的项目需求

  • 对于车辆通过路口的情况分析:如图

1.       对于车辆移动方向的分析

直观上讲总共有12个方向,真正需要我们的信号灯管理系统进行控制的有哪些方向呢?

(1)直接向右拐的可以直接通行,我们不需要对这些方向进行控制

(2)对S2N和N2S,S2W和N2E,E2W和W2E,E2S和W2N的控制都是一样的

最后得出结论:真正需要我们的信号灯管理系统进行控制的只有①②③④四个方向。

这样问题就大大简化了。

2.       对车辆通过路口的情况进行分析

一个车辆要通过路口,需要两个条件

(1)它需要行驶的方向上面的灯是否是红灯

(2)它是否是所在的那条路上的第一辆车,因为第一辆车才可以通过路口

刚开始我对第二个条件不太理解,不是第一辆车也可以往前走啊,后来我有点想明白了,我们只是对十字路口的交通进行管理,只需要考虑每个路上的第一辆车就可以了,他是否可以移动,可以移动就让他消失,然后后面的车就会补上来,这样我们思考问题的模型就简化了。

(有时候想的太多会把问题搞复杂,抽象出某个模型可以把问题简化,哎,看来自己在这方面还是有待提高呀!)

3.       对于交通灯的分析

既然我们的车辆是通过交通灯来判断是否可以移动的,那么在每个方向上就应该有一个交通灯,刚开始可能会觉得人家项目需求中说向右拐是不受交通灯控制的(刚开始我也是这么想的)。我们可以认为向右的交通灯是常绿的,这样我们的整个编程模型才能够统一,我觉得张老师的对这个问题的处理非常好,统一编程模型可以大大简化我们整个系统的设计,如果我们为了这么一点小的差异,而改动其他的逻辑判断,那么程序的设计就会变得复杂,对于一些看起来不是很符合我们的模型的情况,如果我们稍加改动能够将其统一到我们已经设计好的模型之中,那么我们的设计就会大大的简化。

4.       分析项目中需要使用的对象

  • 交通灯:有颜色属性,可以变红,也可以变绿
  • 路:车辆消失和增加,实际上就是在路上减少和增加车辆,所以车辆就是路中的一个属性,可以用一个数组来表示。车辆的增加和减少就是由路提供的一个增加和减少车辆的方法。谁拥有数据,谁就提供对这些数据进行操作的方法。
  • 车辆:由于车辆在这里面只是路中的一个数据,用于增加和减少,并没有什么其他的属性和方法,此系统又是一个模拟系统,为了简便起见,我们可以将它简单的用一个字符串来表示,不为他再单独的设计一个对象了。
  • 交通灯控制器:对于12个交通灯的红绿切换等进行控制的还需要有一个专门的控制器,所以我们还需要一个交通灯控制器。

主要的对象也就是交通灯,路,交通灯控制器这三个对象。

这样对整个项目的分析都差不多了,其他的编程细节可以看老师讲的视频,源代码和PPT,我想只要这个模型理解了,具体的编程代码就看你的编程功底了。

学习这个项目给我的最大收获就是如何根据一个项目的项目需求按照面向对象的思想抽象出模型,包括项目中用到的重要的对象,对于某些功能应该由哪个对象来提供,这里有一个重要的原则:谁拥有数据,谁就对外提供操作这些数据的方法

 

这里再总结几个典型的模型:

(1)人在黑板上画圆,画圆的方法由谁提供?

应该由圆自身提供,因为圆有坐标和半径这些数据,所以画圆的这个方法应该由圆自己来提供,人只不过是调用了这个方法而已。

(2)人把门关上,关门的这个动作由谁来提供?

应该由门来提供,因为关门需要绕轴旋转,撞击到墙后停止,这些动作都是门自身的动作,所以应该由门自身来提供,人只不过是调用了门的这个方法而已。

(3)交通灯之间的切换控制的方法由谁来提供?

我们需要对这些交通灯对象之间的切换进行控制,这些交通灯自身来完成切换的这种逻辑控制是比较困难的,所以需要我们抽象出一个进行控制的类来对这些交通灯的切换进行控制。有时候对于某一个对象的操作不能由这个对象提供的话,就需要抽象出另一个对象,来对这个对象进行操作,这种情况还是很常见的。

---------------------- android培训java培训 、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭