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()
上面的值可以直接存储,或者可以计算它们,对调用者来说无关紧要; 制定者可能会或可能不会产生副作用; 对来电者来说无关紧要.
我同意你的观点,由于许多OO术语的定义松散且使用不一致,因此存在许多不必要的混淆.您所询问的术语在某种程度上可以互换使用,但可以说有些术语比其他术语(降序)更通用:属性 - >属性 - >类变量 - >字段.
以下段落摘自"面向对象分析与设计"的格雷迪Booch的帮助阐明主题.首先,了解国家的概念很重要:
对象的状态包含对象的所有(通常是静态的)属性以及每个属性的当前(通常是动态的)值.根据属性,我们指的是对象属性的总和以及与其他对象的关系.
OOP在某些命名方面非常通用,因为它在语言和语言之间变化很大:
术语字段(Object Pascal),实例变量(Smalltalk),成员对象(C++)和插槽(CLOS)是可互换的,这意味着存储器用于对象的部分状态.它们共同构成了对象的结构.
但作者介绍的符号是准确的:
的属性表示的聚集体对象的一部分,因此是分析以及设计期间用来表示类的奇异性.使用与语言无关的语法,属性可以具有名称,类或两者,并且可选地具有默认表达式:
A:C=E
.类变量: a的状态的部分类.总的来说,类的类变量构成了它的结构.类变量由同一个类的所有实例共享.在C++中,类变量被声明为静态成员.
综上所述:
属性是一个广义的概念,用于表示类的特定特征,包括其属性及其与其他类的关系.
属性 表示聚合对象的一部分,因此在分析期间使用,以及表示类的单一属性的设计.
类变量是在类中定义的属性,无论该类存在多少个实例,都存在单个副本.因此,该类的所有实例都共享其价值及其声明.
Field是实例变量的特定于语言的术语,即一个特定于每个对象的值的属性.