簡體   English   中英

如果抽象也可以在程序上完成,那么 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,但它不適合抽象。

抽象是一個非常廣泛的東西。 你的問題有點像管樂器的目的是什么,因為吉他“可以發出聲音”。 這根本不是要暗示這將是一個愚蠢的問題。 我提到它只是為了說明抽象的主題有多廣泛。 創建一個簡單的 function 基本上是冰山一角的幾個分子。

只是為了展示一個快速且非常簡單的示例:

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 的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM