面向对象设计经验

来源:互联网 发布:视频cms系统版权 编辑:程序博客网 时间:2024/06/03 22:15


 

一、面向对象设计经验

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

 

二、例子体现

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>



 

原创粉丝点击