¿qué es un miembro frente a la propiedad


Un amigo que es nuevo en la programación de OO me preguntó la diferencia entre un Miembro y la Propiedad, y me avergonzó admitir que no podía darle una buena respuesta. Dado que las propiedades también pueden ser objetos en sí, me quedé con una descripción general y una lista de excepciones.

¿Puede alguien, por favor, establecer una buena definición de cuándo considerar algo como un miembro frente a una propiedad? Tal vez estoy bastardeando el concepto, o es solo que un miembro es solo el nombre interno que uso, y el propiedad ¿es lo que está expuesto a otros objetos?

No creo que el no saber la respuesta a esta pregunta haya afectado la calidad de mi programación, y es solo un punto semántico, pero todavía me molesta que no pueda explicárselo.

Author: SqlRyan, 2009-08-05

9 answers

Una propiedad es un tipo de miembro. Otros pueden ser constructores, métodos, campos, tipos anidados, conversiones, indexadores, etc., dependiendo del idioma/plataforma, por supuesto. Muchas veces el exacto significado de la terminología depende del contexto.

Para dar una definición específica de C#, de la especificación C # 3.0, sección 1.6.1:

La siguiente tabla proporciona una visión general de los tipos de miembros que una clase puede contener.
(Filas para...)

  • Constantes
  • Campos
  • Métodos
  • Propiedades
  • Indexadores
  • Eventos
  • Operadores
  • Constructores
  • Destructores
  • Tipos

Tenga en cuenta que son miembros de una clase . Diferentes "cosas" tienen diferentes tipos de miembros - en C#, una interfaz no puede tener un campo como miembro, por ejemplo.

 49
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 19:29:01

Ninguno de los dos términos tiene ningún significado definido en Programación Orientada a Objetos o Diseño Orientado a Objetos. Tampoco tienen ningún significado definido en la abrumadora mayoría de los lenguajes de programación.

Solo un pequeño número de lenguajes de programación tienen un concepto llamado property o member, y aún menos tienen ambos.

Algunos ejemplos de lenguajes que tienen cualquiera de los dos son C++ (que tiene miembros), ECMAScript (que tiene propiedades) y C# (que tiene ambos). Sin embargo, estos términos no necesariamente denotan los mismos conceptos en diferentes lenguajes de programación. Por ejemplo, el término "miembro "significa aproximadamente lo mismo en C++ y C#, pero el término" propiedad " significa cosas completamente diferentes en ECMAScript y C#. De hecho, el término "propiedad" en ECMAScript denota aproximadamente el mismo concepto (es decir. significa aproximadamente lo mismo) que el término "miembro" en C++ y C#.

Todo esto es solo para decir que esos dos términos significan exactamente lo que la especificación relevante para el lenguaje de programación dice que significan, ni más ni menos. (Inserte la cita gratuita de Lewis Carroll aquí.)

 6
Author: Jörg W Mittag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 21:24:22

Properties es un tipo de miembros.

En C#, por ejemplo, una clase puede tener los siguientes miembros:

  • Constructores
  • Destructores
  • Constantes
  • Campos
  • Métodos
  • Propiedades
  • Indexadores
  • Operadores
  • Eventos
  • Delegados
  • Clases
  • Interfaces
  • Estructuras

MSDN: C#: class

 4
Author: Guffa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 19:29:55

Los miembros son solo objetos o tipos primitivos que pertenecen a una clase.

Las propiedades te dan más poder que los miembros. Es como una forma simplificada de crear getters y setters que te permite hacer, por ejemplo, getters públicos y setters privados; y poner cualquier lógica que quieras en la forma en que se leerá o escribirá. Se pueden utilizar como una forma de exponer a los miembros, siendo posible cambiar la política de lectura y escritura más tarde con mayor facilidad.

Esto se aplica a C#. No estoy seguro si esto es sin embargo, es cierto para los otros idiomas.

 1
Author: Samuel Carrijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 18:45:54

Un miembro (variable) es solo una parte del objeto. Una propiedad es (voy a calificar esto con "por lo general" - No estoy seguro de que es una palabra técnicamente clara que tiene un significado inequívoco a través de múltiples idiomas) es un aspecto de acceso público del objeto, por ejemplo, a través de los métodos getter y setter.

