[英]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.