2,设计(面向对象,封装数据)
3,技术(用新技术,简单安全高效)
4,总结(在设计上精准地找到对象,对象之间的合作形成系统;在编程上尽量使用新技术,新技术是对老技术的升级;)
设计前:
事物简介:路向按不交叉原则同行,车从某条路向(灯绿时)经过,路灯控制器控制当前路向灯的亮灭;
1,画图的意义
视觉化有助于想象力的扩展,加快捕捉事物规律规则的速度;
2,分析的结果
路线枚举:
S2N,S2W,E2W,E2S,//南直行和左拐;东直行和左拐
N2S,N2E,W2E,W2N,//北执行和左拐;西直行和左拐,与上对应;
S2E,E2N,N2W,W2S;//右拐常绿,没有对应灯,也没有下一个灯;
设计时:
复杂的事情,可以细化分工,让对象负责相关环节:
1,路线的属性和功能:让汽车经过,也就是来到路口,过马路,出下一个路口;是一进一出的过程;集合
2,路灯的属性和功能:对应路线的路灯,下一个路线的路灯,路灯的亮灭情况,亮灯功能和灭灯功能;亮灯时,
把对应的路灯亮起;当被灭灯时,把下一个方向的路灯亮起,并把对应的灯灭掉;
3,路灯控制器的属性和功能:当前所控制的等,定时连环灭掉当前的路灯;
找到关系:控制器控制灯,灯限制车行,车从十字路口的路线经过;
找到对象:Road,Lamp,LampController
车上路——集合add & remove
灯控车——12盏灯,4盏常绿,8栈分四对,成对亮或灭,四对连环切换;
控制器控制灯——调度执行线程,预定连环执行关掉当前灯的关闭任务,四对灯的轮流亮灯;
编程时:
要学会提高技术含量
1,(匿名)内部类访问外部类的同名变量时怎么写?Road.this.name;
2, 如何体现面向接口编程思想?声明接口,建立类对象 List<String> vechicles = new ArrayList<String>();
3, java5的新技术,线程池,java.util.concurrent.Executors.newScheduledThreadPool(int corePoolSize)
4, 随机数生成器:java.util.Random.nextInt(int n)
5, 连环执行控制器与匿名内部类的结合运用:scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
参考面试题,学会寻找规律:
两块石头磨成刀,用刀砍树得木材,用木材加工成椅子,强调刀被使用,所以刀是参数,不对,还是
两块石头磨成刀,刀能砍树,砍成木材,用木材加工成椅子强调刀的功能,所以刀是对象!
数据与数据的关系:常规的运算
数据与对象的关系:两块石头磨成刀
对象与对象的关系:用刀砍树得木材:木材是对象,构造函数接收树(变量)和刀(对象);
参数是材料,返回值是成品;方法是对象的功能;
老师的方法
StoneKnife = KnifeFactory.createKnife(stone1,stone2)
meteial = StoneKnife.cut(tree) (内部也调用cut方法)
chair = ChairFactory.makeChair(meteial)
我的方法有点麻烦
StoneKnife = KnifeFactory.createKnife(stone1,stone2)
meteial = MeteialFactory.createMeteial(StoneKnife,tree) (内部也调用cut方法)
chair = ChairFactory.makeChair(meteial)
总结:
面向对象编程:主函数面向对象,主函数建立Road对象和LampController对象 寻找对象思路:“的”字诀,是你的数据就封装到你身上;(路上的车)(灯上的颜色)(控制器上的时间) 车是不是对象?以上对象是否需要知道汽车的属性和功能?颜色类型和马力以及速度?不需要,所以不封装这些数据! 汽车不是对象,那么汽车是什么呢?不是对象就是数据,用字符串和变量表示就可以了(不是基本数据类型,就是引用类型)