OOP术语:类,属性,属性,字段,数据成员

You*_*now 21 oop attributes class

我正在开始学习OOP,我想学习什么是课程.我对一些核心元素的使用有多松散感到困惑,从而增加了我的困惑.

我看过C++类,java类,我想知道写自己的伪类来帮助我理解.

例如,在本文中我读了这个(..类属性(或类属性,字段或数据成员)

我已经看到相当好的问题,表明类属性和类字段之间存在差异,例如C#中的字段和属性之间有什么区别?

根据我正在研究的语言,是定义

  • 属性
  • 字段
  • 类变量
  • 属性

不同语言?

mil*_*ose 25

"字段","类变量"和"属性" 或多或少相同 - 附加到对象的低级存储槽.每种语言的文档可能会使用不同的术语,但大多数实际的程序员可以互换使用它们.(但是,这也意味着一些术语可能含糊不清,比如"类变量" - 可以解释为"给定类的实例的变量",或者"语言对象本身的变量"在一种语言中类对象是你可以直接操作的东西.)

在我使用的大多数语言中,"属性"完全不同于其他东西 - 它们是将自定义行为附加到读/写字段的一种方式.(或者替换它.)

所以在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 double 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

(请注意,在Java中,一个属性foo是一种叫做对存储器方法getFoo()setFoo()-或者只是如果属性为只读,吸气)


另一种看待这种情况的方式是"属性"是一种抽象 - 一种对象的承诺,允许调用者获取或设置一段数据.虽然"字段"等是这种抽象的一种可能的实现.上面例子中getRadius()getCircumference()上面的值可以直接存储,或者可以计算它们,对调用者来说无关紧要; 制定者可能会或可能不会产生副作用; 对来电者来说无关紧要.

  • 一个例外:在Python中,"类变量"指的是类对象的成员(其他语言称为静态变量/成员/字段). (2认同)

saz*_*aza 6

我同意你的观点,由于许多OO术语的定义松散且使用不一致,因此存在许多不必要的混淆.您所询问的术语在某种程度上可以互换使用,但可以说有些术语比其他术语(降序)更通用:属性 - >属性 - >类变量 - >字段.

以下段落摘自"面向对象分析与设计"格雷迪Booch的帮助阐明主题.首先,了解国家的概念很重要:

对象的状态包含对象的所有(通常是静态的)属性以及每个属性的当前(通常是动态的)值.根据属性,我们指的是对象属性的总和以及与其他对象的关系.

OOP在某些命名方面非常通用,因为它在语言和语言之间变化很大:

术语字段(Object Pascal),实例变量(Smalltalk),成员对象(C++)和插槽(CLOS)是可互换的,这意味着存储器用于对象的部分状态.它们共同构成了对象的结构.

但作者介绍的符号是准确的:

属性表示的聚集体对象的一部分,因此是分析以及设计期间用来表示类的奇异性.使用与语言无关的语法,属性可以具有名称,类或两者,并且可选地具有默认表达式:A:C=E.

类变量: a的状态的部分.总的来说,类的类变量构成了它的结构.类变量由同一个类的所有实例共享.在C++中,类变量被声明为静态成员.

综上所述:

  • 属性是一个广义的概念,用于表示类的特定特征,包括其属性及其与其他类的关系.

  • 属性 表示聚合对象的一部分,因此在分析期间使用,以及表示类的单一属性的设计.

  • 类变量在类中定义属性,无论该类存在多少个实例,都存在单个副本.因此,该类的所有实例都共享其价值及其声明.

  • Field实例变量的特定于语言的术语,即一个特定于每个对象的值的属性.