我对OOP知之甚少,所以也许我的问题很愚蠢,但仍然......
您可以从过程(非OO)语言访问面向对象(OO)的API吗?例如,Win32 API不是OO,但我知道有一个C++的包装器可以使它成为OO.但是有可能两种方式吗?
我问,因为我不喜欢OO语言; 我通过编程微控制器来学习C语言,而OO语言只是将实际的代码从你身上移开,我担心OOP如此受欢迎,很快一切都将基于对象.
让我把这个作为一个从70年代到另一个(?)的一个胡思乱想的老程序员
在我们编写库的过去,一种常见的技术是进行"初始化"调用,创建某种"cookie"(通常是指针或数组索引).然后我们强制客户端在每次调用库时向我们提供cookie.这使得我们可以按照我们的库所需的方式(以可重入的方式)做任何事情,而不会向客户提出所有实施细节.作为C程序员,您应该非常熟悉这种风格,因为C将其用于所有文件I/O,就像Unix一样.微软喜欢称它们为"句柄"而不是"cookie".Unix称它们为"文件"或有时称为"文件句柄".
大量的OO语言只是为这种技术增加了一些额外的语法.现在,而不是从LibnameCallname (cookie, ...他们开始的所有电话开始cookie.callname(....但实际上,在很多方面,这只是一种语法更改,使我们的程序员更容易(节省了我们Libname在所有内容上输入的额外内容).
从某种程度上来说,操作系统(包括Unix,它使用该文件作为其所有内容的基本范例),已经是OO,并且已经成为OO几十年了.它们如何处理OS调用实际上只是一个链接细节.对于我们来说,作为系统程序员并不重要,除了链接必须匹配.从C调用C++唯一真正的问题不是它的"OO".问题是C++为其符号使用了一些自定义名称修改算法,并非所有C编译器都能处理.
事实上,它还有更多的东西.但是,如果有人用C++编写所有新的OS调用,你可以打赌C编译器供应商会找到弥合差距的方法,这样你就可以用舒适的旧式调用它们LibnameCallname(cookie,....
Parnas在1972年首次提到的信息隐藏 - 你实际上说你不喜欢它的意思- 如果关于程序的各个部分如何工作的细节被隐藏起来,那么开发人员可以提高效率的想法其他部分.
当时这是非常矛盾的.即使在20世纪90年代早期,我也常常听到关于它的大论点.弗雷德里克布鲁克斯甚至在"神话人月"中反对它.(顺便说一下:如果你还没有读过TMM-M,你需要.)
问题是,今天几乎没有人反对它.这是有原因的.甚至弗雷德布鲁克斯也承认二十年后他错了.从他的名字来看,Parnas是对的,我对信息隐藏错了 -
帕纳斯是对的,我错了.我现在相信,今天通常体现在面向对象编程中的信息隐藏是提高软件设计水平的唯一方法.
公平地说,双方都同意在非常小的系统上(例如,你一直在玩的嵌入式系统?)信息隐藏并不是那么简单.只有当系统开始变得非常庞大时,完全互联的系统才会在自身重量下开始下降.但是,今天大多数节目都很大.这是争论停止的主要原因.