class - OOP 术语 : class, 属性、特性、字段、数据成员

标签 class oop attributes

我正在开始学习 OOP,我想了解什么构成了类。我对一些核心元素的使用有多么松散感到有点困惑,从而增加了我的困惑。

我已经看过 C++ 类、java 类,我想了解足够的知识来编写自己的伪类来帮助我理解。

例如this article我读到了这个(..类属性(或类属性、字段或数据成员)

我已经看到相当好的删减问题,表明类属性和类字段之间存在差异,例如 What is the difference between a Field and a Property in C#?

根据我正在学习的语言,定义是

  • 属性(property)
  • 字段
  • 类变量
  • 属性

不同语言之间存在差异?

最佳答案

“字段”、“类变量”和“属性”或多或少是相同的 - 附加到对象的低级存储槽。每种语言的文档可能一致地使用不同的术语,但大多数实际程序员可以互换使用它们。 (但是,这也意味着某些术语可能不明确,例如“类变量” - 在语言中可以解释为“给定类的实例的变量”或“类对象本身的变量”其中类对象是您可以直接操作的对象。)

在我使用的大多数语言中,“属性”完全是另一回事 - 它们是一种将自定义行为附加到读/写字段的方法。 (或者替换它。)

因此,在 Java 中,典型的示例是:

class Circle {

    // The radius field
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
    }

    // The radius property
    public double getRadius() {
        return radius;
    }
    public void setRadius(double radius) {
        // We're doing something else besides setting the field value in the 
        // property setter
        System.out.println("Setting radius to " + radius);
        this.radius = radius;
    }

    // The circumference property, which is read-only
    public double getCircumference() {
        // We're not even reading a field here.
        return 2 * Math.PI * radius;
    }

}

(请注意,在 Java 中,属性 foo 是一对名为 getFoo()setFoo() 的访问器方法 - 或者只是如果属性是只读的,则为 getter。)

<小时/>

看待这个问题的另一种方式是“属性”是一个抽象 - 对象的 promise ,允许调用者获取或设置一段数据。而“字段”等是此抽象的一种可能实现。上例中的 getRadius()getCircumference() 的值可以直接存储,也可以计算,这对调用者来说并不重要; setter 可能有也可能没有副作用;这对调用者来说并不重要。

关于class - OOP 术语 : class, 属性、特性、字段、数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751269/

相关文章:

javascript - 原型(prototype)继承设置

oop - Controller 和服务有什么区别?

java - 检测 JSP 中的下拉列表变化?

.net - 您可以在运行时评估方法的属性吗?

Javascript 替换图像源

java - 不能从静态上下文中引用非静态字段 - Main 方法

java - 没有可访问的封闭类型实例,我的代码中出现错误

java - 为什么Java中没有局部静态变量?

c++ - C++中如何继承命名空间

javascript - 在 DOM 中可以使用 .notation 来获取/设置属性吗?