Java 交通灯的面向对象的分析和设计(一)

来源:互联网 发布:软件计算工程造价步骤 编辑:程序博客网 时间:2024/06/14 07:11

画图可以帮助理解和分析问题。

 

面向对象设计一个重要经验:

谁拥有数据,谁就对外提供操作这些数据的方法

需要思考出事物本质

 

案例1:

人在黑板上画圆。三个对象人,黑板,圆。画圆的动作属于哪个对象上的方法?

画圆需要圆心和半径,数据属于圆。所以方法需要写在圆对象里

 

案例2:

列车司机刹车。刹车的动作属于谁的方法?

列车司机是方法的请求者,刹车的具体操作属于列车内部的行为。所以刹车方法属于列车

 

案例3:

售货员统计票据金额。统计在售货员上,还是在票据上?

金额属于票据,所以方法在票据上。

 

案例4:

人关门.关门的动作属于人还是门?

锁闩的闭合是门提供的。人是动作的发起者,而门是动作的实施者所以是门。

 

总结:

谁是动作的具体实施者,并且该数据属于该对象的属性。方法就属于谁。

对象中有数据,内部应该有其提供处理的方法。

 

-----------------------------------------------------

交通灯系统分析

 

初步系统对象:

红绿灯,红绿灯控制系统,汽车,路线。

 

当汽车看到自己所在路线的灯变绿时,是否可以穿过?

不是,要确认前方无车时才行穿过。

 

判断是否有车,该问哪个对象?

问路,路中存着车的集合。

该路有增加和减少车辆的方法

 

再分析需求

不是体现车辆移动的过程,是捕捉车辆穿过路口的过程,

即捕捉路上减少一辆车的过程。

因此车不需要单独设计成一个对象,用字符串表示就可以。

 

 

 

路,路上有集合,集合里装着车,路看自己的红绿灯,如果绿了就把第一辆车取走。路有个随机方法,在自己的末尾加车。

灯,要变绿变红需要一个控制系统运作。

 

去掉汽车,最终需要三个对象。

--------------------------------------------------------------------------------------------------------

 

 

加深面向对象的认识

案例学习:

小球从绳子的一端移到另一端

小绳子的本质:为球的滚动指定方向。

需要有个方法获得下一个点,两点成一线。

 

class Rope{

          private Point start;

          private Point end;

          public Rope(Point start,Point end){

                    this.start=start;

                    this.end=end;

         }

 

          public Point nextPoint(Point currentPoint ){

                    /*通过两点一线的数学公式可以计算出当前点的下一个点,

                       这个细节不属于设计阶段要考虑的问题,

                       如果当前是终止点,则返回null,如果不是线上的点,则抛出异常

           }

}

 

class Ball{

          private Rope rope;

          private Point currentPoint;

          public Ball(Rope rope,startPoint){

                  this.rope=rope;

                  this.currentPoint=startPoint;

          }

 

          public void move(){

                 currentPoint=rope.nextPoint(currentPoint);

                 System.out.println("小球移动到了"+currentPoint);

          }

}

 

情景2:

两块石头磨成石刀,石刀可以砍树,砍成木材,木材做成椅子。

StoneKnife=KnifeFactory.createKnife(stone one,stone two);

material=StoneKnife.cut(tree);

chair=ChairFactory.makeChair(material);

 

 


以上内容来自张孝祥老师的视频课程