Oop 面向对象编程的优点或特点是什么?

Oop 面向对象编程的优点或特点是什么?,oop,object,Oop,Object,是什么让每个人都从顺序语言变成了​​对象语言 根据面向对象编程的特点,它包括数据抽象、封装、消息传递、模块化、多态性和继承。对我来说,数据抽象、封装、消息传递和模块化也存在于顺序语言中。只有多态性和继承是面向对象编程特有的。这是正确的吗?许多非OOP语言当然可以构建这些功能。从C + C++区域看,可以通过使用不透明指针提供C封装,其中包含一组函数,这些函数负责返回这些不透明对象,以及一组内部函数,它们都是文件静态的。您甚至可以使用函数指针和封装对象执行多态性和继承 再说一次,我们也可以用汇编或

是什么让每个人都从顺序语言变成了​​对象语言


根据面向对象编程的特点,它包括数据抽象、封装、消息传递、模块化、多态性和继承。对我来说,数据抽象、封装、消息传递和模块化也存在于顺序语言中。只有多态性和继承是面向对象编程特有的。这是正确的吗?

许多非OOP语言当然可以构建这些功能。从C + C++区域看,可以通过使用不透明指针提供C封装,其中包含一组函数,这些函数负责返回这些不透明对象,以及一组内部函数,它们都是文件静态的。您甚至可以使用函数指针和封装对象执行多态性和继承

再说一次,我们也可以用汇编或机器语言编程。将任何特性引入语言的原因是为了更容易使用该特性

再次,看C与C++,处理不透明指针等是恼人的、重复的、半困难的。使用C++,可以实现更少的代码相同的效果。每个人都清楚发生了什么。打破它要困难得多(尽管并非不可能)。另外,如果需要的话,您可以很容易地打破封装,因为您可以定义像

friend
这样的语言结构,在必要时提供异常

还有一些东西如果没有直接的语言支持就很难实现。当然,运算符重载是不可能的,但是如果没有语言支持,函数重载真的很难做到

最重要的是,如果是在语言中,那么每个人都是以同样的方式做的。在C语言中有多种实现继承和多态性的方法,它们都是互不兼容的。而C++用户可以做任何这些方法,他们选择使用实际的语言特征99.9%的时间。这意味着阅读其他人的代码和了解发生了什么事情要容易得多。你不必猜测什么是不透明的,什么不是不透明的。你不必猜测什么是从什么中衍生出来的。你知道的,因为每个人都是这样做的


在任何情况下,如果您愿意,大多数OOP lite语言(C++、Java、C#)或多或少都可以像过程语言一样使用。你只需要忽略这些对象。因此,在许多方面,他们都能两全其美。

优势可以用以下方式概括:

OOP可以比以前的范例更直接、更精确地表示现实世界,因此程序变得更简单、更容易理解。

关于这一点:

对我来说,数据抽象、封装、消息传递和模块化也存在于顺序语言中。只有多态性和继承是面向对象编程特有的

大多数人类可读的语言可以提供数据抽象、封装、消息传递和模块化(否则它们将是机器语言),但OOP更好地支持这些概念。例如,要在C中设置小部件的文本,您可以执行以下操作:

HANDLE myEditBox = CreateEditBox(hParent, ...);
SetText(myEditBox, "Hello!");
请注意,您有一个对象的句柄,而不是实际对象。现在在C++中,你可以这样做:

EditBox myEditBox(...);
myEditBox.SetText("Hello!");
两者之间的区别很微妙,但很重要。C风格的SetText(handle,“Hello!”)不区分handle和其他参数。你甚至都不知道有一条信息发送给这个对象。现在,C++风格对象SetText(“你好”)就像是明确地告诉你:嘿,对象,把你的文本设置为“你好!”。在这里,消息和接收者(对象)的概念是明确的

如果对象未声明为指针,C++还可以自动销毁对象,这消除了诸如DestroyObject(myEditBox)之类的调用


没有OOP,封装性也很差,因为大多数东西都是用只包含公共成员的结构实现的。因此,您不能对用户隐藏数据,这意味着没有人会试图以意外的方式更改数据,这可能会导致错误。这在大型程序中非常常见。

几乎所有编程语言,包括面向对象的编程语言,都是“顺序的”(从某种意义上说,语句是按顺序执行的——尽管这些语言通常带有线程库,允许您同时执行线程,每个线程本身都是顺序的)。你确定你的意思不是“过程的”(这是“面向对象”的常见反义词)?我很好奇你所说的“顺序语言”是什么意思?