¡Creo que he estado usando estos términos de forma intercambiable/incorrecta!¿Cuál es la diferencia entre una propiedad y una variable de instancia?
Respuesta
Iain, esto es, básicamente, una pregunta es la terminología y, a pesar de la etiqueta de "independiente del idioma" asociado a esta pregunta, muy lenguaje/entorno relacionado.
Para discusiones de diseño, sake, property y variable de instancia se pueden usar indistintamente, ya que la idea es que una propiedad es un elemento de datos que describe un objeto.
Cuando hablamos de un idioma específico, estos dos pueden ser diferentes. Por ejemplo, en C# una propiedad es en realidad una función que devuelve un objeto, mientras que una variable de instancia es una variable miembro no estática de una clase.
ejemplo de código hecho en C#
public class ClassName
{
private string variable;
public string property
{
get{ return variable; }
set { variable = value; }
}
}
En Java tenemos algo llamado JavaBeans Properties, pero básicamente es una variable de instancia que sigue un cierto patrón de nomenclatura para su getter y setter.
En adición a lo que se ha dicho, en un lenguaje como C#, una propiedad es esencialmente una función de obtención y ajuste. Como resultado, puede tener una lógica personalizada que se ejecute además del get/setting. Una variable de instancia no puede hacer esto.
Tal vez sea porque viniste de C++ ¿verdad? En mis días de escuela tenía profesores que decían propiedades de clase o atributos de clase todo el tiempo. Desde que me mudé al mundo de Java C#, comencé a escuchar acerca de los miembros. Miembros de la clase, miembros de la instancia ...
Y luego Propiedades apear! en Java y .NET. Entonces creo que es mejor que lo llames miembros. Si son miembros de instancias (o como lo llamó la variable de instancia) o miembros de la clase ...
¡Salud!
Una propiedad puede, y supongo que lo hace principalmente, devolver una variable de instancia, pero puede hacer más. Podría poner lógica en una propiedad, agregar valores o actualizar otras variables de instancia, etc. Sin embargo, creo que es mejor evitar hacerlo. La lógica debería ir a los métodos.
Una propiedad es algún tipo de dato asociado a un objeto. Por ejemplo, una propiedad de un círculo es su diámetro, y otra es su área.
Una variable de instancia es un dato que se almacena dentro de un objeto. No necesariamente tiene que corresponder directamente con una propiedad. Por ejemplo (heh), un círculo puede almacenar su radio en una variable de instancia y calcular su diámetro y área en función de ese radio. Las tres siguen siendo propiedades, pero solo el radio se almacena en una variable de instancia.
Algunos idiomas tienen el concepto de propiedades de "primera clase". Esto significa que para una aplicación cliente, la propiedad se ve y se utiliza como una variable de instancia. Es decir, en lugar de escribir algo como circle.getDiameter()
, escribiría circle.diameter
, y en lugar de circle.setRadius(5)
, escribiría circle.radius = 5
.
Hershi tiene razón sobre esto siendo un idioma específico. Pero para agregar al rastro de respuestas específicas de idioma:
En python, una variable de instancia es un atributo de una instancia, (generalmente) algo a lo que se hace referencia en el diccionario de la instancia.Esto es análogo a los miembros o variables de instancia en Java, excepto que todo es público.
Las propiedades son accesos directos a los métodos getter/setter que se parecen a una variable de instancia. Así, en la siguiente definición de clase (modificado de Guido de new style object manifesto):
class C(object):
def __init__(self):
self.y = 0
def getx(self):
if self.y < 0: return 0
else: return self.y
def setx(self, x):
self.y = x
x = property(getx, setx)
>>> z = C()
>>> z.x = -3
>>> print z.x
0
>>> print z.y
-3
>>> z.x = 5
>>> print z.x
5
>>> print z.y
5
y
es una variable de instancia de z
, x
es una propiedad. (En general, cuando se define una propiedad, hay algunas técnicas utilizadas para ocultar la variable de instancia asociada para que el otro código no acceda directamente a ella). El beneficio de las propiedades en python es que el diseñador no tiene que dar vueltas. encapsulando preventivamente todas las variables de instancia, ya que la encapsulación futura convirtiendo una variable de instancia a una propiedad no debería romper ningún código existente (a menos que el código aproveche las lagunas que su encapsulación está tratando de arreglar, o confiar en la inspección de clase o algún otro meta -programación técnica).
Todo esto es una respuesta muy larga para decir que a nivel de diseño, es bueno hablar de las propiedades. Es indiferente en cuanto a qué tipo de encapsulación puede necesitar realizar. Supongo que este principio no es independiente del lenguaje, pero se aplica a los idiomas que se encuentran al lado de Python.
En contraste con las otras respuestas dadas, I do creo que hay una distinción útil entre las variables miembro y las propiedades que son independientes del idioma.
La distinción es más evidente en la programación orientada a componentes, que es útil en cualquier lugar, pero más fácil de entender en una interfaz gráfica de usuario. En ese contexto, tiendo a pensar en la configuración del tiempo de diseño de un componente como la manipulación de las "propiedades" de un objeto. Por ejemplo, elijo los colores de primer plano y de fondo, el estilo de borde y la fuente de un campo de entrada de texto estableciendo sus propiedades. Si bien estas propiedades podrían cambiarse en tiempo de ejecución, normalmente no lo son. En tiempo de ejecución, es mucho más probable que se lean y escriban un conjunto diferente de variables, que representa el contenido del campo. Pienso en esta información como el "estado" del componente.
¿Por qué es útil esta distinción? Cuando se crea una abstracción para el cableado de componentes, generalmente solo se deben exponer las variables de "estado". Volviendo al ejemplo de campo de texto, puede declarar una interfaz que proporciona acceso al contenido actual. Pero las "propiedades" que controlan la apariencia del componente solo se definen en una clase de implementación concreta.
En el objetivo c, una propiedad es una variable de instancia que puede aprovechar un operador de punto sobrecargado para llamar a su setter y getter. Entonces my.food = "cheeseburger" en realidad se interpreta como [mi setFood: "cheeseburger"]. Este es otro caso donde la definición definitivamente no es independiente del lenguaje porque object-c define la palabra clave @property.
- 1. ¿Cuál es la diferencia entre una instancia y un objeto?
- 2. Cuál es la diferencia entre una propiedad del sistema y la variable de entorno
- 3. Cuál es la diferencia entre Propiedad y Propiedad de Dependencia
- 4. ¿Cuál es la diferencia entre una propiedad de lectura y una propiedad de asignación no atómica?
- 5. ¿Cuál es la diferencia entre una propiedad de dependencia y una propiedad adjunta en WPF?
- 6. ¿Cuál es la diferencia entre $ VARIABLE y $ {VARIABLE}
- 7. ¿Cuál es la diferencia entre una variable miembro y una variable local?
- 8. ¿Cuál es la diferencia entre una propiedad de navegación y una asociación en EF?
- 9. ¿Cuál es la diferencia entre una vista y una secuencia?
- 10. ¿Cuál es la diferencia entre una subrutina y una función?
- 11. ¿Cuál es la diferencia entre una sesión y una cookie?
- 12. ¿cuál es la diferencia entre una clase y una biblioteca?
- 13. ¿Cuál es la diferencia entre la propiedad pública, amigo y variable pública en VB6
- 14. Honestamente, ¿cuál es la diferencia entre la variable pública y el acceso público a la propiedad?
- 15. ¿cuál es la diferencia entre propiedad estática y singleton?
- 16. ¿Diferencia entre la variable miembro y la propiedad miembro?
- 17. ¿Cuál es la diferencia entre una referencia __weak y __block?
- 18. ¿Cuál es la diferencia entre una instancia de delegado y un puntero de método?
- 19. diferencia entre la variable privada instancia y la propiedad en extensión de clase (Objective-C 2.0)
- 20. Cuál es la diferencia en Perl al pasar una variable en una expresión regular entre usar $ variable y $ {variable}
- 21. ¿Cuál es la diferencia entre "=" y "=>" y "@variable", "@@ variable" y ": variable" en ruby?
- 22. ¿Cuál es la diferencia entre una propiedad parametrizada y la función en vb.net?
- 23. ¿Cuál es la diferencia entre una "propiedad" y un "atributo" de Python?
- 24. ¿Cuál es la diferencia entre un padre y una propiedad de referencia en Google App Engine?
- 25. ¿Cuál es la diferencia entre un tema y una plantilla?
- 26. ¿Cuál es la diferencia entre pánico y una afirmación?
- 27. ¿Cuál es la diferencia entre una matriz y un objeto?
- 28. ¿Cuál es la diferencia entre un hilo y una fibra?
- 29. ¿Cuál es la diferencia entre una mónada y un cierre?
- 30. ¿Cuál es la diferencia entre declarar y definir una estructura?
+1: Definitivamente está relacionado con el idioma. – Powerlord
sí, pobre java .... todavía no tiene propiedades :( –