Pregunta

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

¿Alguien puede establecer una buena definición de cuándo considerar algo miembro frente a una propiedad? Tal vez estoy bastardando el concepto, ¿o es solo que un miembro es solo el nombre interno que uso, y la propiedad es lo que está expuesto a otros objetos?

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

¿Fue útil?

Solución

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 significado exacto 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 puede contener una clase.
  (Filas para ...)

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

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

Otros consejos

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 número muy pequeño de lenguajes de programación tiene un concepto llamado propiedad o miembro , y aún menos tienen ambos.

Algunos ejemplos de lenguajes que tienen uno 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 más o menos el mismo concepto (es decir, significa más o menos 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 aquí una cotización gratuita de Lewis Carroll).

Propiedades es un tipo de miembros.

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

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

MSDN: C #: clase

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 captadores y establecedores que le permite crear, por ejemplo, captadores públicos y establecedores privados; y ponga la lógica que desee en la forma en que se leerá o se escribirá. Se pueden usar como una forma de exponer a los miembros, siendo posible cambiar la política de lectura y escritura más tarde más fácilmente.

Esto se aplica a C #. Sin embargo, no estoy seguro de si esto es cierto para los otros idiomas.

Un miembro (variable) es solo una parte del objeto. Una propiedad es (calificaré esto con " generalmente " no estoy seguro de que sea una palabra técnicamente clara que tenga un significado inequívoco en varios idiomas) es un aspecto de acceso público del objeto, p. a través de métodos getter y setter.

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

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

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

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

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

Donde se define la pelota y se le da un color (propiedad) mientras el método de rebote es una subrutina que describe cómo reaccionará la pelota al golpear otro objeto.
No todos los idiomas tienen propiedades, es decir, Java solo tiene campos a los que deben tener acceso los captadores y establecedores.

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; }
  }
}

de PHP manual :

Las variables de miembro de clase se denominan "propiedades". También puede verlos referidos usando otros términos como " atributos " o "campos". Se definen mediante el uso de una de las palabras clave pública, protegida o privada, seguida de una declaración de variable normal. Esta declaración puede incluir una inicialización.

Miembro es un término genérico (probablemente originado en C ++ , pero también definido en < a href = "https://docs.oracle.com/javase/tutorial/information/glossary.html#M" rel = "nofollow"> Java ) usado para denotar un componente de una clase. La propiedad es un concepto amplio utilizado para denotar una característica particular de una clase que, una vez que se instancia la clase, ayudará a definir el estado del objeto.

Los siguientes pasajes, extraídos de " Análisis y diseño orientado a objetos " de Grady Booch ayudan a aclarar el tema. En primer lugar, es importante comprender los 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, entendemos la totalidad de los atributos y las relaciones del objeto 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) ; la actividad externamente visible y comprobable de un objeto.

Entonces, el comportamiento de un objeto depende de las operaciones disponibles y su estado (propiedades y sus valores actuales). Tenga en cuenta que OOP es bastante genérico 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 slot (CLOS) son intercambiables , lo que significa un repositorio para parte del estado de un 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, por lo que se utiliza durante el análisis y el diseño para expresar una propiedad singular de la clase. Usando la sintaxis independiente del idioma, 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. Las operaciones (...) se distinguen de los atributos agregando paréntesis o proporcionando la firma completa de la operación, compuesta de clase de retorno, nombre y argumentos formales (si los hay): RN (Argumentos)

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

Saludos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top