Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何从面向对象编程的角度思考?_Oop - Fatal编程技术网

Oop 如何从面向对象编程的角度思考?

Oop 如何从面向对象编程的角度思考?,oop,Oop,我对游戏编程感兴趣已经有一段时间了,并且试着读了很多关于OOP的书。问题是大部分书都会给你代码,并说“在这里添加这个”“在那里添加这个”,但是他们没有解释OOP的“大图”,而是跳来跳去。我想知道的是如何用面向对象的方法来思考。例如,我读过这篇文章,它让你对如何思考你的类有了一些很好的见解(比如,玩家“有”、“能”…世界“听”)。我希望得到一些帮助的是一种思维方式,提出正确的问题,以便计划好哪些事情应该留给“玩家级”去做,哪些事情留给“世界级”去做,哪些事情让“私人”去做,哪些事情让“公共”去做,

我对游戏编程感兴趣已经有一段时间了,并且试着读了很多关于OOP的书。问题是大部分书都会给你代码,并说“在这里添加这个”“在那里添加这个”,但是他们没有解释OOP的“大图”,而是跳来跳去。我想知道的是如何用面向对象的方法来思考。例如,我读过这篇文章,它让你对如何思考你的类有了一些很好的见解(比如,玩家“有”、“能”…世界“听”)。我希望得到一些帮助的是一种思维方式,提出正确的问题,以便计划好哪些事情应该留给“玩家级”去做,哪些事情留给“世界级”去做,哪些事情让“私人”去做,哪些事情让“公共”去做,等等。我想回答“为什么”而不是“如何”我不想要代码,我希望OOP的问题或思维定势成为组织代码的自然方式

例如,如果我正在处理碰撞检测。我应该让“世界”来检查吗?我应该让玩家来检查吗?我应该问自己哪个问题

很抱歉这个“宽泛”的问题,但任何事情都会有帮助。从一本好书到一些技巧

我没有很多编程经验

致以最诚挚的问候,

我读了《面向对象的思维过程》的早期版本,发现这本书对理解整个OOP范式非常有帮助


我想“摸索”面向对象编程概念的最好方法是将代码视为模块或构建块—编写代码以便以这种方式进行模块化,然后您可以在需要时随时重用它们,只需根据需要调用它们,而不是反复编写相同的代码。这既是一门学科,也是一门必修课。记录代码也是很有帮助的,这样当你以后回去重用它时,你就知道它需要什么样的参数,它生成什么样的输出,以及它是如何完成你编写的任务的。

停止阅读书籍,开始编写程序。学习Java。用一本书来做这件事,但不要只是走走过场,不要下载代码,自己写。一开始你会想知道OOP的意义是什么,但随后你会遇到更复杂的问题,你会开始欣赏OOP给你的自由。像继承、封装和多态性这样的术语现在只适用于您。你有点明白它们的意思,但你还没有编写足够的程序来使用这些概念。一旦你使用了它们,并且创建了一些类来举例说明这些概念,那么你就开始学习真正的面向对象编程了。你不应该专注于让你的游戏OOP,你应该专注于让OOP适合你的游戏


所以这个故事的寓意是围棋计划。

正如你所说,这是一个非常广泛的问题。有了经验,你会更好地意识到什么时候该用什么

虽然知道“为什么”很好,但要记住知道“HOWS”为你理解“为什么”打下了良好的基础。 现在,回答你提出的具体问题。将public看作是您将放入API中的东西。如果您有一个“玩家类”,那么您希望代码的其余部分如何处理它?你想在某种意义上与它互动。与“玩家类”交互的接口是什么?那些是你的界面应该是“公共的”

那么哪些事情应该是私人的呢?例如,如果player类的某个属性必须在有效范围内(比如在1到100之间)。如何防止人们(代码的其他部分)破坏它?你用私人的。这可以防止其他人将该值设置为1001。这样,如果它进入了一个糟糕的状态,你知道是类出错了,而不是代码的其余部分

至于设计,记住设计是变化的。当您第一次开始使用程序时,您可能会决定由哪个类来执行碰撞检测。(也就是说,你的“世界”有一个碰撞检测器)也许一开始你只是用碰撞检测器写下你的“世界”。随后,您重构了代码,并创建了一个名为“碰撞检测器”的类。然后,你可能会决定它去其他地方,但这很容易,因为你可以有另一个对象“有一个”碰撞检测器


关键是,如果您使代码足够模块化,这将很容易。没有硬性规定。首先,您要根据自己的设计编写代码。一路上你会找到更好的做事方法。

写,写软件。人们太看重OOP了。它只是一种实现某些设计原则的方法,如模块化和低耦合。您可以进行实验,看看是什么让代码变得好,如何让代码变得灵活和可维护。然后,您将了解导致良好设计的原则,无论是纯功能设计、过程设计、面向对象设计还是任何其他范式

我认为学习OOP的关键确实是编写代码,但要开始考虑如何对现实世界建模,即汽车对象具有门、轮胎、发动机等属性,而行为可能是启动发动机、更换机油、,解放你的思想,用一种方法来思考一些事情,这将关系到你如何使编写代码不那么麻烦和复杂。有些问题天生就很复杂,但面向对象编程可以帮助您解决问题,并以现实世界的方式思考问题。你能做到的……只要开始尝试……

不要为这个“宽泛”的问题感到抱歉。这是一个好问题。然而,如果你没有太多编程经验,我发现从非面向对象的角度学习编程更容易,然后我会按照我的方式去做。我认为最好先学一门语言,然后再学OOP。只是我的意见。这对苏来说不是个好问题。不过,我认为你可以重新措辞,让它成为一个更好的问题:问你的上校