我应该移至面向对象的编程(黑匣子)以及如何
Should I move to Object Oriented Programming(black boxes) and how?
现在,我有一个带有几个类的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试图将任何给定呼叫的范围限制为执行该功能所需的最低限度。
至于模块化/重复使用,较大的亚模块会生长,通常它变得越具体,因此如果将其分解成越多的模块化块,则其适合所有目的的可能性就越小。结果,您花费更少的时间来重写相同的代码来进行稍微调整的目的,这也减少了您在为新代码实施代码时可能会破坏的相邻用途。这使得实施更有效,尽管在运行时可能会或可能不会有一定的费用。可能不是。请记住,无论是在根模块中定义还是在组成的对象深处构成多个层,它不需要更多的二进制渲染()。它仍然只是功能指针。
这些只是一般概念,所以请拿起自己喜欢的东西。
希望会有所帮助。
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 对"车辆的 vtable"的未定义引用 - 面向对象的编程练习
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 以面向对象的方式解析自定义数据包
- 面向对象的编程-C 练习
- 如何使用面向对象的技术在 win32 和 c++ 中创建编辑控件
- C++面向对象的字典程序
- 我在哪里可以找到一些 c++ 中的好例子来研究面向对象的概念
- 面向对象的设计选择
- 我应该移至面向对象的编程(黑匣子)以及如何
- 面向对象的图层
- 创建面向对象的链表时出现编译问题(编译器错误C2664)
- 面向对象的数据设计
- 我试图通过我的方案实现的面向对象的想法是什么?
- 是否所有面向对象的语言都会在内存中创建大量重复信息
- C++ 面向对象的编程异常失败
- C++面向对象的客户端套接字应用程序设计
- 面向对象的编程逻辑
- C++基类中虚函数的面向对象的返回值
- C++面向对象的问题