如果抽象也可以按程序完成,那么它如何成为 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.
的人
我对编程完全陌生,不明白为什么抽象是 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.
的人