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);
以上内容来自张孝祥老师的视频课程
- Java 交通灯的面向对象的分析和设计(一)
- Java面向对象的设计和分析
- 黑马程序员_交通灯管理系统_面向对象的分析和设计
- 浅谈面向对象的分析和设计
- ooad面向对象的分析和设计
- OOAD:面向对象的分析和设计
- 面向对象分析和设计(续一)
- Qt面向对象的设计( 一)
- 面向对象的设计原则(一)
- 面向对象的设计模式(一)
- 面向对象的设计原则(一)
- 面向对象的分析和设计-抽象出对象
- 黑马程序员 十七、面试题之交通灯管理系统—面向对象的分析与设计、Road 类、Lamp 类、LampController 类、MainClass类)
- (一)JAVA入门--面向对象和类的概念
- Exercise 43:基本的面向对象的分析和设计
- 习题43 基本的面向对象分析和设计
- exercise 43 基本的面向对象分析和设计
- Java-面向对象的分析
- Android用MediaRecorder实现MPEG4视频监控【转】
- discuz论坛与其它网站登录注册整合
- 如何安装并使用Windows Symbol
- Linux环境变量
- (5)设计模式笔记[原型模式]
- Java 交通灯的面向对象的分析和设计(一)
- Cast on a "float" sequence throws InvalidCastException
- Linux系统移植
- 搞ACM的你伤不起[转自RoBa]
- ArcGis flex 应用GP 实现最短路径
- android用于打开各种文件的intent
- PSTN电话通信的详细过程
- (6)设计模式笔记[Builder模式]
- (索引)Android SDK 2.2 开发环境安装