对于这个问题,我会尽可能的直接,因为必须有一些我完全不知道来自结构化编程背景的东西.
说我有一个Player类.这个Player类可以改变它在游戏世界中的位置.我将此方法称为warp(),它将Position类实例作为参数来修改Player的内部位置.这在OO术语中对我来说是完全合理的,因为我要求玩家"做"某事.
除了修改球员位置之外我还需要做其他事情.例如,假设我需要将该扭曲事件发送给在线游戏中的其他玩家.该代码是否也应该在Player的warp()方法中?如果没有,那么我会想象在服务器类中声明某种辅助方法,比如warpPlayer(播放器,位置).这样做似乎可以减少玩家作为一系列吸气者和制定者所做的一切,或者我在这里错了?这是完全正常的吗?我已经无数次地读过一个暴露一系列getter/setter的类表明一个非常糟糕的抽象(用作数据结构而不是类).
当您需要保留数据并将其保存到文件时,会出现同样的问题.由于将播放器"保存"到文件与Player类处于不同的抽象级别,因此在播放器类中使用save()方法是否有意义?如果没有,就像savePlayer(播放器)一样在外部声明它意味着savePlayer方法需要一种方法来从Player类中获取它所需的每一段数据,最终暴露出类的整个私有实现.
因为OOP是今天最常用的设计方法(我假设?),所以我必须要解决这些问题.我和我的同行一起讨论了它,他们也做了轻微的开发,他们也有与OOP完全相同的问题.也许只是结构化编程背景使我们无法理解OOP的全部好处,而不仅仅是提供设置和获取私有数据的方法,以便从一个地方更改和检索它.
在此先感谢,希望我听起来不像白痴.对于那些真正需要了解与此设计相关的语言的人来说,它是服务器端的Java和客户端的ActionScript 3.