首页 > 解决方案 > OOP 与面向类的编程

问题描述

有人可以客观地告诉我面向对象和面向类/基于类的编程有什么区别吗?我知道一点 OOP 基础知识,但我对面向类的范式一无所知。一个启发性的例子将是非常受欢迎的(它不必是一些代码——一个简短的解释就足够了)。谢谢。

标签: oop

解决方案


基于类的编程精确地描述了大多数常用语言支持的面向对象编程的常见形式:对象行为是根据对象作为实例的类来定义的。

这是一个面向类的编程示例(在 Python 中):

class Foo:
    def __init__(self, x, y):
        self.one = x
        self.two = y

class Bar(Foo):
    def __init__(self, z, **kwargs):
        super().__init__(**kwargs)
        self.three = z

bar = Bar(1,2,3)

assert bar.one == 1
assert bar.two == 2
assert bar.three == 3

bar“继承”它对属性的支持one以及two从子类FooBar类。

(是的,这正是您听到“面向对象编程”时所想到的。)


相反,基于原型的编程将省去类,而只是根据另一个对象来定义一个对象。这是取自https://en.wikipedia.org/wiki/Prototype-based_programming的一个简短示例,用 JavaScript 编写。(这也是前面基于类的示例所基于的。)

var foo = {one: 1, two: 2};

var bar = Object.create(foo);

bar.three = 3;

bar.one; // 1
bar.two; // 2
bar.three; // 3

我们没有定义两个类,其中一个继承自另一个并用于定义 使用的属性,而是定义了一个将继承自bar的“通用”对象。我们通过使用作为“原型”来创建;除了我们为 明确定义的内容之外,它还将拥有它所继承的内容。foobarbarfoobarfoo


推荐阅读