C编程语言如何不应用OOP概念?



据我所知,C不是一种面向对象的编程语言。我们如何让用户定义数据类型,并允许对这些数据类型执行一些操作。就像原始数据类型被定义并允许对它们执行一些操作一样。

没有面向对象的语言有些语言具有不同程度的OO功能支持。OO是一种程序设计方法,因此它主要与语言无关。

OO大致可以概括为三件事:

  • 自主模块,他们完成自己指定的任务,对周围程序的了解有限。("松耦合"(

  • 数据和函数的私有封装,这样类的用户就不必担心哪些部分是内部的,哪些部分是API的一部分。防止意外或故意滥用内部构件。减少";名称空间混乱";。

  • 继承和多态性,可用于代码重用和API设计。

第一个是纯粹的程序设计,也是人们最常出错的一个。第二个和第三个由C支持,但含蓄而不优雅。

对于私有封装,可以使用static文件范围变量。它在某些情况下工作得很好,比如单核嵌入式系统。但在其他情况下会出现问题——这会让你的课";"singleton";单个实例并使其线程不安全。

您可以使用不透明类型的概念进行更适当的私有封装,在该概念中,您向前声明一个结构,然后只在调用方不可见的文件中定义该结构。这为您提供了真正的多实例私有封装,当与函数指针结合时,也可以用于多态性。不利的一面是它有点笨重,而且没有多少人知道。学校没有教它。

因此,用C语言编写OO程序是完全可能的,就像用C++或Java编写破碎的非OO设计也是完全可能的一样。当你有语言支持的时候,OO就容易多了

例如,C++的概念";RAII";,严格来说,这本身并不是一个OO特性,但在进行OO设计时,它有很大帮助,因为它为您提供了隐式的构造函数/析构函数调用,您不必像C中的情况那样依赖于调用者显式地执行这些调用。另一个例子是非常方便的this指针,在C中,您必须手动将其传递给每个函数调用。

最新更新