面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
几个典型的案例:
·人在黑板上画圆:有人对象、黑板对象、圆对象,画圆这个动作必须用到了圆心坐标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)
分享到:
相关推荐
Labview面向对象编程快速入门
Java面向对象程序设计,内含PPT详细课件,每个章节的详细例子代码。是学习Java基础非常实用和高效的资源。能够帮助你JAVA快速入门。
Python+小白+初学者+快速入门+面向对象程序设计
让你快速掌握面向对象程序设计灵魂。。。。。。
DELPHI快速入门教程 DELPHI基础教程 目录 第一章 Delphi快速入门(一) 第一章 Delphi快速入门(二) 第一章 Delphi快速入门(三) 第一章 Delphi快速入门(四) 第一章 Delphi快速入门(五) ...
全书分为四个部分,首先介绍了C#语言和面向对象程序设计的一般原则,可作为C#程序设计的快速入门教程;然后分别讲述了创建型模式、结构型模式和行为型模式。每一类设计模式又包括若干种具体模式,共有23种。在介绍每...
Visual C++ MFC 简明教程 快速入门 Visual C++ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分 利用具有面向对象特性的 C++ 来开发出专业级的 Windows 应用程序。为了能充分利用这 些特性,你...
它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language),是当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序...
对于C#初学者来说是本不错的入门书籍,文章分五部分: 第一部分:C#语言概述 第二部分:C#程序设计 第三部分:面向对象的C# 第四部分:深入了解C# 第五部分:附录
3 IOC:控制反转,谓之“依赖关系的转移”,如果以前都是依赖于实现,那么现在反转为依赖于抽象吧,其实它的核心思想就是要面向接口编程,至于何谓接口何谓抽象,以及它们的好处,多看看设计模式吧,这里就不费口舌...
它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发...
ython 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python...
Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx Java SE编程入门教程 java包装器(共9页).pptx Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java ...
在学习MFC之前,你必须对C++的 “类和对象有一定的认识和理解,因为MFC就是C++完全的面向对象设计,它里面封装了好多类,我们只要调用就OK,就像C语言调用库函数一样,直接使用,这就是C++
第一章 Delphi快速入门(一) 第一章 Delphi快速入门(二) 第一章 Delphi快速入门(三) 第一章 Delphi快速入门(四) 第一章 Delphi快速入门(五) 第二章 Delphi面向对象的编程方法(一) ...
四、C#中的面向对象 五、数据类型; 六、流程控制语句; 七、变量和常量; .......... 第四部分:深入了解C# .......... 接口; 文件操作; 注册表编程; 版本控制; 代码优化; 第五部分:附录 ........ 关键字; ...
tp3.2.3构架快速入门,ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发 布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体 ...
Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx Java SE编程入门教程 java包装器(共9页).pptx Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java ...
C#快速入门教材第一部分:c#概述 第二部分:c#程序设计基础 第三部分:面向对象C# 第四部分:深入了解c#