什么是会员与财产

时间:2009-08-05 18:42:42

标签: oop properties member

一位不熟悉OO编程的朋友问我会员和财产之间的区别,我很惭愧承认我无法给他一个好的答案。由于属性本身也可以是对象,因此我留下了一般描述和异常列表。

有人可以详细说明何时考虑会员与财产的关系?也许我正在混淆这个概念,或者只是一个成员只是我使用的内部名称,而属性是暴露给其他对象的属性?

我不认为不知道这个问题的答案会影响我的编程质量,这只是一个语义点,但我仍然无法向他解释它。

9 个答案:

答案 0 :(得分:53)

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

从C#3.0规范第1.6.1节中提供 C#特定定义

  

下表概述了一个类可以包含的成员类型   (行......)

     
      
  • 常量
  •   
  • 字段
  •   
  • 方法
  •   
  • 属性
  •   
  • 索引器
  •   
  • 活动
  •   
  •   
  • 构造
  •   
  • 析构
  •   
  • 类型
  •   

请注意,这是的成员。不同的“事物”具有不同类型的成员 - 例如,在C#中,接口不能将字段作为成员。

答案 1 :(得分:6)

这两个术语在面向对象编程或面向对象设计中都没有任何明确的含义。它们在绝大多数编程语言中也没有任何明确的含义。

只有极少数的编程语言有一个名为 property member 的概念,而且两者都更少。

具有两者之一的语言的一些示例是C ++(具有成员),ECMAScript(具有属性)和C#(具有两者)。然而,这些术语不一定表示不同编程语言中的相同概念。例如,术语“成员”在C ++和C#中的含义大致相同,但术语“属性”在ECMAScript和C#中的含义完全不同。事实上,ECMAScript中的术语“属性”表示与C ++和C#中的术语“成员”大致相同的概念(即,意味着大致相同的事物)。

所有这些只是说这两个术语正是指编程语言的相关规范所表达的含义,不多也不少。 (在这里插入无偿的刘易斯卡罗尔报价。)

答案 2 :(得分:4)

属性是一种成员。

例如,在C#中,一个类可以包含以下成员:

  • 构造
  • 析构
  • 常量
  • 字段
  • 方法
  • 属性
  • 索引器
  • 活动
  • 代表
  • 接口
  • 的Structs

MSDN: C#: class

答案 3 :(得分:1)

成员只是属于某个类的对象或原始类型。

属性为您提供比成员更多的权力。这就像创建getter和setter的简化方法,例如,让你可以制作公共getter和私人setter;并按照读取或写入的方式放置您想要的任何逻辑。它们可以作为揭露成员的一种方式,以后可以更容易地改变阅读和写作政策。

这适用于C#。不确定这是否适用于其他语言。

答案 4 :(得分:1)

成员(变量)只是对象的一部分。一个属性是(我通过“通常”来限定它 - 我不确定它是一个技术上清晰的单词,在多种语言中具有明确的含义)是对象的公共可访问方面,例如通过getter和setter方法。

因此,虽然(几乎总是)一个属性是一个可达到的成员变量,但你可以拥有一个不属于对象状态的属性(不是这个好设计):

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

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

答案 5 :(得分:1)

属性是一种公开字段的方法,其中字段是实际变量。例如(C#):

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

答案 6 :(得分:1)

属性和方法都是对象的成员。当方法访问或使用拥有对象时,属性描述对象的某些方面 伪代码中的一个例子:

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

球定义并给出颜色(属性),而方法反弹是一个子程序,描述球在撞击另一个物体时的反应。
并非所有语言都具有属性,即Java只包含必须由getter和setter访问的字段。

答案 7 :(得分:0)

来自PHP manual

类成员变量称为“属性”。您也可以使用“属性”或“字段”等其他术语来查看它们。它们通过使用public,protected或private之一,然后是普通变量声明来定义。该声明可能包括初始化。

答案 8 :(得分:0)

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

Grady Booch “面向对象的分析和设计”中提取的以下段落有助于澄清主题。首先,理解状态和行为的概念很重要:

  

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

     

行为 是对象在状态更改和消息传递(方法)方面的行为和反应方式;物体的外在可见和可测试的活动。

因此,对象的行为取决于可用的操作及其状态(属性及其当前值)。请注意,OOP在某些命名方面非常通用,因为它在语言与语言之间存在很大差异:

  

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

     

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

但作者引入的符号是准确的:

  

属性表示聚合对象的一部分,因此在分析和设计过程中用于表示类的单一属性。使用与语言无关的语法,属性可以具有名称,类或两者,还可以选择默认表达式:A:C=E

     

操作表示该类提供的某些服务。操作(...)通过附加括号或提供操作的完整签名(由返回类,名称和正式参数(如果有))与属性区分开来:R N(Arguments)

总之,您可以将成员视为组成类的所有内容,将属性视为共同定义类结构的成员(属性)以及与其他类的关系。实例化类时,会将值分配给其属性,以便定义对象的状态。

干杯