Así que mientras (casi siempre) una propiedad es una variable miembro alcanzable, puede tener una propiedad que no es realmente parte del estado del objeto (no es que este sea un buen diseño):

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

  public void setJunk(String ignore){;}
  }
}
 1
Author: Steve B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 18:46:27

Tanto las propiedades como los métodos son miembros de un objeto. Una propiedad describe algún aspecto del objeto mientras que un método accede o usa el objeto propietario.
Un ejemplo en pseudo-código:

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

Donde se define la bola y se le da un color(propiedad) mientras que el método bounce es una subrutina que describe cómo reaccionará la bola al golpear otro objeto.
No todos los lenguajes tienen propiedades, es decir, Java solo tiene campos a los que deben acceder los getters y setters.

 1
Author: WolfmanDragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 19:24:27

Las propiedades son una forma de exponer campos, donde los campos son las variables reales. Por ejemplo (C#):

class Foo {
  private int field;
  public int Property {
    get { return field; }
    set { field = value; }
  }
}
 1
Author: rpjohnst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-28 21:03:26

De Manual de PHP :

Las variables de los miembros de la clase se llaman "propiedades". También puede ver que se hace referencia a ellos utilizando otros términos como "atributos"o " campos". Se definen utilizando una de las palabras clave public, protected o private, seguida de una declaración de variable normal. Esta declaración podrá incluir una inicialización.

 0
Author: user570605,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-08 11:34:53

Miembro es un término genérico (probablemente originado en C++, pero también definido en Java ) utilizado para denotar un componente de una clase. Propiedad es un concepto amplio utilizado para denotar una característica particular de una clase que, una vez que la clase es instanciada, ayudará a definir el estado del objeto.

Los siguientes pasajes, extraídos de "Object-Oriented Analysis and Design" por Grady Booch ayudan a aclarar el tema. En primer lugar, es importante entender el conceptos de estado y comportamiento:

El estado de un objeto abarca todas las propiedades (generalmente estáticas) del objeto más los valores actuales (generalmente dinámicos) de cada una de estas propiedades. Por propiedades, nos referimos a la totalidad de los atributos del objeto y las relaciones con otros objetos.

Comportamiento es cómo un objeto actúa y reacciona, en términos de sus cambios de estado y paso de mensajes (métodos) ; el exteriormente actividad visible y comprobable de un objeto.

Por lo tanto, el comportamiento de un objeto depende de las operaciones disponibles y su estado (propiedades y sus valores actuales). Tenga en cuenta que la OOP es bastante genérica con respecto a cierta nomenclatura, ya que varía enormemente de un idioma a otro:

Los términos campo (Object Pascal), variable de instancia (Smalltalk), objeto miembro (C++) y ranura (CLOS) son intercambiables, lo que significa un repositorio para parte del estado de una objeto. Colectivamente, constituyen la estructura del objeto.

Una operación sobre un objeto, definida como parte de la declaración de una clase. Los términos mensaje (Smalltalk), método (muchos lenguajes OO), función miembro (C++) y operación son generalmente intercambiables.

Pero la notación introducida por el autor es precisa:

Un atributo denota una parte de un objeto agregado, y por lo tanto se utiliza durante el análisis, así como diseño para expresar una propiedad singular de la clase. Usando la sintaxis independiente del lenguaje, un atributo puede tener un nombre, una clase o ambos, y opcionalmente una expresión predeterminada: A:C=E.

Una operación denota algún servicio proporcionado por la clase. Operación (...) se distinguen de los atributos añadiendo paréntesis o proporcionando la firma completa de la operación, compuesta por clase de retorno, nombre y argumentos formales (si los hay): R N(Arguments)

En resumen, puede pensar en miembros como todo lo que compone la clase, y propiedades como los miembros (atributos) que definen colectivamente la estructura de la clase, más sus relaciones con otras clases. Cuando se crea una instancia de la clase, se asignan valores a sus propiedades para definir el estado del objeto.

Salud

 0
Author: saza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-16 01:31:03