Articulo de referencia

Atributo (programación)

En la programación orientada a objetos , las clases pueden contener atributos y métodos . En una base de datos relacional, un atributo puede representarse como una columna o un ...

En la programación orientada a objetos , las clases pueden contener atributos y métodos .
En una base de datos relacional, un atributo puede representarse como una columna o un campo.

En la programación orientada a objetos , un atributo es una especificación que define una propiedad de un objeto , elemento o archivo. También puede referirse a un valor específico o establecerlo para una instancia determinada. Para mayor claridad, los atributos deberían considerarse metadatos . Un atributo suele ser una propiedad de otra propiedad. Sin embargo, en la práctica, el término atributo puede considerarse, y a menudo se considera, equivalente a una propiedad, según la tecnología que se esté analizando. Un atributo de un objeto generalmente consta de un nombre y un valor. Para un elemento, estos pueden ser el tipo y el nombre de la clase, mientras que para un archivo pueden ser el nombre y la extensión, respectivamente.

Reglas y mecanografía

  • Reglas: Cada atributo con nombre tiene un conjunto de reglas asociadas llamadas operaciones : Por ejemplo, no se suman caracteres ni se manipula y procesa una matriz de enteros de la misma manera que un objeto de imagen. Tampoco se procesa el texto como si fuera un tipo de punto flotante ( números decimales ).
  • Tipos de datos: De ello se deduce que la definición de un objeto puede ampliarse imponiendo tipos de datos que pueden consistir en un formato de representación, un valor predeterminado y operaciones (reglas) y restricciones legales (por ejemplo, "la división por cero no debe tolerarse"), todas las cuales pueden estar involucradas en la definición de un atributo, o, a la inversa, se pueden ver como atributos del tipo de ese objeto.

Los formatos de archivo de imagen (por ejemplo, JPEG , PNG y BMP ) no se decodifican con las mismas operaciones (por muy similares que parezcan las imágenes ; todos son formatos de datos gráficos). Del mismo modo, un lenguaje de programación no utiliza las mismas operaciones para evaluar un número de coma flotante y un número entero largo.

Por ejemplo, en gráficos por computadora, los objetos de línea pueden tener atributos como grosor (con valores reales), color (con valores descriptivos como marrón o verde, o valores definidos en un modelo de color específico, como RGB), atributos de trazo, etc. Un objeto de círculo puede definirse con atributos similares, además de un origen y un radio. En referencia a los sistemas informáticos, los atributos se definen específicamente para lectura o escritura.

Uso de atributos

Si el elemento en cuestión pudiera considerarse una propiedad ( CUSTOMER_NAME) de otra entidad (digamos CUSTOMER), el elemento puede tener cero o más atributos (propiedades) propios ( CUSTOMER_NAMEes de TYPE = "KINDOFTEXT").

do

C introdujo atributos en C23 , siguiendo el ejemplo de C++11. [ 1 ]

[[ nodiscard ]] int add ( int a , int b , [[ maybe_unused ]] int c ) { return a + b ; }

C++

C++ admite tanto atributos como anotaciones.

C++11 añadió atributos, que son indicadores para el compilador de cierta información. Sin embargo, estos son definidos por el estándar o por la implementación, y no se pueden crear atributos personalizados. [ 2 ]

clase Entero { privado : [[ no_unique_address ]] int x ; público : [[ nodiscard ]] bool isPositive () const noexcept { if ( x > 0 ) [[ likely ]] { return true ; } return false ; } };

C++26 añadió anotaciones que se pueden crear y a las que se puede acceder mediante reflexión , lo que permite adjuntar metadatos arbitrarios. [ 3 ]

importar std ;usando std :: string ;// algunas anotaciones definidas en el espacio de nombres wikipedia::examples usando wikipedia :: examples :: Debug ; usando wikipedia :: examples :: EnumFlag ; usando wikipedia :: examples :: Rename ;clase enum [[ = EnumFlag ]] Alternar : uint8_t { Desactivado , Activado };struct [[ = Debug ]] Person { [[ = Rename ( "full name" )]] string fullName ; int age ; };

DO#

