-面向对象分析设计经验:谁用于数据,谁就对外提供操作这些数据的方法。
典型案例:
人在黑板上画圆。
分析:
共有三个对象:人、黑板、圆。动作:画
画圆需要圆心和半径,圆心和半径都是圆的属性上,圆拥有数据,所以圆对象提供画圆的方法
圆在黑板上,黑板拥有数据,搜易对外提供访问圆的方法。
列车司机紧急刹车:
分析:
共有两个对象:车、司机。动作:刹车
刹车需要摩擦车轮使车轮停转,抱死,车轮和抱死系统都在车上,车拥有数据,所以车对象提供刹车的方法。
交通灯管理系统:
需求:交通灯灯需要红、绿,需要红的时候下一个灯绿,有间隔时间控制等转换。车在路口上有左转、右转、直行,通过路口,有通过路口的时间。对象:
交通灯:有红绿、下一个灯的数据,考虑现实情况,相反方向的灯一样,所以还有相反方向的灯的数据。
控制系统:间隔时间控制灯转换,控制系统中有灯数据,以及转换的时间。
路:左转、右转、直行。由于车没有自己的数据。只有通过路口的时间,所以把通过路口的时间放在路对象上,路上有车数据,绿灯时间隔一秒通过前面的第一辆车
设计:
路:设计一个表示路线的类:Road。
路口的一个方向,有三个路线(左转、右转、前行),共有四个路口,所以有十二条路线,十二个Road对象。
每条路线都有车辆,用集合存储,随机往路线上增加车辆,添加到集合中,当本路线的灯为绿时每秒通过一辆车,从集合中删除。
所以Road类中要定义灯的对象、一个集合用于存放车辆、随机增加车辆的功能、每秒判断一次等是否为绿,为绿时从集合中删除一辆车
交通灯:设计一个表示交通灯的类:Lamp。
每个交通灯都有两个状态:亮(绿)或不亮(红),需要有变亮的方法,下一个灯的数据,当前灯变黑下一个灯变亮的方法,并且能返回当前状态。
总共有十二条路线,每条路线有一个灯,所以有十二个灯,右转的路线不受等的控制,但为了采用统一的处理方式,设置四个右转的灯,设置为常亮(绿)。
除了右转的四个灯外,相反方向的路线灯状态是一样的,所以其他八个灯两两成对,可以分为四组,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对应的灯则随之一同变化。所以需要一个变量记录相反方向的灯。
管理灯状态的系统:设计LampController一个类表示:类里有定时让当前绿灯变红的方法。