注意:我做了一个简短的搜索,结果很少,唯一真正相关的结果是 this one , 所以我认为以前没有人完整地问过这个问题。
我最近一直在研究操作系统开发,我发现大多数(如果不是全部)没有完全面向对象的窗口应用程序界面,包括 Windows。当然,除了字节码解释语言,例如 C#(或一般的 CLI)和 Java,这是一个明显的异常(exception)。 (澄清一下,我的意思是他们倾向于通过函数而不是通过创建类来创建窗口)。
我可以理解为简单起见而创建的较小的管理器,例如 tinywm , 但更大的窗口管理器,如 MetaCity , Fluxbox , 和 Openbox往往仍然不是来自对象,而是来自函数——尽管有些是用 C++ 编写的,而不是纯 C(至少,据我所知)。
这可能是个幼稚的问题,但为什么要这样做呢? 我知道为不支持面向对象的语言实现非面向对象的 ABI 很重要,但为什么它不能也为支持的语言提供更高级别的 Hook 支持面向对象?
对于程序员来说,拥有这样的钩子(Hook)最终会不会更容易一些,因为这样可以更轻松地开发软件?考虑到硬件的进步,与开发变得更加容易所带来的好处相比,性能损失会不会很小?
这件事困扰了我一段时间,我希望有人能给出答案。
PS:如果我的理解有根本错误的地方,请随时纠正我。
最佳答案
这不仅仅是开窗。就通过对象调用的方法而言,没有像 myObject->method()
或 myObject.method()
这样的操作系统具有面向对象的 API。我们现在使用的 API 具有 1980 年代早期设计的窗口 API(例如 Windows,X Window System 等)。需要考虑语言和 ABI 问题。我能想到的唯一异常(exception)是 OS/2 的独立于语言的 OO 东西,叫做 System Object Model .
从形式上讲,method(object, ...)
和 object.method(...)
或 object->method( ...)
,只是语法上的区别。
关于c++ - 为什么很多窗口管理器不支持面向对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851894/