面向对象设计经验


 

一、面向对象设计经验

       面向对象设计经验:谁有数据,谁就提供操作数据的方法。

 

二、例子体现

1.用面向对象的思想设计:石头磨成石刀,石刀可以砍树,树变成木材,木材做成椅子。
 分析:
 涉及对象:石头Stone, 石刀StoneKnife,树Tree,木材Wood,椅子Chair
 
 1)石头磨成石刀。石头(数据)不能自己磨成石刀,否则自己就没有了。
    可以创建新的类KnifeFactory,并在类中定义方法,接收石头,然后返回石刀
    StoneKnife = KnifeFactory.creatKnife(stone);
 2)石刀砍树。树变成木材
     wood = Stone.cut(tree);
 3)木材做成椅子。
    木材不能自己变成椅子。所以也需要另外的类来操作木材。
     chair = ChairFactory.makeChair(wood);

 

2.人在黑板上画圆
 对象:人,黑板,圆
 画圆,需要知道圆心,半径,这些数据是“圆”这个对象所拥有。
 所以,画圆这个动作,是由圆来操作数据而得的。

 

3.司机要刹车
 对象:司机,车
 刹车这个动作是在车上执行的,司机只是负责给车这个信号,最后还是由车来执行刹车动作。
 所以刹车这个方法定义在车对象中。

 

4.售货员统计票据上的总金额。
 对象:售货员。票据
 金额这个数据是票据所拥有的, 所以统计这个方法应该定义在票据中。

 

三、应用案例

需求:用面向对象的思想实现:小球从绳子的一端移动到了另一端。
 
分析:有两个对象,绳子,小球。
     绳子:1.绳子要初始化长度,构造方法要接收两个参数:起点和终点。
                2.要创建一个方法,让小球根据当前位置获取下一步该走到的位置。
                   绳子有数据,所以绳子要提供这样一个方法来操作位置的数据。
    
    小球:1.小球要和绳子关联在一起,所以要将绳子对象传入小球的构造函数,还要获取当前位置。
               2.小球要移动,得有方法控制小球。绳子告诉它要运动到哪儿,它就执行移动的方法。代码实现

1.Ball类

<span style="font-size:18px;">import java.awt.Point;

//小球
public class Ball {

	private Rope rope;
	private Point currentPoint;
	
	public Ball(Rope rope,Point currentPoint){
		this.currentPoint = currentPoint;
		this.rope = rope;
	}
	
	public void move() {
		currentPoint = rope.nextPoint(currentPoint);
		System.out.println("小球移动到了" + currentPoint);
	}
}
</span>


2.Rope类

<span style="font-size:18px;">import java.awt.Point;

//绳子对象
public 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) {
		
		Point nextPoint = null;
		
		/*通过两点一线的数学公式可以计算出当前点的下一个点,如果当前点是终点,则返回null。
		如果当前点不是线上的点,则抛出异常。*/
		
		return nextPoint;
	}
	
}</span>



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值