Oop 如何设计对象?
所以有很多方法可以构造对象(我在这里谈论的是OOP)。对于这个问题,我将使用OOP的经典“汽车”示例。基本上,当两种程序结构都能实现目标时,我如何知道何时将汽车作为一个对象,或何时将车轮作为一个对象Oop 如何设计对象?,oop,Oop,所以有很多方法可以构造对象(我在这里谈论的是OOP)。对于这个问题,我将使用OOP的经典“汽车”示例。基本上,当两种程序结构都能实现目标时,我如何知道何时将汽车作为一个对象,或何时将车轮作为一个对象 如何对对象的各个部分进行分类和归类,以确定它们是否更适合作为对象的简单属性或变量,或者它们是否真的需要成为对象本身?不要从对事物进行分类开始。似乎人们太渴望开始构建继承层次结构 写下具体场景的列表-你的应用程序将一步一步地做什么。一个对象模型只有在它做了你需要它做的事情时才有用——因此,从场景中开始
如何对对象的各个部分进行分类和归类,以确定它们是否更适合作为对象的简单属性或变量,或者它们是否真的需要成为对象本身?不要从对事物进行分类开始。似乎人们太渴望开始构建继承层次结构 写下具体场景的列表-你的应用程序将一步一步地做什么。一个对象模型只有在它做了你需要它做的事情时才有用——因此,从场景中开始回溯,看看你能从每个场景中摆脱哪些常见的对象和行为 确定场景中的“角色”——不一定是实际的类名——只是模糊的“角色”,当您仔细思考软件如何工作的具体场景时会出现。这些角色以后可能会变成类、接口、抽象类——不管你需要什么——开始时它们只是做某种工作的占位符 确定每个角色“做什么”。关键是要有一组命名的角色,这些角色识别对象将要做的事情。Thins是关于提炼出每个角色可以做的一组事情-他们可以做整个事情,或者把一堆其他对象放在一起做工作,或者他们可以协调工作。。。这取决于你的情况 OOD/OOP中最重要的事情是对象做事情——而不是它们内部的东西——它们做什么 不要过早地考虑继承问题,因为它会将您束缚在过于复杂的层次结构中,让您从面向SQL的编程而不是面向对象的编程的角度来思考。继承只是共享公共代码的一种方式。还有很多其他的方法——委托、混合、基于原型的编程 以下是我提出的一些指导方针:
首先你必须意识到OOAD(“面向对象的分析和设计”)是一种工具,而不是达到目的的手段。你从这个过程中得到的是一个模型,而不是你正在建模的东西的真实表现。该模型做出了某些假设。该模型的目的是解决您遇到的问题 那么,您如何知道如何设计对象呢?你怎么知道你做对了?最终结果:它解决了你的问题吗 因此,以汽车为例,在一些模型中,汽车计数可以是一个整数计数,例如交通模型中通过交叉口的汽车流量。在这种车型中,你很少关心汽车的品牌、型号或结构,只关心数量。您可能会关心车辆的类型,例如卡车或汽车。您是否将其建模为具有汽车或卡车类型的车辆对象?或者只是单独的汽车计数和卡车计数 简单的回答是:哪一个最好 对某事物是否为对象的正常测试是它是否有行为?请记住,最终对象=数据+行为 所以你可能会说汽车具有以下状态:
- 车轮的转动李>
- 悬挂高度李>
- 左或右驱动李>
- 颜色李>
- 宽度李>
- 重量李>
- 长度李>
- 高度李>
- 门的尺寸李>
- 是否有天窗;李>
- 是否有立体声、CD播放器、MP3播放器和/或卫星导航李>
- 油箱的尺寸李>
- 气缸数李>
- 涡轮增压和/或燃油喷射李>
- 最大扭矩李>
- 最大制动马力李>
- 等等
但再说一次,这对我们所做的有意义吗?这是关键问题。属性或变量通常是语言的“基本”类型。问题是你能理智地抽象什么 例如,您可以将
轮子
简化为由整数、浮点值和字符串等基本类型组成的描述符,它们表示任何轮子的特征属性:踏板数
,直径
,宽度
,推荐压力
,品牌
。这些属性都可以用基本类型来表示,以生成Wheel
对象
您能否将这些属性中的一些分组成一种更抽象的安排,以便可以独立于控制盘
重用?我认为是这样。也许可以创建一个具有属性diameter
和width
的Dimensions
对象。然后,您的轮子
具有与其关联的维度
对象实例,而不是直径
和宽度
。但您可以考虑将该维度
对象与其他对象一起使用,这些对象不一定是轮子
实例
向上移动列表,可以将汽车
简化为基本类型,但也可以将其他对象(例如