为什么openGL不是面向对象的?每个人都教授面向对象编程+设计模式,但OpenGL具有许多全局功能.这不是风格吗?
低级API的重点是尽可能简化和移植.给它一个面向对象的架构不允许这样:
多态性增加了不必要的函数调用开销.
它迫使您使用一些相对困难的调用约定,这会降低可移植性.
你不能包装一个面向对象的体系结构来使它成为程序性的,但你可以做相反的事情; 所以,让事情尽可能灵活是有道理的.如果你愿意,可以在OpenGL周围编写一个面向对象的包装器.
最后,你应该真正质疑你所学的关于OOP的内容.尽管你的学院或大学可能会告诉你,OOP并不是程序设计的灵丹妙药.有很好的理由说明为什么C++ STL中绝对没有面向对象(以及大部分Boost).
在某些情况下,面向对象很有用,但是你应该知道什么时候有用,什么时候有用,在任何情况下都不应该认为任何不是OOP的东西都是"坏的风格".
OpenGL的
OpenGL应该支持所有平台 - 在这方面没有任何接近C的地方 - 多亏了几乎每个设备都可以使用相同的API
OpenGL应该支持所有语言 - 在这方面也没有任何接近C的东西 - 多亏了这一点,支持调用C库(几乎所有的)的每种语言都可以使用OpenGL
OpenGL是一个API,而不是一个引擎 - 它打算为图形硬件提供低级接口,但足够高级别,是对不同硬件的抽象--C比C++低很多,OOP不低水平
OpenGL是一个构建的框架,而不是一个完整的解决方案 - 没有一个真正的方式来编写图形代码,OpenGL不应该强迫我们做任何事情 - 通过OOP它会迫使我们进行他们的"colution"
OpenGL 与任何特定的编程范例无关 - 因此我们可以将OpenGL包装成函数,逻辑或OOP语言 - 或者在程序上使用它
OpenGL与效率有关 - 而且你不能通过直接函数调用获得更高的效率.OOP与适合特定任务的效率一样高效.
一般来说 - OpenGL旨在让我们拥有所有的自由,并且不为我们做出任何选择.通过自由,我指的是选择平台,语言,编程范例,引擎设计,方法以及效率与可读性水平的自由.
为此我赞美OpenGL,为此我讨厌Direct X.
阿门.
旁注:每个人都教授面向对象的编程,因为它是最容易掌握的.这不是唯一真实的范例.有函数式编程,逻辑编程,契约编程,甚至是用C语言编写的面向对象的方式.计算机科学中没有一个真理.至于设计模式,我可以列举OpenGL架构中使用的几个.坏风格?我见过具有aaaaallll全局功能的漂亮C程序......
通常,OpenGL 是面向对象的.它只是用一种不直接支持OOP的语言实现的.但API是面向对象的:它由许多不同的对象类型组成,并在每个对象上定义了一组操作.并且每个对象类型的内部对用户是隐藏的.它满足OOP的所有要求.它恰好在C中实现,它没有方便的类或成员方法语法.
除此之外,全球职能绝对没有错.在C++中,一个常见的建议是尽可能优先使用成员方法.在功能编程中,全局函数是默认的.