oop – 面向对象的设计问题

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:我没有看到任何凝聚力在工人身上采用木材切割方法.切割在树上完成,因此应该是树类的一部分.据推测,切割木材也将涉及改变木类的一些内部状态.工人应该在他想要的任何树上调用切割方法,而不是树告诉工人他应该切割它.如果你想像Hans所暗示的那样抽象出来,你可以为Cut方法创建一个ICuttable接口,让你的树实现它.考虑一下你熟悉的东西,一个字符串.如果要剪切字符串(拆分),则不要在每个要执行此操作的对象中定义splitString方法.无论什么对象决定拆分字符串,都会发生同样的事情 – 并且通常需要知道目标对象

如果我正在编写一个游戏,其中有一个工人切割木材(从树木),我会在哪里放置“cutWood”方法,在工人阶级或树类?

编辑:

我在OOD上读到的第一个例子是关于一个圆圈(一个叫做圆圈的类),里面有一个叫做“计算区域”的方法.

现在,确定一个圆圈不会计算自己的区域.

想到它的唯一方法是计算区域是一个与圆相关的操作(在圆上完成的操作)

因此,cutWood方法与工作者和树都相关.

我没有看到任何凝聚力在工人身上采用木材切割方法.切割在树上完成,因此应该是树类的一部分.据推测,切割木材也将涉及改变木类的一些内部状态.

工人应该在他想要的任何树上调用切割方法,而不是树告诉工人他应该切割它.如果你想像Hans所暗示的那样抽象出来,你可以为Cut方法创建一个ICuttable接口,让你的树实现它.

考虑一下你熟悉的东西,一个字符串.如果要剪切字符串(拆分),则不要在每个要执行此操作的对象中定义splitString方法.无论什么对象决定拆分字符串,都会发生同样的事情 – 并且通常需要知道目标对象(字符串)的内部才能完成它.许多其他对象只是调用字符串的split方法.字符串对象具有高内聚力 – 因为它的方法有助于执行常见任务 – 操纵字符串.

我不知道切割木材对工人对象本身的贡献如何.

翻译自:https://stackoverflow.com/questions/3835299/object-oriented-design-problem


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ARM嵌入式系统开发

ARM嵌入式系统开发

斯洛斯 / 北京航大 / 2005-5 / 75.00元

《ARM嵌入式系统开发:软件设计与优化》从软件设计的角度,全面、系统地介绍了ARM处理器的基本体系结构和软件设计与优化方法。内容包括:ARM处理器基础;ARM/Thumb指令集;C语言与汇编语言程序的设计与优化;基本运算、操作的优化;基于ARM的DSP;异常与中断处理;固件与嵌入式OS;cache与存储器管理;ARMv6体系结构的特点等。全书内容完整,针对各种不同的ARM内核系统结构都有详尽论述,......一起来看看 《ARM嵌入式系统开发》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具