我应该移至面向对象的编程(黑匣子)以及如何

Should I move to Object Oriented Programming(black boxes) and how?

本文关键字:黑匣子 面向对象的 编程 我应该      更新时间:2023-10-16

现在,我有一个带有几个类的DirectX引擎 - 应用程序,图形,声音,每个人都大约是1K行,它们各自参考。我最初试图限制使用的使用类和东西,例如传递D3D设备,而是将其全局用于所有类,但是我在其他所有人的引擎中看到了所有内容都分为许多类,并且它们具有Engine-> GetRenderer-> Render(MyD3DContext)等内容;这不是效率低下吗?为什么不只是使MyD3Dcontext Global并将其直接在渲染函数中使用。我不得到的最后一件事是=您应该如何使彼此独立地工作的课程?听起来很奇怪。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

首先,为什么您认为这效率非常低?除了更容易编码和维护外,这也非常快。OOP不是一个瓶颈,它是具有多个开发人员和多个问题(例如现实世界游戏)的大型项目的福音。

让我举一个例子,因为您提到了"游戏":

游戏是模拟模拟包含实体(对象)对象可以事物,而具有属性。因此,对象就像属性和动作的封装。这就是使"面向对象的编程"中的"对象"的原因。您可以认为它们(对象是)在模拟器中的虚构工厂中创建的。对象的蓝图是"类",称为encapsulation

这些对象中的每个对象都绑定到您的世界,可能是通过某种高度数学的半衰期2(源)级物理引擎绑定的。您不想为每个班级编码"物理"。相反,您将从类(或接口)" iPhysics"继承。然后,每当您将重力从10.0更改为15.0时,此值都会在整个"世界"场景中传播。这是inheritance

游戏中的每个对象,例如半衰期2,戈登·弗里曼(Gordon Freeman)可以同时用作"玩家"answers" can-be-be-be-be-be-script",如果您知道我的意思。这是多态性。一个以不同类型作用的对象。

因此,您会看到,这非常容易(非常有效),可以在OOP中建模并展示虚构的游戏。

它的效率不高。而且,您绝对需要介绍某种OOP。甚至可能在线上

是。

随着项目变得更大,拥有一个全球的任何东西将导致大量问题。穿越一些指针也不是特别低效。担心正确领域的效率,您通过运行测试证明的领域效率低下,并始终尝试保持代码清晰度和分离。

如果您担心效率低下,为什么不将具有这种结构的测试应用程序敲在一起,并且时间需要多长时间进行所有删除。您会发现它微不足道地说,构建了视线中的小球。

您看到的唯一好处是随着项目的增长,您会在周围更改事物随着封装良好的非全球对象的好处。

有几个OO设计的大租户:尤其是代码重新使用/模块化和范围/隔离。这些天通常会皱眉,因为它们只是无法很好地扩展到大型开发工作,并且总是会引起问题,因此OO试图将任何给定呼叫的范围限制为执行该功能所需的最低限度。

至于模块化/重复使用,较大的亚模块会生长,通常它变得越具体,因此如果将其分解成越多的模块化块,则其适合所有目的的可能性就越小。结果,您花费更少的时间来重写相同的代码来进行稍微调整的目的,这也减少了您在为新代码实施代码时可能会破坏的相邻用途。这使得实施更有效,尽管在运行时可能会或可能不会有一定的费用。可能不是。请记住,无论是在根模块中定义还是在组成的对象深处构成多个层,它不需要更多的二进制渲染()。它仍然只是功能指针。

这些只是一般概念,所以请拿起自己喜欢的东西。

希望会有所帮助。