En el lenguaje de programación C# , los atributos son metadatos asociados a un campo o bloque de código, como ensamblados , miembros y tipos , y son equivalentes a las anotaciones en Java . [ 4 ] Los atributos son accesibles tanto para el compilador como programáticamente mediante reflexión . En cambio, las propiedades, en la terminología de C#, son miembros de una clase que sintácticamente se utilizan como variables de instancia (o de clase), pero se implementan como un par de funciones getter/setter. (En ausencia de una función setter, las propiedades son de solo lectura).

Los usuarios del lenguaje observan numerosos ejemplos donde los atributos se utilizan para abordar cuestiones transversales y otros usos mecánicos o de plataforma. Esto crea la falsa impresión de que ese es su único propósito.

Su uso específico como metadatos queda a criterio del desarrollador y puede abarcar una amplia gama de información sobre cualquier aplicación, clase o miembro, independientemente de la instancia. La decisión de exponer cualquier atributo como propiedad también queda a criterio del desarrollador, al igual que la de utilizarlos como parte de un marco de aplicación más amplio.

Los atributos se implementan como clases que se derivan de . Suelen ser utilizados por los servicios CLR , como la interoperabilidad COM , el acceso remoto , la serialización y pueden consultarse en tiempo de ejecución.System.Attribute

El ejemplo muestra cómo se definen los atributos en C#:

// provoca un mensaje del compilador que dice que [Obsolete("Use class NewClass instead", IsError = true)] public class ObsoleteClass { // ... }clase pública NuevaClase { // ... }// El nombre de la clase termina en "Attribute" // pero se puede usar como "Obsolete" public class ObsoleteAttribute : Attribute { public string Message { get ; } public bool IsError { get ; set ; } public ObsoleteAttribute () {...} public ObsoleteAttribute ( string msg ) {...} public ObsoleteAttribute ( string msg , bool error ) {...} }[Obsoleto] [Obsoleto("Esto está obsoleto")] [Obsoleto("Esto está obsoleto", false)] [Obsoleto("Esto está obsoleto", IsError = false)]

Los parámetros posicionales, como el primer parámetro de tipo cadena mencionado anteriormente, son parámetros del constructor del atributo. Los parámetros de nombre, como el parámetro booleano del ejemplo, son una propiedad del atributo y deben tener un valor constante. [ 5 ]

Los atributos deben contrastarse con la documentación XML, que también define metadatos, pero que no se incluye en el ensamblado compilado y, por lo tanto, no se puede acceder a ella mediante programación.

HTML y JavaScript

Muestra el atributo y la propiedad "checked" de una casilla de verificación a medida que cambian.

<!doctype html> < html > < body >< input id = " check1 " type = "checkbox" checked = " checked " > < label for = " check1 " > Marcarme </label> <p> </p><script> document.getElementById ( 'check1' ) . addEventListener ( ' change' , function ( e ) { var input = this ; var p = document.querySelector ( ' p ' ); p.innerHTML = " input.checked : <b> " + ( input.checked ? ' true ' : ' false ' ) + " </b> " } ) ; </script> </body> </html>

Java

El lenguaje Java utiliza anotaciones para transportar metadatos en símbolos o realizar generación de código, y se puede acceder a ellas mediante reflexión. [ 6 ]

clase abstracta Animal { público abstracto vacío hablar ();public String getType () { return "Animal genérico" ; } }clase Cat extends Animal { @Override public void speak () { System . out . println ( "Miau!" ); }@Override public String getType () { return "Cat" ; } }

Bases de datos multivaluadas

En muchos sistemas de bases de datos post-relacionales o multivaluadas , en comparación con SQL, las tablas son archivos, las filas son elementos y las columnas son atributos. Tanto en la base de datos como en el código, atributo es sinónimo de propiedad y variable, aunque los atributos pueden definirse con mayor precisión para contener valores y subvalores.

La primera de estas bases de datos fue el sistema operativo Pick . Dos plataformas actuales son Universe de Rocket U2 y Caché de InterSystems .

Pitón

En Python , los atributos se denominan decoradores, que son cualquier objeto invocable que puede extender o modificar otra función, variable o clase sin cambiar su código fuente. [ 7 ] Un decorador se denota con @, y aparece encima de la declaración.

from functools import wraps from typing import Any , Callable , TypeVarT = TypeVar ( "T" )def log_call ( func : Callable [ ... , T ]) -> Callable [ ... , T ]: @wraps ( func ) def wrapper ( * args : tuple [ int , ... ], ** kwargs : dict [ str , str ]) -> T : print ( f "Llamando a { func . __name__ } con args= { args } , kwargs= { kwargs } " ) return : T = func ( * args , ** kwargs ) print ( f " { func . __name__ } devolvió { result } " ) return result return wrapper@log_call def add ( a : int , b : int ) -> int : return a + b@log_call def greet ( name : str ) -> str : return f "Hola, { name } !"

