Article de reference

Attribut (programmation)

En programmation orientée objet , les classes peuvent contenir des attributs et des méthodes . Dans une base de données relationnelle, un attribut peut être représenté par une c...

En programmation orientée objet , les classes peuvent contenir des attributs et des méthodes .
Dans une base de données relationnelle, un attribut peut être représenté par une colonne ou un champ.

En programmation orientée objet , un attribut est une spécification qui définit une propriété d'un objet , d'un élément ou d'un fichier. Il peut également faire référence à la valeur spécifique d'une instance donnée de cet élément ou la définir. Par souci de clarté, les attributs devraient plus justement être considérés comme des métadonnées . Un attribut est fréquemment et généralement une propriété d'une propriété. Cependant, dans la pratique, le terme « attribut » peut être, et est souvent, utilisé comme synonyme de « propriété » , selon la technologie considérée. Un attribut d'un objet se compose généralement d'un nom et d'une valeur. Pour un élément, il peut s'agir d'un type et d'un nom de classe, tandis que pour un fichier, il peut s'agir respectivement d'un nom et d'une extension.

Règles et saisie

  • Règles : Chaque attribut nommé possède un ensemble de règles associées, appelées opérations : par exemple, on ne calcule pas la somme des caractères ni on ne manipule et ne traite un tableau d’entiers de la même manière qu’un objet image. De même, on ne traite pas le texte comme s’il s’agissait d’un nombre à virgule flottante ( nombres décimaux ).
  • Types de données : Il s’ensuit qu’une définition d’objet peut être étendue en imposant un typage de données qui peut consister en un format de représentation, une valeur par défaut, et des opérations autorisées (règles) et des restrictions (par exemple « la division par zéro n’est pas tolérée ») sont toutes potentiellement impliquées dans la définition d’un attribut, ou inversement, on peut les considérer comme des attributs du type de cet objet.

Les formats de fichiers image (par exemple JPEG , PNG et BMP ) ne sont pas décodés à l'aide des mêmes opérations (même si les images se ressemblent ​​ce sont tous des formats de données graphiques). De même, un langage de programmation n'utilise pas les mêmes opérations pour évaluer un nombre à virgule flottante et un entier long.

En infographie, par exemple, les objets ligne peuvent posséder des attributs tels que l'épaisseur (avec des valeurs réelles), la couleur (avec des valeurs descriptives comme le marron ou le vert, ou des valeurs définies dans un modèle colorimétrique spécifique, tel que RGB), le pointillé, etc. Un objet cercle peut être défini par des attributs similaires, auxquels s'ajoutent une origine et un rayon. Dans le domaine des systèmes informatiques, les attributs sont définis spécifiquement pour les opérations de lecture ou d'écriture.

Utilisation des attributs

Si l'élément en question pouvait être considéré comme une propriété ( CUSTOMER_NAME) d'une autre entité (disons CUSTOMER), l'élément peut avoir zéro ou plusieurs attributs (propriétés) propres ( CUSTOMER_NAMEest de TYPE = "KINDOFTEXT").

C

C a introduit les attributs dans C23 , suivant ceux de C++11.

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

C++

C++ prend en charge à la fois les attributs et les annotations.

C++11 a ajouté des attributs, qui indiquent au compilateur certaines informations. Cependant, ils sont soit définis par la norme, soit par l'implémentation, et il n'est pas possible de créer des attributs personnalisés.

class Integer { private : [[ no_unique_address ]] int x ; public : [[ nodiscard ]] bool isPositive () const noexcept { if ( x > 0 ) [[ likely ]] { return true ; } return false ; } };

C++26 a ajouté des annotations qui peuvent être créées et accessibles par réflexion , permettant ainsi d'attacher des métadonnées arbitraires.

import std ;en utilisant std :: string ;// quelques annotations définies dans l'espace de noms wikipedia::examples utilisant wikipedia :: examples :: Debug ; utilisant wikipedia :: examples :: EnumFlag ; utilisant wikipedia :: examples :: Rename ;classe énumérée [[ = EnumFlag ]] Bascule : uint8_t { Désactivé , Activé };struct [[ = Debug ]] Person { [[ = Rename ( "nom complet" )]] string fullName ; int age ; };

C#

En C# , les attributs sont des métadonnées associées à un champ ou à un bloc de code, comme les assemblys , les membres et les types , et sont équivalents aux annotations en Java . Les attributs sont accessibles au compilateur et par programmation via la réflexion . En revanche, les propriétés, en C#, sont des membres d'une classe utilisés syntaxiquement comme des variables d'instance (ou de classe), mais implémentés sous la forme d'une paire de fonctions d'accès (getter/setter). (En l'absence de setter, les propriétés sont en lecture seule.)

Les utilisateurs du langage constatent de nombreux exemples où les attributs servent à traiter des problématiques transversales et à répondre à d'autres usages liés aux mécanismes ou à la plateforme. Cela donne l'impression erronée que c'est là leur unique finalité.

