什么是对一个属性成员(what is a member vs. a property)

2019-06-28 03:10发布

谁是新的面向对象编程有朋友问我一个成员和财产的区别,我是羞于承认,我不能给他一个满意的答案。 由于性能也可以是对象本身,我留下了一个总体描述和异常的列表。

可有人请布局时要考虑的东西成员与属性定义好了? 也许我bastardizing这个概念,或者是它只是一个成员就是我用的是内部名称,并且属性是什么接触到其他对象?

我不认为不知道这个问题的答案已经影响到我的节目的质量,以及它只是一个语义点,但它仍然困扰着我,我无法向他解释。

Answer 1:

属性是类成员。 其他可能的构造函数,方法,字段,嵌套类型,转换,索引等等 - 当然依赖的语言/平台上。 很多时候术语的确切含义取决于上下文。

为了给一个C#特异性的定义 ,从C#3.0规范,部分1.6.1:

下表提供了种成员类可以包含的的概述。
(行的......)

  • 常量
  • 字段
  • 方法
  • 属性
  • 索引
  • 活动
  • 运营商
  • 构造函数
  • 析构函数
  • 类型

请注意,这是一个的成员。 不同的“东西”具有不同种类的成员的 - 在C#,接口不能有一个场作为一个部件,例如。



Answer 2:

无论这两个词有任何定义的任何意义的面向对象的编程或面向对象的设计。 他们也不在绝大多数的编程语言中的任何定义的含义。

只有编程语言中极少数有一个称为属性成员的概念,甚至更少的兼得。

具有两个中的任一个的语言的一些例子是C ++(其具有成员),ECMAScript中(其具有的属性)和C#(其具有两者)。 然而,这些术语不一定表示不同的编程语言相同的概念。 例如,术语“部件”是指大致C ++和C#同样的事情,但“属性”是指在ECMAScript中和C#完全不同的东西。 事实上,“属性”一词在ECMAScript中大致表示相同的概念(即大致指相同的东西)在C的术语“构件” ++和C#。

这一切都只是说,这两个术语的含义到底是什么的编程语言相关的规范说,他们的意思是,不能多也不能少。 (插入无偿刘易斯·卡罗尔在这里引用。)



Answer 3:

属性是一种成员。

在C#,例如,一类可以有以下成员:

  • 构造函数
  • 析构函数
  • 常量
  • 字段
  • 方法
  • 属性
  • 索引
  • 运营商
  • 活动
  • 代表
  • 接口
  • 结构

MSDN:C#:类



Answer 4:

大家都只是对象或原始类型属于一类。

性能给您的成员更多的权力。 这就像一个简单的方法来创建getter和setter让你做,比如,公共getter和setter方法私; 并把任何你想要的逻辑,它会读取或写入的方式。 它们可以被用来作为一种公开的成员,是可以改变的阅读,后来更容易编写的政策。

这适用于C#。 不知道这是因为尽管其他语言如此。



Answer 5:

成员(变量)是物体的只是一些部分。 属性是(我会用“一般”资格这一点 - 我不知道,它是具有跨多种语言明确的意义技术上清晰字)通过getter和setter方法是对象的可公开访问的方面,例如。

因此,虽然(几乎总是)一个属性是reacheable成员变量,你可以拥有这不是真正的对象状态(不,这是很好的设计)的一部分的属性:

public class Foo {
  public String getJunk()
  { return "Junk";}

  public void setJunk(String ignore){;}
  }
}


Answer 6:

这两个属性和方法的对象的成员。 甲属性描述而方法访问或使用所属对象的对象的某些方面。
在伪代码的示例:

Object Ball
Property color(some Value)
Method bounce(subroutine describing the movement of the Ball)

其中球被定义和给出的颜色(属性),而方法弹跳是描述该球将如何在击中另一个目的反应的子程序。
并非所有的语言都具有的特性,即Java只有必须由getter和setter访问领域。



Answer 7:

属性是揭露领域,其中字段是实际变量的方式。 例如(C#):

class Foo {
  private int field;
  public int Property {
    get { return field; }
    set { field = value; }
  }
}


Answer 8:

从PHP手册 :

类成员变量被称为“属性”。 您还可以看到他们指使用其他诸如“属性”或“场”。 他们通过使用关键字公有,保护或私有,其次是普通变量声明的一个定义。 该声明可能包括初始化。



Answer 9:

构件是一个通用术语(可能起源于C ++ ,但在还定义的Java用来表示类的部件)。 属性是用来表示一个类的特定特征,一旦类被实例化,将有助于确定对象的状态一个广义的概念。

下面的通道,通过格雷迪Booch的“面向对象分析与设计”提取有助于澄清问题。 首先,了解状态和行为的概念是非常重要的:

一个对象的状态 包括了所有的对象(通常是静态)特性加上每个这些属性的当前(通常是动态的)的值 。 通过性能,我们指的是对象的属性,并与其他对象的关系的总和。

行为 是一个对象如何动作并反应,在其状态的变化和消息传递(方法)条件 ; 对象的外部可见的和可测试的活性。

所以,对象的行为取决于可用的操作,并且其状态(属性和它们的当前值)。 需要注意的是OOP是对某些术语是通用的,因为它变化很大,从语言到语言:

术语字段(对象帕斯卡),实例变量(Smalltalk中),成员对象(C ++),和槽(CLOS)是可互换的 ,这意味着一个存储库的对象的状态的一部分。 总的来说,它们构成了对象的结构。

当一个对象的操作时,定义为一个类的声明的一部分。 术语消息(Smalltalk的),方法(许多面向对象的语言),成员函数(C ++),和操作通常是可互换的。

但是,笔者引入的符号是准确的:

属性表示的聚集体对象的一部分,因此是分析以及设计期间用来表达类的奇异性。 使用独立于语言的语法,属性可以具有名称,类,或两者,以及任选的默认表达: A:C=E

操作表示通过类提供某些服务。 操作(...)从属性通过附加括号或提供操作的完整签名,返回类,名称和正式参数(如果有的话)组成的区别: RN(Arguments)

总之,你能想到的成员的一切,组成了类,并作为成员(属性),它们共同定义类的结构,加上其与其他类的关系属性。 当类被实例化,值被分配给它的属性,以便定义该对象的状态。

干杯



文章来源: what is a member vs. a property