Red de conocimiento informático - Computadora portátil - La diferencia entre atributo y propiedad

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

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