Leur utilisation précise en tant que métadonnées est laissée à la discrétion du développeur et peut couvrir un large éventail d'informations concernant une application, ses classes et ses membres, sans que cela soit spécifique à une instance. Le choix d'exposer un attribut donné comme une propriété, ainsi que celui de les utiliser dans le cadre d'une architecture applicative plus vaste, est également laissé à la discrétion du développeur.

Les attributs sont implémentés sous forme de classes dérivées de . Ils sont souvent utilisés par les services CLR , comme l'interopérabilité COM , la communication à distance , la sérialisation et peuvent être interrogés lors de l'exécution.System.Attribute

L'exemple montre comment les attributs sont définis en C# :

// provoque un message du compilateur indiquant que [Obsolete("Utilisez plutôt la classe NewClass", IsError = true)] public class ObsoleteClass { // ... }public class NewClass { // ... }// Le nom de la classe se termine par « Attribute » // mais peut être utilisé comme « 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 ) {...} }[Obsolète] [Obsolète("Ceci est obsolète")] [Obsolète("Ceci est obsolète", faux)] [Obsolète("Ceci est obsolète", IsError = faux)]

Les paramètres positionnels, comme le premier paramètre de type chaîne de caractères ci-dessus, sont des paramètres du constructeur de l'attribut. Les paramètres nommés, comme le paramètre booléen de l'exemple, sont une propriété de l'attribut et doivent avoir une valeur constante.

Les attributs doivent être comparés à la documentation XML qui définit également des métadonnées, mais qui n'est pas incluse dans l'assemblage compilé et ne peut donc pas être consultée par programmation.

HTML et JavaScript

Afficher l'attribut et la propriété cochés d'une case à cocher lorsqu'ils changent.

<!doctype html> < html > < body >< input id = " check1 " type = " checkbox" checked = " checked" > < label for = "check1" > Cochez - moi </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

classe abstraite Animal { public abstrait void parler ();public String getType () { return "Animal générique" ; } }class Cat extends Animal { @Override public void speak () { System . out . println ( "Miaou !" ); }@Override public String getType () { return "Chat" ; } }

Bases de données multivaluées

Dans de nombreux systèmes de bases de données post-relationnelles ou multivaluées , par rapport à SQL, les tables correspondent à des fichiers, les lignes à des éléments et les colonnes à des attributs. Dans la base de données comme dans le code, un attribut est synonyme de propriété et de variable, même s'il peut être défini plus précisément pour contenir des valeurs et des sous-valeurs.

La première de ces bases de données était le système d'exploitation Pick . Parmi les plateformes actuelles, on peut citer Universe de Rocket U2 et Caché d'InterSystems .

Python

En Python , les attributs sont appelés décorateurs ; il s’agit de tout élément appelable qui peut étendre ou modifier une autre fonction, variable ou classe sans en modifier le code source. Un décorateur est indiqué par `@` @et apparaît au-dessus de sa déclaration.

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 "Appel de { func .__ name__ } avec args= { args } , kwargs= { kwargs } " ) return : T = func ( * args , ** kwargs ) print ( f " { func .__ name__ } a renvoyé { 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 "Bonjour, { name } !"

Rouiller

En Rust , la syntaxe d'un attribut est `attribute` #[attr], placé sur n'importe quel symbole, voire même sur des instructions. Les attributs modifient la façon dont le code est compilé ou se comporte en associant des métadonnées à un symbole. En Rust, les attributs sont un type de macro procédurale , qui agit sur la syntaxe Rust en consommant et en produisant du code.

De nombreuses macros sont définies dans le langage, mais de nouvelles sont créées à l'aide de macros procédurales. Voici quelques exemples d'utilisation de macros existantes :

// Marque une fonction comme inline #[inline] fn add ( a : i32 , b : i32 ) -> i32 { a + b }// Autorise les variables inutilisées #[allow(unused_variables)] fn example () { let x = 5 ; }// Compile la fonction de manière conditionnelle si la plateforme est Windows #[cfg(target_os = "windows" )] fn windows_only () { println! ( "Exécution sous Windows." ); }

Rust prend également en charge les #[derive(Ts...)]macros dérivées, utilisées pour implémenter automatiquement des traits.

// Point implémente automatiquement les traits Debug, Clone, PartialEq #[derive(Debug, Clone, PartialEq)] struct Point { x : i32 , y : i32 , }

Rapide

En Swift , les attributs sont désignés par le @caractère et indiquent des métadonnées supplémentaires au compilateur. Ils peuvent être regroupés en attributs de déclaration, attributs de type, wrappers de propriétés, attributs de concurrence et attributs de l'interface Builder.

@available ( iOS 17 , * ) func newFeature () { print ( "Disponible uniquement sur iOS 17 et versions ultérieures " ) }

XML

En XML , un attribut est une structure de balisage composée d'une paire nom/valeur, délimitée par une balise ouvrante ou une balise vide . Les langages de balisage, tels que HTML et XML , utilisent les attributs pour décrire les données et leur mise en forme.