面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
几个典型的案例:
·人在黑板上画圆:有人对象、黑板对象、圆对象,画圆这个动作必须用到了圆心坐标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面向对象编程快速入门知识点详解 #### 一、类和对象的基本概念 在面向对象编程中,**类**是一种定义通用特性的抽象模型,它描述了一组具有相同属性和行为的对象。例如,在本例中提到的“汽车”类就定义...
《UML面向对象设计基础》是面向对象技术领域的一本经典入门书籍。它通过系统地介绍面向对象设计的基础知识、符号表示、发展历史、原理、优点和缺点,为读者提供了一个全面的、可操作的学习框架。无论是初学者还是...
这份"Delphi面向对象学习快速入门资料"提供了丰富的学习资源,帮助初学者快速掌握Delphi的面向对象编程技术。 随笔1:"类与对象的关系.txt"介绍了OOP的基础,即类和对象的概念。类是创建对象的蓝图,定义了对象的...
学习《UML实例教程-参考手册》不仅可以帮助初学者快速入门面向对象设计和UML,也能为有经验的开发者提供一个详实的参考资源,提升他们在软件开发过程中的建模能力和沟通效率。书中包含的“面向对象设计UML实践.pdf”...
本教程“Java面向对象的程序设计入门”将引导初学者进入这一领域。 首先,我们需要理解面向对象的基本概念。面向对象有三大核心原则:封装、继承和多态。封装是将数据和操作这些数据的方法绑定在一起,形成一个独立...
面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起。在 PHP 中,面向对象编程提供了类(Class)、对象(Object)、继承(Inheritance...
在现代软件开发中,面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用的技术,它通过将程序设计围绕“对象”来进行组织,使代码更易于理解和维护。对于初学者而言,理解OOP的概念可能有些抽象。本文...
本教程将深入探讨C#的基础知识,帮助初学者快速入门并掌握其面向对象编程的核心概念。 **一、C#基础** 1. **变量与数据类型**:C#支持多种基本数据类型,如整型(int)、浮点型(float/double)、字符型(char)和...
在这个教程中,讲师苏坤来自知名的教育机构传智播客,他将深入浅出地介绍面向对象编程的核心概念,帮助学员快速掌握这一重要的编程思想。 1. **面向对象编程(Object-Oriented Programming, OOP)**:面向对象编程...
《面向对象程序设计之C#版》是一本深入浅出、内容丰富的书籍,不仅适合初学者快速入门,也能帮助有一定基础的开发者进一步提升自己的技能。通过一系列生动有趣的例子和实践指导,本书有效地传达了面向对象编程的思想...
Python 快速入门 - 面向对象程序设计 面向对象程序设计是 Python 中的一种编程范式,它提供了一种组织代码的方式,使得代码更加模块化、可维护和可扩展。本章节将介绍面向对象程序设计的基本概念,包括类的概念、...
面向对象程序设计(Java)是计算机科学中的一个重要概念,它是一种基于对象的编程范式,以现实世界中的实体为模型,通过类和对象来抽象和模拟复杂问题。Java语言是实现这一编程思想的典型代表,它以其强大的跨平台...
"c++面向对象设计下载教学资源"这个压缩包可能提供了更直观、更易理解的教学材料,帮助初学者快速掌握面向对象编程的基本概念和技巧。 这个资源包很可能包含了丰富的实例代码、解释性的文字资料、可能还有互动式的...
总的来说,《C#学习:C_程序设计语言与面向对象基础精简教程》是一份全面且实用的学习资源,无论你是想入门C#编程,还是希望巩固面向对象编程基础,都能从中受益。配合源码和工具的实践,相信你将能快速掌握C#编程并...
ThinkPHP是一个轻量级、快速、简单的PHP开发框架,基于MVC设计模式和面向对象的编程思想,是PHP开发中非常流行的框架之一。 ThinkPHP5.0版本相较于以往版本,引入了很多新的特性,包括更灵活的路由管理、依赖注入、...
作为C语言的增强版,C++不仅保留了C语言的高效性,还引入了面向对象编程(OOP)的概念,如类、对象、封装、继承、多态等,以及模板、异常处理和STL(Standard Template Library)等现代特性。 本"快速入门课件全解...
《Visual C++面向对象与可视化程序设计》是深入学习C++编程和Windows应用程序开发的重要教材。本书主要针对那些希望通过Visual C++平台掌握面向对象编程和可视化应用开发的读者。在学习过程中,理解C++的核心概念,...
面向对象程序设计(C++//谭浩强版)是一本为初学者设计的...总之,谭浩强版的C++面向对象程序设计教程是初学者理想的入门资料,通过系统学习,你可以掌握C++的核心概念和编程技巧,为后续的软件开发打下坚实的基础。