Óxido

En Rust , la sintaxis de un atributo es #[attr], que se coloca en cualquier símbolo, o incluso en sentencias. Los atributos modifican cómo se compila o se comporta el código al adjuntar metadatos a un símbolo. En Rust, los atributos son un tipo de macro procedimental , que actúa sobre la sintaxis de Rust consumiendo y produciendo código. [ 8 ]

Muchas macros están definidas en el lenguaje, pero se crean otras nuevas utilizando macros procedimentales. A continuación se muestran algunos ejemplos de uso de macros existentes: [ 9 ]

// Marca una función como inline #[inline] fn add ( a : i32 , b : i32 ) -> i32 { a + b }// Permite variables no utilizadas #[allow(unused_variables)] fn example () { let x = 5 ; }// Compila condicionalmente la función si la plataforma es Windows #[cfg(target_os = "windows" )] fn windows_only () { println! ( "Ejecutándose en Windows." ); }

Rust también admite las #[derive(Ts...)], que se denominan "macros de derivación", utilizadas para implementar automáticamente los rasgos.

// Point implementa automáticamente los rasgos Debug, Clone, PartialEq #[derive(Debug, Clone, PartialEq)] struct Point { x : i32 , y : i32 , }

Rápido

En Swift , los atributos se denotan con el @carácter y proporcionan metadatos adicionales al compilador. Se pueden agrupar en atributos de declaración, atributos de tipo, envoltorios de propiedades, atributos de concurrencia y atributos del constructor de interfaces. [ 10 ]

@available ( iOS 17 , * ) func newFeature () { print ( " Solo disponible en iOS 17+" ) }

XML

En XML , un atributo es una construcción de marcado que consiste en un par nombre/valor que se encuentra dentro de una etiqueta de inicio o una etiqueta de elemento vacío . Los lenguajes de marcado, como HTML y XML , utilizan atributos para describir los datos y su formato.

Un buen ejemplo es el proceso de XML de asignación de valores a propiedades (elementos). Nótese que el valor del elemento se encuentra antes de la etiqueta de cierre (separada), no en el elemento mismo. El elemento en sí puede tener varios atributos establecidos ( NAME = "IAMAPROPERTY").

Si el elemento en cuestión pudiera considerarse una propiedad ( CUSTOMER_NAME) de otra entidad (digamos CUSTOMER), el elemento puede tener cero o más atributos (propiedades) propios ( CUSTOMER_NAMEes de TYPE = "KINDOFTEXT").

Véase también

Referencias

  1. cppreference.com. "Secuencia de especificador de atributo (desde C23)" . cppreference.com . cppreference.com . Consultado el 3 de mayo de 2026 .
  2. cppreference.com. "Secuencia de especificador de atributo (desde C++11)" . cppreference.com . cppreference.com . Consultado el 1 de mayo de 2026 .
  3. Wyatt Childers, Dan Katz, Barry Rezvin, Daveed Vandevoorde (19 de junio de 2025). "Anotaciones para la reflexión" . isocpp.org . WG21.{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  4. Microsoft Learn (19 de marzo de 2025). "Atributos" . learn.microsoft.com . Microsoft Learn.
  5. Mössenböck, Hanspeter (25 de marzo de 2002). "C# avanzado: número variable de parámetros" (PDF) . Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. pag. 44 . Consultado el 8 de agosto de 2011 . 
  6. "Anotaciones" . Sun Microsystems . Archivado del original el 25/09/2011 . Consultado el 30/09/2011 .
  7. Python Software Foundation (7 de abril de 2026). "Glosario - decorador" . docs.python.org . Python Software Foundation.
  8. El equipo de Rust (16 de abril de 2026). "Macros procedimentales - La referencia de Rust" . doc.rust-lang.org . El equipo de Rust.
  9. El equipo de Rust (16 de abril de 2026). "Atributos - La referencia de Rust" . doc.rust-lang.org . El equipo de Rust.
  10. Apple Inc. "Atributos" . docs.swift.org . Apple Inc. Consultado el 8 de mayo de 2026 .