如果抽象也可以按程序完成,那么它如何成为 OOP 的优势?

How is abstraction an advantage of OOP if it can also be done procedurally?

我对编程完全陌生,不明白为什么抽象是 OOP 的优势。所有网站都提到抽象是 OOP 的主要优势之一,但这也可以通过程序实现。

如果我写:

int add(int x, int y){
   return x + y;
}

int main() {
   int z = add(3,4);
}

抽象用于隐藏背景细节或任何不必要的数据实现,以便用户只看到所需的信息,所以这不也是一种抽象,因为用户可以在不知道其工作原理的情况下使用“添加”吗?我是否误解了抽象的概念,因为这基本上是我在网上获得的关于抽象的唯一定义?如果不是,那为什么不用 OOP 就可以实现它是一个“优势”?

你的问题不错,就是有点幼稚。很明显,您要问的是前面的话题。不过你很好奇。我没有冒犯的意思。

抽象不是一种语言支持与否的二元事物。语言或多或少地进行了抽象,但所有语言都是在汇编语言之上的抽象。我很喜欢C,但是它不适合抽象。

抽象是一个非常广泛的东西。你的问题有点像管乐器的目的是什么,因为吉他“可以发出声音”。这根本不是要暗示这是一个愚蠢的问题。我只是提到它来说明抽象的主题有多广泛。创建一个简单的函数,基本上就是冰山一角的几个分子。

只是为了展示一个快速且非常简单的示例:

class Shape {
public:
    virtual double area();
};

class Triangle : public Shape {
private:
    double base, height;

public:
    double area() { return base*height/2.0; }
};

class Square : public Shape {
private:
    double side;

public:
    double area() { return side*side; }
};

int main() {
    Shape shapes = new Shape[10];
    // Init code   
    for(int i=0; i<10; i++) {
        std::cout << "Area: " << shapes[i] << std::endl;
    }
}

这是一个抽象级别,在 C 中实现起来会非常混乱。而且,这甚至不是一个非常复杂的示例。在显示 OOP 时,它是最基本的。

请原谅我的 C++ 代码。我对 C++ 的了解都是 20 年前学的。所以这可能有点老派。也许它甚至不编译,但它只是为了显示抽象。它针对的是来自 C.

的人