快速入门面向对象设计
来源:互联网 发布:数据库迁移解决方案 编辑:程序博客网 时间:2024/06/06 12:21
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
几个典型的案例:
·人在黑板上画圆:有人对象、黑板对象、圆对象,画圆这个动作必须用到了圆心坐标x、y和半径r,而x、y、r是圆内部的数据,圆拥有这些数据,所以这个动作时圆的,而不是黑板的,更不是人的。
·列车司机紧急刹车:有列车对象和司机对象。刹车动作是列车执行的。
·售货员统计收获小票的金额:有售货员对象,小票对象。商品的金额在小票上,所以统计金额的行为属于小票。
·你把门关上了:有人对象、门对象。关门的行为属于门,因为门旋转,撞到门框然后门锁锁上了。
学员的两个面向对象的面试题,用面向对象的方式设计如下情景。
“两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子”,
“球从一根绳子的一段移动到了另一端”,
用面向对象的方式设计如下情景:
·球从一根绳子的一段移动到了另一端
/*有绳子和小球两个对象*/
//绳子给小球引导了滚动的方向,把绳子想成是由若干的点组成
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,startPint){//小球移动需要绳子,
this.rope=rope;
this.currentPont=startPoint;
}
public void move(){
currentPoint=rope.nextPoint(currentPoint);
System.out.println("小球移动到了"+currentPoint);
}
}
//小球和绳子是协作关系,小球移动时要问绳子要下一个点的坐标,因为绳子有点的坐标,所以返回下个点的坐标只能有绳子提供。小球移动是改变的小球的当前位置,所以移动这个动作由小球提供。--->谁有数据谁就有控制数据的方法。
·两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子
有 Stone对象,StoneKnife对象,Tree对象 ,Wood对象,Chair对象 五个对象。
两块石头磨成一把石刀,这个方法不是Stone对象自己提供的,否则Stone对象自己就没了,这个不可能的,也不是其他四个对象提供的,所以是有其他对象提供,假设有个石刀加工厂做的:StoneKnife=KnifeFactory.createKnife(store,store)
石刀可以砍树,砍成木材:这个方法有StoneKnife对象提供:Wood cut(tree)
木材做成椅子:这个方法也是由椅子加工厂完成 Chair=ChairFactory.makeChair(wood)
阅读全文
0 0
- 快速入门面向对象设计
- PHP面向对象编程快速入门
- PHP面向对象编程快速入门
- PHP面向对象编程的快速入门
- 面向对象设计入门者的书籍
- 用星际快速入门PHP面向对象编程(修订版)
- 用星际快速入门PHP面向对象编程(修订版)
- 将TinyXml快速入门的接口面向对象化
- 将TinyXml快速入门的接口面向对象化
- JQuery--JQuery面向对象编程快速入门-插件开发
- 编程语言入门及进阶、设计模式、面向对象书籍
- Java面向对象入门
- 面向对象入门
- 面向对象入门知识
- 面向对象入门
- 面向对象-入门
- Java面向对象入门
- js面向对象入门
- 影子页表 和 EPT
- Fat Jar Eclipse Plug-In(eclipse导出jar包)
- [poj2104]K-th Number 主席树
- mysql行转列
- BufferedWriter 和 BufferedReader通过流读取文件里的内容
- 快速入门面向对象设计
- 大数据:lxml解析html文件(网页)
- LSD-SLAM(2)关于tracking线程的目标函数的推导
- Myeclipse中struts.xml无提示解决方法
- Android——查看自己项目有多少行代码
- xml转json的两种方法
- JDK 7中的函数式编程思想
- OSI七层网络模型 TCP/IP 三次握手 四次挥手
- 推荐一款免费好用的Java反编译工具Java Decompiler