La diferencia entre atributo y propiedad
La propiedad se refiere al área de datos proporcionada por la clase.
El atributo describe las propiedades de un objeto en tiempo de compilación o tiempo de ejecución, y se divide en tipo intrínseco y tipo definido por el usuario. El tipo definido por el usuario se puede obtener en tiempo de ejecución usando Reflection.
Existe una diferencia esencial entre ambos.
La información dice que uno de los dos es propiedad de servicio, y el otro es de interfaz.
El primero parece ser más preciso. El resumen es el siguiente:
En la mente de muchas personas, el Atributo es el atributo de la clase. ¿Parece que también es un atributo de clase? Por eso, mucha gente los llama atributos de clases sin distinción, especialmente cuando escriben artículos chinos. Esta mentalidad es la típica mentalidad de avestruz: ojos fuera de la vista, corazón fuera de la mente. De hecho, si lo piensa con los pies, sabrá que definitivamente este no es el caso. Dado que estos dos términos se inventaron en UML, obviamente no se utilizan para la redundancia. Debe haber conexiones inextricables y diferencias entre ellos.
Una variedad de lenguajes orientados a objetos, diversas tecnologías de componentes, tecnologías de plantillas y tecnologías de servicios web, la mayoría de las cuales implican el concepto de "atributo", y sus términos en inglés suelen ser atributo, propiedad o campo. Mucha gente los llama "atributos". En algunos lugares, pueden ser indistinguibles, pero en otros son completamente diferentes. También me preocupan estas tecnologías y terminología confusas, pero al menos podemos encontrar un estándar de referencia mediante la explicación de estos dos términos en UML. En cualquier caso, UML es el maestro de la tecnología orientada a objetos y el estándar de facto.
Para ser muy objetivo, no existe una definición clara de estos dos términos en UML1.4, pero la diferencia sigue siendo obvia. El atributo debería ser el favorito de UML1.4, pero la Propiedad ni siquiera tiene un término separado. Nadie esperaba que UML2.0 cambiara repentinamente, el Atributo desapareciera del diagrama de clases y la Propiedad entrara majestuosamente en las Llanuras Centrales.
1. El atributo en 4 es un término asociado con el Clasificador, que tiene un alcance de influencia menor que la Propiedad. La clase es una subclase del clasificador, por lo que el atributo también puede representar los atributos de la clase. También se puede ver en la definición anterior que el Atributo puede ser un espacio con nombre de una instancia de Clasificador. Para Clase, su instancia es Objeto y la ranura de Objeto es la ranura de valor de atributo del objeto. Por lo tanto, el Atributo se puede utilizar como atributo de un objeto. La propiedad no parece tener este significado. De acuerdo con la jerarquía del modelo MOF (Meta Object Facility, otra especificación de OMG, que se explicará en detalle más adelante), las capas del modelo involucradas en el Atributo son de M2 a M0, mientras que la Propiedad parece ser solo un concepto de la capa M2. .
2. En 0, el atributo aquí solo se refiere a las características estructurales de un clasificador, que puede vincular la instancia del clasificador a uno o un grupo de valores específicos. No se mencionan espacios de instancia, etc. Supongo que esto se debe a que UML 2.0 ha considerado el Atributo como un subconjunto de la Propiedad, por lo que los métodos de asignación específicos, por ejemplo, ranuras, etc., se explican en la definición de Propiedad.
Otro punto que vale la pena destacar es que la definición de Atributo proviene del glosario y no aparece en el diagrama del metamodelo. La propiedad aparece en el diagrama del metamodelo y se explica en detalle. Esto se puede ver desde este punto, la determinación de UML de fortalecer la Propiedad y debilitar el Atributo.
Resumen de atributos y propiedades
Esta sección ofrece un breve resumen de atributos y propiedades, basado en la última especificación UML2.0:
l En términos generales, El atributo es un subconjunto de la propiedad, y la propiedad aparecerá como atributo en el momento apropiado;
l La propiedad aparece en el metamodelo del diagrama de clases y representa todas las características estructurales de la clase. el metamodelo En el modelo, solo existe en el concepto de Clase y no tiene una sintaxis correspondiente;
l La propiedad tiene definiciones y restricciones detalladas, pero el Atributo no tiene definiciones detalladas, por lo que sus restricciones no se pueden escribir utilizando OCL.
l Propiedad y Atributo son conceptos de la capa M2. En la capa M1, sus instancias son propiedades de clases concretas; en la capa M0, sus instancias son los valores almacenados en las ranuras de los objetos concretos.
El problema de que tanto los sustantivos propiedad como atributo se llamen "atributos" proviene de la negligencia de la industria nacional de traducción de libros de TI.
De hecho, provienen de dos campos diferentes. El atributo pertenece al concepto de OOA/OOD, mientras que la propiedad pertenece al concepto de lenguaje de programación. A continuación te explicaremos sus similitudes y diferencias.
Atributo
Los atributos son metadatos de archivos de Microsoft .NET Framework, que pueden usarse para describir su código en tiempo de ejecución o afectar el comportamiento de la aplicación cuando el programa se está ejecutando.
Propiedad
La propiedad es un concepto básico de programación orientada a objetos. Proporciona encapsulación de acceso a campos privados. En C#, los métodos de acceso get y set se utilizan para implementar elementos legibles y escribibles. propiedades, proporcionando una encapsulación de acceso a datos segura y flexible. El concepto de atributos no es el tema central de este artículo y creo que la mayoría del personal técnico debería tener un concepto claro de atributos.
Los siguientes son atributos simples
Diferencias
Se puede decir que los dos no son comparables, pero las diferencias son causadas por las características del idioma de nuestro país. Recuerde que el Atributo se deriva del Sistema. En la clase Atributo, su función principal es la descripción. Por ejemplo, para describir que un determinado método proviene de una DLL externa, puede escribir el siguiente código. es una descripción (o declaración)
[DllImport("User32.dll")]
El atributo también tiene muchos atributos "predeterminados" del sistema; consulte la siguiente tabla
Atributos predefinidos
Objetivo válido
Descripción
Uso de atributo
Clase
Especifica un uso válido de otro clase de atributo
CLSCompliant
Todos
Indica si el elemento del programa es compatible con CLS
Condicional
Método
Indica que si la cadena asociada no está definida, el compilador puede ignorar cualquier llamada a este método
DllImport
Método
Especifica la inclusión de métodos externos La ubicación de la DLL implementada
STAThread
Método (principal)
Indica que el modelo de subproceso predeterminado del programa es STA p>
MTAThread
Método (Principal)
Indica que el modelo predeterminado del programa es multiproceso (MTA)
Obsoleto
Excepto ensamblaje, módulo, parámetro y retorno
Marcar un elemento como no disponible para notificar al usuario que este elemento se eliminará de productos futuros
ParamArray
Parámetro
Permitir un solo parámetro Se tratan implícitamente como parámetros params (matriz)
Serializable
Clase, estructura, enumeración, delegado
Especifica que todos los campos públicos ** de este tipo * y privados pueden ser serializados
NonSerialized
Campo
Se aplica a campos de clases marcadas como serializables, indicando que estos campos no serán serializables
StructLayout
Clase, estructura
Especifica la naturaleza del diseño de datos de la clase o estructura, como Auto, Explícito o secuencial
ThreadStatic
Campo (estático)
Implementa el almacenamiento local de subprocesos (TLS). Un campo estático determinado no se puede compartir entre varios subprocesos. Cada subproceso tiene una copia de este campo estático
Y la propiedad se refiere al campo en el proceso de programación, es decir, el miembro de la clase.
Por ejemplo:
private int hour; //Defina una variable privada para representar "hora", a la que no se puede acceder desde el exterior.}
public int Hora// Definir la interfaz del programa Hora
{
set { hora=valor }
get { return hora;}