Una propiedad es una forma de acceder al estado interno de un objeto, imitando una variable de algún tipo. Acceder a una propiedad de un objeto tiene el mismo aspecto que acceder a un campo de estructura (en programación estructurada), pero en realidad se implementa a través de una llamada de función. Cuando intenta establecer el valor de esta propiedad, se llama a un método y cuando intenta obtener el valor de esta propiedad, se llama a otro método.
Al aplicar propiedades
Normalmente, una propiedad está asociada con algún campo interno de un objeto. Pero una propiedad puede no estar asociada con ninguna variable de objeto, aunque el usuario de ese objeto la trate como si fuera un campo real.
Las propiedades aumentan la flexibilidad y la seguridad de la programación porque, como parte de una interfaz (pública), le permiten cambiar la implementación interna de un objeto sin cambiar sus campos. Las propiedades facilitan mucho la modificación del programa en los casos en que la clase se implementó originalmente con una violación de la encapsulación y luego fue necesario cambiar la forma en que se accede al campo. En ausencia de un mecanismo de propiedad en el idioma, sería necesario buscar y reemplazar las referencias de campo con métodos de acceso.
En muchos lenguajes de programación, las propiedades se implementan como un par de métodos : un método que recibe el valor actual de una propiedad se denomina descriptor de acceso ; un método que establece un nuevo valor de propiedad es un mutador . En los lenguajes de programación que no admiten propiedades, como C++ y Java , el par accesor/mutador es un sustituto común para reemplazarlos.
Es habitual nombrar métodos de propiedad por el nombre de la propiedad con los prefijos get y set : por ejemplo, para la propiedad Xyzzy , get_Xyzzy y set_Xyzzy ( estilo C tradicional ) o GetXyzzy y SetXyzzy ( estilo CamelCase ). Debido a este esquema de nomenclatura, los nombres getter y setter de la jerga se han ceñido a los métodos de propiedad .
Las propiedades en C# son campos con un bloque lógico que contiene las palabras clave gety set.
Un ejemplo de una clase con una propiedad:
clase MiClase { private int p_field ; public int Field { get { return p_field ; } conjunto privado { p_field = valor ; } } }Ejemplo de implementación en VB.NET. Si desea implementar una propiedad de solo lectura o solo escritura , se aplican los modificadores ReadOnly y WriteOnly. La propiedad se puede parametrizar. También puede ser una propiedad predeterminada, para esto necesita agregar el modificador Predeterminado
Sub Main Dim F Como Nuevo Foo F._ _ Datos = 5 F . Item ( 0 ) = 5 F ( 0 ) = 5 ' Escribir en la propiedad Console . WriteLine ( F ( 0 )) 'Leer propiedad End Sub Public Class Foo Private m_Data As Integer Private m_Arr () As Integer = { 1 , 2 , 3 , 4 , 5 } Datos de propiedad pública como conjunto entero ( Valor como entero ) 'Setter m_Data = Value End Set Get Return m_Data 'Getter End Get End Property Public Default Property Item ( Param As Integer ) As Integer ' Propiedad parametrizada predeterminada Set ( Valor como entero ) m_Arr ( Param ) = Valor End Set Get Return m_Arr ( Param ) End Get End Property End ClassUna propiedad en Delphi se describe con la palabra property.
Un ejemplo de una clase con una propiedad:
TMyClass = class private FMyField : Integer ; procedimiento SetMyField ( const Value : Integer ) ; función GetMyField : Integer ; public property MyField : Integer read GetMyField write SetMyField ; fin ; función TMyClass . ObtenerMiCampo : Entero ; comenzar Resultado := FMyField ; fin ; procedimiento TMyClass . SetMyField ( const Value : Integer ) ; comenzar FMyField := Valor ; fin ;Las declaraciones de propiedades en Ruby no son diferentes de las declaraciones de métodos. Por ejemplo, para crear una propiedad de duración para la clase de canción, debe describir los métodos de duración y duración = (valor)
clase Canción def duración @ duración final def duración= ( valor ) @duración = valor final finalSin embargo, un simple acceso a una variable de objeto interno puede ser reemplazado por una llamada al método attr_accessor :duration
clase Canción attr_accessor : fin de duraciónMás interesante es el ejemplo de crear una propiedad duration_in_minutes que devolverá o establecerá el tiempo de duración en minutos:
clase Canción def duration_in_minutes @duration / 60 . 0 end def duration_in_minutes= ( valor ) @duration = ( valor * 60 ) . to_i final finalSin embargo, cambiar la propiedad duration_in_minutes afectará la propiedad de duración. Por ejemplo
canción = canción . nueva canción _ duración_en_minutos = 1 . 2 canciones impresas . duración # imprimirá 72Un conjunto de métodos con decoradores define cómo trabajar con una propiedad (lectura, escritura, eliminación). Si se quita alguno de los métodos (a excepción de @property), se pierde la capacidad de trabajar con la propiedad de la forma adecuada.
Un ejemplo de una clase con una propiedad:
clase A : def __init__ ( auto ): auto . __x = Ninguno @property def x ( self ): return self . __X @x . setter def x ( self , value ): self . __x = valor @x . eliminador def x ( auto ): auto . __x = Ninguno >>> a = A () >>> a . x >>> un . x = 2 >>> un . x 2 >>> del a . x >>> un . X >>>